Spaces:
Paused
Paused
Julian Bilcke
commited on
Commit
·
75aad1e
1
Parent(s):
ef22617
it works
Browse files- package-lock.json +181 -35
- package.json +2 -0
- src/production/renderStaticScene.mts +8 -5
- src/production/renderVideoScene.mts +4 -1
- src/utils/resizeBase64Image.mts +16 -0
- src/utils/segmentImage.mts +8 -2
package-lock.json
CHANGED
|
@@ -23,6 +23,8 @@
|
|
| 23 |
"node-fetch": "^3.3.1",
|
| 24 |
"openai": "^3.3.0",
|
| 25 |
"puppeteer": "^20.8.0",
|
|
|
|
|
|
|
| 26 |
"temp-dir": "^3.0.0",
|
| 27 |
"ts-node": "^10.9.1",
|
| 28 |
"uuid": "^9.0.0",
|
|
@@ -766,6 +768,11 @@
|
|
| 766 |
"readable-stream": "^3.4.0"
|
| 767 |
}
|
| 768 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 769 |
"node_modules/body-parser": {
|
| 770 |
"version": "1.20.1",
|
| 771 |
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
|
|
@@ -1144,6 +1151,43 @@
|
|
| 1144 |
"url": "https://github.com/sponsors/d-fischer"
|
| 1145 |
}
|
| 1146 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1147 |
"node_modules/create-require": {
|
| 1148 |
"version": "1.1.1",
|
| 1149 |
"resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
|
|
@@ -1718,6 +1762,11 @@
|
|
| 1718 |
"node": ">=10.13.0"
|
| 1719 |
}
|
| 1720 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1721 |
"node_modules/ffmpeg-concat/node_modules/fs-extra": {
|
| 1722 |
"version": "7.0.1",
|
| 1723 |
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
|
|
@@ -1739,6 +1788,84 @@
|
|
| 1739 |
"graceful-fs": "^4.1.6"
|
| 1740 |
}
|
| 1741 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1742 |
"node_modules/ffmpeg-concat/node_modules/universalify": {
|
| 1743 |
"version": "0.1.2",
|
| 1744 |
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
|
|
@@ -2145,6 +2272,14 @@
|
|
| 2145 |
"resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
|
| 2146 |
"integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw=="
|
| 2147 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2148 |
"node_modules/gl": {
|
| 2149 |
"version": "6.0.2",
|
| 2150 |
"resolved": "https://registry.npmjs.org/gl/-/gl-6.0.2.tgz",
|
|
@@ -2626,6 +2761,11 @@
|
|
| 2626 |
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
|
| 2627 |
"integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA=="
|
| 2628 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2629 |
"node_modules/isarray": {
|
| 2630 |
"version": "0.0.1",
|
| 2631 |
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
|
|
@@ -3118,6 +3258,17 @@
|
|
| 3118 |
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
| 3119 |
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
|
| 3120 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3121 |
"node_modules/nan": {
|
| 3122 |
"version": "2.17.0",
|
| 3123 |
"resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz",
|
|
@@ -3212,9 +3363,9 @@
|
|
| 3212 |
}
|
| 3213 |
},
|
| 3214 |
"node_modules/node-addon-api": {
|
| 3215 |
-
"version": "
|
| 3216 |
-
"resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-
|
| 3217 |
-
"integrity": "sha512
|
| 3218 |
},
|
| 3219 |
"node_modules/node-bitmap": {
|
| 3220 |
"version": "0.0.1",
|
|
@@ -4007,6 +4158,14 @@
|
|
| 4007 |
"uuid": "bin/uuid"
|
| 4008 |
}
|
| 4009 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4010 |
"node_modules/require-directory": {
|
| 4011 |
"version": "2.1.1",
|
| 4012 |
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
|
|
@@ -4020,6 +4179,14 @@
|
|
| 4020 |
"resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
|
| 4021 |
"integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ=="
|
| 4022 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4023 |
"node_modules/resolve-from": {
|
| 4024 |
"version": "4.0.0",
|
| 4025 |
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
|
|
@@ -4166,18 +4333,18 @@
|
|
| 4166 |
"integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
|
| 4167 |
},
|
| 4168 |
"node_modules/sharp": {
|
| 4169 |
-
"version": "0.
|
| 4170 |
-
"resolved": "https://registry.npmjs.org/sharp/-/sharp-0.
|
| 4171 |
-
"integrity": "sha512-
|
| 4172 |
"hasInstallScript": true,
|
| 4173 |
"dependencies": {
|
| 4174 |
"color": "^4.2.3",
|
| 4175 |
-
"detect-libc": "^2.0.
|
| 4176 |
-
"node-addon-api": "^
|
| 4177 |
"prebuild-install": "^7.1.1",
|
| 4178 |
-
"semver": "^7.
|
| 4179 |
"simple-get": "^4.0.1",
|
| 4180 |
-
"tar-fs": "^
|
| 4181 |
"tunnel-agent": "^0.6.0"
|
| 4182 |
},
|
| 4183 |
"engines": {
|
|
@@ -4187,11 +4354,6 @@
|
|
| 4187 |
"url": "https://opencollective.com/libvips"
|
| 4188 |
}
|
| 4189 |
},
|
| 4190 |
-
"node_modules/sharp/node_modules/chownr": {
|
| 4191 |
-
"version": "1.1.4",
|
| 4192 |
-
"resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
|
| 4193 |
-
"integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="
|
| 4194 |
-
},
|
| 4195 |
"node_modules/sharp/node_modules/lru-cache": {
|
| 4196 |
"version": "6.0.0",
|
| 4197 |
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
|
|
@@ -4218,29 +4380,13 @@
|
|
| 4218 |
}
|
| 4219 |
},
|
| 4220 |
"node_modules/sharp/node_modules/tar-fs": {
|
| 4221 |
-
"version": "
|
| 4222 |
-
"resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-
|
| 4223 |
-
"integrity": "sha512-
|
| 4224 |
"dependencies": {
|
| 4225 |
-
"chownr": "^1.1.1",
|
| 4226 |
"mkdirp-classic": "^0.5.2",
|
| 4227 |
"pump": "^3.0.0",
|
| 4228 |
-
"tar-stream": "^
|
| 4229 |
-
}
|
| 4230 |
-
},
|
| 4231 |
-
"node_modules/sharp/node_modules/tar-stream": {
|
| 4232 |
-
"version": "2.2.0",
|
| 4233 |
-
"resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
|
| 4234 |
-
"integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
|
| 4235 |
-
"dependencies": {
|
| 4236 |
-
"bl": "^4.0.3",
|
| 4237 |
-
"end-of-stream": "^1.4.1",
|
| 4238 |
-
"fs-constants": "^1.0.0",
|
| 4239 |
-
"inherits": "^2.0.3",
|
| 4240 |
-
"readable-stream": "^3.1.1"
|
| 4241 |
-
},
|
| 4242 |
-
"engines": {
|
| 4243 |
-
"node": ">=6"
|
| 4244 |
}
|
| 4245 |
},
|
| 4246 |
"node_modules/shebang-command": {
|
|
|
|
| 23 |
"node-fetch": "^3.3.1",
|
| 24 |
"openai": "^3.3.0",
|
| 25 |
"puppeteer": "^20.8.0",
|
| 26 |
+
"resize-base64": "^1.0.12",
|
| 27 |
+
"sharp": "^0.32.4",
|
| 28 |
"temp-dir": "^3.0.0",
|
| 29 |
"ts-node": "^10.9.1",
|
| 30 |
"uuid": "^9.0.0",
|
|
|
|
| 768 |
"readable-stream": "^3.4.0"
|
| 769 |
}
|
| 770 |
},
|
| 771 |
+
"node_modules/bluebird": {
|
| 772 |
+
"version": "3.7.2",
|
| 773 |
+
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
|
| 774 |
+
"integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="
|
| 775 |
+
},
|
| 776 |
"node_modules/body-parser": {
|
| 777 |
"version": "1.20.1",
|
| 778 |
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
|
|
|
|
| 1151 |
"url": "https://github.com/sponsors/d-fischer"
|
| 1152 |
}
|
| 1153 |
},
|
| 1154 |
+
"node_modules/create-readme": {
|
| 1155 |
+
"version": "1.2.0",
|
| 1156 |
+
"resolved": "https://registry.npmjs.org/create-readme/-/create-readme-1.2.0.tgz",
|
| 1157 |
+
"integrity": "sha512-HK3Jpr+5qIYHJHFBeZs0SaLdu7gGHdqS3KORfu5Ivp64Pw+SRSPZ9e0p++NP8JlYeqycxFdVg5yTix0VM5kHFA==",
|
| 1158 |
+
"dependencies": {
|
| 1159 |
+
"bluebird": "^3.1.1",
|
| 1160 |
+
"commander": "^2.9.0",
|
| 1161 |
+
"debug": "^4.1.0",
|
| 1162 |
+
"github-url-to-object": "^4.0.4",
|
| 1163 |
+
"mustache": "^3.0.0",
|
| 1164 |
+
"require-all": "^3.0.0"
|
| 1165 |
+
},
|
| 1166 |
+
"bin": {
|
| 1167 |
+
"create-readme": "bin/create-readme.js"
|
| 1168 |
+
}
|
| 1169 |
+
},
|
| 1170 |
+
"node_modules/create-readme/node_modules/debug": {
|
| 1171 |
+
"version": "4.3.4",
|
| 1172 |
+
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
|
| 1173 |
+
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
|
| 1174 |
+
"dependencies": {
|
| 1175 |
+
"ms": "2.1.2"
|
| 1176 |
+
},
|
| 1177 |
+
"engines": {
|
| 1178 |
+
"node": ">=6.0"
|
| 1179 |
+
},
|
| 1180 |
+
"peerDependenciesMeta": {
|
| 1181 |
+
"supports-color": {
|
| 1182 |
+
"optional": true
|
| 1183 |
+
}
|
| 1184 |
+
}
|
| 1185 |
+
},
|
| 1186 |
+
"node_modules/create-readme/node_modules/ms": {
|
| 1187 |
+
"version": "2.1.2",
|
| 1188 |
+
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
| 1189 |
+
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
|
| 1190 |
+
},
|
| 1191 |
"node_modules/create-require": {
|
| 1192 |
"version": "1.1.1",
|
| 1193 |
"resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
|
|
|
|
| 1762 |
"node": ">=10.13.0"
|
| 1763 |
}
|
| 1764 |
},
|
| 1765 |
+
"node_modules/ffmpeg-concat/node_modules/chownr": {
|
| 1766 |
+
"version": "1.1.4",
|
| 1767 |
+
"resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
|
| 1768 |
+
"integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="
|
| 1769 |
+
},
|
| 1770 |
"node_modules/ffmpeg-concat/node_modules/fs-extra": {
|
| 1771 |
"version": "7.0.1",
|
| 1772 |
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
|
|
|
|
| 1788 |
"graceful-fs": "^4.1.6"
|
| 1789 |
}
|
| 1790 |
},
|
| 1791 |
+
"node_modules/ffmpeg-concat/node_modules/lru-cache": {
|
| 1792 |
+
"version": "6.0.0",
|
| 1793 |
+
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
|
| 1794 |
+
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
|
| 1795 |
+
"dependencies": {
|
| 1796 |
+
"yallist": "^4.0.0"
|
| 1797 |
+
},
|
| 1798 |
+
"engines": {
|
| 1799 |
+
"node": ">=10"
|
| 1800 |
+
}
|
| 1801 |
+
},
|
| 1802 |
+
"node_modules/ffmpeg-concat/node_modules/node-addon-api": {
|
| 1803 |
+
"version": "5.1.0",
|
| 1804 |
+
"resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz",
|
| 1805 |
+
"integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA=="
|
| 1806 |
+
},
|
| 1807 |
+
"node_modules/ffmpeg-concat/node_modules/semver": {
|
| 1808 |
+
"version": "7.5.4",
|
| 1809 |
+
"resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
|
| 1810 |
+
"integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
|
| 1811 |
+
"dependencies": {
|
| 1812 |
+
"lru-cache": "^6.0.0"
|
| 1813 |
+
},
|
| 1814 |
+
"bin": {
|
| 1815 |
+
"semver": "bin/semver.js"
|
| 1816 |
+
},
|
| 1817 |
+
"engines": {
|
| 1818 |
+
"node": ">=10"
|
| 1819 |
+
}
|
| 1820 |
+
},
|
| 1821 |
+
"node_modules/ffmpeg-concat/node_modules/sharp": {
|
| 1822 |
+
"version": "0.31.3",
|
| 1823 |
+
"resolved": "https://registry.npmjs.org/sharp/-/sharp-0.31.3.tgz",
|
| 1824 |
+
"integrity": "sha512-XcR4+FCLBFKw1bdB+GEhnUNXNXvnt0tDo4WsBsraKymuo/IAuPuCBVAL2wIkUw2r/dwFW5Q5+g66Kwl2dgDFVg==",
|
| 1825 |
+
"hasInstallScript": true,
|
| 1826 |
+
"dependencies": {
|
| 1827 |
+
"color": "^4.2.3",
|
| 1828 |
+
"detect-libc": "^2.0.1",
|
| 1829 |
+
"node-addon-api": "^5.0.0",
|
| 1830 |
+
"prebuild-install": "^7.1.1",
|
| 1831 |
+
"semver": "^7.3.8",
|
| 1832 |
+
"simple-get": "^4.0.1",
|
| 1833 |
+
"tar-fs": "^2.1.1",
|
| 1834 |
+
"tunnel-agent": "^0.6.0"
|
| 1835 |
+
},
|
| 1836 |
+
"engines": {
|
| 1837 |
+
"node": ">=14.15.0"
|
| 1838 |
+
},
|
| 1839 |
+
"funding": {
|
| 1840 |
+
"url": "https://opencollective.com/libvips"
|
| 1841 |
+
}
|
| 1842 |
+
},
|
| 1843 |
+
"node_modules/ffmpeg-concat/node_modules/tar-fs": {
|
| 1844 |
+
"version": "2.1.1",
|
| 1845 |
+
"resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz",
|
| 1846 |
+
"integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==",
|
| 1847 |
+
"dependencies": {
|
| 1848 |
+
"chownr": "^1.1.1",
|
| 1849 |
+
"mkdirp-classic": "^0.5.2",
|
| 1850 |
+
"pump": "^3.0.0",
|
| 1851 |
+
"tar-stream": "^2.1.4"
|
| 1852 |
+
}
|
| 1853 |
+
},
|
| 1854 |
+
"node_modules/ffmpeg-concat/node_modules/tar-stream": {
|
| 1855 |
+
"version": "2.2.0",
|
| 1856 |
+
"resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
|
| 1857 |
+
"integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
|
| 1858 |
+
"dependencies": {
|
| 1859 |
+
"bl": "^4.0.3",
|
| 1860 |
+
"end-of-stream": "^1.4.1",
|
| 1861 |
+
"fs-constants": "^1.0.0",
|
| 1862 |
+
"inherits": "^2.0.3",
|
| 1863 |
+
"readable-stream": "^3.1.1"
|
| 1864 |
+
},
|
| 1865 |
+
"engines": {
|
| 1866 |
+
"node": ">=6"
|
| 1867 |
+
}
|
| 1868 |
+
},
|
| 1869 |
"node_modules/ffmpeg-concat/node_modules/universalify": {
|
| 1870 |
"version": "0.1.2",
|
| 1871 |
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
|
|
|
|
| 2272 |
"resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
|
| 2273 |
"integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw=="
|
| 2274 |
},
|
| 2275 |
+
"node_modules/github-url-to-object": {
|
| 2276 |
+
"version": "4.0.6",
|
| 2277 |
+
"resolved": "https://registry.npmjs.org/github-url-to-object/-/github-url-to-object-4.0.6.tgz",
|
| 2278 |
+
"integrity": "sha512-NaqbYHMUAlPcmWFdrAB7bcxrNIiiJWJe8s/2+iOc9vlcHlwHqSGrPk+Yi3nu6ebTwgsZEa7igz+NH2vEq3gYwQ==",
|
| 2279 |
+
"dependencies": {
|
| 2280 |
+
"is-url": "^1.1.0"
|
| 2281 |
+
}
|
| 2282 |
+
},
|
| 2283 |
"node_modules/gl": {
|
| 2284 |
"version": "6.0.2",
|
| 2285 |
"resolved": "https://registry.npmjs.org/gl/-/gl-6.0.2.tgz",
|
|
|
|
| 2761 |
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
|
| 2762 |
"integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA=="
|
| 2763 |
},
|
| 2764 |
+
"node_modules/is-url": {
|
| 2765 |
+
"version": "1.2.4",
|
| 2766 |
+
"resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz",
|
| 2767 |
+
"integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww=="
|
| 2768 |
+
},
|
| 2769 |
"node_modules/isarray": {
|
| 2770 |
"version": "0.0.1",
|
| 2771 |
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
|
|
|
|
| 3258 |
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
| 3259 |
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
|
| 3260 |
},
|
| 3261 |
+
"node_modules/mustache": {
|
| 3262 |
+
"version": "3.2.1",
|
| 3263 |
+
"resolved": "https://registry.npmjs.org/mustache/-/mustache-3.2.1.tgz",
|
| 3264 |
+
"integrity": "sha512-RERvMFdLpaFfSRIEe632yDm5nsd0SDKn8hGmcUwswnyiE5mtdZLDybtHAz6hjJhawokF0hXvGLtx9mrQfm6FkA==",
|
| 3265 |
+
"bin": {
|
| 3266 |
+
"mustache": "bin/mustache"
|
| 3267 |
+
},
|
| 3268 |
+
"engines": {
|
| 3269 |
+
"npm": ">=1.4.0"
|
| 3270 |
+
}
|
| 3271 |
+
},
|
| 3272 |
"node_modules/nan": {
|
| 3273 |
"version": "2.17.0",
|
| 3274 |
"resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz",
|
|
|
|
| 3363 |
}
|
| 3364 |
},
|
| 3365 |
"node_modules/node-addon-api": {
|
| 3366 |
+
"version": "6.1.0",
|
| 3367 |
+
"resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz",
|
| 3368 |
+
"integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA=="
|
| 3369 |
},
|
| 3370 |
"node_modules/node-bitmap": {
|
| 3371 |
"version": "0.0.1",
|
|
|
|
| 4158 |
"uuid": "bin/uuid"
|
| 4159 |
}
|
| 4160 |
},
|
| 4161 |
+
"node_modules/require-all": {
|
| 4162 |
+
"version": "3.0.0",
|
| 4163 |
+
"resolved": "https://registry.npmjs.org/require-all/-/require-all-3.0.0.tgz",
|
| 4164 |
+
"integrity": "sha512-jPGN876lc5exWYrMcgZSd7U42P0PmVQzxnQB13fCSzmyGnqQWW4WUz5DosZ/qe24hz+5o9lSvW2epBNZ1xa6Fw==",
|
| 4165 |
+
"engines": {
|
| 4166 |
+
"node": ">= 0.8"
|
| 4167 |
+
}
|
| 4168 |
+
},
|
| 4169 |
"node_modules/require-directory": {
|
| 4170 |
"version": "2.1.1",
|
| 4171 |
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
|
|
|
|
| 4179 |
"resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
|
| 4180 |
"integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ=="
|
| 4181 |
},
|
| 4182 |
+
"node_modules/resize-base64": {
|
| 4183 |
+
"version": "1.0.12",
|
| 4184 |
+
"resolved": "https://registry.npmjs.org/resize-base64/-/resize-base64-1.0.12.tgz",
|
| 4185 |
+
"integrity": "sha512-OIiowGyyrwzrwbufDLPpBfofuUAkPSA4OPzT5rTGxfU4iHszKYHNICd1uhnRNDBFnU08WU8mt94+OaBXgN+WMg==",
|
| 4186 |
+
"dependencies": {
|
| 4187 |
+
"create-readme": "^1.1.0"
|
| 4188 |
+
}
|
| 4189 |
+
},
|
| 4190 |
"node_modules/resolve-from": {
|
| 4191 |
"version": "4.0.0",
|
| 4192 |
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
|
|
|
|
| 4333 |
"integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
|
| 4334 |
},
|
| 4335 |
"node_modules/sharp": {
|
| 4336 |
+
"version": "0.32.4",
|
| 4337 |
+
"resolved": "https://registry.npmjs.org/sharp/-/sharp-0.32.4.tgz",
|
| 4338 |
+
"integrity": "sha512-exUnZewqVZC6UXqXuQ8fyJJv0M968feBi04jb9GcUHrWtkRoAKnbJt8IfwT4NJs7FskArbJ14JAFGVuooszoGg==",
|
| 4339 |
"hasInstallScript": true,
|
| 4340 |
"dependencies": {
|
| 4341 |
"color": "^4.2.3",
|
| 4342 |
+
"detect-libc": "^2.0.2",
|
| 4343 |
+
"node-addon-api": "^6.1.0",
|
| 4344 |
"prebuild-install": "^7.1.1",
|
| 4345 |
+
"semver": "^7.5.4",
|
| 4346 |
"simple-get": "^4.0.1",
|
| 4347 |
+
"tar-fs": "^3.0.4",
|
| 4348 |
"tunnel-agent": "^0.6.0"
|
| 4349 |
},
|
| 4350 |
"engines": {
|
|
|
|
| 4354 |
"url": "https://opencollective.com/libvips"
|
| 4355 |
}
|
| 4356 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4357 |
"node_modules/sharp/node_modules/lru-cache": {
|
| 4358 |
"version": "6.0.0",
|
| 4359 |
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
|
|
|
|
| 4380 |
}
|
| 4381 |
},
|
| 4382 |
"node_modules/sharp/node_modules/tar-fs": {
|
| 4383 |
+
"version": "3.0.4",
|
| 4384 |
+
"resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.4.tgz",
|
| 4385 |
+
"integrity": "sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==",
|
| 4386 |
"dependencies": {
|
|
|
|
| 4387 |
"mkdirp-classic": "^0.5.2",
|
| 4388 |
"pump": "^3.0.0",
|
| 4389 |
+
"tar-stream": "^3.1.5"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4390 |
}
|
| 4391 |
},
|
| 4392 |
"node_modules/shebang-command": {
|
package.json
CHANGED
|
@@ -30,6 +30,8 @@
|
|
| 30 |
"node-fetch": "^3.3.1",
|
| 31 |
"openai": "^3.3.0",
|
| 32 |
"puppeteer": "^20.8.0",
|
|
|
|
|
|
|
| 33 |
"temp-dir": "^3.0.0",
|
| 34 |
"ts-node": "^10.9.1",
|
| 35 |
"uuid": "^9.0.0",
|
|
|
|
| 30 |
"node-fetch": "^3.3.1",
|
| 31 |
"openai": "^3.3.0",
|
| 32 |
"puppeteer": "^20.8.0",
|
| 33 |
+
"resize-base64": "^1.0.12",
|
| 34 |
+
"sharp": "^0.32.4",
|
| 35 |
"temp-dir": "^3.0.0",
|
| 36 |
"ts-node": "^10.9.1",
|
| 37 |
"uuid": "^9.0.0",
|
src/production/renderStaticScene.mts
CHANGED
|
@@ -14,20 +14,23 @@ export async function renderStaticScene(scene: RenderRequest): Promise<RenderedS
|
|
| 14 |
let imageBase64 = ""
|
| 15 |
let error = ""
|
| 16 |
|
|
|
|
|
|
|
|
|
|
| 17 |
try {
|
| 18 |
console.log(`calling generateImageSDXLAsBase64 with: `, JSON.stringify({
|
| 19 |
positivePrompt: scene.prompt,
|
| 20 |
seed: scene.seed || undefined,
|
| 21 |
nbSteps: scene.nbSteps || undefined,
|
| 22 |
-
width
|
| 23 |
-
height
|
| 24 |
}, null, 2))
|
| 25 |
imageBase64 = await generateImageSDXLAsBase64({
|
| 26 |
positivePrompt: scene.prompt,
|
| 27 |
seed: scene.seed || undefined,
|
| 28 |
nbSteps: scene.nbSteps || undefined,
|
| 29 |
-
width
|
| 30 |
-
height
|
| 31 |
})
|
| 32 |
console.log("successful generation!", imageBase64.slice(0, 30))
|
| 33 |
error = ""
|
|
@@ -64,7 +67,7 @@ export async function renderStaticScene(scene: RenderRequest): Promise<RenderedS
|
|
| 64 |
error = "failed to segment the image"
|
| 65 |
} else {
|
| 66 |
console.log("got the first frame! segmenting..")
|
| 67 |
-
const result = await segmentImage(tmpImageFilePath, actionnables)
|
| 68 |
mask = result.pngInBase64
|
| 69 |
segments = result.segments
|
| 70 |
console.log("success!", { segments })
|
|
|
|
| 14 |
let imageBase64 = ""
|
| 15 |
let error = ""
|
| 16 |
|
| 17 |
+
const width = 1024
|
| 18 |
+
const height = 512
|
| 19 |
+
|
| 20 |
try {
|
| 21 |
console.log(`calling generateImageSDXLAsBase64 with: `, JSON.stringify({
|
| 22 |
positivePrompt: scene.prompt,
|
| 23 |
seed: scene.seed || undefined,
|
| 24 |
nbSteps: scene.nbSteps || undefined,
|
| 25 |
+
width,
|
| 26 |
+
height,
|
| 27 |
}, null, 2))
|
| 28 |
imageBase64 = await generateImageSDXLAsBase64({
|
| 29 |
positivePrompt: scene.prompt,
|
| 30 |
seed: scene.seed || undefined,
|
| 31 |
nbSteps: scene.nbSteps || undefined,
|
| 32 |
+
width,
|
| 33 |
+
height
|
| 34 |
})
|
| 35 |
console.log("successful generation!", imageBase64.slice(0, 30))
|
| 36 |
error = ""
|
|
|
|
| 67 |
error = "failed to segment the image"
|
| 68 |
} else {
|
| 69 |
console.log("got the first frame! segmenting..")
|
| 70 |
+
const result = await segmentImage(tmpImageFilePath, actionnables, width, height)
|
| 71 |
mask = result.pngInBase64
|
| 72 |
segments = result.segments
|
| 73 |
console.log("success!", { segments })
|
src/production/renderVideoScene.mts
CHANGED
|
@@ -13,6 +13,9 @@ export async function renderVideoScene(scene: RenderRequest): Promise<RenderedSc
|
|
| 13 |
let url = ""
|
| 14 |
let error = ""
|
| 15 |
|
|
|
|
|
|
|
|
|
|
| 16 |
try {
|
| 17 |
url = await generateVideo(scene.prompt, {
|
| 18 |
seed: getValidNumber(scene.seed, 0, 2147483647, generateSeed()),
|
|
@@ -50,7 +53,7 @@ export async function renderVideoScene(scene: RenderRequest): Promise<RenderedSc
|
|
| 50 |
error = "failed to segment the image"
|
| 51 |
} else {
|
| 52 |
console.log("got the first frame! segmenting..")
|
| 53 |
-
const result = await segmentImage(firstFrameFilePath, actionnables)
|
| 54 |
mask = result.pngInBase64
|
| 55 |
segments = result.segments
|
| 56 |
// console.log("success!", { segments })
|
|
|
|
| 13 |
let url = ""
|
| 14 |
let error = ""
|
| 15 |
|
| 16 |
+
const width = 576
|
| 17 |
+
const height = 320
|
| 18 |
+
|
| 19 |
try {
|
| 20 |
url = await generateVideo(scene.prompt, {
|
| 21 |
seed: getValidNumber(scene.seed, 0, 2147483647, generateSeed()),
|
|
|
|
| 53 |
error = "failed to segment the image"
|
| 54 |
} else {
|
| 55 |
console.log("got the first frame! segmenting..")
|
| 56 |
+
const result = await segmentImage(firstFrameFilePath, actionnables, width, height)
|
| 57 |
mask = result.pngInBase64
|
| 58 |
segments = result.segments
|
| 59 |
// console.log("success!", { segments })
|
src/utils/resizeBase64Image.mts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import sharp from "sharp"
|
| 2 |
+
|
| 3 |
+
export async function resizeBase64Image(imgBase64: string, targetWidth: number, targetHeight: number): Promise<string> {
|
| 4 |
+
// Convert base64 to buffer
|
| 5 |
+
const buffer = Buffer.from(imgBase64, 'base64');
|
| 6 |
+
|
| 7 |
+
// Resize the buffer to the target size
|
| 8 |
+
const resizedBuffer = await sharp(buffer)
|
| 9 |
+
.resize(targetWidth, targetHeight)
|
| 10 |
+
.toBuffer();
|
| 11 |
+
|
| 12 |
+
// Convert the buffer back to base64
|
| 13 |
+
const resizedImageBase64 = resizedBuffer.toString('base64');
|
| 14 |
+
|
| 15 |
+
return resizedImageBase64;
|
| 16 |
+
}
|
src/utils/segmentImage.mts
CHANGED
|
@@ -3,6 +3,7 @@ import puppeteer from "puppeteer"
|
|
| 3 |
import { sleep } from "./sleep.mts"
|
| 4 |
import { ImageSegment } from "../types.mts"
|
| 5 |
import { downloadImageAsBase64 } from "./downloadFileAsBase64.mts"
|
|
|
|
| 6 |
|
| 7 |
// we don't use replicas yet, because it ain't easy to get their hostname
|
| 8 |
const instances: string[] = [
|
|
@@ -16,7 +17,9 @@ const instances: string[] = [
|
|
| 16 |
// it takes about 30 seconds to compute
|
| 17 |
export async function segmentImage(
|
| 18 |
inputImageFilePath: string,
|
| 19 |
-
actionnables: string[]
|
|
|
|
|
|
|
| 20 |
): Promise<{
|
| 21 |
pngInBase64: string
|
| 22 |
segments: ImageSegment[]
|
|
@@ -73,7 +76,10 @@ export async function segmentImage(
|
|
| 73 |
// const tmpMaskFileName = `${uuidv4()}.png`
|
| 74 |
// await downloadFileToTmp(maskUrl, tmpMaskFileName)
|
| 75 |
|
| 76 |
-
const
|
|
|
|
|
|
|
|
|
|
| 77 |
return {
|
| 78 |
pngInBase64,
|
| 79 |
segments,
|
|
|
|
| 3 |
import { sleep } from "./sleep.mts"
|
| 4 |
import { ImageSegment } from "../types.mts"
|
| 5 |
import { downloadImageAsBase64 } from "./downloadFileAsBase64.mts"
|
| 6 |
+
import { resizeBase64Image } from "./resizeBase64Image.mts"
|
| 7 |
|
| 8 |
// we don't use replicas yet, because it ain't easy to get their hostname
|
| 9 |
const instances: string[] = [
|
|
|
|
| 17 |
// it takes about 30 seconds to compute
|
| 18 |
export async function segmentImage(
|
| 19 |
inputImageFilePath: string,
|
| 20 |
+
actionnables: string[],
|
| 21 |
+
width: number,
|
| 22 |
+
height: number,
|
| 23 |
): Promise<{
|
| 24 |
pngInBase64: string
|
| 25 |
segments: ImageSegment[]
|
|
|
|
| 76 |
// const tmpMaskFileName = `${uuidv4()}.png`
|
| 77 |
// await downloadFileToTmp(maskUrl, tmpMaskFileName)
|
| 78 |
|
| 79 |
+
const rawPngInBase64 = await downloadImageAsBase64(maskUrl)
|
| 80 |
+
|
| 81 |
+
const pngInBase64 = await resizeBase64Image(rawPngInBase64, width, height)
|
| 82 |
+
|
| 83 |
return {
|
| 84 |
pngInBase64,
|
| 85 |
segments,
|