Endpoint for local captioning pipeline

This commit is contained in:
Cohee 2023-09-11 04:47:14 +03:00
parent 7aeb098212
commit f149fc9aaa
4 changed files with 255 additions and 193 deletions

368
package-lock.json generated
View File

@ -26,7 +26,7 @@
"gpt3-tokenizer": "^1.1.5", "gpt3-tokenizer": "^1.1.5",
"ip-matching": "^2.1.2", "ip-matching": "^2.1.2",
"ipaddr.js": "^2.0.1", "ipaddr.js": "^2.0.1",
"jimp": "^0.22.7", "jimp": "^0.22.10",
"jquery": "^3.6.4", "jquery": "^3.6.4",
"json5": "^2.2.3", "json5": "^2.2.3",
"lodash": "^4.17.21", "lodash": "^4.17.21",
@ -40,7 +40,7 @@
"png-chunks-extract": "^1.0.0", "png-chunks-extract": "^1.0.0",
"response-time": "^2.3.2", "response-time": "^2.3.2",
"sanitize-filename": "^1.6.3", "sanitize-filename": "^1.6.3",
"sillytavern-transformers": "^2.6.2", "sillytavern-transformers": "^2.7.3",
"simple-git": "^3.19.1", "simple-git": "^3.19.1",
"uniqolor": "^1.1.0", "uniqolor": "^1.1.0",
"vectra": "^0.2.2", "vectra": "^0.2.2",
@ -135,11 +135,11 @@
"integrity": "sha512-bhR5k5W+8GLzysjk8zTMVygQZsgvf7W1F0IlL4ZQ5ugjo5rCyiwGM5d8DYriXspytfu98tv59niang3/T+FoDw==" "integrity": "sha512-bhR5k5W+8GLzysjk8zTMVygQZsgvf7W1F0IlL4ZQ5ugjo5rCyiwGM5d8DYriXspytfu98tv59niang3/T+FoDw=="
}, },
"node_modules/@jimp/bmp": { "node_modules/@jimp/bmp": {
"version": "0.22.8", "version": "0.22.10",
"resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.22.8.tgz", "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.22.10.tgz",
"integrity": "sha512-JEMKgM1AEvvWfn9ZCHn62nK+QCE3Pb/ZhPdL3NF0ZgKNww6pqOmo6KqXzqY18JLB7c0epuTp4GPDPDhOh/ou1g==", "integrity": "sha512-1UXRl1Nw1KptZ1r0ANqtXOst9vGH51dq7keVKQzyyTO2lz4dOaezS9StuSTNh+RmiHg/SVPaFRpPfB0S/ln4Kg==",
"dependencies": { "dependencies": {
"@jimp/utils": "^0.22.8", "@jimp/utils": "^0.22.10",
"bmp-js": "^0.1.0" "bmp-js": "^0.1.0"
}, },
"peerDependencies": { "peerDependencies": {
@ -147,36 +147,35 @@
} }
}, },
"node_modules/@jimp/core": { "node_modules/@jimp/core": {
"version": "0.22.8", "version": "0.22.10",
"resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.22.8.tgz", "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.22.10.tgz",
"integrity": "sha512-vkN28aFikzQieA6bGxN+qe20pseCAemCyUI0YmRkJIArlb6OujtAwWAKyokv2lylV56bq8EQGIz+Y30OXUnRqg==", "integrity": "sha512-ZKyrehVy6wu1PnBXIUpn/fXmyMRQiVSbvHDubgXz4bfTOao3GiOurKHjByutQIgozuAN6ZHWiSge1dKA+dex3w==",
"dependencies": { "dependencies": {
"@jimp/utils": "^0.22.8", "@jimp/utils": "^0.22.10",
"any-base": "^1.1.0", "any-base": "^1.1.0",
"buffer": "^5.2.0", "buffer": "^5.2.0",
"exif-parser": "^0.1.12", "exif-parser": "^0.1.12",
"file-type": "^16.5.4", "file-type": "^16.5.4",
"isomorphic-fetch": "^3.0.0", "isomorphic-fetch": "^3.0.0",
"mkdirp": "^2.1.3",
"pixelmatch": "^4.0.2", "pixelmatch": "^4.0.2",
"tinycolor2": "^1.6.0" "tinycolor2": "^1.6.0"
} }
}, },
"node_modules/@jimp/custom": { "node_modules/@jimp/custom": {
"version": "0.22.8", "version": "0.22.10",
"resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.22.8.tgz", "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.22.10.tgz",
"integrity": "sha512-u6lP9x/HNeGHB0Oojv4c2mhuDvn7G0ikzYbK4IKLsH4HzHxt62faMjBzQMcFhKJhR6UiiKE/jiHrhGvBT/fMkw==", "integrity": "sha512-sPZkUYe1hu0iIgNisjizxPJqq2vaaKvkCkPoXq2U6UV3ZA1si/WVdrg25da3IcGIEV+83AoHgM8TvqlLgrCJsg==",
"dependencies": { "dependencies": {
"@jimp/core": "^0.22.8" "@jimp/core": "^0.22.10"
} }
}, },
"node_modules/@jimp/gif": { "node_modules/@jimp/gif": {
"version": "0.22.8", "version": "0.22.10",
"resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.22.8.tgz", "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.22.10.tgz",
"integrity": "sha512-I0l6koS67IPU40RPxCJTD1NvePEd8vUIHTejx1ly0jrjGnumbqdarAlBUkDrKfPPc+Fnqp84hBbSN1w5hNPT6w==", "integrity": "sha512-yEX2dSpamvkSx1PPDWGnKeWDrBz0vrCKjVG/cn4Zr68MRRT75tbZIeOrBa+RiUpY3ho5ix7d36LkYvt3qfUIhQ==",
"dependencies": { "dependencies": {
"@jimp/utils": "^0.22.8", "@jimp/utils": "^0.22.10",
"gifwrap": "^0.9.2", "gifwrap": "^0.10.1",
"omggif": "^1.0.9" "omggif": "^1.0.9"
}, },
"peerDependencies": { "peerDependencies": {
@ -184,11 +183,11 @@
} }
}, },
"node_modules/@jimp/jpeg": { "node_modules/@jimp/jpeg": {
"version": "0.22.8", "version": "0.22.10",
"resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.22.8.tgz", "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.22.10.tgz",
"integrity": "sha512-hLXrQ7/0QiUhAVAF10dfGCSq3hvyqjKltlpu/87b3wqMDKe9KdvhX1AJHiUUrAbJv1fAcnOmQGTyXGuySa1D6A==", "integrity": "sha512-6bu98pAcVN4DY2oiDLC4TOgieX/lZrLd1tombWZOFCN5PBmqaHQxm7IUmT+Wj4faEvh8QSHgVLSA+2JQQRJWVA==",
"dependencies": { "dependencies": {
"@jimp/utils": "^0.22.8", "@jimp/utils": "^0.22.10",
"jpeg-js": "^0.4.4" "jpeg-js": "^0.4.4"
}, },
"peerDependencies": { "peerDependencies": {
@ -196,44 +195,44 @@
} }
}, },
"node_modules/@jimp/plugin-blit": { "node_modules/@jimp/plugin-blit": {
"version": "0.22.8", "version": "0.22.10",
"resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.22.8.tgz", "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.22.10.tgz",
"integrity": "sha512-rQ19txVCKIwo74HtgFodFt4//0ATPCJK+f24riqzb+nx+1JaOo1xRvpJqg4moirHwKR2fhwdDxmY7KX20kCeYA==", "integrity": "sha512-6EI8Sl+mxYHEIy6Yteh6eknD+EZguKpNdr3sCKxNezmLR0+vK99vHcllo6uGSjXXiwtwS67Xqxn8SsoatL+UJQ==",
"dependencies": { "dependencies": {
"@jimp/utils": "^0.22.8" "@jimp/utils": "^0.22.10"
}, },
"peerDependencies": { "peerDependencies": {
"@jimp/custom": ">=0.3.5" "@jimp/custom": ">=0.3.5"
} }
}, },
"node_modules/@jimp/plugin-blur": { "node_modules/@jimp/plugin-blur": {
"version": "0.22.8", "version": "0.22.10",
"resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.22.8.tgz", "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.22.10.tgz",
"integrity": "sha512-GWbNK3YW6k2EKiGJdpAFEr0jezPBtiVxj2wG/lCPuWJz7KmzSSN99hQjIy73xQxoBCRdALfJlkhe3leFNRueSQ==", "integrity": "sha512-4XRTWuPVdMXJeclJMisXPGizeHtTryVaVV5HnuQXpKqIZtzXReCCpNGH8q/i0kBQOQMXhGWS3mpqOEwtpPePKw==",
"dependencies": { "dependencies": {
"@jimp/utils": "^0.22.8" "@jimp/utils": "^0.22.10"
}, },
"peerDependencies": { "peerDependencies": {
"@jimp/custom": ">=0.3.5" "@jimp/custom": ">=0.3.5"
} }
}, },
"node_modules/@jimp/plugin-circle": { "node_modules/@jimp/plugin-circle": {
"version": "0.22.8", "version": "0.22.10",
"resolved": "https://registry.npmjs.org/@jimp/plugin-circle/-/plugin-circle-0.22.8.tgz", "resolved": "https://registry.npmjs.org/@jimp/plugin-circle/-/plugin-circle-0.22.10.tgz",
"integrity": "sha512-qPCw8XFW8opT89ciFDuvs+eB3EB1mZIJWVajD2qAlprHiE7YGr34TkM7N5MNr3qZ1pJgkYdW6+HbBrJwBaonqw==", "integrity": "sha512-mhcwTO1ywRxiCgtLGge6tDDIDPlX6qkI3CY+BjgGG/XhVHccCddXgOGLdlf+5OuKIEF2Nqs0V01LQEQIJFTmEw==",
"dependencies": { "dependencies": {
"@jimp/utils": "^0.22.8" "@jimp/utils": "^0.22.10"
}, },
"peerDependencies": { "peerDependencies": {
"@jimp/custom": ">=0.3.5" "@jimp/custom": ">=0.3.5"
} }
}, },
"node_modules/@jimp/plugin-color": { "node_modules/@jimp/plugin-color": {
"version": "0.22.8", "version": "0.22.10",
"resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.22.8.tgz", "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.22.10.tgz",
"integrity": "sha512-ogkbg6rpDVH/mMLgAQKg17z3oZE0VN7ZWxNoH12fUHchqKz1I57zpa65fxZe2I8T5Xz97HR3x+7V7oI8qQGdSA==", "integrity": "sha512-e4t3L7Kedd96E0x1XjsTM6NcgulKUU66HdFTao7Tc9FYJRFSlttARZ/C6LEryGDm/i69R6bJEpo7BkNz0YL55Q==",
"dependencies": { "dependencies": {
"@jimp/utils": "^0.22.8", "@jimp/utils": "^0.22.10",
"tinycolor2": "^1.6.0" "tinycolor2": "^1.6.0"
}, },
"peerDependencies": { "peerDependencies": {
@ -241,11 +240,11 @@
} }
}, },
"node_modules/@jimp/plugin-contain": { "node_modules/@jimp/plugin-contain": {
"version": "0.22.8", "version": "0.22.10",
"resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.22.8.tgz", "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.22.10.tgz",
"integrity": "sha512-oiaPLdJt9Dk+XEEhM/OU3lFemM51mA9NgMCAdburSCjDzKacJYBGFSHjTOhXzcxOie/ZDpOYN/UzFGKy8Dgl9A==", "integrity": "sha512-eP8KrzctuEoqibQAxi9WhbnoRosydhiwg+IYya3dKuKDBTrD9UHt+ERlPQ/lTNWHzV/l4S1ntV3r9s9saJgsXA==",
"dependencies": { "dependencies": {
"@jimp/utils": "^0.22.8" "@jimp/utils": "^0.22.10"
}, },
"peerDependencies": { "peerDependencies": {
"@jimp/custom": ">=0.3.5", "@jimp/custom": ">=0.3.5",
@ -255,11 +254,11 @@
} }
}, },
"node_modules/@jimp/plugin-cover": { "node_modules/@jimp/plugin-cover": {
"version": "0.22.8", "version": "0.22.10",
"resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.22.8.tgz", "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.22.10.tgz",
"integrity": "sha512-mO68w1m/LhfuHU8LKHY05a4/hhWnY4t+T+8JCw9t+5yfzA4+LofBZZKtFtWgwf/QGe1y3X2rtUU/avAzDUKyyA==", "integrity": "sha512-kJCwL5T1igfa0InCfkE7bBeqg26m46aoRt10ug+rvm11P6RrvRMGrgINFyIKB+mnB7CiyBN/MOula1CvLhSInQ==",
"dependencies": { "dependencies": {
"@jimp/utils": "^0.22.8" "@jimp/utils": "^0.22.10"
}, },
"peerDependencies": { "peerDependencies": {
"@jimp/custom": ">=0.3.5", "@jimp/custom": ">=0.3.5",
@ -269,55 +268,55 @@
} }
}, },
"node_modules/@jimp/plugin-crop": { "node_modules/@jimp/plugin-crop": {
"version": "0.22.8", "version": "0.22.10",
"resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.22.8.tgz", "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.22.10.tgz",
"integrity": "sha512-ns4oH0h0gezYsbuH8RThcMLY5uTLk/vnqOVjWCehMHEzxi0DHMWCmpcb6bC//vJ+XFNhtVGn1ALN7+ROmPrj+A==", "integrity": "sha512-BOZ+YGaZlhU7c5ye65RxikicXH0Ki0It6/XHISvipR5WZrfjLjL2Ke20G+AGnwBQc76gKenVcMXVUCnEjtZV+Q==",
"dependencies": { "dependencies": {
"@jimp/utils": "^0.22.8" "@jimp/utils": "^0.22.10"
}, },
"peerDependencies": { "peerDependencies": {
"@jimp/custom": ">=0.3.5" "@jimp/custom": ">=0.3.5"
} }
}, },
"node_modules/@jimp/plugin-displace": { "node_modules/@jimp/plugin-displace": {
"version": "0.22.8", "version": "0.22.10",
"resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.22.8.tgz", "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.22.10.tgz",
"integrity": "sha512-Cj8nHYgsdFynOIx3dbbiVwRuZn3xO+RVfwkTRy0JBye+K2AU8SQJS+hSFNMQFTZt5djivh6kh0TzvR/6LkOd1w==", "integrity": "sha512-llNiWWMTKISDXt5+cXI0GaFmZWAjlT+4fFLYf4eXquuL/9wZoQsEBhv2GdGd48mkiS8jZq1Nnb2Q4ehEPTvrzw==",
"dependencies": { "dependencies": {
"@jimp/utils": "^0.22.8" "@jimp/utils": "^0.22.10"
}, },
"peerDependencies": { "peerDependencies": {
"@jimp/custom": ">=0.3.5" "@jimp/custom": ">=0.3.5"
} }
}, },
"node_modules/@jimp/plugin-dither": { "node_modules/@jimp/plugin-dither": {
"version": "0.22.8", "version": "0.22.10",
"resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.22.8.tgz", "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.22.10.tgz",
"integrity": "sha512-oE0Us/6bEgrgEg56plU3jSBzvB9iGhweKUHmxYMWnQbFCHP4mNCtPAs8+Fmq6c+m98ZgBgRcrJTnC7lphHkGyw==", "integrity": "sha512-05WLmeV5M+P/0FS+bWf13hMew2X0oa8w9AtmevL2UyA/5GqiyvP2Xm5WfGQ8oFiiMvpnL6RFomJQOZtWca0C2w==",
"dependencies": { "dependencies": {
"@jimp/utils": "^0.22.8" "@jimp/utils": "^0.22.10"
}, },
"peerDependencies": { "peerDependencies": {
"@jimp/custom": ">=0.3.5" "@jimp/custom": ">=0.3.5"
} }
}, },
"node_modules/@jimp/plugin-fisheye": { "node_modules/@jimp/plugin-fisheye": {
"version": "0.22.8", "version": "0.22.10",
"resolved": "https://registry.npmjs.org/@jimp/plugin-fisheye/-/plugin-fisheye-0.22.8.tgz", "resolved": "https://registry.npmjs.org/@jimp/plugin-fisheye/-/plugin-fisheye-0.22.10.tgz",
"integrity": "sha512-bWvYY/nfMcKclWEaRyAir+YsT6C5St823HUQAsewZowTrJmme+w4U2a6InsryTHUL01BBcV5BLH0aDHuV3StvA==", "integrity": "sha512-InjiXvc7Gkzrx8VWtU97kDqV7ENnhHGPULymJWeZaF2aicud9Fpk4iCtd/DcZIrk7Cbe60A8RwNXN00HXIbSCg==",
"dependencies": { "dependencies": {
"@jimp/utils": "^0.22.8" "@jimp/utils": "^0.22.10"
}, },
"peerDependencies": { "peerDependencies": {
"@jimp/custom": ">=0.3.5" "@jimp/custom": ">=0.3.5"
} }
}, },
"node_modules/@jimp/plugin-flip": { "node_modules/@jimp/plugin-flip": {
"version": "0.22.8", "version": "0.22.10",
"resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.22.8.tgz", "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.22.10.tgz",
"integrity": "sha512-0NFTNzjsdmOQkaIkNjZqO3/yU4SQb9nnWQXsLS1fFo+9QrIL5v8vVkXpk/rhiND6PyTj2mMTNjOa76GuZcC+iQ==", "integrity": "sha512-42GkGtTHWnhnwTMPVK/kXObZbkYIpQWfuIfy5EMEMk6zRj05zpv4vsjkKWfuemweZINwfvD7wDJF7FVFNNcZZg==",
"dependencies": { "dependencies": {
"@jimp/utils": "^0.22.8" "@jimp/utils": "^0.22.10"
}, },
"peerDependencies": { "peerDependencies": {
"@jimp/custom": ">=0.3.5", "@jimp/custom": ">=0.3.5",
@ -325,55 +324,55 @@
} }
}, },
"node_modules/@jimp/plugin-gaussian": { "node_modules/@jimp/plugin-gaussian": {
"version": "0.22.8", "version": "0.22.10",
"resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.22.8.tgz", "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.22.10.tgz",
"integrity": "sha512-E/f14aLzCS50QAM7K+InI9V61KVy/Zx52vy7Jjfo1h7qKhQHss3PYaydaH0N6qlXRNeXgh+4/32P9JfieLMcdw==", "integrity": "sha512-ykrG/6lTp9Q5YA8jS5XzwMHtRxb9HOFMgtmnrUZ8kU+BK8REecfy9Ic5BUEOjCYvS1a/xLsnrZQU07iiYxBxFg==",
"dependencies": { "dependencies": {
"@jimp/utils": "^0.22.8" "@jimp/utils": "^0.22.10"
}, },
"peerDependencies": { "peerDependencies": {
"@jimp/custom": ">=0.3.5" "@jimp/custom": ">=0.3.5"
} }
}, },
"node_modules/@jimp/plugin-invert": { "node_modules/@jimp/plugin-invert": {
"version": "0.22.8", "version": "0.22.10",
"resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.22.8.tgz", "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.22.10.tgz",
"integrity": "sha512-UauP39FF2cwbA5VU+Tz9VlNa9rtULPSHZb0Huwcjqjm9/G/xVN69VJ8+RKiFC4zM1/kYAUp/6IRwPa6qdKJpSw==", "integrity": "sha512-d8j9BlUJYs/c994t4azUWSWmQq4LLPG4ecm8m6SSNqap+S/HlVQGqjYhJEBbY9EXkOTYB9vBL9bqwSM1Rr6paA==",
"dependencies": { "dependencies": {
"@jimp/utils": "^0.22.8" "@jimp/utils": "^0.22.10"
}, },
"peerDependencies": { "peerDependencies": {
"@jimp/custom": ">=0.3.5" "@jimp/custom": ">=0.3.5"
} }
}, },
"node_modules/@jimp/plugin-mask": { "node_modules/@jimp/plugin-mask": {
"version": "0.22.8", "version": "0.22.10",
"resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.22.8.tgz", "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.22.10.tgz",
"integrity": "sha512-bhg5+3i8x1CmYj6cjvPBQZLwZEI3iK3gJWF25ZHF+12d3cqDuJngtr8oRQOQLlAgvKmrj9FXIiEPDczUI9cnWQ==", "integrity": "sha512-yRBs1230XZkz24uFTdTcSlZ0HXZpIWzM3iFQN56MzZ7USgdVZjPPDCQ8I9RpqfZ36nDflQkUO0wV7ucsi4ogow==",
"dependencies": { "dependencies": {
"@jimp/utils": "^0.22.8" "@jimp/utils": "^0.22.10"
}, },
"peerDependencies": { "peerDependencies": {
"@jimp/custom": ">=0.3.5" "@jimp/custom": ">=0.3.5"
} }
}, },
"node_modules/@jimp/plugin-normalize": { "node_modules/@jimp/plugin-normalize": {
"version": "0.22.8", "version": "0.22.10",
"resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.22.8.tgz", "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.22.10.tgz",
"integrity": "sha512-Yg5nreAR1JYuSObu3ExlgaLxVeW6VvjVL5qFwiPFxSNlG8JIwL1Ir3K3ChSnnvymyZvJMHb6YKTYNfXKw5Da6g==", "integrity": "sha512-Wk9GX6eJMchX/ZAazVa70Fagu+OXMvHiPY+HrcEwcclL+p1wo8xAHEsf9iKno7Ja4EU9lLhbBRY5hYJyiKMEkg==",
"dependencies": { "dependencies": {
"@jimp/utils": "^0.22.8" "@jimp/utils": "^0.22.10"
}, },
"peerDependencies": { "peerDependencies": {
"@jimp/custom": ">=0.3.5" "@jimp/custom": ">=0.3.5"
} }
}, },
"node_modules/@jimp/plugin-print": { "node_modules/@jimp/plugin-print": {
"version": "0.22.8", "version": "0.22.10",
"resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.22.8.tgz", "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.22.10.tgz",
"integrity": "sha512-86O5ejCDi543IYl0TykSmNWErzAjEYhiAxNQb2F7rFRT38WJYNVsvJ6QhxhDQHKxSmF5iwmqbk0jYk5Wp2Z1kw==", "integrity": "sha512-1U3VloIR+beE1kWPdGEJMiE2h1Do29iv3w8sBbvPyRP4qXxRFcDpmCGtctsrKmb1krlBFlj8ubyAY90xL+5n9w==",
"dependencies": { "dependencies": {
"@jimp/utils": "^0.22.8", "@jimp/utils": "^0.22.10",
"load-bmfont": "^1.4.1" "load-bmfont": "^1.4.1"
}, },
"peerDependencies": { "peerDependencies": {
@ -382,22 +381,22 @@
} }
}, },
"node_modules/@jimp/plugin-resize": { "node_modules/@jimp/plugin-resize": {
"version": "0.22.8", "version": "0.22.10",
"resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.22.8.tgz", "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.22.10.tgz",
"integrity": "sha512-kg8ArQRPqv/iU3DWNXCa8kcVIhoq64Ze0aGCAeFLKlAq/59f5pzAci6m6vV4L/uOVdYmUa9/kYwIFY6RWKpfzQ==", "integrity": "sha512-ixomxVcnAONXDgaq0opvAx4UAOiEhOA/tipuhFFOvPKFd4yf1BAnEviB5maB0SBHHkJXPUSzDp/73xVTMGSe7g==",
"dependencies": { "dependencies": {
"@jimp/utils": "^0.22.8" "@jimp/utils": "^0.22.10"
}, },
"peerDependencies": { "peerDependencies": {
"@jimp/custom": ">=0.3.5" "@jimp/custom": ">=0.3.5"
} }
}, },
"node_modules/@jimp/plugin-rotate": { "node_modules/@jimp/plugin-rotate": {
"version": "0.22.8", "version": "0.22.10",
"resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.22.8.tgz", "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.22.10.tgz",
"integrity": "sha512-9a+VPZWMN/Cks76wf8LjM5RVA3ntP9+NAdsS1SZhhXel7U3Re/dWMouIEbo3QTt6K+igRo4txUCdZiw4ZucvkQ==", "integrity": "sha512-eeFX8dnRyf3LAdsdXWKWuN18hLRg8zy1cP0cP9rHzQVWRK7ck/QsLxK1vHq7MADGwQalNaNTJ9SQxH6c8mz6jw==",
"dependencies": { "dependencies": {
"@jimp/utils": "^0.22.8" "@jimp/utils": "^0.22.10"
}, },
"peerDependencies": { "peerDependencies": {
"@jimp/custom": ">=0.3.5", "@jimp/custom": ">=0.3.5",
@ -407,11 +406,11 @@
} }
}, },
"node_modules/@jimp/plugin-scale": { "node_modules/@jimp/plugin-scale": {
"version": "0.22.8", "version": "0.22.10",
"resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.22.8.tgz", "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.22.10.tgz",
"integrity": "sha512-dQS4pG6DX6endu8zUpvBBOEtGC+ljDDDNw0scSXY71TxyQdNo5Ro0apfsppjmuAr8rNotRkfyxbITKkXQDRUDQ==", "integrity": "sha512-TG/H0oUN69C9ArBCZg4PmuoixFVKIiru8282KzSB/Tp1I0xwX0XLTv3dJ5pobPlIgPcB+TmD4xAIdkCT4rtWxg==",
"dependencies": { "dependencies": {
"@jimp/utils": "^0.22.8" "@jimp/utils": "^0.22.10"
}, },
"peerDependencies": { "peerDependencies": {
"@jimp/custom": ">=0.3.5", "@jimp/custom": ">=0.3.5",
@ -419,11 +418,11 @@
} }
}, },
"node_modules/@jimp/plugin-shadow": { "node_modules/@jimp/plugin-shadow": {
"version": "0.22.8", "version": "0.22.10",
"resolved": "https://registry.npmjs.org/@jimp/plugin-shadow/-/plugin-shadow-0.22.8.tgz", "resolved": "https://registry.npmjs.org/@jimp/plugin-shadow/-/plugin-shadow-0.22.10.tgz",
"integrity": "sha512-HyAhr7OblTQh+BoKHQg4qbS9MweNlH77yfpBqUEyDtfyjI5r06+5chf1ZdLRIPEWv/BdCfdI/g81Wv69muCMwA==", "integrity": "sha512-TN9xm6fI7XfxbMUQqFPZjv59Xdpf0tSiAQdINB4g6pJMWiVANR/74OtDONoy3KKpenu5Y38s+FkrtID/KcQAhw==",
"dependencies": { "dependencies": {
"@jimp/utils": "^0.22.8" "@jimp/utils": "^0.22.10"
}, },
"peerDependencies": { "peerDependencies": {
"@jimp/custom": ">=0.3.5", "@jimp/custom": ">=0.3.5",
@ -432,11 +431,11 @@
} }
}, },
"node_modules/@jimp/plugin-threshold": { "node_modules/@jimp/plugin-threshold": {
"version": "0.22.8", "version": "0.22.10",
"resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-0.22.8.tgz", "resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-0.22.10.tgz",
"integrity": "sha512-ZmkfH0PtjvF1UcKsjw0H7V6r+LC0yKzEfg76Jhs2nIqIgsxsSOVfHwS7z0/1IWnyXxSw36m+NjCAotNHRILGmA==", "integrity": "sha512-DA2lSnU0TgIRbAgmXaxroYw3Ad6J2DOFEoJp0NleSm2h3GWbZEE5yW9U2B6hD3iqn4AenG4E2b2WzHXZyzSutw==",
"dependencies": { "dependencies": {
"@jimp/utils": "^0.22.8" "@jimp/utils": "^0.22.10"
}, },
"peerDependencies": { "peerDependencies": {
"@jimp/custom": ">=0.3.5", "@jimp/custom": ">=0.3.5",
@ -445,31 +444,31 @@
} }
}, },
"node_modules/@jimp/plugins": { "node_modules/@jimp/plugins": {
"version": "0.22.8", "version": "0.22.10",
"resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.22.8.tgz", "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.22.10.tgz",
"integrity": "sha512-ieI2+kCpmIfjwVlT7B67ULCzxMizfj7LspJh9HnIZCDXQB9GBOZ9KImLYc75Krae0dP/3FR7FglLiSI7fkOHbw==", "integrity": "sha512-KDMZyM6pmvS8freB+UBLko1TO/k4D7URS/nphCozuH+P7i3UMe7NdckXKJ8u+WD6sqN0YFYvBehpkpnUiw/91w==",
"dependencies": { "dependencies": {
"@jimp/plugin-blit": "^0.22.8", "@jimp/plugin-blit": "^0.22.10",
"@jimp/plugin-blur": "^0.22.8", "@jimp/plugin-blur": "^0.22.10",
"@jimp/plugin-circle": "^0.22.8", "@jimp/plugin-circle": "^0.22.10",
"@jimp/plugin-color": "^0.22.8", "@jimp/plugin-color": "^0.22.10",
"@jimp/plugin-contain": "^0.22.8", "@jimp/plugin-contain": "^0.22.10",
"@jimp/plugin-cover": "^0.22.8", "@jimp/plugin-cover": "^0.22.10",
"@jimp/plugin-crop": "^0.22.8", "@jimp/plugin-crop": "^0.22.10",
"@jimp/plugin-displace": "^0.22.8", "@jimp/plugin-displace": "^0.22.10",
"@jimp/plugin-dither": "^0.22.8", "@jimp/plugin-dither": "^0.22.10",
"@jimp/plugin-fisheye": "^0.22.8", "@jimp/plugin-fisheye": "^0.22.10",
"@jimp/plugin-flip": "^0.22.8", "@jimp/plugin-flip": "^0.22.10",
"@jimp/plugin-gaussian": "^0.22.8", "@jimp/plugin-gaussian": "^0.22.10",
"@jimp/plugin-invert": "^0.22.8", "@jimp/plugin-invert": "^0.22.10",
"@jimp/plugin-mask": "^0.22.8", "@jimp/plugin-mask": "^0.22.10",
"@jimp/plugin-normalize": "^0.22.8", "@jimp/plugin-normalize": "^0.22.10",
"@jimp/plugin-print": "^0.22.8", "@jimp/plugin-print": "^0.22.10",
"@jimp/plugin-resize": "^0.22.8", "@jimp/plugin-resize": "^0.22.10",
"@jimp/plugin-rotate": "^0.22.8", "@jimp/plugin-rotate": "^0.22.10",
"@jimp/plugin-scale": "^0.22.8", "@jimp/plugin-scale": "^0.22.10",
"@jimp/plugin-shadow": "^0.22.8", "@jimp/plugin-shadow": "^0.22.10",
"@jimp/plugin-threshold": "^0.22.8", "@jimp/plugin-threshold": "^0.22.10",
"timm": "^1.6.1" "timm": "^1.6.1"
}, },
"peerDependencies": { "peerDependencies": {
@ -477,11 +476,11 @@
} }
}, },
"node_modules/@jimp/png": { "node_modules/@jimp/png": {
"version": "0.22.8", "version": "0.22.10",
"resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.22.8.tgz", "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.22.10.tgz",
"integrity": "sha512-XOj11kcCr8zKg24QSwlRfH9k4hbV6rkMGUVxMS3puRzzB0FBSQy42NBYEfYf2XlY2QJSAByPl4AYerOtKb805w==", "integrity": "sha512-RYinU7tZToeeR2g2qAMn42AU+8OUHjXPKZZ9RkmoL4bguA1xyZWaSdr22/FBkmnHhOERRlr02KPDN1OTOYHLDQ==",
"dependencies": { "dependencies": {
"@jimp/utils": "^0.22.8", "@jimp/utils": "^0.22.10",
"pngjs": "^6.0.0" "pngjs": "^6.0.0"
}, },
"peerDependencies": { "peerDependencies": {
@ -489,9 +488,9 @@
} }
}, },
"node_modules/@jimp/tiff": { "node_modules/@jimp/tiff": {
"version": "0.22.8", "version": "0.22.10",
"resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.22.8.tgz", "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.22.10.tgz",
"integrity": "sha512-K0hYUVW5MLgwq3jiHVHa6LvP05J1rXOlRCC+5dMTUnAXVwi45+MKsqA/8lzzwhHYJ65CNhZwy6D3+ZNzM9SIBQ==", "integrity": "sha512-OaivlSYzpNTHyH/h7pEtl3A7F7TbsgytZs52GLX/xITW92ffgDgT6PkldIrMrET6ERh/hdijNQiew7IoEEr2og==",
"dependencies": { "dependencies": {
"utif2": "^4.0.1" "utif2": "^4.0.1"
}, },
@ -500,15 +499,15 @@
} }
}, },
"node_modules/@jimp/types": { "node_modules/@jimp/types": {
"version": "0.22.8", "version": "0.22.10",
"resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.22.8.tgz", "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.22.10.tgz",
"integrity": "sha512-9+xc+mzuYwu0i+6dsnhXiUgfcS+Ktqn5q2jczoKyyBT0cOKgsk+57EIeFLgpTfVGRKRR0y/UIdHByeCzGguF3A==", "integrity": "sha512-u/r+XYzbCx4zZukDmxx8S0er3Yq3iDPI6+31WKX0N18i2qPPJYcn8qwIFurfupRumGvJ8SlGLCgt/T+Y8zzUIw==",
"dependencies": { "dependencies": {
"@jimp/bmp": "^0.22.8", "@jimp/bmp": "^0.22.10",
"@jimp/gif": "^0.22.8", "@jimp/gif": "^0.22.10",
"@jimp/jpeg": "^0.22.8", "@jimp/jpeg": "^0.22.10",
"@jimp/png": "^0.22.8", "@jimp/png": "^0.22.10",
"@jimp/tiff": "^0.22.8", "@jimp/tiff": "^0.22.10",
"timm": "^1.6.1" "timm": "^1.6.1"
}, },
"peerDependencies": { "peerDependencies": {
@ -516,9 +515,9 @@
} }
}, },
"node_modules/@jimp/utils": { "node_modules/@jimp/utils": {
"version": "0.22.8", "version": "0.22.10",
"resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.22.8.tgz", "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.22.10.tgz",
"integrity": "sha512-AaqjfqDeLzSFzrbGRKHMXg/ntiWKvoG9tpVgWzgOx5/gPWj/IyGfztojLTTvY8HqZCr25z8z91u2lAQD2v46Jw==", "integrity": "sha512-ztlOK9Mm2iLG2AMoabzM4i3WZ/FtshcgsJCbZCRUs/DKoeS2tySRJTnQZ1b7Roq0M4Ce+FUAxnCAcBV0q7PH9w==",
"dependencies": { "dependencies": {
"regenerator-runtime": "^0.13.3" "regenerator-runtime": "^0.13.3"
} }
@ -2069,9 +2068,9 @@
} }
}, },
"node_modules/gifwrap": { "node_modules/gifwrap": {
"version": "0.9.4", "version": "0.10.1",
"resolved": "https://registry.npmjs.org/gifwrap/-/gifwrap-0.9.4.tgz", "resolved": "https://registry.npmjs.org/gifwrap/-/gifwrap-0.10.1.tgz",
"integrity": "sha512-MDMwbhASQuVeD4JKd1fKgNgCRL3fGqMM4WaqpNhWO0JiMOAjbQdumbs4BbBZEy9/M00EHEjKN3HieVhCUlwjeQ==", "integrity": "sha512-2760b1vpJHNmLzZ/ubTtNnEx5WApN/PYWJvXvgS+tL1egTTthayFYIQQNi136FLEDcN/IyEY2EcGpIITD6eYUw==",
"dependencies": { "dependencies": {
"image-q": "^4.0.0", "image-q": "^4.0.0",
"omggif": "^1.0.10" "omggif": "^1.0.10"
@ -2456,13 +2455,13 @@
} }
}, },
"node_modules/jimp": { "node_modules/jimp": {
"version": "0.22.8", "version": "0.22.10",
"resolved": "https://registry.npmjs.org/jimp/-/jimp-0.22.8.tgz", "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.22.10.tgz",
"integrity": "sha512-pBbrooJMX7795sDcxx1XpwNZC8B/ITyDV+JK2/1qNbQl/1UWqWeh5Dq7qQpMZl5jLdcFDv5IVTM+OhpafSqSFA==", "integrity": "sha512-lCaHIJAgTOsplyJzC1w/laxSxrbSsEBw4byKwXgUdMmh+ayPsnidTblenQm+IvhIs44Gcuvlb6pd2LQ0wcKaKg==",
"dependencies": { "dependencies": {
"@jimp/custom": "^0.22.8", "@jimp/custom": "^0.22.10",
"@jimp/plugins": "^0.22.8", "@jimp/plugins": "^0.22.10",
"@jimp/types": "^0.22.8", "@jimp/types": "^0.22.10",
"regenerator-runtime": "^0.13.3" "regenerator-runtime": "^0.13.3"
} }
}, },
@ -2719,20 +2718,6 @@
"url": "https://github.com/sponsors/ljharb" "url": "https://github.com/sponsors/ljharb"
} }
}, },
"node_modules/mkdirp": {
"version": "2.1.6",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.6.tgz",
"integrity": "sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==",
"bin": {
"mkdirp": "dist/cjs/src/bin.js"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/mkdirp-classic": { "node_modules/mkdirp-classic": {
"version": "0.5.3", "version": "0.5.3",
"resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
@ -3021,18 +3006,6 @@
"xml2js": "^0.4.5" "xml2js": "^0.4.5"
} }
}, },
"node_modules/parse-bmfont-xml/node_modules/xml2js": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz",
"integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==",
"dependencies": {
"sax": ">=0.6.0",
"xmlbuilder": "~11.0.0"
},
"engines": {
"node": ">=4.0.0"
}
},
"node_modules/parse-headers": { "node_modules/parse-headers": {
"version": "2.0.5", "version": "2.0.5",
"resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz",
@ -3768,10 +3741,11 @@
} }
}, },
"node_modules/sillytavern-transformers": { "node_modules/sillytavern-transformers": {
"version": "2.6.2", "version": "2.7.3",
"resolved": "https://registry.npmjs.org/sillytavern-transformers/-/sillytavern-transformers-2.6.2.tgz", "resolved": "https://registry.npmjs.org/sillytavern-transformers/-/sillytavern-transformers-2.7.3.tgz",
"integrity": "sha512-C9l7mEjSHpOMuAAXrCY0r4Mv8FKlrgTr3XV51evybtXc1bk38KzWSyMukFOC+dVCsuTdqBCyjhdBeF4+6mrHzQ==", "integrity": "sha512-vr6BQdLlT3TbCLJdzLt5Sc/MzZ7LWoTzdkkQJgtvKwU3sX1TcnW0Oz23hl211sefWdxwkj/g0RZdvL18hk1Jew==",
"dependencies": { "dependencies": {
"jimp": "^0.22.10",
"onnxruntime-web": "1.14.0" "onnxruntime-web": "1.14.0"
}, },
"optionalDependencies": { "optionalDependencies": {
@ -4214,9 +4188,9 @@
"integrity": "sha512-9kQ9Q/MPzUV2mye8Tv7vA6vDIPk77rI4AWWm2vSaCyGAEsxqyVZYeVU2MSJY5fLkf6u7G5K343vLxKubOxz16Q==" "integrity": "sha512-9kQ9Q/MPzUV2mye8Tv7vA6vDIPk77rI4AWWm2vSaCyGAEsxqyVZYeVU2MSJY5fLkf6u7G5K343vLxKubOxz16Q=="
}, },
"node_modules/whatwg-fetch": { "node_modules/whatwg-fetch": {
"version": "3.6.2", "version": "3.6.18",
"resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.18.tgz",
"integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==" "integrity": "sha512-ltN7j66EneWn5TFDO4L9inYC1D+Czsxlrw2SalgjMmEMkLfA5SIZxEFdE6QtHFiiM6Q7WL32c7AkI3w6yxM84Q=="
}, },
"node_modules/whatwg-url": { "node_modules/whatwg-url": {
"version": "5.0.0", "version": "5.0.0",
@ -4297,6 +4271,18 @@
"resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz", "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz",
"integrity": "sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g==" "integrity": "sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g=="
}, },
"node_modules/xml2js": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz",
"integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==",
"dependencies": {
"sax": ">=0.6.0",
"xmlbuilder": "~11.0.0"
},
"engines": {
"node": ">=4.0.0"
}
},
"node_modules/xmlbuilder": { "node_modules/xmlbuilder": {
"version": "11.0.1", "version": "11.0.1",
"resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz",

View File

@ -17,7 +17,7 @@
"gpt3-tokenizer": "^1.1.5", "gpt3-tokenizer": "^1.1.5",
"ip-matching": "^2.1.2", "ip-matching": "^2.1.2",
"ipaddr.js": "^2.0.1", "ipaddr.js": "^2.0.1",
"jimp": "^0.22.7", "jimp": "^0.22.10",
"jquery": "^3.6.4", "jquery": "^3.6.4",
"json5": "^2.2.3", "json5": "^2.2.3",
"lodash": "^4.17.21", "lodash": "^4.17.21",
@ -31,7 +31,7 @@
"png-chunks-extract": "^1.0.0", "png-chunks-extract": "^1.0.0",
"response-time": "^2.3.2", "response-time": "^2.3.2",
"sanitize-filename": "^1.6.3", "sanitize-filename": "^1.6.3",
"sillytavern-transformers": "^2.6.2", "sillytavern-transformers": "^2.7.3",
"simple-git": "^3.19.1", "simple-git": "^3.19.1",
"uniqolor": "^1.1.0", "uniqolor": "^1.1.0",
"vectra": "^0.2.2", "vectra": "^0.2.2",

View File

@ -5666,3 +5666,9 @@ import('./src/classify.mjs').then(module => {
}).catch(err => { }).catch(err => {
console.error(err); console.error(err);
}); });
// Image captioning
import('./src/caption.mjs').then(module => {
module.default.registerEndpoints(app, jsonParser);
}).catch(err => {
console.error(err);
});

70
src/caption.mjs Normal file
View File

@ -0,0 +1,70 @@
import { pipeline, env, RawImage } from 'sillytavern-transformers';
import path from 'path';
import { getConfig } from './util.js';
// Limit the number of threads to 1 to avoid issues on Android
env.backends.onnx.wasm.numThreads = 1;
class PipelineAccessor {
/**
* @type {import("sillytavern-transformers").ImageToTextPipeline}
*/
pipe;
async get() {
if (!this.pipe) {
const cache_dir = path.join(process.cwd(), 'cache');
const model = this.getCaptioningModel();
this.pipe = await pipeline('image-to-text', model, { cache_dir, quantized: true });
}
return this.pipe;
}
getCaptioningModel() {
const DEFAULT_MODEL = 'Xenova/vit-gpt2-image-captioning';
try {
const config = getConfig();
const model = config?.extras?.captioningModel;
return model || DEFAULT_MODEL;
} catch (error) {
console.warn('Failed to read config.conf, using default captioning model.');
return DEFAULT_MODEL;
}
}
}
/**
* @param {import("express").Express} app
* @param {any} jsonParser
*/
function registerEndpoints(app, jsonParser) {
const pipelineAccessor = new PipelineAccessor();
app.post('/api/extra/caption', jsonParser, async (req, res) => {
try {
const { image } = req.body;
// base64 string to blob
const buffer = Buffer.from(image, 'base64');
const byteArray = new Uint8Array(buffer);
const blob = new Blob([byteArray]);
const rawImage = await RawImage.fromBlob(blob);
const pipe = await pipelineAccessor.get();
const result = await pipe(rawImage);
const text = result[0].generated_text;
console.log('Image caption:', text);
return res.json({ caption: text });
} catch (error) {
console.error(error);
return res.sendStatus(500);
}
});
}
export default {
registerEndpoints,
};