├── .gitattributes ├── LICENSE ├── README.md ├── config.json ├── frame_output ├── frame_output.txt ├── resized_frames │ └── resized_frames.txt └── whole_frames │ └── whole_frames.txt ├── index.js ├── package-lock.json ├── package.json ├── play.js └── video_input ├── input.mp4 └── video_input /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 JoshnaksPNG 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Bad Apple on YouTube 2 | Playing Bad Apple on the YouTube Homepage 3 | 4 | Setup 5 | ----- 6 | 7 | 1. Download Project in preferred manner 8 | 2. Change the "FILE_PATH" in play.js and "project_path" in config.json to the folder in which you've downloaded the project. 9 | 3. Make sure you have FFMPEG installed. It must either be either installed in the project folder, or configured as a system variable. 10 | 4. Make sure you have NodeJS installed. 11 | 5. Run "npm i" in cmd to reinstall the packages required to run the program. 12 | 13 | Running The Program 14 | ------------------ 15 | 16 | 1. Place the input video in the "video_input" folder and change the video_input in "config.json". 17 | 2. Run "node ." in cmd to generate the frames. This'll probably take a while. 18 | 3. Download a YouTube homepage, it should have 4x3 thumbnails on the page. 19 | 4. Copy the code from "play.js" and run it in the dev console on the page 20 | -------------------------------------------------------------------------------- /config.json: -------------------------------------------------------------------------------- 1 | { 2 | "project_path": "C:/git/Bad_Apple_Youtube_Page", 3 | "input_video": "input.mp4" 4 | } -------------------------------------------------------------------------------- /frame_output/frame_output.txt: -------------------------------------------------------------------------------- 1 | Folder Where the Script Places The Frames of the Input Video -------------------------------------------------------------------------------- /frame_output/resized_frames/resized_frames.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoshnaksPNG/Bad_Apple_Youtube_Page/5d23573970b85cce2b83be018fa6201ea6c68063/frame_output/resized_frames/resized_frames.txt -------------------------------------------------------------------------------- /frame_output/whole_frames/whole_frames.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoshnaksPNG/Bad_Apple_Youtube_Page/5d23573970b85cce2b83be018fa6201ea6c68063/frame_output/whole_frames/whole_frames.txt -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | // Libraries 2 | const jimp = require("jimp"); 3 | const ffmpeg = require("ffmpeg"); 4 | const fs = require("fs"); 5 | const Jimp = require("jimp"); 6 | const lodash = require("lodash"); 7 | const path = require("path"); 8 | 9 | // Read Config Path 10 | const CONFIG = JSON.parse(fs.readFileSync("config.json")) 11 | const CONFIG_PATH = CONFIG.project_path; 12 | const VIDEO_IN = CONFIG.input_video; 13 | 14 | // Frame Intervals 15 | const EVERY_N_FRAME_SET = 1; 16 | const vid_x = 4; 17 | const vid_y = 3; 18 | 19 | const THUMBNAIL_WIDTH = 281; 20 | const THUMBNAIL_HEIGHT = 158; 21 | 22 | const CHANNEL_WIDTH = 36; 23 | const CHANNEL_HEIGHT = 36; 24 | 25 | const HORIZONTAL_MARGIN = 16; 26 | const VERTICAL_MARGIN = 86; 27 | const VERTICAL_MINOR = 12; 28 | 29 | // Extract Video To JPG frames (Stole from Stack Overflow :D) 30 | try { 31 | let process = new ffmpeg("video_input/" + VIDEO_IN); 32 | process.then( (video) => 33 | { 34 | video.fnExtractFrameToJPG( CONFIG_PATH + "/frame_output/whole_frames", 35 | { 36 | every_n_frames : EVERY_N_FRAME_SET 37 | }, resized_frames) 38 | }, function (err) 39 | { 40 | console.log('Error: ' + err); 41 | }); 42 | } 43 | catch (e) 44 | { 45 | console.log(e.code); 46 | console.log(e.msg); 47 | } 48 | 49 | async function resized_frames(error, files) 50 | { 51 | // Get Number of Frames 52 | let total_frames = files.length; 53 | 54 | // Resize Frames 55 | const PIXEL_WIDTH = (HORIZONTAL_MARGIN * (vid_x - 1)) + (THUMBNAIL_WIDTH * vid_x); 56 | const PIXEL_HEIGHT = (VERTICAL_MARGIN * (vid_y - 1)) + ((THUMBNAIL_HEIGHT + VERTICAL_MARGIN) * vid_y); 57 | 58 | for(let i = 1; !(i > total_frames); ++i) 59 | { 60 | const in_path = CONFIG_PATH + "/frame_output/whole_frames/input_" + i + ".jpg"; 61 | const out_path = CONFIG_PATH + "/frame_output/resized_frames/frame_" + i + ".jpg"; 62 | const img = await Jimp.read(in_path); 63 | 64 | img.resize(PIXEL_WIDTH, PIXEL_HEIGHT); 65 | 66 | for(let j = 0; j < vid_x; ++j) 67 | { 68 | for(let k = 0; k < vid_y; ++k) 69 | { 70 | const sliced_out_path = CONFIG_PATH + "/frame_output/frame_parts/" + i + ""; 71 | const thumb_path = sliced_out_path + "/" + k + "," + j + "thumb.jpg"; 72 | const channel_path = sliced_out_path + "/" + k + "," + j +"channel.jpg"; 73 | 74 | 75 | const timg = lodash.cloneDeep(img); 76 | const cimg = lodash.cloneDeep(img); 77 | timg.crop 78 | ( 79 | (j * (THUMBNAIL_WIDTH + HORIZONTAL_MARGIN)), 80 | (k * (THUMBNAIL_HEIGHT + VERTICAL_MARGIN)), 81 | THUMBNAIL_WIDTH, 82 | THUMBNAIL_HEIGHT 83 | ).write(thumb_path); 84 | 85 | cimg.crop 86 | ( 87 | (j * (THUMBNAIL_WIDTH + HORIZONTAL_MARGIN)), 88 | ((THUMBNAIL_HEIGHT + VERTICAL_MINOR) + ((THUMBNAIL_HEIGHT + VERTICAL_MARGIN) * k)), 89 | CHANNEL_WIDTH, 90 | CHANNEL_HEIGHT 91 | ).write(channel_path); 92 | } 93 | } 94 | } 95 | } -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "bad_apple_youtube_page", 3 | "version": "1.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "bad_apple_youtube_page", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "dependencies": { 12 | "ffmpeg": "^0.0.4", 13 | "jimp": "^0.16.2", 14 | "lodash": "^4.17.21" 15 | } 16 | }, 17 | "node_modules/@babel/runtime": { 18 | "version": "7.20.1", 19 | "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.1.tgz", 20 | "integrity": "sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==", 21 | "dependencies": { 22 | "regenerator-runtime": "^0.13.10" 23 | }, 24 | "engines": { 25 | "node": ">=6.9.0" 26 | } 27 | }, 28 | "node_modules/@jimp/bmp": { 29 | "version": "0.16.2", 30 | "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.16.2.tgz", 31 | "integrity": "sha512-4g9vW45QfMoGhLVvaFj26h4e7cC+McHUQwyFQmNTLW4FfC1OonN9oUr2m/FEDGkTYKR7aqdXR5XUqqIkHWLaFw==", 32 | "dependencies": { 33 | "@babel/runtime": "^7.7.2", 34 | "@jimp/utils": "^0.16.2", 35 | "bmp-js": "^0.1.0" 36 | }, 37 | "peerDependencies": { 38 | "@jimp/custom": ">=0.3.5" 39 | } 40 | }, 41 | "node_modules/@jimp/core": { 42 | "version": "0.16.2", 43 | "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.16.2.tgz", 44 | "integrity": "sha512-dp7HcyUMzjXphXYodI6PaXue+I9PXAavbb+AN+1XqFbotN22Z12DosNPEyy+UhLY/hZiQQqUkEaJHkvV31rs+w==", 45 | "dependencies": { 46 | "@babel/runtime": "^7.7.2", 47 | "@jimp/utils": "^0.16.2", 48 | "any-base": "^1.1.0", 49 | "buffer": "^5.2.0", 50 | "exif-parser": "^0.1.12", 51 | "file-type": "^9.0.0", 52 | "load-bmfont": "^1.3.1", 53 | "mkdirp": "^0.5.1", 54 | "phin": "^2.9.1", 55 | "pixelmatch": "^4.0.2", 56 | "tinycolor2": "^1.4.1" 57 | } 58 | }, 59 | "node_modules/@jimp/custom": { 60 | "version": "0.16.2", 61 | "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.16.2.tgz", 62 | "integrity": "sha512-GtNwOs4hcVS2GIbqRUf42rUuX07oLB92cj7cqxZb0ZGWwcwhnmSW0TFLAkNafXmqn9ug4VTpNvcJSUdiuECVKg==", 63 | "dependencies": { 64 | "@babel/runtime": "^7.7.2", 65 | "@jimp/core": "^0.16.2" 66 | } 67 | }, 68 | "node_modules/@jimp/gif": { 69 | "version": "0.16.2", 70 | "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.16.2.tgz", 71 | "integrity": "sha512-TMdyT9Q0paIKNtT7c5KzQD29CNCsI/t8ka28jMrBjEK7j5RRTvBfuoOnHv7pDJRCjCIqeUoaUSJ7QcciKic6CA==", 72 | "dependencies": { 73 | "@babel/runtime": "^7.7.2", 74 | "@jimp/utils": "^0.16.2", 75 | "gifwrap": "^0.9.2", 76 | "omggif": "^1.0.9" 77 | }, 78 | "peerDependencies": { 79 | "@jimp/custom": ">=0.3.5" 80 | } 81 | }, 82 | "node_modules/@jimp/jpeg": { 83 | "version": "0.16.2", 84 | "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.16.2.tgz", 85 | "integrity": "sha512-BW5gZydgq6wdIwHd+3iUNgrTklvoQc/FUKSj9meM6A0FU21lUaansRX5BDdJqHkyXJLnnlDGwDt27J+hQuBAVw==", 86 | "dependencies": { 87 | "@babel/runtime": "^7.7.2", 88 | "@jimp/utils": "^0.16.2", 89 | "jpeg-js": "^0.4.2" 90 | }, 91 | "peerDependencies": { 92 | "@jimp/custom": ">=0.3.5" 93 | } 94 | }, 95 | "node_modules/@jimp/plugin-blit": { 96 | "version": "0.16.2", 97 | "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.16.2.tgz", 98 | "integrity": "sha512-Z31rRfV80gC/r+B/bOPSVVpJEWXUV248j7MdnMOFLu4vr8DMqXVo9jYqvwU/s4LSTMAMXqm4Jg6E/jQfadPKAg==", 99 | "dependencies": { 100 | "@babel/runtime": "^7.7.2", 101 | "@jimp/utils": "^0.16.2" 102 | }, 103 | "peerDependencies": { 104 | "@jimp/custom": ">=0.3.5" 105 | } 106 | }, 107 | "node_modules/@jimp/plugin-blur": { 108 | "version": "0.16.2", 109 | "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.16.2.tgz", 110 | "integrity": "sha512-ShkJCAzRI+1fAKPuLLgEkixpSpVmKTYaKEFROUcgmrv9AansDXGNCupchqVMTdxf8zPyW8rR1ilvG3OJobufLQ==", 111 | "dependencies": { 112 | "@babel/runtime": "^7.7.2", 113 | "@jimp/utils": "^0.16.2" 114 | }, 115 | "peerDependencies": { 116 | "@jimp/custom": ">=0.3.5" 117 | } 118 | }, 119 | "node_modules/@jimp/plugin-circle": { 120 | "version": "0.16.2", 121 | "resolved": "https://registry.npmjs.org/@jimp/plugin-circle/-/plugin-circle-0.16.2.tgz", 122 | "integrity": "sha512-6T4z/48F4Z5+YwAVCLOvXQcyGmo0E3WztxCz6XGQf66r4JJK78+zcCDYZFLMx0BGM0091FogNK4QniP8JaOkrA==", 123 | "dependencies": { 124 | "@babel/runtime": "^7.7.2", 125 | "@jimp/utils": "^0.16.2" 126 | }, 127 | "peerDependencies": { 128 | "@jimp/custom": ">=0.3.5" 129 | } 130 | }, 131 | "node_modules/@jimp/plugin-color": { 132 | "version": "0.16.2", 133 | "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.16.2.tgz", 134 | "integrity": "sha512-6oBV0g0J17/7E+aTquvUsgSc85nUbUi+64tIK5eFIDzvjhlqhjGNJYlc46KJMCWIs61qRJayQoZdL/iT/iQuGQ==", 135 | "dependencies": { 136 | "@babel/runtime": "^7.7.2", 137 | "@jimp/utils": "^0.16.2", 138 | "tinycolor2": "^1.4.1" 139 | }, 140 | "peerDependencies": { 141 | "@jimp/custom": ">=0.3.5" 142 | } 143 | }, 144 | "node_modules/@jimp/plugin-contain": { 145 | "version": "0.16.2", 146 | "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.16.2.tgz", 147 | "integrity": "sha512-pLcxO3hVN3LCEhMNvpZ9B7xILHVlS433Vv16zFFJxLRqZdYvPLsc+ZzJhjAiHHuEjVblQrktHE3LGeQwGJPo0w==", 148 | "dependencies": { 149 | "@babel/runtime": "^7.7.2", 150 | "@jimp/utils": "^0.16.2" 151 | }, 152 | "peerDependencies": { 153 | "@jimp/custom": ">=0.3.5", 154 | "@jimp/plugin-blit": ">=0.3.5", 155 | "@jimp/plugin-resize": ">=0.3.5", 156 | "@jimp/plugin-scale": ">=0.3.5" 157 | } 158 | }, 159 | "node_modules/@jimp/plugin-cover": { 160 | "version": "0.16.2", 161 | "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.16.2.tgz", 162 | "integrity": "sha512-gzWM7VvYeI8msyiwbUZxH+sGQEgO6Vd6adGxZ0CeKX00uQOe5lDzxb1Wjx7sHcJGz8a/5fmAuwz7rdDtpDUbkw==", 163 | "dependencies": { 164 | "@babel/runtime": "^7.7.2", 165 | "@jimp/utils": "^0.16.2" 166 | }, 167 | "peerDependencies": { 168 | "@jimp/custom": ">=0.3.5", 169 | "@jimp/plugin-crop": ">=0.3.5", 170 | "@jimp/plugin-resize": ">=0.3.5", 171 | "@jimp/plugin-scale": ">=0.3.5" 172 | } 173 | }, 174 | "node_modules/@jimp/plugin-crop": { 175 | "version": "0.16.2", 176 | "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.16.2.tgz", 177 | "integrity": "sha512-qCd3hfMEE+Z2EuuyXewgXRTtKJGIerWzc1zLEJztsUkPz5i73IGgkOL+mrNutZwGaXZbm+8SwUaGb46sxAO6Tw==", 178 | "dependencies": { 179 | "@babel/runtime": "^7.7.2", 180 | "@jimp/utils": "^0.16.2" 181 | }, 182 | "peerDependencies": { 183 | "@jimp/custom": ">=0.3.5" 184 | } 185 | }, 186 | "node_modules/@jimp/plugin-displace": { 187 | "version": "0.16.2", 188 | "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.16.2.tgz", 189 | "integrity": "sha512-6nXdvNNjCdD95v2o3/jPeur903dz08lG4Y8gmr5oL2yVv9LSSbMonoXYrR/ASesdyXqGdXJLU4NL+yZs4zUqbQ==", 190 | "dependencies": { 191 | "@babel/runtime": "^7.7.2", 192 | "@jimp/utils": "^0.16.2" 193 | }, 194 | "peerDependencies": { 195 | "@jimp/custom": ">=0.3.5" 196 | } 197 | }, 198 | "node_modules/@jimp/plugin-dither": { 199 | "version": "0.16.2", 200 | "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.16.2.tgz", 201 | "integrity": "sha512-DERpIzy21ZanMkVsD0Tdy8HQLbD1E41OuvIzaMRoW4183PA6AgGNlrQoFTyXmzjy6FTy1SxaQgTEdouInAWZ9Q==", 202 | "dependencies": { 203 | "@babel/runtime": "^7.7.2", 204 | "@jimp/utils": "^0.16.2" 205 | }, 206 | "peerDependencies": { 207 | "@jimp/custom": ">=0.3.5" 208 | } 209 | }, 210 | "node_modules/@jimp/plugin-fisheye": { 211 | "version": "0.16.2", 212 | "resolved": "https://registry.npmjs.org/@jimp/plugin-fisheye/-/plugin-fisheye-0.16.2.tgz", 213 | "integrity": "sha512-Df7PsGIwiIpQu3EygYCnaJyTfOwvwtYV3cmYJS7yFLtdiFUuod+hlSo5GkwEPLAy+QBxhUbDuUqnsWo4NQtbiQ==", 214 | "dependencies": { 215 | "@babel/runtime": "^7.7.2", 216 | "@jimp/utils": "^0.16.2" 217 | }, 218 | "peerDependencies": { 219 | "@jimp/custom": ">=0.3.5" 220 | } 221 | }, 222 | "node_modules/@jimp/plugin-flip": { 223 | "version": "0.16.2", 224 | "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.16.2.tgz", 225 | "integrity": "sha512-+2uC8ioVQUr06mnjSWraskz2L33nJHze35LkQ8ZNsIpoZLkgvfiWatqAs5bj+1jGI/9kxoCFAaT1Is0f+a4/rw==", 226 | "dependencies": { 227 | "@babel/runtime": "^7.7.2", 228 | "@jimp/utils": "^0.16.2" 229 | }, 230 | "peerDependencies": { 231 | "@jimp/custom": ">=0.3.5", 232 | "@jimp/plugin-rotate": ">=0.3.5" 233 | } 234 | }, 235 | "node_modules/@jimp/plugin-gaussian": { 236 | "version": "0.16.2", 237 | "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.16.2.tgz", 238 | "integrity": "sha512-2mnuDSg4ZEH8zcJig7DZZf4st/cYmQ5UYJKP76iGhZ+6JDACk6uejwAgT5xHecNhkVAaXMdCybA2eknH/9OE1w==", 239 | "dependencies": { 240 | "@babel/runtime": "^7.7.2", 241 | "@jimp/utils": "^0.16.2" 242 | }, 243 | "peerDependencies": { 244 | "@jimp/custom": ">=0.3.5" 245 | } 246 | }, 247 | "node_modules/@jimp/plugin-invert": { 248 | "version": "0.16.2", 249 | "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.16.2.tgz", 250 | "integrity": "sha512-xFvHbVepTY/nus+6yXiYN1iq+UBRkT0MdnObbiQPstUrAsz0Imn6MWISsnAyMvcNxHGrxaxjuU777JT/esM0gg==", 251 | "dependencies": { 252 | "@babel/runtime": "^7.7.2", 253 | "@jimp/utils": "^0.16.2" 254 | }, 255 | "peerDependencies": { 256 | "@jimp/custom": ">=0.3.5" 257 | } 258 | }, 259 | "node_modules/@jimp/plugin-mask": { 260 | "version": "0.16.2", 261 | "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.16.2.tgz", 262 | "integrity": "sha512-AbdO85xxhfgEDdxYKpUotEI9ixiCMaIpfYHD5a5O/VWeimz2kuwhcrzlHGiyq1kKAgRcl0WEneTCZAHVSyvPKA==", 263 | "dependencies": { 264 | "@babel/runtime": "^7.7.2", 265 | "@jimp/utils": "^0.16.2" 266 | }, 267 | "peerDependencies": { 268 | "@jimp/custom": ">=0.3.5" 269 | } 270 | }, 271 | "node_modules/@jimp/plugin-normalize": { 272 | "version": "0.16.2", 273 | "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.16.2.tgz", 274 | "integrity": "sha512-+ItBWFwmB0Od7OfOtTYT1gm543PpHUgU8/DN55z83l1JqS0OomDJAe7BmCppo2405TN6YtVm/csXo7p4iWd/SQ==", 275 | "dependencies": { 276 | "@babel/runtime": "^7.7.2", 277 | "@jimp/utils": "^0.16.2" 278 | }, 279 | "peerDependencies": { 280 | "@jimp/custom": ">=0.3.5" 281 | } 282 | }, 283 | "node_modules/@jimp/plugin-print": { 284 | "version": "0.16.2", 285 | "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.16.2.tgz", 286 | "integrity": "sha512-ifTGEeJ5UZTCiqC70HMeU3iXk/vsOmhWiwVGOXSFXhFeE8ZpDWvlmBsrMYnRrJGuaaogHOIrrQPI+kCdDBSBIQ==", 287 | "dependencies": { 288 | "@babel/runtime": "^7.7.2", 289 | "@jimp/utils": "^0.16.2", 290 | "load-bmfont": "^1.4.0" 291 | }, 292 | "peerDependencies": { 293 | "@jimp/custom": ">=0.3.5", 294 | "@jimp/plugin-blit": ">=0.3.5" 295 | } 296 | }, 297 | "node_modules/@jimp/plugin-resize": { 298 | "version": "0.16.2", 299 | "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.16.2.tgz", 300 | "integrity": "sha512-gE4N9l6xuwzacFZ2EPCGZCJ/xR+aX2V7GdMndIl/6kYIw5/eib1SFuF9AZLvIPSFuE1FnGo8+vT0pr++SSbhYg==", 301 | "dependencies": { 302 | "@babel/runtime": "^7.7.2", 303 | "@jimp/utils": "^0.16.2" 304 | }, 305 | "peerDependencies": { 306 | "@jimp/custom": ">=0.3.5" 307 | } 308 | }, 309 | "node_modules/@jimp/plugin-rotate": { 310 | "version": "0.16.2", 311 | "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.16.2.tgz", 312 | "integrity": "sha512-/CTEYkR1HrgmnE0VqPhhbBARbDAfFX590LWGIpxcYIYsUUGQCadl+8Qo4UX13FH0Nt8UHEtPA+O2x08uPYg9UA==", 313 | "dependencies": { 314 | "@babel/runtime": "^7.7.2", 315 | "@jimp/utils": "^0.16.2" 316 | }, 317 | "peerDependencies": { 318 | "@jimp/custom": ">=0.3.5", 319 | "@jimp/plugin-blit": ">=0.3.5", 320 | "@jimp/plugin-crop": ">=0.3.5", 321 | "@jimp/plugin-resize": ">=0.3.5" 322 | } 323 | }, 324 | "node_modules/@jimp/plugin-scale": { 325 | "version": "0.16.2", 326 | "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.16.2.tgz", 327 | "integrity": "sha512-3inuxfrlquyLaqFdiiiQNJUurR0WbvN5wAf1qcYX2LubG1AG8grayYD6H7XVoxfUGTZXh1kpmeirEYlqA2zxcw==", 328 | "dependencies": { 329 | "@babel/runtime": "^7.7.2", 330 | "@jimp/utils": "^0.16.2" 331 | }, 332 | "peerDependencies": { 333 | "@jimp/custom": ">=0.3.5", 334 | "@jimp/plugin-resize": ">=0.3.5" 335 | } 336 | }, 337 | "node_modules/@jimp/plugin-shadow": { 338 | "version": "0.16.2", 339 | "resolved": "https://registry.npmjs.org/@jimp/plugin-shadow/-/plugin-shadow-0.16.2.tgz", 340 | "integrity": "sha512-Q0aIs2/L6fWMcEh9Ms73u34bT1hyUMw/oxaVoIzOLo6/E8YzCs2Bi63H0/qaPS0MQpEppI++kvosPbblABY79w==", 341 | "dependencies": { 342 | "@babel/runtime": "^7.7.2", 343 | "@jimp/utils": "^0.16.2" 344 | }, 345 | "peerDependencies": { 346 | "@jimp/custom": ">=0.3.5", 347 | "@jimp/plugin-blur": ">=0.3.5", 348 | "@jimp/plugin-resize": ">=0.3.5" 349 | } 350 | }, 351 | "node_modules/@jimp/plugin-threshold": { 352 | "version": "0.16.2", 353 | "resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-0.16.2.tgz", 354 | "integrity": "sha512-gyOwmBgjtMPvcuyOhkP6dOGWbQdaTfhcBRN22mYeI/k/Wh/Zh1OI21F6eKLApsVRmg15MoFnkrCz64RROC34sw==", 355 | "dependencies": { 356 | "@babel/runtime": "^7.7.2", 357 | "@jimp/utils": "^0.16.2" 358 | }, 359 | "peerDependencies": { 360 | "@jimp/custom": ">=0.3.5", 361 | "@jimp/plugin-color": ">=0.8.0", 362 | "@jimp/plugin-resize": ">=0.8.0" 363 | } 364 | }, 365 | "node_modules/@jimp/plugins": { 366 | "version": "0.16.2", 367 | "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.16.2.tgz", 368 | "integrity": "sha512-zCvYtCgctmC0tkYEu+y+kSwSIZBsNznqJ3/3vkpzxdyjd6wCfNY5Qc/68MPrLc1lmdeGo4cOOTYHG7Vc6myzRw==", 369 | "dependencies": { 370 | "@babel/runtime": "^7.7.2", 371 | "@jimp/plugin-blit": "^0.16.2", 372 | "@jimp/plugin-blur": "^0.16.2", 373 | "@jimp/plugin-circle": "^0.16.2", 374 | "@jimp/plugin-color": "^0.16.2", 375 | "@jimp/plugin-contain": "^0.16.2", 376 | "@jimp/plugin-cover": "^0.16.2", 377 | "@jimp/plugin-crop": "^0.16.2", 378 | "@jimp/plugin-displace": "^0.16.2", 379 | "@jimp/plugin-dither": "^0.16.2", 380 | "@jimp/plugin-fisheye": "^0.16.2", 381 | "@jimp/plugin-flip": "^0.16.2", 382 | "@jimp/plugin-gaussian": "^0.16.2", 383 | "@jimp/plugin-invert": "^0.16.2", 384 | "@jimp/plugin-mask": "^0.16.2", 385 | "@jimp/plugin-normalize": "^0.16.2", 386 | "@jimp/plugin-print": "^0.16.2", 387 | "@jimp/plugin-resize": "^0.16.2", 388 | "@jimp/plugin-rotate": "^0.16.2", 389 | "@jimp/plugin-scale": "^0.16.2", 390 | "@jimp/plugin-shadow": "^0.16.2", 391 | "@jimp/plugin-threshold": "^0.16.2", 392 | "timm": "^1.6.1" 393 | }, 394 | "peerDependencies": { 395 | "@jimp/custom": ">=0.3.5" 396 | } 397 | }, 398 | "node_modules/@jimp/png": { 399 | "version": "0.16.2", 400 | "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.16.2.tgz", 401 | "integrity": "sha512-sFOtOSz/tzDwXEChFQ/Nxe+0+vG3Tj0eUxnZVDUG/StXE9dI8Bqmwj3MIa0EgK5s+QG3YlnDOmlPUa4JqmeYeQ==", 402 | "dependencies": { 403 | "@babel/runtime": "^7.7.2", 404 | "@jimp/utils": "^0.16.2", 405 | "pngjs": "^3.3.3" 406 | }, 407 | "peerDependencies": { 408 | "@jimp/custom": ">=0.3.5" 409 | } 410 | }, 411 | "node_modules/@jimp/tiff": { 412 | "version": "0.16.2", 413 | "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.16.2.tgz", 414 | "integrity": "sha512-ADcdqmtZF+U2YoaaHTzFX8D6NFpmN4WZUT0BPMerEuY7Cq8QoLYU22z2h034FrVW+Rbi1b3y04sB9iDiQAlf2w==", 415 | "dependencies": { 416 | "@babel/runtime": "^7.7.2", 417 | "utif": "^2.0.1" 418 | }, 419 | "peerDependencies": { 420 | "@jimp/custom": ">=0.3.5" 421 | } 422 | }, 423 | "node_modules/@jimp/types": { 424 | "version": "0.16.2", 425 | "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.16.2.tgz", 426 | "integrity": "sha512-0Ue5Sq0XnDF6TirisWv5E+8uOnRcd8vRLuwocJOhF76NIlcQrz+5r2k2XWKcr3d+11n28dHLXW5TKSqrUopxhA==", 427 | "dependencies": { 428 | "@babel/runtime": "^7.7.2", 429 | "@jimp/bmp": "^0.16.2", 430 | "@jimp/gif": "^0.16.2", 431 | "@jimp/jpeg": "^0.16.2", 432 | "@jimp/png": "^0.16.2", 433 | "@jimp/tiff": "^0.16.2", 434 | "timm": "^1.6.1" 435 | }, 436 | "peerDependencies": { 437 | "@jimp/custom": ">=0.3.5" 438 | } 439 | }, 440 | "node_modules/@jimp/utils": { 441 | "version": "0.16.2", 442 | "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.16.2.tgz", 443 | "integrity": "sha512-XENrPvmigiXZQ8E2nxJqO6UVvWBLzbNwyYi3Y8Q1IECoYhYI3kgOQ0fmy4G269Vz1V0omh1bNmC42r4OfXg1Jg==", 444 | "dependencies": { 445 | "@babel/runtime": "^7.7.2", 446 | "regenerator-runtime": "^0.13.3" 447 | } 448 | }, 449 | "node_modules/@types/node": { 450 | "version": "16.9.1", 451 | "resolved": "https://registry.npmjs.org/@types/node/-/node-16.9.1.tgz", 452 | "integrity": "sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==" 453 | }, 454 | "node_modules/any-base": { 455 | "version": "1.1.0", 456 | "resolved": "https://registry.npmjs.org/any-base/-/any-base-1.1.0.tgz", 457 | "integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==" 458 | }, 459 | "node_modules/base64-js": { 460 | "version": "1.5.1", 461 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 462 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", 463 | "funding": [ 464 | { 465 | "type": "github", 466 | "url": "https://github.com/sponsors/feross" 467 | }, 468 | { 469 | "type": "patreon", 470 | "url": "https://www.patreon.com/feross" 471 | }, 472 | { 473 | "type": "consulting", 474 | "url": "https://feross.org/support" 475 | } 476 | ] 477 | }, 478 | "node_modules/bmp-js": { 479 | "version": "0.1.0", 480 | "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz", 481 | "integrity": "sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw==" 482 | }, 483 | "node_modules/buffer": { 484 | "version": "5.7.1", 485 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", 486 | "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", 487 | "funding": [ 488 | { 489 | "type": "github", 490 | "url": "https://github.com/sponsors/feross" 491 | }, 492 | { 493 | "type": "patreon", 494 | "url": "https://www.patreon.com/feross" 495 | }, 496 | { 497 | "type": "consulting", 498 | "url": "https://feross.org/support" 499 | } 500 | ], 501 | "dependencies": { 502 | "base64-js": "^1.3.1", 503 | "ieee754": "^1.1.13" 504 | } 505 | }, 506 | "node_modules/buffer-equal": { 507 | "version": "0.0.1", 508 | "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", 509 | "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==", 510 | "engines": { 511 | "node": ">=0.4.0" 512 | } 513 | }, 514 | "node_modules/dom-walk": { 515 | "version": "0.1.2", 516 | "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", 517 | "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" 518 | }, 519 | "node_modules/exif-parser": { 520 | "version": "0.1.12", 521 | "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz", 522 | "integrity": "sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw==" 523 | }, 524 | "node_modules/ffmpeg": { 525 | "version": "0.0.4", 526 | "resolved": "https://registry.npmjs.org/ffmpeg/-/ffmpeg-0.0.4.tgz", 527 | "integrity": "sha512-3TgWUJJlZGQn+crJFyhsO/oNeRRnGTy6GhgS98oUCIfZrOW5haPPV7DUfOm3xJcHr5q3TJpjk2GudPutrNisRA==", 528 | "dependencies": { 529 | "when": ">= 0.0.1" 530 | } 531 | }, 532 | "node_modules/file-type": { 533 | "version": "9.0.0", 534 | "resolved": "https://registry.npmjs.org/file-type/-/file-type-9.0.0.tgz", 535 | "integrity": "sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw==", 536 | "engines": { 537 | "node": ">=6" 538 | } 539 | }, 540 | "node_modules/gifwrap": { 541 | "version": "0.9.4", 542 | "resolved": "https://registry.npmjs.org/gifwrap/-/gifwrap-0.9.4.tgz", 543 | "integrity": "sha512-MDMwbhASQuVeD4JKd1fKgNgCRL3fGqMM4WaqpNhWO0JiMOAjbQdumbs4BbBZEy9/M00EHEjKN3HieVhCUlwjeQ==", 544 | "dependencies": { 545 | "image-q": "^4.0.0", 546 | "omggif": "^1.0.10" 547 | } 548 | }, 549 | "node_modules/global": { 550 | "version": "4.4.0", 551 | "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", 552 | "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", 553 | "dependencies": { 554 | "min-document": "^2.19.0", 555 | "process": "^0.11.10" 556 | } 557 | }, 558 | "node_modules/ieee754": { 559 | "version": "1.2.1", 560 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 561 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", 562 | "funding": [ 563 | { 564 | "type": "github", 565 | "url": "https://github.com/sponsors/feross" 566 | }, 567 | { 568 | "type": "patreon", 569 | "url": "https://www.patreon.com/feross" 570 | }, 571 | { 572 | "type": "consulting", 573 | "url": "https://feross.org/support" 574 | } 575 | ] 576 | }, 577 | "node_modules/image-q": { 578 | "version": "4.0.0", 579 | "resolved": "https://registry.npmjs.org/image-q/-/image-q-4.0.0.tgz", 580 | "integrity": "sha512-PfJGVgIfKQJuq3s0tTDOKtztksibuUEbJQIYT3by6wctQo+Rdlh7ef4evJ5NCdxY4CfMbvFkocEwbl4BF8RlJw==", 581 | "dependencies": { 582 | "@types/node": "16.9.1" 583 | } 584 | }, 585 | "node_modules/is-function": { 586 | "version": "1.0.2", 587 | "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", 588 | "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" 589 | }, 590 | "node_modules/jimp": { 591 | "version": "0.16.2", 592 | "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.16.2.tgz", 593 | "integrity": "sha512-UpItBk81a92f8oEyoGYbO3YK4QcM0hoIyuGHmShoF9Ov63P5Qo7Q/X2xsAgnODmSuDJFOtrPtJd5GSWW4LKdOQ==", 594 | "dependencies": { 595 | "@babel/runtime": "^7.7.2", 596 | "@jimp/custom": "^0.16.2", 597 | "@jimp/plugins": "^0.16.2", 598 | "@jimp/types": "^0.16.2", 599 | "regenerator-runtime": "^0.13.3" 600 | } 601 | }, 602 | "node_modules/jpeg-js": { 603 | "version": "0.4.4", 604 | "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.4.tgz", 605 | "integrity": "sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==" 606 | }, 607 | "node_modules/load-bmfont": { 608 | "version": "1.4.1", 609 | "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.1.tgz", 610 | "integrity": "sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA==", 611 | "dependencies": { 612 | "buffer-equal": "0.0.1", 613 | "mime": "^1.3.4", 614 | "parse-bmfont-ascii": "^1.0.3", 615 | "parse-bmfont-binary": "^1.0.5", 616 | "parse-bmfont-xml": "^1.1.4", 617 | "phin": "^2.9.1", 618 | "xhr": "^2.0.1", 619 | "xtend": "^4.0.0" 620 | } 621 | }, 622 | "node_modules/lodash": { 623 | "version": "4.17.21", 624 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 625 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 626 | }, 627 | "node_modules/mime": { 628 | "version": "1.6.0", 629 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 630 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", 631 | "bin": { 632 | "mime": "cli.js" 633 | }, 634 | "engines": { 635 | "node": ">=4" 636 | } 637 | }, 638 | "node_modules/min-document": { 639 | "version": "2.19.0", 640 | "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", 641 | "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", 642 | "dependencies": { 643 | "dom-walk": "^0.1.0" 644 | } 645 | }, 646 | "node_modules/minimist": { 647 | "version": "1.2.7", 648 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", 649 | "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", 650 | "funding": { 651 | "url": "https://github.com/sponsors/ljharb" 652 | } 653 | }, 654 | "node_modules/mkdirp": { 655 | "version": "0.5.6", 656 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", 657 | "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", 658 | "dependencies": { 659 | "minimist": "^1.2.6" 660 | }, 661 | "bin": { 662 | "mkdirp": "bin/cmd.js" 663 | } 664 | }, 665 | "node_modules/omggif": { 666 | "version": "1.0.10", 667 | "resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz", 668 | "integrity": "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==" 669 | }, 670 | "node_modules/pako": { 671 | "version": "1.0.11", 672 | "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", 673 | "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" 674 | }, 675 | "node_modules/parse-bmfont-ascii": { 676 | "version": "1.0.6", 677 | "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz", 678 | "integrity": "sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA==" 679 | }, 680 | "node_modules/parse-bmfont-binary": { 681 | "version": "1.0.6", 682 | "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz", 683 | "integrity": "sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA==" 684 | }, 685 | "node_modules/parse-bmfont-xml": { 686 | "version": "1.1.4", 687 | "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz", 688 | "integrity": "sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==", 689 | "dependencies": { 690 | "xml-parse-from-string": "^1.0.0", 691 | "xml2js": "^0.4.5" 692 | } 693 | }, 694 | "node_modules/parse-headers": { 695 | "version": "2.0.5", 696 | "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", 697 | "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==" 698 | }, 699 | "node_modules/phin": { 700 | "version": "2.9.3", 701 | "resolved": "https://registry.npmjs.org/phin/-/phin-2.9.3.tgz", 702 | "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==" 703 | }, 704 | "node_modules/pixelmatch": { 705 | "version": "4.0.2", 706 | "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz", 707 | "integrity": "sha512-J8B6xqiO37sU/gkcMglv6h5Jbd9xNER7aHzpfRdNmV4IbQBzBpe4l9XmbG+xPF/znacgu2jfEw+wHffaq/YkXA==", 708 | "dependencies": { 709 | "pngjs": "^3.0.0" 710 | }, 711 | "bin": { 712 | "pixelmatch": "bin/pixelmatch" 713 | } 714 | }, 715 | "node_modules/pngjs": { 716 | "version": "3.4.0", 717 | "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", 718 | "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", 719 | "engines": { 720 | "node": ">=4.0.0" 721 | } 722 | }, 723 | "node_modules/process": { 724 | "version": "0.11.10", 725 | "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", 726 | "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", 727 | "engines": { 728 | "node": ">= 0.6.0" 729 | } 730 | }, 731 | "node_modules/regenerator-runtime": { 732 | "version": "0.13.10", 733 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz", 734 | "integrity": "sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw==" 735 | }, 736 | "node_modules/sax": { 737 | "version": "1.2.4", 738 | "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", 739 | "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" 740 | }, 741 | "node_modules/timm": { 742 | "version": "1.7.1", 743 | "resolved": "https://registry.npmjs.org/timm/-/timm-1.7.1.tgz", 744 | "integrity": "sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==" 745 | }, 746 | "node_modules/tinycolor2": { 747 | "version": "1.4.2", 748 | "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.2.tgz", 749 | "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==", 750 | "engines": { 751 | "node": "*" 752 | } 753 | }, 754 | "node_modules/utif": { 755 | "version": "2.0.1", 756 | "resolved": "https://registry.npmjs.org/utif/-/utif-2.0.1.tgz", 757 | "integrity": "sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==", 758 | "dependencies": { 759 | "pako": "^1.0.5" 760 | } 761 | }, 762 | "node_modules/when": { 763 | "version": "3.7.8", 764 | "resolved": "https://registry.npmjs.org/when/-/when-3.7.8.tgz", 765 | "integrity": "sha512-5cZ7mecD3eYcMiCH4wtRPA5iFJZ50BJYDfckI5RRpQiktMiYTcn0ccLTZOvcbBume+1304fQztxeNzNS9Gvrnw==" 766 | }, 767 | "node_modules/xhr": { 768 | "version": "2.6.0", 769 | "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", 770 | "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", 771 | "dependencies": { 772 | "global": "~4.4.0", 773 | "is-function": "^1.0.1", 774 | "parse-headers": "^2.0.0", 775 | "xtend": "^4.0.0" 776 | } 777 | }, 778 | "node_modules/xml-parse-from-string": { 779 | "version": "1.0.1", 780 | "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz", 781 | "integrity": "sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g==" 782 | }, 783 | "node_modules/xml2js": { 784 | "version": "0.4.23", 785 | "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", 786 | "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", 787 | "dependencies": { 788 | "sax": ">=0.6.0", 789 | "xmlbuilder": "~11.0.0" 790 | }, 791 | "engines": { 792 | "node": ">=4.0.0" 793 | } 794 | }, 795 | "node_modules/xmlbuilder": { 796 | "version": "11.0.1", 797 | "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", 798 | "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", 799 | "engines": { 800 | "node": ">=4.0" 801 | } 802 | }, 803 | "node_modules/xtend": { 804 | "version": "4.0.2", 805 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 806 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", 807 | "engines": { 808 | "node": ">=0.4" 809 | } 810 | } 811 | }, 812 | "dependencies": { 813 | "@babel/runtime": { 814 | "version": "7.20.1", 815 | "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.1.tgz", 816 | "integrity": "sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==", 817 | "requires": { 818 | "regenerator-runtime": "^0.13.10" 819 | } 820 | }, 821 | "@jimp/bmp": { 822 | "version": "0.16.2", 823 | "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.16.2.tgz", 824 | "integrity": "sha512-4g9vW45QfMoGhLVvaFj26h4e7cC+McHUQwyFQmNTLW4FfC1OonN9oUr2m/FEDGkTYKR7aqdXR5XUqqIkHWLaFw==", 825 | "requires": { 826 | "@babel/runtime": "^7.7.2", 827 | "@jimp/utils": "^0.16.2", 828 | "bmp-js": "^0.1.0" 829 | } 830 | }, 831 | "@jimp/core": { 832 | "version": "0.16.2", 833 | "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.16.2.tgz", 834 | "integrity": "sha512-dp7HcyUMzjXphXYodI6PaXue+I9PXAavbb+AN+1XqFbotN22Z12DosNPEyy+UhLY/hZiQQqUkEaJHkvV31rs+w==", 835 | "requires": { 836 | "@babel/runtime": "^7.7.2", 837 | "@jimp/utils": "^0.16.2", 838 | "any-base": "^1.1.0", 839 | "buffer": "^5.2.0", 840 | "exif-parser": "^0.1.12", 841 | "file-type": "^9.0.0", 842 | "load-bmfont": "^1.3.1", 843 | "mkdirp": "^0.5.1", 844 | "phin": "^2.9.1", 845 | "pixelmatch": "^4.0.2", 846 | "tinycolor2": "^1.4.1" 847 | } 848 | }, 849 | "@jimp/custom": { 850 | "version": "0.16.2", 851 | "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.16.2.tgz", 852 | "integrity": "sha512-GtNwOs4hcVS2GIbqRUf42rUuX07oLB92cj7cqxZb0ZGWwcwhnmSW0TFLAkNafXmqn9ug4VTpNvcJSUdiuECVKg==", 853 | "requires": { 854 | "@babel/runtime": "^7.7.2", 855 | "@jimp/core": "^0.16.2" 856 | } 857 | }, 858 | "@jimp/gif": { 859 | "version": "0.16.2", 860 | "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.16.2.tgz", 861 | "integrity": "sha512-TMdyT9Q0paIKNtT7c5KzQD29CNCsI/t8ka28jMrBjEK7j5RRTvBfuoOnHv7pDJRCjCIqeUoaUSJ7QcciKic6CA==", 862 | "requires": { 863 | "@babel/runtime": "^7.7.2", 864 | "@jimp/utils": "^0.16.2", 865 | "gifwrap": "^0.9.2", 866 | "omggif": "^1.0.9" 867 | } 868 | }, 869 | "@jimp/jpeg": { 870 | "version": "0.16.2", 871 | "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.16.2.tgz", 872 | "integrity": "sha512-BW5gZydgq6wdIwHd+3iUNgrTklvoQc/FUKSj9meM6A0FU21lUaansRX5BDdJqHkyXJLnnlDGwDt27J+hQuBAVw==", 873 | "requires": { 874 | "@babel/runtime": "^7.7.2", 875 | "@jimp/utils": "^0.16.2", 876 | "jpeg-js": "^0.4.2" 877 | } 878 | }, 879 | "@jimp/plugin-blit": { 880 | "version": "0.16.2", 881 | "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.16.2.tgz", 882 | "integrity": "sha512-Z31rRfV80gC/r+B/bOPSVVpJEWXUV248j7MdnMOFLu4vr8DMqXVo9jYqvwU/s4LSTMAMXqm4Jg6E/jQfadPKAg==", 883 | "requires": { 884 | "@babel/runtime": "^7.7.2", 885 | "@jimp/utils": "^0.16.2" 886 | } 887 | }, 888 | "@jimp/plugin-blur": { 889 | "version": "0.16.2", 890 | "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.16.2.tgz", 891 | "integrity": "sha512-ShkJCAzRI+1fAKPuLLgEkixpSpVmKTYaKEFROUcgmrv9AansDXGNCupchqVMTdxf8zPyW8rR1ilvG3OJobufLQ==", 892 | "requires": { 893 | "@babel/runtime": "^7.7.2", 894 | "@jimp/utils": "^0.16.2" 895 | } 896 | }, 897 | "@jimp/plugin-circle": { 898 | "version": "0.16.2", 899 | "resolved": "https://registry.npmjs.org/@jimp/plugin-circle/-/plugin-circle-0.16.2.tgz", 900 | "integrity": "sha512-6T4z/48F4Z5+YwAVCLOvXQcyGmo0E3WztxCz6XGQf66r4JJK78+zcCDYZFLMx0BGM0091FogNK4QniP8JaOkrA==", 901 | "requires": { 902 | "@babel/runtime": "^7.7.2", 903 | "@jimp/utils": "^0.16.2" 904 | } 905 | }, 906 | "@jimp/plugin-color": { 907 | "version": "0.16.2", 908 | "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.16.2.tgz", 909 | "integrity": "sha512-6oBV0g0J17/7E+aTquvUsgSc85nUbUi+64tIK5eFIDzvjhlqhjGNJYlc46KJMCWIs61qRJayQoZdL/iT/iQuGQ==", 910 | "requires": { 911 | "@babel/runtime": "^7.7.2", 912 | "@jimp/utils": "^0.16.2", 913 | "tinycolor2": "^1.4.1" 914 | } 915 | }, 916 | "@jimp/plugin-contain": { 917 | "version": "0.16.2", 918 | "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.16.2.tgz", 919 | "integrity": "sha512-pLcxO3hVN3LCEhMNvpZ9B7xILHVlS433Vv16zFFJxLRqZdYvPLsc+ZzJhjAiHHuEjVblQrktHE3LGeQwGJPo0w==", 920 | "requires": { 921 | "@babel/runtime": "^7.7.2", 922 | "@jimp/utils": "^0.16.2" 923 | } 924 | }, 925 | "@jimp/plugin-cover": { 926 | "version": "0.16.2", 927 | "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.16.2.tgz", 928 | "integrity": "sha512-gzWM7VvYeI8msyiwbUZxH+sGQEgO6Vd6adGxZ0CeKX00uQOe5lDzxb1Wjx7sHcJGz8a/5fmAuwz7rdDtpDUbkw==", 929 | "requires": { 930 | "@babel/runtime": "^7.7.2", 931 | "@jimp/utils": "^0.16.2" 932 | } 933 | }, 934 | "@jimp/plugin-crop": { 935 | "version": "0.16.2", 936 | "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.16.2.tgz", 937 | "integrity": "sha512-qCd3hfMEE+Z2EuuyXewgXRTtKJGIerWzc1zLEJztsUkPz5i73IGgkOL+mrNutZwGaXZbm+8SwUaGb46sxAO6Tw==", 938 | "requires": { 939 | "@babel/runtime": "^7.7.2", 940 | "@jimp/utils": "^0.16.2" 941 | } 942 | }, 943 | "@jimp/plugin-displace": { 944 | "version": "0.16.2", 945 | "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.16.2.tgz", 946 | "integrity": "sha512-6nXdvNNjCdD95v2o3/jPeur903dz08lG4Y8gmr5oL2yVv9LSSbMonoXYrR/ASesdyXqGdXJLU4NL+yZs4zUqbQ==", 947 | "requires": { 948 | "@babel/runtime": "^7.7.2", 949 | "@jimp/utils": "^0.16.2" 950 | } 951 | }, 952 | "@jimp/plugin-dither": { 953 | "version": "0.16.2", 954 | "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.16.2.tgz", 955 | "integrity": "sha512-DERpIzy21ZanMkVsD0Tdy8HQLbD1E41OuvIzaMRoW4183PA6AgGNlrQoFTyXmzjy6FTy1SxaQgTEdouInAWZ9Q==", 956 | "requires": { 957 | "@babel/runtime": "^7.7.2", 958 | "@jimp/utils": "^0.16.2" 959 | } 960 | }, 961 | "@jimp/plugin-fisheye": { 962 | "version": "0.16.2", 963 | "resolved": "https://registry.npmjs.org/@jimp/plugin-fisheye/-/plugin-fisheye-0.16.2.tgz", 964 | "integrity": "sha512-Df7PsGIwiIpQu3EygYCnaJyTfOwvwtYV3cmYJS7yFLtdiFUuod+hlSo5GkwEPLAy+QBxhUbDuUqnsWo4NQtbiQ==", 965 | "requires": { 966 | "@babel/runtime": "^7.7.2", 967 | "@jimp/utils": "^0.16.2" 968 | } 969 | }, 970 | "@jimp/plugin-flip": { 971 | "version": "0.16.2", 972 | "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.16.2.tgz", 973 | "integrity": "sha512-+2uC8ioVQUr06mnjSWraskz2L33nJHze35LkQ8ZNsIpoZLkgvfiWatqAs5bj+1jGI/9kxoCFAaT1Is0f+a4/rw==", 974 | "requires": { 975 | "@babel/runtime": "^7.7.2", 976 | "@jimp/utils": "^0.16.2" 977 | } 978 | }, 979 | "@jimp/plugin-gaussian": { 980 | "version": "0.16.2", 981 | "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.16.2.tgz", 982 | "integrity": "sha512-2mnuDSg4ZEH8zcJig7DZZf4st/cYmQ5UYJKP76iGhZ+6JDACk6uejwAgT5xHecNhkVAaXMdCybA2eknH/9OE1w==", 983 | "requires": { 984 | "@babel/runtime": "^7.7.2", 985 | "@jimp/utils": "^0.16.2" 986 | } 987 | }, 988 | "@jimp/plugin-invert": { 989 | "version": "0.16.2", 990 | "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.16.2.tgz", 991 | "integrity": "sha512-xFvHbVepTY/nus+6yXiYN1iq+UBRkT0MdnObbiQPstUrAsz0Imn6MWISsnAyMvcNxHGrxaxjuU777JT/esM0gg==", 992 | "requires": { 993 | "@babel/runtime": "^7.7.2", 994 | "@jimp/utils": "^0.16.2" 995 | } 996 | }, 997 | "@jimp/plugin-mask": { 998 | "version": "0.16.2", 999 | "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.16.2.tgz", 1000 | "integrity": "sha512-AbdO85xxhfgEDdxYKpUotEI9ixiCMaIpfYHD5a5O/VWeimz2kuwhcrzlHGiyq1kKAgRcl0WEneTCZAHVSyvPKA==", 1001 | "requires": { 1002 | "@babel/runtime": "^7.7.2", 1003 | "@jimp/utils": "^0.16.2" 1004 | } 1005 | }, 1006 | "@jimp/plugin-normalize": { 1007 | "version": "0.16.2", 1008 | "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.16.2.tgz", 1009 | "integrity": "sha512-+ItBWFwmB0Od7OfOtTYT1gm543PpHUgU8/DN55z83l1JqS0OomDJAe7BmCppo2405TN6YtVm/csXo7p4iWd/SQ==", 1010 | "requires": { 1011 | "@babel/runtime": "^7.7.2", 1012 | "@jimp/utils": "^0.16.2" 1013 | } 1014 | }, 1015 | "@jimp/plugin-print": { 1016 | "version": "0.16.2", 1017 | "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.16.2.tgz", 1018 | "integrity": "sha512-ifTGEeJ5UZTCiqC70HMeU3iXk/vsOmhWiwVGOXSFXhFeE8ZpDWvlmBsrMYnRrJGuaaogHOIrrQPI+kCdDBSBIQ==", 1019 | "requires": { 1020 | "@babel/runtime": "^7.7.2", 1021 | "@jimp/utils": "^0.16.2", 1022 | "load-bmfont": "^1.4.0" 1023 | } 1024 | }, 1025 | "@jimp/plugin-resize": { 1026 | "version": "0.16.2", 1027 | "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.16.2.tgz", 1028 | "integrity": "sha512-gE4N9l6xuwzacFZ2EPCGZCJ/xR+aX2V7GdMndIl/6kYIw5/eib1SFuF9AZLvIPSFuE1FnGo8+vT0pr++SSbhYg==", 1029 | "requires": { 1030 | "@babel/runtime": "^7.7.2", 1031 | "@jimp/utils": "^0.16.2" 1032 | } 1033 | }, 1034 | "@jimp/plugin-rotate": { 1035 | "version": "0.16.2", 1036 | "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.16.2.tgz", 1037 | "integrity": "sha512-/CTEYkR1HrgmnE0VqPhhbBARbDAfFX590LWGIpxcYIYsUUGQCadl+8Qo4UX13FH0Nt8UHEtPA+O2x08uPYg9UA==", 1038 | "requires": { 1039 | "@babel/runtime": "^7.7.2", 1040 | "@jimp/utils": "^0.16.2" 1041 | } 1042 | }, 1043 | "@jimp/plugin-scale": { 1044 | "version": "0.16.2", 1045 | "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.16.2.tgz", 1046 | "integrity": "sha512-3inuxfrlquyLaqFdiiiQNJUurR0WbvN5wAf1qcYX2LubG1AG8grayYD6H7XVoxfUGTZXh1kpmeirEYlqA2zxcw==", 1047 | "requires": { 1048 | "@babel/runtime": "^7.7.2", 1049 | "@jimp/utils": "^0.16.2" 1050 | } 1051 | }, 1052 | "@jimp/plugin-shadow": { 1053 | "version": "0.16.2", 1054 | "resolved": "https://registry.npmjs.org/@jimp/plugin-shadow/-/plugin-shadow-0.16.2.tgz", 1055 | "integrity": "sha512-Q0aIs2/L6fWMcEh9Ms73u34bT1hyUMw/oxaVoIzOLo6/E8YzCs2Bi63H0/qaPS0MQpEppI++kvosPbblABY79w==", 1056 | "requires": { 1057 | "@babel/runtime": "^7.7.2", 1058 | "@jimp/utils": "^0.16.2" 1059 | } 1060 | }, 1061 | "@jimp/plugin-threshold": { 1062 | "version": "0.16.2", 1063 | "resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-0.16.2.tgz", 1064 | "integrity": "sha512-gyOwmBgjtMPvcuyOhkP6dOGWbQdaTfhcBRN22mYeI/k/Wh/Zh1OI21F6eKLApsVRmg15MoFnkrCz64RROC34sw==", 1065 | "requires": { 1066 | "@babel/runtime": "^7.7.2", 1067 | "@jimp/utils": "^0.16.2" 1068 | } 1069 | }, 1070 | "@jimp/plugins": { 1071 | "version": "0.16.2", 1072 | "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.16.2.tgz", 1073 | "integrity": "sha512-zCvYtCgctmC0tkYEu+y+kSwSIZBsNznqJ3/3vkpzxdyjd6wCfNY5Qc/68MPrLc1lmdeGo4cOOTYHG7Vc6myzRw==", 1074 | "requires": { 1075 | "@babel/runtime": "^7.7.2", 1076 | "@jimp/plugin-blit": "^0.16.2", 1077 | "@jimp/plugin-blur": "^0.16.2", 1078 | "@jimp/plugin-circle": "^0.16.2", 1079 | "@jimp/plugin-color": "^0.16.2", 1080 | "@jimp/plugin-contain": "^0.16.2", 1081 | "@jimp/plugin-cover": "^0.16.2", 1082 | "@jimp/plugin-crop": "^0.16.2", 1083 | "@jimp/plugin-displace": "^0.16.2", 1084 | "@jimp/plugin-dither": "^0.16.2", 1085 | "@jimp/plugin-fisheye": "^0.16.2", 1086 | "@jimp/plugin-flip": "^0.16.2", 1087 | "@jimp/plugin-gaussian": "^0.16.2", 1088 | "@jimp/plugin-invert": "^0.16.2", 1089 | "@jimp/plugin-mask": "^0.16.2", 1090 | "@jimp/plugin-normalize": "^0.16.2", 1091 | "@jimp/plugin-print": "^0.16.2", 1092 | "@jimp/plugin-resize": "^0.16.2", 1093 | "@jimp/plugin-rotate": "^0.16.2", 1094 | "@jimp/plugin-scale": "^0.16.2", 1095 | "@jimp/plugin-shadow": "^0.16.2", 1096 | "@jimp/plugin-threshold": "^0.16.2", 1097 | "timm": "^1.6.1" 1098 | } 1099 | }, 1100 | "@jimp/png": { 1101 | "version": "0.16.2", 1102 | "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.16.2.tgz", 1103 | "integrity": "sha512-sFOtOSz/tzDwXEChFQ/Nxe+0+vG3Tj0eUxnZVDUG/StXE9dI8Bqmwj3MIa0EgK5s+QG3YlnDOmlPUa4JqmeYeQ==", 1104 | "requires": { 1105 | "@babel/runtime": "^7.7.2", 1106 | "@jimp/utils": "^0.16.2", 1107 | "pngjs": "^3.3.3" 1108 | } 1109 | }, 1110 | "@jimp/tiff": { 1111 | "version": "0.16.2", 1112 | "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.16.2.tgz", 1113 | "integrity": "sha512-ADcdqmtZF+U2YoaaHTzFX8D6NFpmN4WZUT0BPMerEuY7Cq8QoLYU22z2h034FrVW+Rbi1b3y04sB9iDiQAlf2w==", 1114 | "requires": { 1115 | "@babel/runtime": "^7.7.2", 1116 | "utif": "^2.0.1" 1117 | } 1118 | }, 1119 | "@jimp/types": { 1120 | "version": "0.16.2", 1121 | "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.16.2.tgz", 1122 | "integrity": "sha512-0Ue5Sq0XnDF6TirisWv5E+8uOnRcd8vRLuwocJOhF76NIlcQrz+5r2k2XWKcr3d+11n28dHLXW5TKSqrUopxhA==", 1123 | "requires": { 1124 | "@babel/runtime": "^7.7.2", 1125 | "@jimp/bmp": "^0.16.2", 1126 | "@jimp/gif": "^0.16.2", 1127 | "@jimp/jpeg": "^0.16.2", 1128 | "@jimp/png": "^0.16.2", 1129 | "@jimp/tiff": "^0.16.2", 1130 | "timm": "^1.6.1" 1131 | } 1132 | }, 1133 | "@jimp/utils": { 1134 | "version": "0.16.2", 1135 | "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.16.2.tgz", 1136 | "integrity": "sha512-XENrPvmigiXZQ8E2nxJqO6UVvWBLzbNwyYi3Y8Q1IECoYhYI3kgOQ0fmy4G269Vz1V0omh1bNmC42r4OfXg1Jg==", 1137 | "requires": { 1138 | "@babel/runtime": "^7.7.2", 1139 | "regenerator-runtime": "^0.13.3" 1140 | } 1141 | }, 1142 | "@types/node": { 1143 | "version": "16.9.1", 1144 | "resolved": "https://registry.npmjs.org/@types/node/-/node-16.9.1.tgz", 1145 | "integrity": "sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==" 1146 | }, 1147 | "any-base": { 1148 | "version": "1.1.0", 1149 | "resolved": "https://registry.npmjs.org/any-base/-/any-base-1.1.0.tgz", 1150 | "integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==" 1151 | }, 1152 | "base64-js": { 1153 | "version": "1.5.1", 1154 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 1155 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" 1156 | }, 1157 | "bmp-js": { 1158 | "version": "0.1.0", 1159 | "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz", 1160 | "integrity": "sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw==" 1161 | }, 1162 | "buffer": { 1163 | "version": "5.7.1", 1164 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", 1165 | "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", 1166 | "requires": { 1167 | "base64-js": "^1.3.1", 1168 | "ieee754": "^1.1.13" 1169 | } 1170 | }, 1171 | "buffer-equal": { 1172 | "version": "0.0.1", 1173 | "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", 1174 | "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==" 1175 | }, 1176 | "dom-walk": { 1177 | "version": "0.1.2", 1178 | "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", 1179 | "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" 1180 | }, 1181 | "exif-parser": { 1182 | "version": "0.1.12", 1183 | "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz", 1184 | "integrity": "sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw==" 1185 | }, 1186 | "ffmpeg": { 1187 | "version": "0.0.4", 1188 | "resolved": "https://registry.npmjs.org/ffmpeg/-/ffmpeg-0.0.4.tgz", 1189 | "integrity": "sha512-3TgWUJJlZGQn+crJFyhsO/oNeRRnGTy6GhgS98oUCIfZrOW5haPPV7DUfOm3xJcHr5q3TJpjk2GudPutrNisRA==", 1190 | "requires": { 1191 | "when": ">= 0.0.1" 1192 | } 1193 | }, 1194 | "file-type": { 1195 | "version": "9.0.0", 1196 | "resolved": "https://registry.npmjs.org/file-type/-/file-type-9.0.0.tgz", 1197 | "integrity": "sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw==" 1198 | }, 1199 | "gifwrap": { 1200 | "version": "0.9.4", 1201 | "resolved": "https://registry.npmjs.org/gifwrap/-/gifwrap-0.9.4.tgz", 1202 | "integrity": "sha512-MDMwbhASQuVeD4JKd1fKgNgCRL3fGqMM4WaqpNhWO0JiMOAjbQdumbs4BbBZEy9/M00EHEjKN3HieVhCUlwjeQ==", 1203 | "requires": { 1204 | "image-q": "^4.0.0", 1205 | "omggif": "^1.0.10" 1206 | } 1207 | }, 1208 | "global": { 1209 | "version": "4.4.0", 1210 | "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", 1211 | "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", 1212 | "requires": { 1213 | "min-document": "^2.19.0", 1214 | "process": "^0.11.10" 1215 | } 1216 | }, 1217 | "ieee754": { 1218 | "version": "1.2.1", 1219 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 1220 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" 1221 | }, 1222 | "image-q": { 1223 | "version": "4.0.0", 1224 | "resolved": "https://registry.npmjs.org/image-q/-/image-q-4.0.0.tgz", 1225 | "integrity": "sha512-PfJGVgIfKQJuq3s0tTDOKtztksibuUEbJQIYT3by6wctQo+Rdlh7ef4evJ5NCdxY4CfMbvFkocEwbl4BF8RlJw==", 1226 | "requires": { 1227 | "@types/node": "16.9.1" 1228 | } 1229 | }, 1230 | "is-function": { 1231 | "version": "1.0.2", 1232 | "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", 1233 | "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" 1234 | }, 1235 | "jimp": { 1236 | "version": "0.16.2", 1237 | "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.16.2.tgz", 1238 | "integrity": "sha512-UpItBk81a92f8oEyoGYbO3YK4QcM0hoIyuGHmShoF9Ov63P5Qo7Q/X2xsAgnODmSuDJFOtrPtJd5GSWW4LKdOQ==", 1239 | "requires": { 1240 | "@babel/runtime": "^7.7.2", 1241 | "@jimp/custom": "^0.16.2", 1242 | "@jimp/plugins": "^0.16.2", 1243 | "@jimp/types": "^0.16.2", 1244 | "regenerator-runtime": "^0.13.3" 1245 | } 1246 | }, 1247 | "jpeg-js": { 1248 | "version": "0.4.4", 1249 | "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.4.tgz", 1250 | "integrity": "sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==" 1251 | }, 1252 | "load-bmfont": { 1253 | "version": "1.4.1", 1254 | "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.1.tgz", 1255 | "integrity": "sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA==", 1256 | "requires": { 1257 | "buffer-equal": "0.0.1", 1258 | "mime": "^1.3.4", 1259 | "parse-bmfont-ascii": "^1.0.3", 1260 | "parse-bmfont-binary": "^1.0.5", 1261 | "parse-bmfont-xml": "^1.1.4", 1262 | "phin": "^2.9.1", 1263 | "xhr": "^2.0.1", 1264 | "xtend": "^4.0.0" 1265 | } 1266 | }, 1267 | "lodash": { 1268 | "version": "4.17.21", 1269 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 1270 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 1271 | }, 1272 | "mime": { 1273 | "version": "1.6.0", 1274 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 1275 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" 1276 | }, 1277 | "min-document": { 1278 | "version": "2.19.0", 1279 | "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", 1280 | "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", 1281 | "requires": { 1282 | "dom-walk": "^0.1.0" 1283 | } 1284 | }, 1285 | "minimist": { 1286 | "version": "1.2.7", 1287 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", 1288 | "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" 1289 | }, 1290 | "mkdirp": { 1291 | "version": "0.5.6", 1292 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", 1293 | "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", 1294 | "requires": { 1295 | "minimist": "^1.2.6" 1296 | } 1297 | }, 1298 | "omggif": { 1299 | "version": "1.0.10", 1300 | "resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz", 1301 | "integrity": "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==" 1302 | }, 1303 | "pako": { 1304 | "version": "1.0.11", 1305 | "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", 1306 | "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" 1307 | }, 1308 | "parse-bmfont-ascii": { 1309 | "version": "1.0.6", 1310 | "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz", 1311 | "integrity": "sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA==" 1312 | }, 1313 | "parse-bmfont-binary": { 1314 | "version": "1.0.6", 1315 | "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz", 1316 | "integrity": "sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA==" 1317 | }, 1318 | "parse-bmfont-xml": { 1319 | "version": "1.1.4", 1320 | "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz", 1321 | "integrity": "sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==", 1322 | "requires": { 1323 | "xml-parse-from-string": "^1.0.0", 1324 | "xml2js": "^0.4.5" 1325 | } 1326 | }, 1327 | "parse-headers": { 1328 | "version": "2.0.5", 1329 | "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", 1330 | "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==" 1331 | }, 1332 | "phin": { 1333 | "version": "2.9.3", 1334 | "resolved": "https://registry.npmjs.org/phin/-/phin-2.9.3.tgz", 1335 | "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==" 1336 | }, 1337 | "pixelmatch": { 1338 | "version": "4.0.2", 1339 | "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz", 1340 | "integrity": "sha512-J8B6xqiO37sU/gkcMglv6h5Jbd9xNER7aHzpfRdNmV4IbQBzBpe4l9XmbG+xPF/znacgu2jfEw+wHffaq/YkXA==", 1341 | "requires": { 1342 | "pngjs": "^3.0.0" 1343 | } 1344 | }, 1345 | "pngjs": { 1346 | "version": "3.4.0", 1347 | "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", 1348 | "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==" 1349 | }, 1350 | "process": { 1351 | "version": "0.11.10", 1352 | "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", 1353 | "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" 1354 | }, 1355 | "regenerator-runtime": { 1356 | "version": "0.13.10", 1357 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz", 1358 | "integrity": "sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw==" 1359 | }, 1360 | "sax": { 1361 | "version": "1.2.4", 1362 | "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", 1363 | "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" 1364 | }, 1365 | "timm": { 1366 | "version": "1.7.1", 1367 | "resolved": "https://registry.npmjs.org/timm/-/timm-1.7.1.tgz", 1368 | "integrity": "sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==" 1369 | }, 1370 | "tinycolor2": { 1371 | "version": "1.4.2", 1372 | "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.2.tgz", 1373 | "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==" 1374 | }, 1375 | "utif": { 1376 | "version": "2.0.1", 1377 | "resolved": "https://registry.npmjs.org/utif/-/utif-2.0.1.tgz", 1378 | "integrity": "sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==", 1379 | "requires": { 1380 | "pako": "^1.0.5" 1381 | } 1382 | }, 1383 | "when": { 1384 | "version": "3.7.8", 1385 | "resolved": "https://registry.npmjs.org/when/-/when-3.7.8.tgz", 1386 | "integrity": "sha512-5cZ7mecD3eYcMiCH4wtRPA5iFJZ50BJYDfckI5RRpQiktMiYTcn0ccLTZOvcbBume+1304fQztxeNzNS9Gvrnw==" 1387 | }, 1388 | "xhr": { 1389 | "version": "2.6.0", 1390 | "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", 1391 | "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", 1392 | "requires": { 1393 | "global": "~4.4.0", 1394 | "is-function": "^1.0.1", 1395 | "parse-headers": "^2.0.0", 1396 | "xtend": "^4.0.0" 1397 | } 1398 | }, 1399 | "xml-parse-from-string": { 1400 | "version": "1.0.1", 1401 | "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz", 1402 | "integrity": "sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g==" 1403 | }, 1404 | "xml2js": { 1405 | "version": "0.4.23", 1406 | "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", 1407 | "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", 1408 | "requires": { 1409 | "sax": ">=0.6.0", 1410 | "xmlbuilder": "~11.0.0" 1411 | } 1412 | }, 1413 | "xmlbuilder": { 1414 | "version": "11.0.1", 1415 | "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", 1416 | "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" 1417 | }, 1418 | "xtend": { 1419 | "version": "4.0.2", 1420 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 1421 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" 1422 | } 1423 | } 1424 | } 1425 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "bad_apple_youtube_page", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "ffmpeg": "^0.0.4", 13 | "jimp": "^0.16.2", 14 | "lodash": "^4.17.21" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /play.js: -------------------------------------------------------------------------------- 1 | const VID_X = 4; 2 | const VID_Y = 3; 3 | 4 | const VID_DIM = VID_X * VID_Y; 5 | 6 | const FRAMERATE = 35; 7 | const FRAME_INTERVAL = ((1 / FRAMERATE) * 1000); 8 | 9 | const FRAME_COUNT = 6955; 10 | 11 | let frame = 0; 12 | 13 | const imgs = document.querySelectorAll(".yt-img-shadow"); 14 | 15 | const FILE_PATH = "file://" + "C:/git/Bad_Apple_Youtube_Page"; 16 | 17 | setInterval(play_video, FRAME_INTERVAL); 18 | 19 | function update_frame() 20 | { 21 | for(let i = 0; i < VID_X; ++i) 22 | { 23 | for(let j = 0; j < VID_Y; ++j) 24 | { 25 | const channel_path = FILE_PATH + "/frame_output/frame_parts/" + (frame + 1) + "/" + j + "," + i + "channel.jpg"; 26 | const thumbnail_path = FILE_PATH + "/frame_output/frame_parts/" + (frame + 1) + "/" + j + "," + i + "thumb.jpg"; 27 | 28 | const index = (j * VID_X) + i + 0; 29 | imgs[(index * 2) + 1].src = thumbnail_path; 30 | imgs[(index * 2) + 2].src = channel_path; 31 | } 32 | } 33 | } 34 | 35 | function play_video() 36 | { 37 | update_frame(); 38 | ++frame; 39 | if(frame == FRAME_COUNT) 40 | { 41 | frame = 0; 42 | } 43 | } -------------------------------------------------------------------------------- /video_input/input.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoshnaksPNG/Bad_Apple_Youtube_Page/5d23573970b85cce2b83be018fa6201ea6c68063/video_input/input.mp4 -------------------------------------------------------------------------------- /video_input/video_input: -------------------------------------------------------------------------------- 1 | Folder where you place the video you want to play --------------------------------------------------------------------------------