Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
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,
|