shiveshnavin commited on
Commit
040aee9
·
1 Parent(s): 53c0795

Added job management

Browse files
Files changed (6) hide show
  1. package-lock.json +304 -339
  2. package.json +11 -11
  3. proxy-renderer.js +49 -10
  4. renderer.js +20 -8
  5. routes.js +147 -15
  6. ssr.js +14 -2
package-lock.json CHANGED
@@ -11,16 +11,16 @@
11
  "license": "UNLICENSED",
12
  "dependencies": {
13
  "@ffmpeg-installer/ffmpeg": "^1.1.0",
14
- "@remotion/bundler": "4.0.347",
15
- "@remotion/cli": "4.0.347",
16
- "@remotion/eslint-config": "4.0.347",
17
- "@remotion/google-fonts": "4.0.347",
18
- "@remotion/lottie": "4.0.347",
19
- "@remotion/noise": "4.0.347",
20
- "@remotion/preload": "4.0.347",
21
- "@remotion/tailwind": "4.0.347",
22
- "@remotion/transitions": "4.0.347",
23
- "@remotion/zod-types": "4.0.347",
24
  "@types/react": "^18.0.26",
25
  "@types/web": "^0.0.86",
26
  "archiver": "^7.0.1",
@@ -47,7 +47,7 @@
47
  "react-dom": "^18.0.0",
48
  "react-qrcode-logo": "^3.0.0",
49
  "reactflow": "^11.9.4",
50
- "remotion": "4.0.347",
51
  "remotion-animated": "^2.0.0",
52
  "remotion-transition-series": "^0.0.10",
53
  "sharp": "^0.33.5",
@@ -5066,17 +5066,17 @@
5066
  }
5067
  },
5068
  "node_modules/@remotion/bundler": {
5069
- "version": "4.0.347",
5070
- "resolved": "https://registry.npmjs.org/@remotion/bundler/-/bundler-4.0.347.tgz",
5071
- "integrity": "sha512-lfTCwmk7w++K7WQzNmIXV4V7i+aRjjQ81Uh+W3QEOKWy9H7yu1Iy58XU4BYk8O5O7ru/ISWxEsTTlNH5EECLKA==",
5072
  "dependencies": {
5073
- "@remotion/media-parser": "4.0.347",
5074
- "@remotion/studio": "4.0.347",
5075
- "@remotion/studio-shared": "4.0.347",
5076
  "css-loader": "5.2.7",
5077
  "esbuild": "0.25.0",
5078
  "react-refresh": "0.9.0",
5079
- "remotion": "4.0.347",
5080
  "source-map": "0.7.3",
5081
  "style-loader": "4.0.0",
5082
  "webpack": "5.96.1"
@@ -5095,21 +5095,21 @@
5095
  }
5096
  },
5097
  "node_modules/@remotion/cli": {
5098
- "version": "4.0.347",
5099
- "resolved": "https://registry.npmjs.org/@remotion/cli/-/cli-4.0.347.tgz",
5100
- "integrity": "sha512-wnEkdCx/ENBb0e+ZL1vXohwl/GT2RT6q92vtZUYHbI9j1r7t9Xw0hTglFCyza39mA3j30LTmLYpisAPPS/eRjQ==",
5101
- "dependencies": {
5102
- "@remotion/bundler": "4.0.347",
5103
- "@remotion/media-utils": "4.0.347",
5104
- "@remotion/player": "4.0.347",
5105
- "@remotion/renderer": "4.0.347",
5106
- "@remotion/studio": "4.0.347",
5107
- "@remotion/studio-server": "4.0.347",
5108
- "@remotion/studio-shared": "4.0.347",
5109
  "dotenv": "9.0.2",
5110
  "minimist": "1.2.6",
5111
  "prompts": "2.4.2",
5112
- "remotion": "4.0.347"
5113
  },
5114
  "bin": {
5115
  "remotion": "remotion-cli.js",
@@ -5122,9 +5122,9 @@
5122
  }
5123
  },
5124
  "node_modules/@remotion/compositor-darwin-arm64": {
5125
- "version": "4.0.347",
5126
- "resolved": "https://registry.npmjs.org/@remotion/compositor-darwin-arm64/-/compositor-darwin-arm64-4.0.347.tgz",
5127
- "integrity": "sha512-ScZxgLS+uDaDibqNW6nvkqx9lVgAhZRdC/2dPyLj1K0Jq9KYkvZFRs8IkkNcbKKAWE4JSmKOoR8DP3AhSF5Acg==",
5128
  "cpu": [
5129
  "arm64"
5130
  ],
@@ -5134,9 +5134,9 @@
5134
  ]
5135
  },
5136
  "node_modules/@remotion/compositor-darwin-x64": {
5137
- "version": "4.0.347",
5138
- "resolved": "https://registry.npmjs.org/@remotion/compositor-darwin-x64/-/compositor-darwin-x64-4.0.347.tgz",
5139
- "integrity": "sha512-CVBpt/9iC2oYhpZCs834r7HsvGf8XelG+5tCqNCAoFkEbKpSdUXgy/gDtwO5lXNAaCnqE1S/VJ1lSrSpAWnevg==",
5140
  "cpu": [
5141
  "x64"
5142
  ],
@@ -5146,9 +5146,9 @@
5146
  ]
5147
  },
5148
  "node_modules/@remotion/compositor-linux-arm64-gnu": {
5149
- "version": "4.0.347",
5150
- "resolved": "https://registry.npmjs.org/@remotion/compositor-linux-arm64-gnu/-/compositor-linux-arm64-gnu-4.0.347.tgz",
5151
- "integrity": "sha512-hgp1HrCGcb23QWs2Qffi2ZemzyhL0WZVLExpatSzZ+hQ1fwbOxZkKLXZ/5Cn8FMUmX26Nx+rF1q3muqhXbF0nA==",
5152
  "cpu": [
5153
  "arm64"
5154
  ],
@@ -5158,9 +5158,9 @@
5158
  ]
5159
  },
5160
  "node_modules/@remotion/compositor-linux-arm64-musl": {
5161
- "version": "4.0.347",
5162
- "resolved": "https://registry.npmjs.org/@remotion/compositor-linux-arm64-musl/-/compositor-linux-arm64-musl-4.0.347.tgz",
5163
- "integrity": "sha512-kyYkds+qtm47Gxagy7OKTbSW6QpDMo/QxbA02ULmUccfXYFE1skNMNWX83UHzeqckQgv7dbET2YhN71Y9dgaMg==",
5164
  "cpu": [
5165
  "arm64"
5166
  ],
@@ -5170,9 +5170,9 @@
5170
  ]
5171
  },
5172
  "node_modules/@remotion/compositor-linux-x64-gnu": {
5173
- "version": "4.0.347",
5174
- "resolved": "https://registry.npmjs.org/@remotion/compositor-linux-x64-gnu/-/compositor-linux-x64-gnu-4.0.347.tgz",
5175
- "integrity": "sha512-SSyX7anLb/xYwaGyXIbawzctSuDccNdRM/DvBXP7Bph/xmdb7jeszWTk2snO9XEL+YkBSSnlcU07mb/ZNG7Riw==",
5176
  "cpu": [
5177
  "x64"
5178
  ],
@@ -5182,9 +5182,9 @@
5182
  ]
5183
  },
5184
  "node_modules/@remotion/compositor-linux-x64-musl": {
5185
- "version": "4.0.347",
5186
- "resolved": "https://registry.npmjs.org/@remotion/compositor-linux-x64-musl/-/compositor-linux-x64-musl-4.0.347.tgz",
5187
- "integrity": "sha512-SMuPsw25rbHR8fbPClbv44nY2vJK2uXHztEbmqm/9Se1uD/AKDNEOZd+79b7Ch2MKmSGa9oJsph9YFwITWwwnw==",
5188
  "cpu": [
5189
  "x64"
5190
  ],
@@ -5194,9 +5194,9 @@
5194
  ]
5195
  },
5196
  "node_modules/@remotion/compositor-win32-x64-msvc": {
5197
- "version": "4.0.347",
5198
- "resolved": "https://registry.npmjs.org/@remotion/compositor-win32-x64-msvc/-/compositor-win32-x64-msvc-4.0.347.tgz",
5199
- "integrity": "sha512-ikgw4Q2USobWzEZTp59MD7SkHiQ2ox+qr+VLuAf+QdRHS5a+UMa+i/2Vao1YOLO3S6za4Xkg2Pazs/Mi0Ah0Gw==",
5200
  "cpu": [
5201
  "x64"
5202
  ],
@@ -5206,33 +5206,32 @@
5206
  ]
5207
  },
5208
  "node_modules/@remotion/eslint-config": {
5209
- "version": "4.0.347",
5210
- "resolved": "https://registry.npmjs.org/@remotion/eslint-config/-/eslint-config-4.0.347.tgz",
5211
- "integrity": "sha512-zJfUyoGrVF6H71fxEc2u3jF8mP/ALi/5KLWmnc72T6L5Oy/Bd+U47v0yjb3KeE23jlS2eY0kyrjOpePIv4dhIg==",
5212
  "peerDependencies": {
5213
  "eslint": ">=7.15.0"
5214
  }
5215
  },
5216
  "node_modules/@remotion/google-fonts": {
5217
- "version": "4.0.347",
5218
- "resolved": "https://registry.npmjs.org/@remotion/google-fonts/-/google-fonts-4.0.347.tgz",
5219
- "integrity": "sha512-esTEoWvgrpYg2IEUAaAyBecfCrka8dLcXuSdmPe/YAtJcsevyWlCiPgdIvXtAF5oHwJtmmrDvt8lRRqmS3Jfeg==",
5220
  "dependencies": {
5221
- "remotion": "4.0.347"
5222
  }
5223
  },
5224
  "node_modules/@remotion/licensing": {
5225
- "version": "4.0.347",
5226
- "resolved": "https://registry.npmjs.org/@remotion/licensing/-/licensing-4.0.347.tgz",
5227
- "integrity": "sha512-3vPJQopzErHOgUmpC2MFHwrpgr1PkTXvGUHxMAGH1i2zYbexpP1Vr4VO3tt+CZp3YmPePd4Wu+hZZEHwxnn9tw==",
5228
- "license": "MIT"
5229
  },
5230
  "node_modules/@remotion/lottie": {
5231
- "version": "4.0.347",
5232
- "resolved": "https://registry.npmjs.org/@remotion/lottie/-/lottie-4.0.347.tgz",
5233
- "integrity": "sha512-sMYuq9qxBeBM7Ag//WjzK375zmIe6lMp3jjokJPeEDSjYAtm+Az0GsqtliqX+bvY4k0LlOUIdkFoDgIwPGluWA==",
5234
  "dependencies": {
5235
- "remotion": "4.0.347"
5236
  },
5237
  "peerDependencies": {
5238
  "lottie-web": "^5",
@@ -5241,18 +5240,16 @@
5241
  }
5242
  },
5243
  "node_modules/@remotion/media-parser": {
5244
- "version": "4.0.347",
5245
- "resolved": "https://registry.npmjs.org/@remotion/media-parser/-/media-parser-4.0.347.tgz",
5246
- "integrity": "sha512-g9DT6e4qSyTfekFpNkYoRqSecPYbsSnaeyZE7eVQiKEv0OU+sDF1zMM4ADDP8Mg6lQFe1cJSWEFUKoq6aiHQ2A==",
5247
- "license": "Remotion License https://remotion.dev/license"
5248
  },
5249
  "node_modules/@remotion/media-utils": {
5250
- "version": "4.0.347",
5251
- "resolved": "https://registry.npmjs.org/@remotion/media-utils/-/media-utils-4.0.347.tgz",
5252
- "integrity": "sha512-loY48T3lQ0kUoQCSURDUy3PNg+CHCTtAYa59NNNUZhRK0Hk+MPMVMMKl/5s3xYiJt+Y7TRXIbPC21vuwu7q7iw==",
5253
- "license": "MIT",
5254
  "dependencies": {
5255
- "remotion": "4.0.347"
5256
  },
5257
  "peerDependencies": {
5258
  "react": ">=16.8.0",
@@ -5260,27 +5257,25 @@
5260
  }
5261
  },
5262
  "node_modules/@remotion/noise": {
5263
- "version": "4.0.347",
5264
- "resolved": "https://registry.npmjs.org/@remotion/noise/-/noise-4.0.347.tgz",
5265
- "integrity": "sha512-RwVjl3jwNLGuNLaVJm4K/Cw+JZV+UC65F5XteHzguiO6Ix9B5xDvzkbRrQVHZqZX2TUaWqF4pCtJiChC5SXOuw==",
5266
  "dependencies": {
5267
- "remotion": "4.0.347",
5268
  "simplex-noise": "4.0.1"
5269
  }
5270
  },
5271
  "node_modules/@remotion/paths": {
5272
- "version": "4.0.347",
5273
- "resolved": "https://registry.npmjs.org/@remotion/paths/-/paths-4.0.347.tgz",
5274
- "integrity": "sha512-pjP2lZz5bVhmMLmBe9i1snz37iBOms28QMzPIbG9U+y0o7jG8oZDHXqbd7OEqmSWtcNDYfxUplPjLUbTe8VOtg==",
5275
- "license": "MIT"
5276
  },
5277
  "node_modules/@remotion/player": {
5278
- "version": "4.0.347",
5279
- "resolved": "https://registry.npmjs.org/@remotion/player/-/player-4.0.347.tgz",
5280
- "integrity": "sha512-e9xd6fTtD2VSHdyMNFh00Enihp2jX6ZWnKI9focU4of1qGTxL95bPKNvrVcX10cShA7G0l0jCJL3+hAGknm8Ew==",
5281
- "license": "SEE LICENSE IN LICENSE.md",
5282
  "dependencies": {
5283
- "remotion": "4.0.347"
5284
  },
5285
  "peerDependencies": {
5286
  "react": ">=16.8.0",
@@ -5288,31 +5283,30 @@
5288
  }
5289
  },
5290
  "node_modules/@remotion/preload": {
5291
- "version": "4.0.347",
5292
- "resolved": "https://registry.npmjs.org/@remotion/preload/-/preload-4.0.347.tgz",
5293
- "integrity": "sha512-A1yr7d2dhLrL7dvjmSQKTD0/64dxKklFAugVck+9DJxQmHPZJcsLMAT0Hvnm8ZJbW2ecTejqqPBLCZt3yqS7SQ=="
5294
  },
5295
  "node_modules/@remotion/renderer": {
5296
- "version": "4.0.347",
5297
- "resolved": "https://registry.npmjs.org/@remotion/renderer/-/renderer-4.0.347.tgz",
5298
- "integrity": "sha512-Wu/vnn4soPLozpJQFIQorvKk9M4Y5eLHyjN42ZfZnmTzM+t3+Dbydf1ivN5i1Bf0APXSVw8IZFdv3TqEP94WYQ==",
5299
- "license": "SEE LICENSE IN LICENSE.md",
5300
  "dependencies": {
5301
- "@remotion/streaming": "4.0.347",
5302
  "execa": "5.1.1",
5303
  "extract-zip": "2.0.1",
5304
- "remotion": "4.0.347",
5305
  "source-map": "^0.8.0-beta.0",
5306
  "ws": "8.17.1"
5307
  },
5308
  "optionalDependencies": {
5309
- "@remotion/compositor-darwin-arm64": "4.0.347",
5310
- "@remotion/compositor-darwin-x64": "4.0.347",
5311
- "@remotion/compositor-linux-arm64-gnu": "4.0.347",
5312
- "@remotion/compositor-linux-arm64-musl": "4.0.347",
5313
- "@remotion/compositor-linux-x64-gnu": "4.0.347",
5314
- "@remotion/compositor-linux-x64-musl": "4.0.347",
5315
- "@remotion/compositor-win32-x64-msvc": "4.0.347"
5316
  },
5317
  "peerDependencies": {
5318
  "react": ">=16.8.0",
@@ -5324,7 +5318,6 @@
5324
  "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz",
5325
  "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==",
5326
  "deprecated": "The work that was done in this beta branch won't be included in future versions",
5327
- "license": "BSD-3-Clause",
5328
  "dependencies": {
5329
  "whatwg-url": "^7.0.0"
5330
  },
@@ -5333,12 +5326,11 @@
5333
  }
5334
  },
5335
  "node_modules/@remotion/shapes": {
5336
- "version": "4.0.347",
5337
- "resolved": "https://registry.npmjs.org/@remotion/shapes/-/shapes-4.0.347.tgz",
5338
- "integrity": "sha512-mUnHcLf0IIgbwSNAnrWlPlPnUY/uCpDqZ/yIvFyJzZF+e9qwoe9uCh2QVQg7Uvx5qb5vUU6y2T+dIHQPcv7AnA==",
5339
- "license": "MIT",
5340
  "dependencies": {
5341
- "@remotion/paths": "4.0.347"
5342
  },
5343
  "peerDependencies": {
5344
  "react": ">=16.8.0",
@@ -5346,28 +5338,26 @@
5346
  }
5347
  },
5348
  "node_modules/@remotion/streaming": {
5349
- "version": "4.0.347",
5350
- "resolved": "https://registry.npmjs.org/@remotion/streaming/-/streaming-4.0.347.tgz",
5351
- "integrity": "sha512-z5SH44CJcnphHyZh/vq7aOnANIXRd6S0w8+eZKOJ3sHGJUzKqX88uN8iMrMVcaxbzYylDsl+Tf/g0fX/7Dh+fQ==",
5352
- "license": "MIT"
5353
  },
5354
  "node_modules/@remotion/studio": {
5355
- "version": "4.0.347",
5356
- "resolved": "https://registry.npmjs.org/@remotion/studio/-/studio-4.0.347.tgz",
5357
- "integrity": "sha512-cTCW9loup87CFZh4AjSleROUson+j+sQhbg01Y/JYRU+f35J2yibh/W3o84qh9QK3T1ppEyfPtD+dpJzVP+zLw==",
5358
- "license": "MIT",
5359
- "dependencies": {
5360
- "@remotion/media-parser": "4.0.347",
5361
- "@remotion/media-utils": "4.0.347",
5362
- "@remotion/player": "4.0.347",
5363
- "@remotion/renderer": "4.0.347",
5364
- "@remotion/studio-shared": "4.0.347",
5365
- "@remotion/web-renderer": "4.0.347",
5366
- "@remotion/webcodecs": "4.0.347",
5367
- "@remotion/zod-types": "4.0.347",
5368
  "memfs": "3.4.3",
5369
  "open": "^8.4.2",
5370
- "remotion": "4.0.347",
5371
  "semver": "7.5.3",
5372
  "source-map": "0.7.3",
5373
  "zod": "3.22.3"
@@ -5378,19 +5368,18 @@
5378
  }
5379
  },
5380
  "node_modules/@remotion/studio-server": {
5381
- "version": "4.0.347",
5382
- "resolved": "https://registry.npmjs.org/@remotion/studio-server/-/studio-server-4.0.347.tgz",
5383
- "integrity": "sha512-3yHO+nar47HVI5v4w4znLw0KiORQfd2mftqr0qsIFqdNbz+l2kifQqT7kik+e1snPYnSIj12gqzYeJo7jOSCDw==",
5384
- "license": "MIT",
5385
  "dependencies": {
5386
  "@babel/parser": "7.24.1",
5387
- "@remotion/bundler": "4.0.347",
5388
- "@remotion/renderer": "4.0.347",
5389
- "@remotion/studio-shared": "4.0.347",
5390
  "memfs": "3.4.3",
5391
  "open": "^8.4.2",
5392
  "recast": "0.23.11",
5393
- "remotion": "4.0.347",
5394
  "semver": "7.5.3",
5395
  "source-map": "0.7.3"
5396
  }
@@ -5399,33 +5388,30 @@
5399
  "version": "0.7.3",
5400
  "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
5401
  "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
5402
- "license": "BSD-3-Clause",
5403
  "engines": {
5404
  "node": ">= 8"
5405
  }
5406
  },
5407
  "node_modules/@remotion/studio-shared": {
5408
- "version": "4.0.347",
5409
- "resolved": "https://registry.npmjs.org/@remotion/studio-shared/-/studio-shared-4.0.347.tgz",
5410
- "integrity": "sha512-dHihol8Qsfumq+VIC/1i5K1t9Su+ehdY4uaoEuqtdWBYozf4apwjO35QdZcMowkowjc9ueg8ZE5LoZO4c4wSNw==",
5411
- "license": "MIT",
5412
  "dependencies": {
5413
- "remotion": "4.0.347"
5414
  }
5415
  },
5416
  "node_modules/@remotion/studio/node_modules/source-map": {
5417
  "version": "0.7.3",
5418
  "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
5419
  "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
5420
- "license": "BSD-3-Clause",
5421
  "engines": {
5422
  "node": ">= 8"
5423
  }
5424
  },
5425
  "node_modules/@remotion/tailwind": {
5426
- "version": "4.0.347",
5427
- "resolved": "https://registry.npmjs.org/@remotion/tailwind/-/tailwind-4.0.347.tgz",
5428
- "integrity": "sha512-OFMmx97x2zqMqCVeDftrExqHcXrFhSq5mhsG+24/ph7BsnDb8LqSdJqG8/jfmE7kVkkvXVK/xDEvmzbz3S1Wnw==",
5429
  "dependencies": {
5430
  "autoprefixer": "10.4.20",
5431
  "css-loader": "5.2.7",
@@ -5436,17 +5422,17 @@
5436
  "tailwindcss": "3.4.13"
5437
  },
5438
  "peerDependencies": {
5439
- "@remotion/bundler": "4.0.347"
5440
  }
5441
  },
5442
  "node_modules/@remotion/transitions": {
5443
- "version": "4.0.347",
5444
- "resolved": "https://registry.npmjs.org/@remotion/transitions/-/transitions-4.0.347.tgz",
5445
- "integrity": "sha512-e67YmtHyShdjd3mOXzSn6rbuMqH//0a/JgtBUthbmpurx3xlWU8YSsu6+ttN+iXUbLiRWwEs9Aor0y5yOGfGFA==",
5446
  "dependencies": {
5447
- "@remotion/paths": "4.0.347",
5448
- "@remotion/shapes": "4.0.347",
5449
- "remotion": "4.0.347"
5450
  },
5451
  "peerDependencies": {
5452
  "react": ">=16.8.0",
@@ -5454,12 +5440,11 @@
5454
  }
5455
  },
5456
  "node_modules/@remotion/web-renderer": {
5457
- "version": "4.0.347",
5458
- "resolved": "https://registry.npmjs.org/@remotion/web-renderer/-/web-renderer-4.0.347.tgz",
5459
- "integrity": "sha512-JcrSbuM7Xf5GSCWbxaBIA1gZ+I33nS0q74mQNGHYWBcf72Y/fBY6PfcaK4+VWE46nhbZmXNYzUNpwT3oMlQmqQ==",
5460
- "license": "UNLICENSED",
5461
  "dependencies": {
5462
- "remotion": "4.0.347"
5463
  },
5464
  "peerDependencies": {
5465
  "react": ">=18.0.0",
@@ -5467,21 +5452,20 @@
5467
  }
5468
  },
5469
  "node_modules/@remotion/webcodecs": {
5470
- "version": "4.0.347",
5471
- "resolved": "https://registry.npmjs.org/@remotion/webcodecs/-/webcodecs-4.0.347.tgz",
5472
- "integrity": "sha512-VOPNJ8Ckmnx/xrxojU47DWlaL+5QRYBanOxjxGkgWUx9cH7SHgTlkv7Z0fNva5M8s6VO97BxLr2p0K7570p3FQ==",
5473
- "license": "Remotion License (See https://remotion.dev/docs/webcodecs#license)",
5474
  "dependencies": {
5475
- "@remotion/licensing": "4.0.347",
5476
- "@remotion/media-parser": "4.0.347"
5477
  }
5478
  },
5479
  "node_modules/@remotion/zod-types": {
5480
- "version": "4.0.347",
5481
- "resolved": "https://registry.npmjs.org/@remotion/zod-types/-/zod-types-4.0.347.tgz",
5482
- "integrity": "sha512-JfnKBGYXGQVPHxQspc6IXPqtXP7/NeB9JZuIzm4Vf8abzy69xNjRAkw780I6Inrwfx/Uohgx/3Sk6ELKd3j2IA==",
5483
  "dependencies": {
5484
- "remotion": "4.0.347"
5485
  },
5486
  "peerDependencies": {
5487
  "zod": "3.22.3"
@@ -8082,7 +8066,6 @@
8082
  "version": "2.0.0",
8083
  "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
8084
  "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==",
8085
- "license": "MIT",
8086
  "engines": {
8087
  "node": ">=8"
8088
  }
@@ -8900,7 +8883,6 @@
8900
  "version": "5.1.1",
8901
  "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
8902
  "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
8903
- "license": "MIT",
8904
  "dependencies": {
8905
  "cross-spawn": "^7.0.3",
8906
  "get-stream": "^6.0.0",
@@ -9669,8 +9651,7 @@
9669
  "node_modules/fs-monkey": {
9670
  "version": "1.0.3",
9671
  "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz",
9672
- "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==",
9673
- "license": "Unlicense"
9674
  },
9675
  "node_modules/fs-readdir-recursive": {
9676
  "version": "1.1.0",
@@ -9942,7 +9923,6 @@
9942
  "version": "6.0.1",
9943
  "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
9944
  "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
9945
- "license": "MIT",
9946
  "engines": {
9947
  "node": ">=10"
9948
  },
@@ -10450,7 +10430,6 @@
10450
  "version": "2.1.0",
10451
  "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
10452
  "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
10453
- "license": "Apache-2.0",
10454
  "engines": {
10455
  "node": ">=10.17.0"
10456
  }
@@ -10719,7 +10698,6 @@
10719
  "version": "2.2.1",
10720
  "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
10721
  "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
10722
- "license": "MIT",
10723
  "bin": {
10724
  "is-docker": "cli.js"
10725
  },
@@ -10922,7 +10900,6 @@
10922
  "version": "2.2.0",
10923
  "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
10924
  "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
10925
- "license": "MIT",
10926
  "dependencies": {
10927
  "is-docker": "^2.0.0"
10928
  },
@@ -11511,8 +11488,7 @@
11511
  "node_modules/lodash.sortby": {
11512
  "version": "4.7.0",
11513
  "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
11514
- "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==",
11515
- "license": "MIT"
11516
  },
11517
  "node_modules/long": {
11518
  "version": "4.0.0",
@@ -11708,7 +11684,6 @@
11708
  "version": "3.4.3",
11709
  "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.3.tgz",
11710
  "integrity": "sha512-eivjfi7Ahr6eQTn44nvTnR60e4a1Fs1Via2kCR5lHo/kyNoiMWaXCNJ/GpSd0ilXas2JSOl9B5FTIhflXu0hlg==",
11711
- "license": "Unlicense",
11712
  "dependencies": {
11713
  "fs-monkey": "1.0.3"
11714
  },
@@ -13571,7 +13546,6 @@
13571
  "version": "4.0.1",
13572
  "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
13573
  "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
13574
- "license": "MIT",
13575
  "dependencies": {
13576
  "path-key": "^3.0.0"
13577
  },
@@ -16423,7 +16397,6 @@
16423
  "version": "8.4.2",
16424
  "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz",
16425
  "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==",
16426
- "license": "MIT",
16427
  "dependencies": {
16428
  "define-lazy-prop": "^2.0.0",
16429
  "is-docker": "^2.1.1",
@@ -18204,7 +18177,6 @@
18204
  "version": "0.23.11",
18205
  "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.11.tgz",
18206
  "integrity": "sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==",
18207
- "license": "MIT",
18208
  "dependencies": {
18209
  "ast-types": "^0.16.1",
18210
  "esprima": "~4.0.0",
@@ -18220,7 +18192,6 @@
18220
  "version": "0.16.1",
18221
  "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz",
18222
  "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==",
18223
- "license": "MIT",
18224
  "dependencies": {
18225
  "tslib": "^2.0.1"
18226
  },
@@ -18231,8 +18202,7 @@
18231
  "node_modules/recast/node_modules/tslib": {
18232
  "version": "2.8.1",
18233
  "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
18234
- "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
18235
- "license": "0BSD"
18236
  },
18237
  "node_modules/regenerate": {
18238
  "version": "1.4.2",
@@ -18315,9 +18285,9 @@
18315
  }
18316
  },
18317
  "node_modules/remotion": {
18318
- "version": "4.0.347",
18319
- "resolved": "https://registry.npmjs.org/remotion/-/remotion-4.0.347.tgz",
18320
- "integrity": "sha512-Dw2o3UnhH6b0qFFSx7doK9VChpIUSZ8ZA7Ui62po7Yl9naeV8zfsTkUHfmAJwl2UweeCbhN+6SZPa7QROiAYjg==",
18321
  "peerDependencies": {
18322
  "react": ">=16.8.0",
18323
  "react-dom": ">=16.8.0"
@@ -19117,7 +19087,6 @@
19117
  "version": "2.0.0",
19118
  "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
19119
  "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
19120
- "license": "MIT",
19121
  "engines": {
19122
  "node": ">=6"
19123
  }
@@ -19600,8 +19569,7 @@
19600
  "node_modules/tiny-invariant": {
19601
  "version": "1.3.3",
19602
  "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz",
19603
- "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==",
19604
- "license": "MIT"
19605
  },
19606
  "node_modules/tmp": {
19607
  "version": "0.2.1",
@@ -19658,7 +19626,6 @@
19658
  "version": "1.0.1",
19659
  "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
19660
  "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==",
19661
- "license": "MIT",
19662
  "dependencies": {
19663
  "punycode": "^2.1.0"
19664
  }
@@ -20180,8 +20147,7 @@
20180
  "node_modules/webidl-conversions": {
20181
  "version": "4.0.2",
20182
  "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
20183
- "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
20184
- "license": "BSD-2-Clause"
20185
  },
20186
  "node_modules/webpack": {
20187
  "version": "5.96.1",
@@ -20261,7 +20227,6 @@
20261
  "version": "7.1.0",
20262
  "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz",
20263
  "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==",
20264
- "license": "MIT",
20265
  "dependencies": {
20266
  "lodash.sortby": "^4.7.0",
20267
  "tr46": "^1.0.1",
@@ -23756,17 +23721,17 @@
23756
  }
23757
  },
23758
  "@remotion/bundler": {
23759
- "version": "4.0.347",
23760
- "resolved": "https://registry.npmjs.org/@remotion/bundler/-/bundler-4.0.347.tgz",
23761
- "integrity": "sha512-lfTCwmk7w++K7WQzNmIXV4V7i+aRjjQ81Uh+W3QEOKWy9H7yu1Iy58XU4BYk8O5O7ru/ISWxEsTTlNH5EECLKA==",
23762
  "requires": {
23763
- "@remotion/media-parser": "4.0.347",
23764
- "@remotion/studio": "4.0.347",
23765
- "@remotion/studio-shared": "4.0.347",
23766
  "css-loader": "5.2.7",
23767
  "esbuild": "0.25.0",
23768
  "react-refresh": "0.9.0",
23769
- "remotion": "4.0.347",
23770
  "source-map": "0.7.3",
23771
  "style-loader": "4.0.0",
23772
  "webpack": "5.96.1"
@@ -23780,148 +23745,148 @@
23780
  }
23781
  },
23782
  "@remotion/cli": {
23783
- "version": "4.0.347",
23784
- "resolved": "https://registry.npmjs.org/@remotion/cli/-/cli-4.0.347.tgz",
23785
- "integrity": "sha512-wnEkdCx/ENBb0e+ZL1vXohwl/GT2RT6q92vtZUYHbI9j1r7t9Xw0hTglFCyza39mA3j30LTmLYpisAPPS/eRjQ==",
23786
- "requires": {
23787
- "@remotion/bundler": "4.0.347",
23788
- "@remotion/media-utils": "4.0.347",
23789
- "@remotion/player": "4.0.347",
23790
- "@remotion/renderer": "4.0.347",
23791
- "@remotion/studio": "4.0.347",
23792
- "@remotion/studio-server": "4.0.347",
23793
- "@remotion/studio-shared": "4.0.347",
23794
  "dotenv": "9.0.2",
23795
  "minimist": "1.2.6",
23796
  "prompts": "2.4.2",
23797
- "remotion": "4.0.347"
23798
  }
23799
  },
23800
  "@remotion/compositor-darwin-arm64": {
23801
- "version": "4.0.347",
23802
- "resolved": "https://registry.npmjs.org/@remotion/compositor-darwin-arm64/-/compositor-darwin-arm64-4.0.347.tgz",
23803
- "integrity": "sha512-ScZxgLS+uDaDibqNW6nvkqx9lVgAhZRdC/2dPyLj1K0Jq9KYkvZFRs8IkkNcbKKAWE4JSmKOoR8DP3AhSF5Acg==",
23804
  "optional": true
23805
  },
23806
  "@remotion/compositor-darwin-x64": {
23807
- "version": "4.0.347",
23808
- "resolved": "https://registry.npmjs.org/@remotion/compositor-darwin-x64/-/compositor-darwin-x64-4.0.347.tgz",
23809
- "integrity": "sha512-CVBpt/9iC2oYhpZCs834r7HsvGf8XelG+5tCqNCAoFkEbKpSdUXgy/gDtwO5lXNAaCnqE1S/VJ1lSrSpAWnevg==",
23810
  "optional": true
23811
  },
23812
  "@remotion/compositor-linux-arm64-gnu": {
23813
- "version": "4.0.347",
23814
- "resolved": "https://registry.npmjs.org/@remotion/compositor-linux-arm64-gnu/-/compositor-linux-arm64-gnu-4.0.347.tgz",
23815
- "integrity": "sha512-hgp1HrCGcb23QWs2Qffi2ZemzyhL0WZVLExpatSzZ+hQ1fwbOxZkKLXZ/5Cn8FMUmX26Nx+rF1q3muqhXbF0nA==",
23816
  "optional": true
23817
  },
23818
  "@remotion/compositor-linux-arm64-musl": {
23819
- "version": "4.0.347",
23820
- "resolved": "https://registry.npmjs.org/@remotion/compositor-linux-arm64-musl/-/compositor-linux-arm64-musl-4.0.347.tgz",
23821
- "integrity": "sha512-kyYkds+qtm47Gxagy7OKTbSW6QpDMo/QxbA02ULmUccfXYFE1skNMNWX83UHzeqckQgv7dbET2YhN71Y9dgaMg==",
23822
  "optional": true
23823
  },
23824
  "@remotion/compositor-linux-x64-gnu": {
23825
- "version": "4.0.347",
23826
- "resolved": "https://registry.npmjs.org/@remotion/compositor-linux-x64-gnu/-/compositor-linux-x64-gnu-4.0.347.tgz",
23827
- "integrity": "sha512-SSyX7anLb/xYwaGyXIbawzctSuDccNdRM/DvBXP7Bph/xmdb7jeszWTk2snO9XEL+YkBSSnlcU07mb/ZNG7Riw==",
23828
  "optional": true
23829
  },
23830
  "@remotion/compositor-linux-x64-musl": {
23831
- "version": "4.0.347",
23832
- "resolved": "https://registry.npmjs.org/@remotion/compositor-linux-x64-musl/-/compositor-linux-x64-musl-4.0.347.tgz",
23833
- "integrity": "sha512-SMuPsw25rbHR8fbPClbv44nY2vJK2uXHztEbmqm/9Se1uD/AKDNEOZd+79b7Ch2MKmSGa9oJsph9YFwITWwwnw==",
23834
  "optional": true
23835
  },
23836
  "@remotion/compositor-win32-x64-msvc": {
23837
- "version": "4.0.347",
23838
- "resolved": "https://registry.npmjs.org/@remotion/compositor-win32-x64-msvc/-/compositor-win32-x64-msvc-4.0.347.tgz",
23839
- "integrity": "sha512-ikgw4Q2USobWzEZTp59MD7SkHiQ2ox+qr+VLuAf+QdRHS5a+UMa+i/2Vao1YOLO3S6za4Xkg2Pazs/Mi0Ah0Gw==",
23840
  "optional": true
23841
  },
23842
  "@remotion/eslint-config": {
23843
- "version": "4.0.347",
23844
- "resolved": "https://registry.npmjs.org/@remotion/eslint-config/-/eslint-config-4.0.347.tgz",
23845
- "integrity": "sha512-zJfUyoGrVF6H71fxEc2u3jF8mP/ALi/5KLWmnc72T6L5Oy/Bd+U47v0yjb3KeE23jlS2eY0kyrjOpePIv4dhIg==",
23846
  "requires": {}
23847
  },
23848
  "@remotion/google-fonts": {
23849
- "version": "4.0.347",
23850
- "resolved": "https://registry.npmjs.org/@remotion/google-fonts/-/google-fonts-4.0.347.tgz",
23851
- "integrity": "sha512-esTEoWvgrpYg2IEUAaAyBecfCrka8dLcXuSdmPe/YAtJcsevyWlCiPgdIvXtAF5oHwJtmmrDvt8lRRqmS3Jfeg==",
23852
  "requires": {
23853
- "remotion": "4.0.347"
23854
  }
23855
  },
23856
  "@remotion/licensing": {
23857
- "version": "4.0.347",
23858
- "resolved": "https://registry.npmjs.org/@remotion/licensing/-/licensing-4.0.347.tgz",
23859
- "integrity": "sha512-3vPJQopzErHOgUmpC2MFHwrpgr1PkTXvGUHxMAGH1i2zYbexpP1Vr4VO3tt+CZp3YmPePd4Wu+hZZEHwxnn9tw=="
23860
  },
23861
  "@remotion/lottie": {
23862
- "version": "4.0.347",
23863
- "resolved": "https://registry.npmjs.org/@remotion/lottie/-/lottie-4.0.347.tgz",
23864
- "integrity": "sha512-sMYuq9qxBeBM7Ag//WjzK375zmIe6lMp3jjokJPeEDSjYAtm+Az0GsqtliqX+bvY4k0LlOUIdkFoDgIwPGluWA==",
23865
  "requires": {
23866
- "remotion": "4.0.347"
23867
  }
23868
  },
23869
  "@remotion/media-parser": {
23870
- "version": "4.0.347",
23871
- "resolved": "https://registry.npmjs.org/@remotion/media-parser/-/media-parser-4.0.347.tgz",
23872
- "integrity": "sha512-g9DT6e4qSyTfekFpNkYoRqSecPYbsSnaeyZE7eVQiKEv0OU+sDF1zMM4ADDP8Mg6lQFe1cJSWEFUKoq6aiHQ2A=="
23873
  },
23874
  "@remotion/media-utils": {
23875
- "version": "4.0.347",
23876
- "resolved": "https://registry.npmjs.org/@remotion/media-utils/-/media-utils-4.0.347.tgz",
23877
- "integrity": "sha512-loY48T3lQ0kUoQCSURDUy3PNg+CHCTtAYa59NNNUZhRK0Hk+MPMVMMKl/5s3xYiJt+Y7TRXIbPC21vuwu7q7iw==",
23878
  "requires": {
23879
- "remotion": "4.0.347"
23880
  }
23881
  },
23882
  "@remotion/noise": {
23883
- "version": "4.0.347",
23884
- "resolved": "https://registry.npmjs.org/@remotion/noise/-/noise-4.0.347.tgz",
23885
- "integrity": "sha512-RwVjl3jwNLGuNLaVJm4K/Cw+JZV+UC65F5XteHzguiO6Ix9B5xDvzkbRrQVHZqZX2TUaWqF4pCtJiChC5SXOuw==",
23886
  "requires": {
23887
- "remotion": "4.0.347",
23888
  "simplex-noise": "4.0.1"
23889
  }
23890
  },
23891
  "@remotion/paths": {
23892
- "version": "4.0.347",
23893
- "resolved": "https://registry.npmjs.org/@remotion/paths/-/paths-4.0.347.tgz",
23894
- "integrity": "sha512-pjP2lZz5bVhmMLmBe9i1snz37iBOms28QMzPIbG9U+y0o7jG8oZDHXqbd7OEqmSWtcNDYfxUplPjLUbTe8VOtg=="
23895
  },
23896
  "@remotion/player": {
23897
- "version": "4.0.347",
23898
- "resolved": "https://registry.npmjs.org/@remotion/player/-/player-4.0.347.tgz",
23899
- "integrity": "sha512-e9xd6fTtD2VSHdyMNFh00Enihp2jX6ZWnKI9focU4of1qGTxL95bPKNvrVcX10cShA7G0l0jCJL3+hAGknm8Ew==",
23900
  "requires": {
23901
- "remotion": "4.0.347"
23902
  }
23903
  },
23904
  "@remotion/preload": {
23905
- "version": "4.0.347",
23906
- "resolved": "https://registry.npmjs.org/@remotion/preload/-/preload-4.0.347.tgz",
23907
- "integrity": "sha512-A1yr7d2dhLrL7dvjmSQKTD0/64dxKklFAugVck+9DJxQmHPZJcsLMAT0Hvnm8ZJbW2ecTejqqPBLCZt3yqS7SQ=="
23908
  },
23909
  "@remotion/renderer": {
23910
- "version": "4.0.347",
23911
- "resolved": "https://registry.npmjs.org/@remotion/renderer/-/renderer-4.0.347.tgz",
23912
- "integrity": "sha512-Wu/vnn4soPLozpJQFIQorvKk9M4Y5eLHyjN42ZfZnmTzM+t3+Dbydf1ivN5i1Bf0APXSVw8IZFdv3TqEP94WYQ==",
23913
- "requires": {
23914
- "@remotion/compositor-darwin-arm64": "4.0.347",
23915
- "@remotion/compositor-darwin-x64": "4.0.347",
23916
- "@remotion/compositor-linux-arm64-gnu": "4.0.347",
23917
- "@remotion/compositor-linux-arm64-musl": "4.0.347",
23918
- "@remotion/compositor-linux-x64-gnu": "4.0.347",
23919
- "@remotion/compositor-linux-x64-musl": "4.0.347",
23920
- "@remotion/compositor-win32-x64-msvc": "4.0.347",
23921
- "@remotion/streaming": "4.0.347",
23922
  "execa": "5.1.1",
23923
  "extract-zip": "2.0.1",
23924
- "remotion": "4.0.347",
23925
  "source-map": "^0.8.0-beta.0",
23926
  "ws": "8.17.1"
23927
  },
@@ -23937,34 +23902,34 @@
23937
  }
23938
  },
23939
  "@remotion/shapes": {
23940
- "version": "4.0.347",
23941
- "resolved": "https://registry.npmjs.org/@remotion/shapes/-/shapes-4.0.347.tgz",
23942
- "integrity": "sha512-mUnHcLf0IIgbwSNAnrWlPlPnUY/uCpDqZ/yIvFyJzZF+e9qwoe9uCh2QVQg7Uvx5qb5vUU6y2T+dIHQPcv7AnA==",
23943
  "requires": {
23944
- "@remotion/paths": "4.0.347"
23945
  }
23946
  },
23947
  "@remotion/streaming": {
23948
- "version": "4.0.347",
23949
- "resolved": "https://registry.npmjs.org/@remotion/streaming/-/streaming-4.0.347.tgz",
23950
- "integrity": "sha512-z5SH44CJcnphHyZh/vq7aOnANIXRd6S0w8+eZKOJ3sHGJUzKqX88uN8iMrMVcaxbzYylDsl+Tf/g0fX/7Dh+fQ=="
23951
  },
23952
  "@remotion/studio": {
23953
- "version": "4.0.347",
23954
- "resolved": "https://registry.npmjs.org/@remotion/studio/-/studio-4.0.347.tgz",
23955
- "integrity": "sha512-cTCW9loup87CFZh4AjSleROUson+j+sQhbg01Y/JYRU+f35J2yibh/W3o84qh9QK3T1ppEyfPtD+dpJzVP+zLw==",
23956
- "requires": {
23957
- "@remotion/media-parser": "4.0.347",
23958
- "@remotion/media-utils": "4.0.347",
23959
- "@remotion/player": "4.0.347",
23960
- "@remotion/renderer": "4.0.347",
23961
- "@remotion/studio-shared": "4.0.347",
23962
- "@remotion/web-renderer": "4.0.347",
23963
- "@remotion/webcodecs": "4.0.347",
23964
- "@remotion/zod-types": "4.0.347",
23965
  "memfs": "3.4.3",
23966
  "open": "^8.4.2",
23967
- "remotion": "4.0.347",
23968
  "semver": "7.5.3",
23969
  "source-map": "0.7.3",
23970
  "zod": "3.22.3"
@@ -23978,18 +23943,18 @@
23978
  }
23979
  },
23980
  "@remotion/studio-server": {
23981
- "version": "4.0.347",
23982
- "resolved": "https://registry.npmjs.org/@remotion/studio-server/-/studio-server-4.0.347.tgz",
23983
- "integrity": "sha512-3yHO+nar47HVI5v4w4znLw0KiORQfd2mftqr0qsIFqdNbz+l2kifQqT7kik+e1snPYnSIj12gqzYeJo7jOSCDw==",
23984
  "requires": {
23985
  "@babel/parser": "7.24.1",
23986
- "@remotion/bundler": "4.0.347",
23987
- "@remotion/renderer": "4.0.347",
23988
- "@remotion/studio-shared": "4.0.347",
23989
  "memfs": "3.4.3",
23990
  "open": "^8.4.2",
23991
  "recast": "0.23.11",
23992
- "remotion": "4.0.347",
23993
  "semver": "7.5.3",
23994
  "source-map": "0.7.3"
23995
  },
@@ -24002,17 +23967,17 @@
24002
  }
24003
  },
24004
  "@remotion/studio-shared": {
24005
- "version": "4.0.347",
24006
- "resolved": "https://registry.npmjs.org/@remotion/studio-shared/-/studio-shared-4.0.347.tgz",
24007
- "integrity": "sha512-dHihol8Qsfumq+VIC/1i5K1t9Su+ehdY4uaoEuqtdWBYozf4apwjO35QdZcMowkowjc9ueg8ZE5LoZO4c4wSNw==",
24008
  "requires": {
24009
- "remotion": "4.0.347"
24010
  }
24011
  },
24012
  "@remotion/tailwind": {
24013
- "version": "4.0.347",
24014
- "resolved": "https://registry.npmjs.org/@remotion/tailwind/-/tailwind-4.0.347.tgz",
24015
- "integrity": "sha512-OFMmx97x2zqMqCVeDftrExqHcXrFhSq5mhsG+24/ph7BsnDb8LqSdJqG8/jfmE7kVkkvXVK/xDEvmzbz3S1Wnw==",
24016
  "requires": {
24017
  "autoprefixer": "10.4.20",
24018
  "css-loader": "5.2.7",
@@ -24024,38 +23989,38 @@
24024
  }
24025
  },
24026
  "@remotion/transitions": {
24027
- "version": "4.0.347",
24028
- "resolved": "https://registry.npmjs.org/@remotion/transitions/-/transitions-4.0.347.tgz",
24029
- "integrity": "sha512-e67YmtHyShdjd3mOXzSn6rbuMqH//0a/JgtBUthbmpurx3xlWU8YSsu6+ttN+iXUbLiRWwEs9Aor0y5yOGfGFA==",
24030
  "requires": {
24031
- "@remotion/paths": "4.0.347",
24032
- "@remotion/shapes": "4.0.347",
24033
- "remotion": "4.0.347"
24034
  }
24035
  },
24036
  "@remotion/web-renderer": {
24037
- "version": "4.0.347",
24038
- "resolved": "https://registry.npmjs.org/@remotion/web-renderer/-/web-renderer-4.0.347.tgz",
24039
- "integrity": "sha512-JcrSbuM7Xf5GSCWbxaBIA1gZ+I33nS0q74mQNGHYWBcf72Y/fBY6PfcaK4+VWE46nhbZmXNYzUNpwT3oMlQmqQ==",
24040
  "requires": {
24041
- "remotion": "4.0.347"
24042
  }
24043
  },
24044
  "@remotion/webcodecs": {
24045
- "version": "4.0.347",
24046
- "resolved": "https://registry.npmjs.org/@remotion/webcodecs/-/webcodecs-4.0.347.tgz",
24047
- "integrity": "sha512-VOPNJ8Ckmnx/xrxojU47DWlaL+5QRYBanOxjxGkgWUx9cH7SHgTlkv7Z0fNva5M8s6VO97BxLr2p0K7570p3FQ==",
24048
  "requires": {
24049
- "@remotion/licensing": "4.0.347",
24050
- "@remotion/media-parser": "4.0.347"
24051
  }
24052
  },
24053
  "@remotion/zod-types": {
24054
- "version": "4.0.347",
24055
- "resolved": "https://registry.npmjs.org/@remotion/zod-types/-/zod-types-4.0.347.tgz",
24056
- "integrity": "sha512-JfnKBGYXGQVPHxQspc6IXPqtXP7/NeB9JZuIzm4Vf8abzy69xNjRAkw780I6Inrwfx/Uohgx/3Sk6ELKd3j2IA==",
24057
  "requires": {
24058
- "remotion": "4.0.347"
24059
  }
24060
  },
24061
  "@socket.io/component-emitter": {
@@ -33287,9 +33252,9 @@
33287
  }
33288
  },
33289
  "remotion": {
33290
- "version": "4.0.347",
33291
- "resolved": "https://registry.npmjs.org/remotion/-/remotion-4.0.347.tgz",
33292
- "integrity": "sha512-Dw2o3UnhH6b0qFFSx7doK9VChpIUSZ8ZA7Ui62po7Yl9naeV8zfsTkUHfmAJwl2UweeCbhN+6SZPa7QROiAYjg==",
33293
  "requires": {}
33294
  },
33295
  "remotion-animated": {
 
11
  "license": "UNLICENSED",
12
  "dependencies": {
13
  "@ffmpeg-installer/ffmpeg": "^1.1.0",
14
+ "@remotion/bundler": "4.0.352",
15
+ "@remotion/cli": "4.0.352",
16
+ "@remotion/eslint-config": "4.0.352",
17
+ "@remotion/google-fonts": "4.0.352",
18
+ "@remotion/lottie": "4.0.352",
19
+ "@remotion/noise": "4.0.352",
20
+ "@remotion/preload": "4.0.352",
21
+ "@remotion/tailwind": "4.0.352",
22
+ "@remotion/transitions": "4.0.352",
23
+ "@remotion/zod-types": "4.0.352",
24
  "@types/react": "^18.0.26",
25
  "@types/web": "^0.0.86",
26
  "archiver": "^7.0.1",
 
47
  "react-dom": "^18.0.0",
48
  "react-qrcode-logo": "^3.0.0",
49
  "reactflow": "^11.9.4",
50
+ "remotion": "4.0.352",
51
  "remotion-animated": "^2.0.0",
52
  "remotion-transition-series": "^0.0.10",
53
  "sharp": "^0.33.5",
 
5066
  }
5067
  },
5068
  "node_modules/@remotion/bundler": {
5069
+ "version": "4.0.352",
5070
+ "resolved": "https://registry.npmjs.org/@remotion/bundler/-/bundler-4.0.352.tgz",
5071
+ "integrity": "sha512-tkDCJxtzmV9peXOaiuLzM2fNJZWlr2pt6bWopBaPmAUXGN+/zJnXnkwSJBvY0n4M0lmsUhESTzQe0Df9NVsGlQ==",
5072
  "dependencies": {
5073
+ "@remotion/media-parser": "4.0.352",
5074
+ "@remotion/studio": "4.0.352",
5075
+ "@remotion/studio-shared": "4.0.352",
5076
  "css-loader": "5.2.7",
5077
  "esbuild": "0.25.0",
5078
  "react-refresh": "0.9.0",
5079
+ "remotion": "4.0.352",
5080
  "source-map": "0.7.3",
5081
  "style-loader": "4.0.0",
5082
  "webpack": "5.96.1"
 
5095
  }
5096
  },
5097
  "node_modules/@remotion/cli": {
5098
+ "version": "4.0.352",
5099
+ "resolved": "https://registry.npmjs.org/@remotion/cli/-/cli-4.0.352.tgz",
5100
+ "integrity": "sha512-f5vlnYpl7ep3DlSJbhPOA2YZCxHQvcl33RAHmdsZmtN1+99+9pza4bWmmnj/XTh4dp36S4nZ2T3Vw+ZWelxrcg==",
5101
+ "dependencies": {
5102
+ "@remotion/bundler": "4.0.352",
5103
+ "@remotion/media-utils": "4.0.352",
5104
+ "@remotion/player": "4.0.352",
5105
+ "@remotion/renderer": "4.0.352",
5106
+ "@remotion/studio": "4.0.352",
5107
+ "@remotion/studio-server": "4.0.352",
5108
+ "@remotion/studio-shared": "4.0.352",
5109
  "dotenv": "9.0.2",
5110
  "minimist": "1.2.6",
5111
  "prompts": "2.4.2",
5112
+ "remotion": "4.0.352"
5113
  },
5114
  "bin": {
5115
  "remotion": "remotion-cli.js",
 
5122
  }
5123
  },
5124
  "node_modules/@remotion/compositor-darwin-arm64": {
5125
+ "version": "4.0.352",
5126
+ "resolved": "https://registry.npmjs.org/@remotion/compositor-darwin-arm64/-/compositor-darwin-arm64-4.0.352.tgz",
5127
+ "integrity": "sha512-4kD2VxJBey6OKS9BkRwD4mhsd7sVyfiKJSGp29PHrp2G3F5dHHSieyge3Zs0Xvj+h1mNQ0uMEGz9Mju/tLnxHw==",
5128
  "cpu": [
5129
  "arm64"
5130
  ],
 
5134
  ]
5135
  },
5136
  "node_modules/@remotion/compositor-darwin-x64": {
5137
+ "version": "4.0.352",
5138
+ "resolved": "https://registry.npmjs.org/@remotion/compositor-darwin-x64/-/compositor-darwin-x64-4.0.352.tgz",
5139
+ "integrity": "sha512-fqR8GWgG3q9qjWw8kT5Kc4hp0TBoSF8+QcrOq5fNI63Z5OTpR1DBXjH+ux9xbiefSw4cHDIsoAytScw6LuBuqw==",
5140
  "cpu": [
5141
  "x64"
5142
  ],
 
5146
  ]
5147
  },
5148
  "node_modules/@remotion/compositor-linux-arm64-gnu": {
5149
+ "version": "4.0.352",
5150
+ "resolved": "https://registry.npmjs.org/@remotion/compositor-linux-arm64-gnu/-/compositor-linux-arm64-gnu-4.0.352.tgz",
5151
+ "integrity": "sha512-iOU+AHYKoSZ1STAjeOKGRChYfND+J7h8wUzJ2TbKgQPjTrEnjGNw1nJWDdYk0npYn9N+gJxnVX7WvfcN4vNtAQ==",
5152
  "cpu": [
5153
  "arm64"
5154
  ],
 
5158
  ]
5159
  },
5160
  "node_modules/@remotion/compositor-linux-arm64-musl": {
5161
+ "version": "4.0.352",
5162
+ "resolved": "https://registry.npmjs.org/@remotion/compositor-linux-arm64-musl/-/compositor-linux-arm64-musl-4.0.352.tgz",
5163
+ "integrity": "sha512-6By664Dx76fXmZdF7t9bvDXhj3eHxx+HjJCw3JsQW/fJyb+JlCGfn7nLFNqs8urmPDhDDagIaE9jsy66M5Cesg==",
5164
  "cpu": [
5165
  "arm64"
5166
  ],
 
5170
  ]
5171
  },
5172
  "node_modules/@remotion/compositor-linux-x64-gnu": {
5173
+ "version": "4.0.352",
5174
+ "resolved": "https://registry.npmjs.org/@remotion/compositor-linux-x64-gnu/-/compositor-linux-x64-gnu-4.0.352.tgz",
5175
+ "integrity": "sha512-YvsnGldZxJmLJkGE91HVPzBt4q+fJ7eRxYc0IiHqkIYfhv9oJrcvi7ZIQvbxJ+cJBwMLvtQYpcvnyOKA0bo78Q==",
5176
  "cpu": [
5177
  "x64"
5178
  ],
 
5182
  ]
5183
  },
5184
  "node_modules/@remotion/compositor-linux-x64-musl": {
5185
+ "version": "4.0.352",
5186
+ "resolved": "https://registry.npmjs.org/@remotion/compositor-linux-x64-musl/-/compositor-linux-x64-musl-4.0.352.tgz",
5187
+ "integrity": "sha512-SxNJ+mUptv0nLGwye1XII2yLuShKODYKIis3SclhbkK9IjFb7SRMZrn6No3A2N3RM+8McD8h482JXtT3CFCCWg==",
5188
  "cpu": [
5189
  "x64"
5190
  ],
 
5194
  ]
5195
  },
5196
  "node_modules/@remotion/compositor-win32-x64-msvc": {
5197
+ "version": "4.0.352",
5198
+ "resolved": "https://registry.npmjs.org/@remotion/compositor-win32-x64-msvc/-/compositor-win32-x64-msvc-4.0.352.tgz",
5199
+ "integrity": "sha512-rvRsBMdCKyUCbmxYV2SycwCwt1B8AuDfVrGD8wsd8HMW7boODTkyMYqVZ1Rta1FRE9GCFb5eV3LH+53JiRf6mQ==",
5200
  "cpu": [
5201
  "x64"
5202
  ],
 
5206
  ]
5207
  },
5208
  "node_modules/@remotion/eslint-config": {
5209
+ "version": "4.0.352",
5210
+ "resolved": "https://registry.npmjs.org/@remotion/eslint-config/-/eslint-config-4.0.352.tgz",
5211
+ "integrity": "sha512-m4KICv9joe2Va8BL137hwQGIdqYRlEiLHqisuftjLGzwFHSrcTIE/aMT69fpnxhqcjEieVz2XwnMJ8QmA2YGzg==",
5212
  "peerDependencies": {
5213
  "eslint": ">=7.15.0"
5214
  }
5215
  },
5216
  "node_modules/@remotion/google-fonts": {
5217
+ "version": "4.0.352",
5218
+ "resolved": "https://registry.npmjs.org/@remotion/google-fonts/-/google-fonts-4.0.352.tgz",
5219
+ "integrity": "sha512-aBD2algqwqrwjrSG11Snr7FjOjOg1jR3wbQMq0N/Cfpq8rl/uzJ7dFJ6o/QaYUAUHd3eZ2SBfOMFEWgrW9uhdA==",
5220
  "dependencies": {
5221
+ "remotion": "4.0.352"
5222
  }
5223
  },
5224
  "node_modules/@remotion/licensing": {
5225
+ "version": "4.0.352",
5226
+ "resolved": "https://registry.npmjs.org/@remotion/licensing/-/licensing-4.0.352.tgz",
5227
+ "integrity": "sha512-3HkWLsucPCKewHGFTT++qhVyRWcNJceHY8n9n2ZkQG9wmlFeIjKAiO39zlpATuZP7+rKogt/8vVcMqb6dDeQsg=="
 
5228
  },
5229
  "node_modules/@remotion/lottie": {
5230
+ "version": "4.0.352",
5231
+ "resolved": "https://registry.npmjs.org/@remotion/lottie/-/lottie-4.0.352.tgz",
5232
+ "integrity": "sha512-I9bizoq+tGfau7A/dHPEvMb6Kfp6tAyYTB8E0EmusWTj6ytQXOyLAsoLt5PvfViUCmSkUerz46RHWMXHZDHcCA==",
5233
  "dependencies": {
5234
+ "remotion": "4.0.352"
5235
  },
5236
  "peerDependencies": {
5237
  "lottie-web": "^5",
 
5240
  }
5241
  },
5242
  "node_modules/@remotion/media-parser": {
5243
+ "version": "4.0.352",
5244
+ "resolved": "https://registry.npmjs.org/@remotion/media-parser/-/media-parser-4.0.352.tgz",
5245
+ "integrity": "sha512-xOnrTTJmpBCLYyRqI/N7txiS4VF9rkqKp07GWb+sHOdexA/nAOzLKU8omFXWN3g3/Okuha1OwnlrpybiHoFGIA=="
 
5246
  },
5247
  "node_modules/@remotion/media-utils": {
5248
+ "version": "4.0.352",
5249
+ "resolved": "https://registry.npmjs.org/@remotion/media-utils/-/media-utils-4.0.352.tgz",
5250
+ "integrity": "sha512-l4qXXNY5kQmLwIgxVm8x6JYhNUuxNn57/craIu14sxmjKv3U07/FkBrBdsV1YK4nPmafrDW3PH/dsBir2v1i8w==",
 
5251
  "dependencies": {
5252
+ "remotion": "4.0.352"
5253
  },
5254
  "peerDependencies": {
5255
  "react": ">=16.8.0",
 
5257
  }
5258
  },
5259
  "node_modules/@remotion/noise": {
5260
+ "version": "4.0.352",
5261
+ "resolved": "https://registry.npmjs.org/@remotion/noise/-/noise-4.0.352.tgz",
5262
+ "integrity": "sha512-U1ZUV2QI1S3J4au23uLp0KtHTCT0dZBguF1MFSCSr1M3BGoIYOOdMte5DOAHGEKet/0KdlZZiBHNIAEg1Sq7IA==",
5263
  "dependencies": {
5264
+ "remotion": "4.0.352",
5265
  "simplex-noise": "4.0.1"
5266
  }
5267
  },
5268
  "node_modules/@remotion/paths": {
5269
+ "version": "4.0.352",
5270
+ "resolved": "https://registry.npmjs.org/@remotion/paths/-/paths-4.0.352.tgz",
5271
+ "integrity": "sha512-FuFPONPsVfwYSPl61h/OYp/SzzK4+4k45aiB3JF+1AsDrs3I56k8iaQk0DbmChnyX2VHphMJX2Tphy/YbV61Kw=="
 
5272
  },
5273
  "node_modules/@remotion/player": {
5274
+ "version": "4.0.352",
5275
+ "resolved": "https://registry.npmjs.org/@remotion/player/-/player-4.0.352.tgz",
5276
+ "integrity": "sha512-HFq1nmTEk7GcAY5gLjWCZaWpa0edFoKiBc8j9RvTyFCjRBj/5+wakLV0AzxuE8b3ag2XIfITqIhifuy8RuUJjQ==",
 
5277
  "dependencies": {
5278
+ "remotion": "4.0.352"
5279
  },
5280
  "peerDependencies": {
5281
  "react": ">=16.8.0",
 
5283
  }
5284
  },
5285
  "node_modules/@remotion/preload": {
5286
+ "version": "4.0.352",
5287
+ "resolved": "https://registry.npmjs.org/@remotion/preload/-/preload-4.0.352.tgz",
5288
+ "integrity": "sha512-JIYaN5al1EoR9CNxVosawZSqTNEWSQsFbeFieU8aSdODUr/iIuHjrXg/jlVxf8lhlLeWeFaGliJiVIhH1c2gMQ=="
5289
  },
5290
  "node_modules/@remotion/renderer": {
5291
+ "version": "4.0.352",
5292
+ "resolved": "https://registry.npmjs.org/@remotion/renderer/-/renderer-4.0.352.tgz",
5293
+ "integrity": "sha512-tvI6Nmw0lAtOXFkM4AMOCEBSDzHTu7R6ojzYMkH8E8l4ac7OvJPnnGnBFlwq/INK6I2U3PaoLjwwdsm/M209Tg==",
 
5294
  "dependencies": {
5295
+ "@remotion/streaming": "4.0.352",
5296
  "execa": "5.1.1",
5297
  "extract-zip": "2.0.1",
5298
+ "remotion": "4.0.352",
5299
  "source-map": "^0.8.0-beta.0",
5300
  "ws": "8.17.1"
5301
  },
5302
  "optionalDependencies": {
5303
+ "@remotion/compositor-darwin-arm64": "4.0.352",
5304
+ "@remotion/compositor-darwin-x64": "4.0.352",
5305
+ "@remotion/compositor-linux-arm64-gnu": "4.0.352",
5306
+ "@remotion/compositor-linux-arm64-musl": "4.0.352",
5307
+ "@remotion/compositor-linux-x64-gnu": "4.0.352",
5308
+ "@remotion/compositor-linux-x64-musl": "4.0.352",
5309
+ "@remotion/compositor-win32-x64-msvc": "4.0.352"
5310
  },
5311
  "peerDependencies": {
5312
  "react": ">=16.8.0",
 
5318
  "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz",
5319
  "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==",
5320
  "deprecated": "The work that was done in this beta branch won't be included in future versions",
 
5321
  "dependencies": {
5322
  "whatwg-url": "^7.0.0"
5323
  },
 
5326
  }
5327
  },
5328
  "node_modules/@remotion/shapes": {
5329
+ "version": "4.0.352",
5330
+ "resolved": "https://registry.npmjs.org/@remotion/shapes/-/shapes-4.0.352.tgz",
5331
+ "integrity": "sha512-rv+CMvw3nuRegdLDtImTaWOzxUvKHwD6K9KsQbm8b6pSjHssIXOWGH6sxNzxaQbQ6pAKd5/VDo1tB3W5ynzBJA==",
 
5332
  "dependencies": {
5333
+ "@remotion/paths": "4.0.352"
5334
  },
5335
  "peerDependencies": {
5336
  "react": ">=16.8.0",
 
5338
  }
5339
  },
5340
  "node_modules/@remotion/streaming": {
5341
+ "version": "4.0.352",
5342
+ "resolved": "https://registry.npmjs.org/@remotion/streaming/-/streaming-4.0.352.tgz",
5343
+ "integrity": "sha512-nNz+zcgpwhJMwSc7hyo5U6StA/wJ88P0I8ZA5sfLMcX7P7LCjlY1zA9/64l+Hp2gcmbmo9hOoRj3Corp85Tq+w=="
 
5344
  },
5345
  "node_modules/@remotion/studio": {
5346
+ "version": "4.0.352",
5347
+ "resolved": "https://registry.npmjs.org/@remotion/studio/-/studio-4.0.352.tgz",
5348
+ "integrity": "sha512-kF1ZWfWPK3JBW/UHDjQCVHFkpUJNrjO4G4hqE+hjMuku9EGu5Q2X8HhJy7BoY2GuXweP/WGaTFD2hRFiRcKEQQ==",
5349
+ "dependencies": {
5350
+ "@remotion/media-parser": "4.0.352",
5351
+ "@remotion/media-utils": "4.0.352",
5352
+ "@remotion/player": "4.0.352",
5353
+ "@remotion/renderer": "4.0.352",
5354
+ "@remotion/studio-shared": "4.0.352",
5355
+ "@remotion/web-renderer": "4.0.352",
5356
+ "@remotion/webcodecs": "4.0.352",
5357
+ "@remotion/zod-types": "4.0.352",
 
5358
  "memfs": "3.4.3",
5359
  "open": "^8.4.2",
5360
+ "remotion": "4.0.352",
5361
  "semver": "7.5.3",
5362
  "source-map": "0.7.3",
5363
  "zod": "3.22.3"
 
5368
  }
5369
  },
5370
  "node_modules/@remotion/studio-server": {
5371
+ "version": "4.0.352",
5372
+ "resolved": "https://registry.npmjs.org/@remotion/studio-server/-/studio-server-4.0.352.tgz",
5373
+ "integrity": "sha512-FJhn8jjPLCYbGdfjxqI6WQGvedhY5g+I4soAnjX9i5v/cbuTFxqXo8Zj8UUdVM4tIIUvmJeuhrMEEabBRRWeww==",
 
5374
  "dependencies": {
5375
  "@babel/parser": "7.24.1",
5376
+ "@remotion/bundler": "4.0.352",
5377
+ "@remotion/renderer": "4.0.352",
5378
+ "@remotion/studio-shared": "4.0.352",
5379
  "memfs": "3.4.3",
5380
  "open": "^8.4.2",
5381
  "recast": "0.23.11",
5382
+ "remotion": "4.0.352",
5383
  "semver": "7.5.3",
5384
  "source-map": "0.7.3"
5385
  }
 
5388
  "version": "0.7.3",
5389
  "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
5390
  "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
 
5391
  "engines": {
5392
  "node": ">= 8"
5393
  }
5394
  },
5395
  "node_modules/@remotion/studio-shared": {
5396
+ "version": "4.0.352",
5397
+ "resolved": "https://registry.npmjs.org/@remotion/studio-shared/-/studio-shared-4.0.352.tgz",
5398
+ "integrity": "sha512-m1Yym7PGZa1Vt/Wf7fpGB6hBdHTk5tpbZ2ijmhla7+M8lj4kyoFwKS8bp2iFlxnedWEkFJL0f1CwlLW9YAvKXA==",
 
5399
  "dependencies": {
5400
+ "remotion": "4.0.352"
5401
  }
5402
  },
5403
  "node_modules/@remotion/studio/node_modules/source-map": {
5404
  "version": "0.7.3",
5405
  "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
5406
  "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
 
5407
  "engines": {
5408
  "node": ">= 8"
5409
  }
5410
  },
5411
  "node_modules/@remotion/tailwind": {
5412
+ "version": "4.0.352",
5413
+ "resolved": "https://registry.npmjs.org/@remotion/tailwind/-/tailwind-4.0.352.tgz",
5414
+ "integrity": "sha512-uyysnsSkx9ZRgB2k4FomYmKjRIFd6cVe9T6wKrOOSGNeN4Jl+qhVS81/IO6XKCHSuEuhH7sQYWSX4VRUpHbuoA==",
5415
  "dependencies": {
5416
  "autoprefixer": "10.4.20",
5417
  "css-loader": "5.2.7",
 
5422
  "tailwindcss": "3.4.13"
5423
  },
5424
  "peerDependencies": {
5425
+ "@remotion/bundler": "4.0.352"
5426
  }
5427
  },
5428
  "node_modules/@remotion/transitions": {
5429
+ "version": "4.0.352",
5430
+ "resolved": "https://registry.npmjs.org/@remotion/transitions/-/transitions-4.0.352.tgz",
5431
+ "integrity": "sha512-1kYZJkG6wruBzvKqBeiYumabZfb21vTKsgBy8Qzeh9M/eFlpg7flFkn5f/bmnLRaUuF34toOvtc5Z/TyCKjlhw==",
5432
  "dependencies": {
5433
+ "@remotion/paths": "4.0.352",
5434
+ "@remotion/shapes": "4.0.352",
5435
+ "remotion": "4.0.352"
5436
  },
5437
  "peerDependencies": {
5438
  "react": ">=16.8.0",
 
5440
  }
5441
  },
5442
  "node_modules/@remotion/web-renderer": {
5443
+ "version": "4.0.352",
5444
+ "resolved": "https://registry.npmjs.org/@remotion/web-renderer/-/web-renderer-4.0.352.tgz",
5445
+ "integrity": "sha512-5tf+e3Py/Ra/zl6D54OkE3SMlzxxad5xVOMEtDfRA5g3q1KW03kf+NB28m6knLbvWe5FDq1WO9i/VyUEgNM8MQ==",
 
5446
  "dependencies": {
5447
+ "remotion": "4.0.352"
5448
  },
5449
  "peerDependencies": {
5450
  "react": ">=18.0.0",
 
5452
  }
5453
  },
5454
  "node_modules/@remotion/webcodecs": {
5455
+ "version": "4.0.352",
5456
+ "resolved": "https://registry.npmjs.org/@remotion/webcodecs/-/webcodecs-4.0.352.tgz",
5457
+ "integrity": "sha512-56cg55FfIZhV//dYOwDcddDR57Kpkn43Y8Ris+kXGhlpVk/XHqoVCm6QAW77avZdvHb8tHXHqmqDWg5Zt8MEKw==",
 
5458
  "dependencies": {
5459
+ "@remotion/licensing": "4.0.352",
5460
+ "@remotion/media-parser": "4.0.352"
5461
  }
5462
  },
5463
  "node_modules/@remotion/zod-types": {
5464
+ "version": "4.0.352",
5465
+ "resolved": "https://registry.npmjs.org/@remotion/zod-types/-/zod-types-4.0.352.tgz",
5466
+ "integrity": "sha512-OBf3uKaqCyG0CbcWuVmSIOvF92g6RRnwAQsUkFoxFtwwjl+Y7M0v4e1NEVQ+Bpg+uReNmCBbHNSDXeLKOj/aOA==",
5467
  "dependencies": {
5468
+ "remotion": "4.0.352"
5469
  },
5470
  "peerDependencies": {
5471
  "zod": "3.22.3"
 
8066
  "version": "2.0.0",
8067
  "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
8068
  "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==",
 
8069
  "engines": {
8070
  "node": ">=8"
8071
  }
 
8883
  "version": "5.1.1",
8884
  "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
8885
  "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
 
8886
  "dependencies": {
8887
  "cross-spawn": "^7.0.3",
8888
  "get-stream": "^6.0.0",
 
9651
  "node_modules/fs-monkey": {
9652
  "version": "1.0.3",
9653
  "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz",
9654
+ "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q=="
 
9655
  },
9656
  "node_modules/fs-readdir-recursive": {
9657
  "version": "1.1.0",
 
9923
  "version": "6.0.1",
9924
  "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
9925
  "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
 
9926
  "engines": {
9927
  "node": ">=10"
9928
  },
 
10430
  "version": "2.1.0",
10431
  "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
10432
  "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
 
10433
  "engines": {
10434
  "node": ">=10.17.0"
10435
  }
 
10698
  "version": "2.2.1",
10699
  "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
10700
  "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
 
10701
  "bin": {
10702
  "is-docker": "cli.js"
10703
  },
 
10900
  "version": "2.2.0",
10901
  "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
10902
  "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
 
10903
  "dependencies": {
10904
  "is-docker": "^2.0.0"
10905
  },
 
11488
  "node_modules/lodash.sortby": {
11489
  "version": "4.7.0",
11490
  "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
11491
+ "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA=="
 
11492
  },
11493
  "node_modules/long": {
11494
  "version": "4.0.0",
 
11684
  "version": "3.4.3",
11685
  "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.3.tgz",
11686
  "integrity": "sha512-eivjfi7Ahr6eQTn44nvTnR60e4a1Fs1Via2kCR5lHo/kyNoiMWaXCNJ/GpSd0ilXas2JSOl9B5FTIhflXu0hlg==",
 
11687
  "dependencies": {
11688
  "fs-monkey": "1.0.3"
11689
  },
 
13546
  "version": "4.0.1",
13547
  "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
13548
  "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
 
13549
  "dependencies": {
13550
  "path-key": "^3.0.0"
13551
  },
 
16397
  "version": "8.4.2",
16398
  "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz",
16399
  "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==",
 
16400
  "dependencies": {
16401
  "define-lazy-prop": "^2.0.0",
16402
  "is-docker": "^2.1.1",
 
18177
  "version": "0.23.11",
18178
  "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.11.tgz",
18179
  "integrity": "sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==",
 
18180
  "dependencies": {
18181
  "ast-types": "^0.16.1",
18182
  "esprima": "~4.0.0",
 
18192
  "version": "0.16.1",
18193
  "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz",
18194
  "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==",
 
18195
  "dependencies": {
18196
  "tslib": "^2.0.1"
18197
  },
 
18202
  "node_modules/recast/node_modules/tslib": {
18203
  "version": "2.8.1",
18204
  "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
18205
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="
 
18206
  },
18207
  "node_modules/regenerate": {
18208
  "version": "1.4.2",
 
18285
  }
18286
  },
18287
  "node_modules/remotion": {
18288
+ "version": "4.0.352",
18289
+ "resolved": "https://registry.npmjs.org/remotion/-/remotion-4.0.352.tgz",
18290
+ "integrity": "sha512-jOCpTdl8wM/e1ehSQTqtqHR5QT8IEbM6W99mz1WE5yJdtvlxpHEBezRjfuZwldrRbyQNYXGZ4VEgLFaWddmFOg==",
18291
  "peerDependencies": {
18292
  "react": ">=16.8.0",
18293
  "react-dom": ">=16.8.0"
 
19087
  "version": "2.0.0",
19088
  "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
19089
  "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
 
19090
  "engines": {
19091
  "node": ">=6"
19092
  }
 
19569
  "node_modules/tiny-invariant": {
19570
  "version": "1.3.3",
19571
  "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz",
19572
+ "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg=="
 
19573
  },
19574
  "node_modules/tmp": {
19575
  "version": "0.2.1",
 
19626
  "version": "1.0.1",
19627
  "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
19628
  "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==",
 
19629
  "dependencies": {
19630
  "punycode": "^2.1.0"
19631
  }
 
20147
  "node_modules/webidl-conversions": {
20148
  "version": "4.0.2",
20149
  "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
20150
+ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg=="
 
20151
  },
20152
  "node_modules/webpack": {
20153
  "version": "5.96.1",
 
20227
  "version": "7.1.0",
20228
  "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz",
20229
  "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==",
 
20230
  "dependencies": {
20231
  "lodash.sortby": "^4.7.0",
20232
  "tr46": "^1.0.1",
 
23721
  }
23722
  },
23723
  "@remotion/bundler": {
23724
+ "version": "4.0.352",
23725
+ "resolved": "https://registry.npmjs.org/@remotion/bundler/-/bundler-4.0.352.tgz",
23726
+ "integrity": "sha512-tkDCJxtzmV9peXOaiuLzM2fNJZWlr2pt6bWopBaPmAUXGN+/zJnXnkwSJBvY0n4M0lmsUhESTzQe0Df9NVsGlQ==",
23727
  "requires": {
23728
+ "@remotion/media-parser": "4.0.352",
23729
+ "@remotion/studio": "4.0.352",
23730
+ "@remotion/studio-shared": "4.0.352",
23731
  "css-loader": "5.2.7",
23732
  "esbuild": "0.25.0",
23733
  "react-refresh": "0.9.0",
23734
+ "remotion": "4.0.352",
23735
  "source-map": "0.7.3",
23736
  "style-loader": "4.0.0",
23737
  "webpack": "5.96.1"
 
23745
  }
23746
  },
23747
  "@remotion/cli": {
23748
+ "version": "4.0.352",
23749
+ "resolved": "https://registry.npmjs.org/@remotion/cli/-/cli-4.0.352.tgz",
23750
+ "integrity": "sha512-f5vlnYpl7ep3DlSJbhPOA2YZCxHQvcl33RAHmdsZmtN1+99+9pza4bWmmnj/XTh4dp36S4nZ2T3Vw+ZWelxrcg==",
23751
+ "requires": {
23752
+ "@remotion/bundler": "4.0.352",
23753
+ "@remotion/media-utils": "4.0.352",
23754
+ "@remotion/player": "4.0.352",
23755
+ "@remotion/renderer": "4.0.352",
23756
+ "@remotion/studio": "4.0.352",
23757
+ "@remotion/studio-server": "4.0.352",
23758
+ "@remotion/studio-shared": "4.0.352",
23759
  "dotenv": "9.0.2",
23760
  "minimist": "1.2.6",
23761
  "prompts": "2.4.2",
23762
+ "remotion": "4.0.352"
23763
  }
23764
  },
23765
  "@remotion/compositor-darwin-arm64": {
23766
+ "version": "4.0.352",
23767
+ "resolved": "https://registry.npmjs.org/@remotion/compositor-darwin-arm64/-/compositor-darwin-arm64-4.0.352.tgz",
23768
+ "integrity": "sha512-4kD2VxJBey6OKS9BkRwD4mhsd7sVyfiKJSGp29PHrp2G3F5dHHSieyge3Zs0Xvj+h1mNQ0uMEGz9Mju/tLnxHw==",
23769
  "optional": true
23770
  },
23771
  "@remotion/compositor-darwin-x64": {
23772
+ "version": "4.0.352",
23773
+ "resolved": "https://registry.npmjs.org/@remotion/compositor-darwin-x64/-/compositor-darwin-x64-4.0.352.tgz",
23774
+ "integrity": "sha512-fqR8GWgG3q9qjWw8kT5Kc4hp0TBoSF8+QcrOq5fNI63Z5OTpR1DBXjH+ux9xbiefSw4cHDIsoAytScw6LuBuqw==",
23775
  "optional": true
23776
  },
23777
  "@remotion/compositor-linux-arm64-gnu": {
23778
+ "version": "4.0.352",
23779
+ "resolved": "https://registry.npmjs.org/@remotion/compositor-linux-arm64-gnu/-/compositor-linux-arm64-gnu-4.0.352.tgz",
23780
+ "integrity": "sha512-iOU+AHYKoSZ1STAjeOKGRChYfND+J7h8wUzJ2TbKgQPjTrEnjGNw1nJWDdYk0npYn9N+gJxnVX7WvfcN4vNtAQ==",
23781
  "optional": true
23782
  },
23783
  "@remotion/compositor-linux-arm64-musl": {
23784
+ "version": "4.0.352",
23785
+ "resolved": "https://registry.npmjs.org/@remotion/compositor-linux-arm64-musl/-/compositor-linux-arm64-musl-4.0.352.tgz",
23786
+ "integrity": "sha512-6By664Dx76fXmZdF7t9bvDXhj3eHxx+HjJCw3JsQW/fJyb+JlCGfn7nLFNqs8urmPDhDDagIaE9jsy66M5Cesg==",
23787
  "optional": true
23788
  },
23789
  "@remotion/compositor-linux-x64-gnu": {
23790
+ "version": "4.0.352",
23791
+ "resolved": "https://registry.npmjs.org/@remotion/compositor-linux-x64-gnu/-/compositor-linux-x64-gnu-4.0.352.tgz",
23792
+ "integrity": "sha512-YvsnGldZxJmLJkGE91HVPzBt4q+fJ7eRxYc0IiHqkIYfhv9oJrcvi7ZIQvbxJ+cJBwMLvtQYpcvnyOKA0bo78Q==",
23793
  "optional": true
23794
  },
23795
  "@remotion/compositor-linux-x64-musl": {
23796
+ "version": "4.0.352",
23797
+ "resolved": "https://registry.npmjs.org/@remotion/compositor-linux-x64-musl/-/compositor-linux-x64-musl-4.0.352.tgz",
23798
+ "integrity": "sha512-SxNJ+mUptv0nLGwye1XII2yLuShKODYKIis3SclhbkK9IjFb7SRMZrn6No3A2N3RM+8McD8h482JXtT3CFCCWg==",
23799
  "optional": true
23800
  },
23801
  "@remotion/compositor-win32-x64-msvc": {
23802
+ "version": "4.0.352",
23803
+ "resolved": "https://registry.npmjs.org/@remotion/compositor-win32-x64-msvc/-/compositor-win32-x64-msvc-4.0.352.tgz",
23804
+ "integrity": "sha512-rvRsBMdCKyUCbmxYV2SycwCwt1B8AuDfVrGD8wsd8HMW7boODTkyMYqVZ1Rta1FRE9GCFb5eV3LH+53JiRf6mQ==",
23805
  "optional": true
23806
  },
23807
  "@remotion/eslint-config": {
23808
+ "version": "4.0.352",
23809
+ "resolved": "https://registry.npmjs.org/@remotion/eslint-config/-/eslint-config-4.0.352.tgz",
23810
+ "integrity": "sha512-m4KICv9joe2Va8BL137hwQGIdqYRlEiLHqisuftjLGzwFHSrcTIE/aMT69fpnxhqcjEieVz2XwnMJ8QmA2YGzg==",
23811
  "requires": {}
23812
  },
23813
  "@remotion/google-fonts": {
23814
+ "version": "4.0.352",
23815
+ "resolved": "https://registry.npmjs.org/@remotion/google-fonts/-/google-fonts-4.0.352.tgz",
23816
+ "integrity": "sha512-aBD2algqwqrwjrSG11Snr7FjOjOg1jR3wbQMq0N/Cfpq8rl/uzJ7dFJ6o/QaYUAUHd3eZ2SBfOMFEWgrW9uhdA==",
23817
  "requires": {
23818
+ "remotion": "4.0.352"
23819
  }
23820
  },
23821
  "@remotion/licensing": {
23822
+ "version": "4.0.352",
23823
+ "resolved": "https://registry.npmjs.org/@remotion/licensing/-/licensing-4.0.352.tgz",
23824
+ "integrity": "sha512-3HkWLsucPCKewHGFTT++qhVyRWcNJceHY8n9n2ZkQG9wmlFeIjKAiO39zlpATuZP7+rKogt/8vVcMqb6dDeQsg=="
23825
  },
23826
  "@remotion/lottie": {
23827
+ "version": "4.0.352",
23828
+ "resolved": "https://registry.npmjs.org/@remotion/lottie/-/lottie-4.0.352.tgz",
23829
+ "integrity": "sha512-I9bizoq+tGfau7A/dHPEvMb6Kfp6tAyYTB8E0EmusWTj6ytQXOyLAsoLt5PvfViUCmSkUerz46RHWMXHZDHcCA==",
23830
  "requires": {
23831
+ "remotion": "4.0.352"
23832
  }
23833
  },
23834
  "@remotion/media-parser": {
23835
+ "version": "4.0.352",
23836
+ "resolved": "https://registry.npmjs.org/@remotion/media-parser/-/media-parser-4.0.352.tgz",
23837
+ "integrity": "sha512-xOnrTTJmpBCLYyRqI/N7txiS4VF9rkqKp07GWb+sHOdexA/nAOzLKU8omFXWN3g3/Okuha1OwnlrpybiHoFGIA=="
23838
  },
23839
  "@remotion/media-utils": {
23840
+ "version": "4.0.352",
23841
+ "resolved": "https://registry.npmjs.org/@remotion/media-utils/-/media-utils-4.0.352.tgz",
23842
+ "integrity": "sha512-l4qXXNY5kQmLwIgxVm8x6JYhNUuxNn57/craIu14sxmjKv3U07/FkBrBdsV1YK4nPmafrDW3PH/dsBir2v1i8w==",
23843
  "requires": {
23844
+ "remotion": "4.0.352"
23845
  }
23846
  },
23847
  "@remotion/noise": {
23848
+ "version": "4.0.352",
23849
+ "resolved": "https://registry.npmjs.org/@remotion/noise/-/noise-4.0.352.tgz",
23850
+ "integrity": "sha512-U1ZUV2QI1S3J4au23uLp0KtHTCT0dZBguF1MFSCSr1M3BGoIYOOdMte5DOAHGEKet/0KdlZZiBHNIAEg1Sq7IA==",
23851
  "requires": {
23852
+ "remotion": "4.0.352",
23853
  "simplex-noise": "4.0.1"
23854
  }
23855
  },
23856
  "@remotion/paths": {
23857
+ "version": "4.0.352",
23858
+ "resolved": "https://registry.npmjs.org/@remotion/paths/-/paths-4.0.352.tgz",
23859
+ "integrity": "sha512-FuFPONPsVfwYSPl61h/OYp/SzzK4+4k45aiB3JF+1AsDrs3I56k8iaQk0DbmChnyX2VHphMJX2Tphy/YbV61Kw=="
23860
  },
23861
  "@remotion/player": {
23862
+ "version": "4.0.352",
23863
+ "resolved": "https://registry.npmjs.org/@remotion/player/-/player-4.0.352.tgz",
23864
+ "integrity": "sha512-HFq1nmTEk7GcAY5gLjWCZaWpa0edFoKiBc8j9RvTyFCjRBj/5+wakLV0AzxuE8b3ag2XIfITqIhifuy8RuUJjQ==",
23865
  "requires": {
23866
+ "remotion": "4.0.352"
23867
  }
23868
  },
23869
  "@remotion/preload": {
23870
+ "version": "4.0.352",
23871
+ "resolved": "https://registry.npmjs.org/@remotion/preload/-/preload-4.0.352.tgz",
23872
+ "integrity": "sha512-JIYaN5al1EoR9CNxVosawZSqTNEWSQsFbeFieU8aSdODUr/iIuHjrXg/jlVxf8lhlLeWeFaGliJiVIhH1c2gMQ=="
23873
  },
23874
  "@remotion/renderer": {
23875
+ "version": "4.0.352",
23876
+ "resolved": "https://registry.npmjs.org/@remotion/renderer/-/renderer-4.0.352.tgz",
23877
+ "integrity": "sha512-tvI6Nmw0lAtOXFkM4AMOCEBSDzHTu7R6ojzYMkH8E8l4ac7OvJPnnGnBFlwq/INK6I2U3PaoLjwwdsm/M209Tg==",
23878
+ "requires": {
23879
+ "@remotion/compositor-darwin-arm64": "4.0.352",
23880
+ "@remotion/compositor-darwin-x64": "4.0.352",
23881
+ "@remotion/compositor-linux-arm64-gnu": "4.0.352",
23882
+ "@remotion/compositor-linux-arm64-musl": "4.0.352",
23883
+ "@remotion/compositor-linux-x64-gnu": "4.0.352",
23884
+ "@remotion/compositor-linux-x64-musl": "4.0.352",
23885
+ "@remotion/compositor-win32-x64-msvc": "4.0.352",
23886
+ "@remotion/streaming": "4.0.352",
23887
  "execa": "5.1.1",
23888
  "extract-zip": "2.0.1",
23889
+ "remotion": "4.0.352",
23890
  "source-map": "^0.8.0-beta.0",
23891
  "ws": "8.17.1"
23892
  },
 
23902
  }
23903
  },
23904
  "@remotion/shapes": {
23905
+ "version": "4.0.352",
23906
+ "resolved": "https://registry.npmjs.org/@remotion/shapes/-/shapes-4.0.352.tgz",
23907
+ "integrity": "sha512-rv+CMvw3nuRegdLDtImTaWOzxUvKHwD6K9KsQbm8b6pSjHssIXOWGH6sxNzxaQbQ6pAKd5/VDo1tB3W5ynzBJA==",
23908
  "requires": {
23909
+ "@remotion/paths": "4.0.352"
23910
  }
23911
  },
23912
  "@remotion/streaming": {
23913
+ "version": "4.0.352",
23914
+ "resolved": "https://registry.npmjs.org/@remotion/streaming/-/streaming-4.0.352.tgz",
23915
+ "integrity": "sha512-nNz+zcgpwhJMwSc7hyo5U6StA/wJ88P0I8ZA5sfLMcX7P7LCjlY1zA9/64l+Hp2gcmbmo9hOoRj3Corp85Tq+w=="
23916
  },
23917
  "@remotion/studio": {
23918
+ "version": "4.0.352",
23919
+ "resolved": "https://registry.npmjs.org/@remotion/studio/-/studio-4.0.352.tgz",
23920
+ "integrity": "sha512-kF1ZWfWPK3JBW/UHDjQCVHFkpUJNrjO4G4hqE+hjMuku9EGu5Q2X8HhJy7BoY2GuXweP/WGaTFD2hRFiRcKEQQ==",
23921
+ "requires": {
23922
+ "@remotion/media-parser": "4.0.352",
23923
+ "@remotion/media-utils": "4.0.352",
23924
+ "@remotion/player": "4.0.352",
23925
+ "@remotion/renderer": "4.0.352",
23926
+ "@remotion/studio-shared": "4.0.352",
23927
+ "@remotion/web-renderer": "4.0.352",
23928
+ "@remotion/webcodecs": "4.0.352",
23929
+ "@remotion/zod-types": "4.0.352",
23930
  "memfs": "3.4.3",
23931
  "open": "^8.4.2",
23932
+ "remotion": "4.0.352",
23933
  "semver": "7.5.3",
23934
  "source-map": "0.7.3",
23935
  "zod": "3.22.3"
 
23943
  }
23944
  },
23945
  "@remotion/studio-server": {
23946
+ "version": "4.0.352",
23947
+ "resolved": "https://registry.npmjs.org/@remotion/studio-server/-/studio-server-4.0.352.tgz",
23948
+ "integrity": "sha512-FJhn8jjPLCYbGdfjxqI6WQGvedhY5g+I4soAnjX9i5v/cbuTFxqXo8Zj8UUdVM4tIIUvmJeuhrMEEabBRRWeww==",
23949
  "requires": {
23950
  "@babel/parser": "7.24.1",
23951
+ "@remotion/bundler": "4.0.352",
23952
+ "@remotion/renderer": "4.0.352",
23953
+ "@remotion/studio-shared": "4.0.352",
23954
  "memfs": "3.4.3",
23955
  "open": "^8.4.2",
23956
  "recast": "0.23.11",
23957
+ "remotion": "4.0.352",
23958
  "semver": "7.5.3",
23959
  "source-map": "0.7.3"
23960
  },
 
23967
  }
23968
  },
23969
  "@remotion/studio-shared": {
23970
+ "version": "4.0.352",
23971
+ "resolved": "https://registry.npmjs.org/@remotion/studio-shared/-/studio-shared-4.0.352.tgz",
23972
+ "integrity": "sha512-m1Yym7PGZa1Vt/Wf7fpGB6hBdHTk5tpbZ2ijmhla7+M8lj4kyoFwKS8bp2iFlxnedWEkFJL0f1CwlLW9YAvKXA==",
23973
  "requires": {
23974
+ "remotion": "4.0.352"
23975
  }
23976
  },
23977
  "@remotion/tailwind": {
23978
+ "version": "4.0.352",
23979
+ "resolved": "https://registry.npmjs.org/@remotion/tailwind/-/tailwind-4.0.352.tgz",
23980
+ "integrity": "sha512-uyysnsSkx9ZRgB2k4FomYmKjRIFd6cVe9T6wKrOOSGNeN4Jl+qhVS81/IO6XKCHSuEuhH7sQYWSX4VRUpHbuoA==",
23981
  "requires": {
23982
  "autoprefixer": "10.4.20",
23983
  "css-loader": "5.2.7",
 
23989
  }
23990
  },
23991
  "@remotion/transitions": {
23992
+ "version": "4.0.352",
23993
+ "resolved": "https://registry.npmjs.org/@remotion/transitions/-/transitions-4.0.352.tgz",
23994
+ "integrity": "sha512-1kYZJkG6wruBzvKqBeiYumabZfb21vTKsgBy8Qzeh9M/eFlpg7flFkn5f/bmnLRaUuF34toOvtc5Z/TyCKjlhw==",
23995
  "requires": {
23996
+ "@remotion/paths": "4.0.352",
23997
+ "@remotion/shapes": "4.0.352",
23998
+ "remotion": "4.0.352"
23999
  }
24000
  },
24001
  "@remotion/web-renderer": {
24002
+ "version": "4.0.352",
24003
+ "resolved": "https://registry.npmjs.org/@remotion/web-renderer/-/web-renderer-4.0.352.tgz",
24004
+ "integrity": "sha512-5tf+e3Py/Ra/zl6D54OkE3SMlzxxad5xVOMEtDfRA5g3q1KW03kf+NB28m6knLbvWe5FDq1WO9i/VyUEgNM8MQ==",
24005
  "requires": {
24006
+ "remotion": "4.0.352"
24007
  }
24008
  },
24009
  "@remotion/webcodecs": {
24010
+ "version": "4.0.352",
24011
+ "resolved": "https://registry.npmjs.org/@remotion/webcodecs/-/webcodecs-4.0.352.tgz",
24012
+ "integrity": "sha512-56cg55FfIZhV//dYOwDcddDR57Kpkn43Y8Ris+kXGhlpVk/XHqoVCm6QAW77avZdvHb8tHXHqmqDWg5Zt8MEKw==",
24013
  "requires": {
24014
+ "@remotion/licensing": "4.0.352",
24015
+ "@remotion/media-parser": "4.0.352"
24016
  }
24017
  },
24018
  "@remotion/zod-types": {
24019
+ "version": "4.0.352",
24020
+ "resolved": "https://registry.npmjs.org/@remotion/zod-types/-/zod-types-4.0.352.tgz",
24021
+ "integrity": "sha512-OBf3uKaqCyG0CbcWuVmSIOvF92g6RRnwAQsUkFoxFtwwjl+Y7M0v4e1NEVQ+Bpg+uReNmCBbHNSDXeLKOj/aOA==",
24022
  "requires": {
24023
+ "remotion": "4.0.352"
24024
  }
24025
  },
24026
  "@socket.io/component-emitter": {
 
33252
  }
33253
  },
33254
  "remotion": {
33255
+ "version": "4.0.352",
33256
+ "resolved": "https://registry.npmjs.org/remotion/-/remotion-4.0.352.tgz",
33257
+ "integrity": "sha512-jOCpTdl8wM/e1ehSQTqtqHR5QT8IEbM6W99mz1WE5yJdtvlxpHEBezRjfuZwldrRbyQNYXGZ4VEgLFaWddmFOg==",
33258
  "requires": {}
33259
  },
33260
  "remotion-animated": {
package.json CHANGED
@@ -47,16 +47,16 @@
47
  },
48
  "dependencies": {
49
  "@ffmpeg-installer/ffmpeg": "^1.1.0",
50
- "@remotion/bundler": "4.0.347",
51
- "@remotion/cli": "4.0.347",
52
- "@remotion/eslint-config": "4.0.347",
53
- "@remotion/google-fonts": "4.0.347",
54
- "@remotion/lottie": "4.0.347",
55
- "@remotion/noise": "4.0.347",
56
- "@remotion/preload": "4.0.347",
57
- "@remotion/tailwind": "4.0.347",
58
- "@remotion/transitions": "4.0.347",
59
- "@remotion/zod-types": "4.0.347",
60
  "@types/react": "^18.0.26",
61
  "@types/web": "^0.0.86",
62
  "archiver": "^7.0.1",
@@ -83,7 +83,7 @@
83
  "react-dom": "^18.0.0",
84
  "react-qrcode-logo": "^3.0.0",
85
  "reactflow": "^11.9.4",
86
- "remotion": "4.0.347",
87
  "remotion-animated": "^2.0.0",
88
  "remotion-transition-series": "^0.0.10",
89
  "sharp": "^0.33.5",
 
47
  },
48
  "dependencies": {
49
  "@ffmpeg-installer/ffmpeg": "^1.1.0",
50
+ "@remotion/bundler": "4.0.352",
51
+ "@remotion/cli": "4.0.352",
52
+ "@remotion/eslint-config": "4.0.352",
53
+ "@remotion/google-fonts": "4.0.352",
54
+ "@remotion/lottie": "4.0.352",
55
+ "@remotion/noise": "4.0.352",
56
+ "@remotion/preload": "4.0.352",
57
+ "@remotion/tailwind": "4.0.352",
58
+ "@remotion/transitions": "4.0.352",
59
+ "@remotion/zod-types": "4.0.352",
60
  "@types/react": "^18.0.26",
61
  "@types/web": "^0.0.86",
62
  "archiver": "^7.0.1",
 
83
  "react-dom": "^18.0.0",
84
  "react-qrcode-logo": "^3.0.0",
85
  "reactflow": "^11.9.4",
86
+ "remotion": "4.0.352",
87
  "remotion-animated": "^2.0.0",
88
  "remotion-transition-series": "^0.0.10",
89
  "sharp": "^0.33.5",
proxy-renderer.js CHANGED
@@ -1,4 +1,5 @@
1
  import { renderFrames, renderStill, stitchFramesToVideo } from '@remotion/renderer';
 
2
  import { bundle } from '@remotion/bundler';
3
  import path from 'path';
4
  import fs from 'fs';
@@ -19,7 +20,8 @@ function startChildProcess() {
19
  return childProcess;
20
  }
21
 
22
- childProcess = exec(cmd);
 
23
 
24
  childProcess.on('error', (err) => {
25
  console.error('Preview child process error:', err);
@@ -45,7 +47,7 @@ function startChildProcess() {
45
 
46
  // start immediately
47
  startChildProcess();
48
- export const renderProxy = async (outFile, jobId, options) => {
49
  const ScriptStr = fs.readFileSync(originalManuScriptPath);
50
  const ScriptInput = JSON.parse(ScriptStr);
51
  let {
@@ -54,7 +56,7 @@ export const renderProxy = async (outFile, jobId, options) => {
54
  } = GenerateScript(ScriptInput)
55
  const composition = ScriptInput?.meta?.renderComposition;
56
  duration = options?.duration || duration
57
- await ensureFfmpeg();
58
  const framesPerChunk = options?.framesPerChunk ?? 500;
59
  let framesRendered = 0;
60
  const chunkFiles = [];
@@ -79,10 +81,14 @@ export const renderProxy = async (outFile, jobId, options) => {
79
  },
80
  composition,
81
  duration,
82
- chunkOutFile);
 
83
  break;
84
  } catch (error) {
85
- console.error(`Render chunk failed. Retrying... (${retryAttemptsLeft - 1} attempts left)`);
 
 
 
86
  retryAttemptsLeft--;
87
  if (retryAttemptsLeft === 0) {
88
  throw error;
@@ -112,7 +118,22 @@ export const renderProxy = async (outFile, jobId, options) => {
112
  '-b:a', '192k',
113
  '-y',
114
  outFile
115
- ]);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
116
  ffmpegProcess.stdout.on('data', (data) => {
117
  console.log(data.toString());
118
  });
@@ -149,7 +170,8 @@ function renderChunk(
149
  options,
150
  composition,
151
  duration,
152
- finalOutFile
 
153
  ) {
154
  console.log('Rendering chunk from frame', options.startFrame,
155
  'to', options.endFrame,
@@ -207,17 +229,34 @@ function renderChunk(
207
  chromeMode: options?.chromeMode ?? "headless-shell"
208
  };
209
  console.log('Invoking studio with', renderOptions)
 
 
210
  axios.post('http://localhost:3000/api/render', renderOptions).then(resp => {
211
  console.log('Studio started render', resp.data)
212
  const proc = startChildProcess();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
213
  let settled = false;
214
  const cleanupHandlers = (() => {
215
  try {
216
  if (proc && proc.stdout && stdoutHandler) proc.stdout.removeListener('data', stdoutHandler);
217
- } catch (e) { }
218
  try {
219
  if (proc && proc.stderr && stderrHandler) proc.stderr.removeListener('data', stderrHandler);
220
- } catch (e) { }
221
  }).bind(this);
222
 
223
  const stdoutHandler = ((chunk) => {
@@ -258,4 +297,4 @@ function renderChunk(
258
  }).catch(reject)
259
  }).bind(this))
260
 
261
- }
 
1
  import { renderFrames, renderStill, stitchFramesToVideo } from '@remotion/renderer';
2
+
3
  import { bundle } from '@remotion/bundler';
4
  import path from 'path';
5
  import fs from 'fs';
 
20
  return childProcess;
21
  }
22
 
23
+ const isWindows = os.platform() === 'win32';
24
+ childProcess = spawn(isWindows ? 'npm.cmd' : 'npm', ['run', 'preview'], { detached: true });
25
 
26
  childProcess.on('error', (err) => {
27
  console.error('Preview child process error:', err);
 
47
 
48
  // start immediately
49
  startChildProcess();
50
+ export const renderProxy = async (outFile, jobId, options, controller) => {
51
  const ScriptStr = fs.readFileSync(originalManuScriptPath);
52
  const ScriptInput = JSON.parse(ScriptStr);
53
  let {
 
56
  } = GenerateScript(ScriptInput)
57
  const composition = ScriptInput?.meta?.renderComposition;
58
  duration = options?.duration || duration
59
+
60
  const framesPerChunk = options?.framesPerChunk ?? 500;
61
  let framesRendered = 0;
62
  const chunkFiles = [];
 
81
  },
82
  composition,
83
  duration,
84
+ chunkOutFile,
85
+ controller);
86
  break;
87
  } catch (error) {
88
+ console.error(`Render chunk failed. Retrying... (${retryAttemptsLeft - 1} attempts left)`);
89
+ if (controller._proxy_stopped) {
90
+ retryAttemptsLeft = 0
91
+ }
92
  retryAttemptsLeft--;
93
  if (retryAttemptsLeft === 0) {
94
  throw error;
 
118
  '-b:a', '192k',
119
  '-y',
120
  outFile
121
+ ], { detached: true });
122
+
123
+
124
+ if (controller) {
125
+ controller.stop = () => {
126
+ console.log('Stopping proxy render ffmpeg chunk join process');
127
+ try {
128
+ process.kill(-ffmpegProcess.pid, 'SIGKILL');
129
+ } catch (e) {
130
+ console.error(`Failed to kill process group ${-ffmpegProcess.pid}`, e);
131
+ ffmpegProcess.kill('SIGKILL');
132
+ }
133
+ }
134
+ }
135
+
136
+
137
  ffmpegProcess.stdout.on('data', (data) => {
138
  console.log(data.toString());
139
  });
 
170
  options,
171
  composition,
172
  duration,
173
+ finalOutFile,
174
+ controller
175
  ) {
176
  console.log('Rendering chunk from frame', options.startFrame,
177
  'to', options.endFrame,
 
229
  chromeMode: options?.chromeMode ?? "headless-shell"
230
  };
231
  console.log('Invoking studio with', renderOptions)
232
+
233
+
234
  axios.post('http://localhost:3000/api/render', renderOptions).then(resp => {
235
  console.log('Studio started render', resp.data)
236
  const proc = startChildProcess();
237
+
238
+
239
+ if (controller) {
240
+ controller.stop = () => {
241
+ controller._proxy_stopped = true
242
+ console.log('Stopping proxy render studio process');
243
+ try {
244
+ process.kill(-proc.pid, 'SIGKILL');
245
+ } catch (e) {
246
+ console.error(`Failed to kill process group ${-proc.pid}`, e);
247
+ proc.kill('SIGKILL');
248
+ }
249
+ }
250
+ }
251
+
252
  let settled = false;
253
  const cleanupHandlers = (() => {
254
  try {
255
  if (proc && proc.stdout && stdoutHandler) proc.stdout.removeListener('data', stdoutHandler);
256
+ } catch (e) { }
257
  try {
258
  if (proc && proc.stderr && stderrHandler) proc.stderr.removeListener('data', stderrHandler);
259
+ } catch (e) { }
260
  }).bind(this);
261
 
262
  const stdoutHandler = ((chunk) => {
 
297
  }).catch(reject)
298
  }).bind(this))
299
 
300
+ }
renderer.js CHANGED
@@ -1,7 +1,7 @@
1
  import {copyFileSync, existsSync, readdirSync, unlinkSync} from 'fs';
2
  import {join} from 'path';
3
  import pkg from 'common-utils';
4
- import {exec} from 'child_process';
5
  import {dirname} from 'path';
6
  import {fileURLToPath} from 'url';
7
  import { platform } from 'os';
@@ -54,18 +54,19 @@ export async function doRender(
54
  sendToObserver,
55
  target = 'render',
56
  ssrOptions,
57
- proxyOptions) {
 
58
  let outFile = path.join(process.cwd(), `out`, `${jobId}-video.mp4`);
59
  if (target.includes('still')) {
60
  outFile = path.join(process.cwd(), `out`, `${jobId}-still.jpg`);
61
  }
62
  if (ssrOptions) {
63
- await renderSSR(outFile, ssrOptions.startFrame, ssrOptions.endFrame)
64
  sendToObserver(jobId, 'completed');
65
  return outFile
66
  }
67
  else if (proxyOptions) {
68
- await renderProxy(outFile, jobId, proxyOptions)
69
  sendToObserver(jobId, 'completed');
70
  return outFile
71
  }
@@ -74,16 +75,27 @@ export async function doRender(
74
  if (platform() == 'win32') {
75
  script = `render-build:win32`
76
  }
77
- let cmd = `npm run ${script} --target=${target} --composition=${renderComposition} --out=${outFile}`;
78
- const childProcess = exec(cmd);
 
 
 
 
 
 
 
 
 
 
 
79
 
80
  console.log('Starting video render. ' + cmd);
81
  let updateCounter = 0;
82
  childProcess.stdout.on('data', (data) => {
83
  sendToObserver(jobId, data);
84
- if (!process.env.is_pm2) console.log(data.toString());
85
  if (updateCounter++ % 100 == 0 || updateCounter < 5) {
86
- console.log(data.split('\n')[0]);
87
  }
88
  });
89
 
 
1
  import {copyFileSync, existsSync, readdirSync, unlinkSync} from 'fs';
2
  import {join} from 'path';
3
  import pkg from 'common-utils';
4
+ import { exec, spawn } from 'child_process';
5
  import {dirname} from 'path';
6
  import {fileURLToPath} from 'url';
7
  import { platform } from 'os';
 
54
  sendToObserver,
55
  target = 'render',
56
  ssrOptions,
57
+ proxyOptions,
58
+ controller) {
59
  let outFile = path.join(process.cwd(), `out`, `${jobId}-video.mp4`);
60
  if (target.includes('still')) {
61
  outFile = path.join(process.cwd(), `out`, `${jobId}-still.jpg`);
62
  }
63
  if (ssrOptions) {
64
+ await renderSSR(outFile, ssrOptions.startFrame, ssrOptions.endFrame, controller)
65
  sendToObserver(jobId, 'completed');
66
  return outFile
67
  }
68
  else if (proxyOptions) {
69
+ await renderProxy(outFile, jobId, proxyOptions, controller)
70
  sendToObserver(jobId, 'completed');
71
  return outFile
72
  }
 
75
  if (platform() == 'win32') {
76
  script = `render-build:win32`
77
  }
78
+ const args = [`run`, script, `--target=${target}`, `--composition=${renderComposition}`, `--out=${outFile}`];
79
+ const cmd = `npm ${args.join(' ')}`;
80
+ const childProcess = spawn('npm', args, { detached: true });
81
+ if (controller && controller.stop) {
82
+ controller.stop = () => {
83
+ console.log('Stopping render studio cli process');
84
+ try {
85
+ process.kill(-childProcess.pid, 'SIGKILL');
86
+ } catch (e) {
87
+ console.error('Failed to kill process group:', e);
88
+ }
89
+ }
90
+ }
91
 
92
  console.log('Starting video render. ' + cmd);
93
  let updateCounter = 0;
94
  childProcess.stdout.on('data', (data) => {
95
  sendToObserver(jobId, data);
96
+ if (!process.env.is_pm2) console.log(data?.toString());
97
  if (updateCounter++ % 100 == 0 || updateCounter < 5) {
98
+ console.log(data?.split?.('\n')?.[0]);
99
  }
100
  });
101
 
routes.js CHANGED
@@ -23,7 +23,96 @@ const limiter = new Bottleneck({
23
  });
24
  RenderRouter.use(bodyParser.json());
25
  RenderRouter.use(bodyParser.urlencoded());
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26
  RenderRouter.post('/api/render-sync', async (req, res) => {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
27
  let fileUrl = req.body.fileUrl;
28
  let targetUrl = req.body.targetUrl;
29
  let skipClear = req.body.skip_clear;
@@ -47,15 +136,13 @@ RenderRouter.post('/api/render-sync', async (req, res) => {
47
  // make sure only i request is being processed at a time
48
  // set headers appoprately to hint that timeout must be large
49
 
50
- let jobId = req.body.jobId || Utils.generateUID(fileUrl);
51
  res.setHeader('X-Job-Id', jobId);
52
  res.setTimeout(0);
53
  res.setHeader('Connection', 'keep-alive');
54
-
55
  let logs = [];
56
  try {
57
  const run = async () => {
58
- let pref = new PerformanceRecorder();
59
  const dir = path.join(__dirname, 'public')
60
  const zipFile = path.join(dir, `exported-${jobId}.zip`)
61
  if (!existsSync(zipFile) || req.body.force || req.query.force) {
@@ -81,7 +168,8 @@ RenderRouter.post('/api/render-sync', async (req, res) => {
81
  },
82
  getNpmScript(req.query.media_type),
83
  undefined,
84
- undefined
 
85
  );
86
  }
87
  else if (renderMethod === 'all') {
@@ -97,7 +185,8 @@ RenderRouter.post('/api/render-sync', async (req, res) => {
97
  },
98
  getNpmScript(req.query.media_type),
99
  undefined,
100
- undefined
 
101
  )
102
  renderComplete = true;
103
  } catch (e) {
@@ -118,7 +207,8 @@ RenderRouter.post('/api/render-sync', async (req, res) => {
118
  {
119
  ...req.body.proxy,
120
  "framesPerChunk": req.body.proxy?.framesPerChunk || 99999
121
- }
 
122
  )
123
  renderComplete = true;
124
  } catch (e) {
@@ -140,7 +230,8 @@ RenderRouter.post('/api/render-sync', async (req, res) => {
140
  undefined,
141
  {
142
  ...req.body.proxy
143
- }
 
144
  )
145
  renderComplete = true;
146
  } catch (e) {
@@ -160,7 +251,8 @@ RenderRouter.post('/api/render-sync', async (req, res) => {
160
  },
161
  getNpmScript(req.query.media_type),
162
  req.body.ssr || {},
163
- undefined
 
164
  )
165
  renderComplete = true;
166
  } catch (e) {
@@ -181,7 +273,8 @@ RenderRouter.post('/api/render-sync', async (req, res) => {
181
  },
182
  getNpmScript(req.query.media_type),
183
  req.body.ssr || {},
184
- undefined
 
185
  );
186
  } else if (renderMethod === 'proxy') {
187
  await doRender(
@@ -195,7 +288,8 @@ RenderRouter.post('/api/render-sync', async (req, res) => {
195
  {
196
  ...req.body.proxy,
197
  "framesPerChunk": req.body.proxy?.framesPerChunk || 99999
198
- }
 
199
  );
200
  } else if (renderMethod === 'proxy-chunked') {
201
  await doRender(
@@ -206,7 +300,8 @@ RenderRouter.post('/api/render-sync', async (req, res) => {
206
  },
207
  getNpmScript(req.query.media_type),
208
  undefined,
209
- req.body.proxy || {}
 
210
  );
211
  }
212
  }
@@ -222,7 +317,7 @@ RenderRouter.post('/api/render-sync', async (req, res) => {
222
  clear();
223
  }
224
  return {
225
- response_time: pref.elapsed(),
226
  urls: [uploadResult.url],
227
  url: uploadResult.url,
228
  original_manuscript: originalManuscript,
@@ -242,7 +337,7 @@ RenderRouter.post('/api/render-sync', async (req, res) => {
242
  urls.find((u) => u.includes('.jpeg')) ||
243
  urls.find((u) => u.includes('.png'));
244
  return {
245
- response_time: pref.elapsed(),
246
  urls: urls,
247
  url,
248
  original_manuscript: originalManuscript,
@@ -250,10 +345,47 @@ RenderRouter.post('/api/render-sync', async (req, res) => {
250
  }
251
  }
252
 
 
 
 
 
 
 
 
 
 
253
  const result = await limiter.schedule(run);
254
- res.status(200).json({jobId, success: true, ...result});
 
 
 
 
 
 
 
 
 
 
 
 
 
255
  } catch (err) {
256
- console.error(`Render job ${jobId} failed:`, err.message);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
257
  res.status(500).json({
258
  jobId,
259
  success: false,
 
23
  });
24
  RenderRouter.use(bodyParser.json());
25
  RenderRouter.use(bodyParser.urlencoded());
26
+
27
+ const renderSyncRequestStatuses = new Map();
28
+
29
+ class RenderController {
30
+ stop() {
31
+ throw new Error('Render not stoppable !');
32
+ }
33
+ }
34
+
35
+ RenderRouter.get('/api/jobs', async (req, res) => {
36
+ const jobIds = Array.from(renderSyncRequestStatuses.keys());
37
+ const jobStatuses = jobIds.map((jobId) => {
38
+ const jobStatus = renderSyncRequestStatuses.get(jobId);
39
+ return {
40
+ jobId: jobId,
41
+ status: jobStatus.statusMessage,
42
+ ...jobStatus.result
43
+ };
44
+ });
45
+ return res.status(200).json(jobStatuses);
46
+ });
47
+
48
+
49
+ RenderRouter.get('/api/jobs/:jobId/stop', async (req, res) => {
50
+ const jobId = req.params.jobId;
51
+ if (!jobId) {
52
+ return res.status(400).json({ message: 'Missing jobId in request body.' });
53
+ }
54
+
55
+ const jobStatus = renderSyncRequestStatuses.get(jobId);
56
+ if (!jobStatus) {
57
+ return res.status(404).json({ message: `Job with ID ${jobId} not found.` });
58
+ }
59
+
60
+ if (jobStatus.controller && jobStatus.controller.stop) {
61
+ try {
62
+ jobStatus.controller.stop();
63
+ res
64
+ .status(200)
65
+ .json({ message: `Job ${jobId} stopped successfully.` });
66
+ } catch (e) {
67
+ res
68
+ .status(400)
69
+ .json({ message: `Job ${jobId} stoping failed. ${e.message}` });
70
+ }
71
+ } else {
72
+ res
73
+ .status(400)
74
+ .json({ message: `Job ${jobId} is not currently running or cannot be stopped.` });
75
+ }
76
+ renderSyncRequestStatuses.delete(jobId);
77
+ });
78
+
79
+
80
+ RenderRouter.get('/api/jobs/:jobId', async (req, res) => {
81
+ const jobId = req.params.jobId;
82
+ const jobStatus = renderSyncRequestStatuses.get(jobId);
83
+
84
+ if (jobStatus) {
85
+ return res.status(200).json({
86
+ message: jobStatus.message,
87
+ statusMessage: jobStatus.statusMessage,
88
+ ...jobStatus.result
89
+ });
90
+ } else {
91
+ return res.status(404).json({ message: `Job with ID ${jobId} not found.` });
92
+ }
93
+ });
94
+
95
  RenderRouter.post('/api/render-sync', async (req, res) => {
96
+ const jobId = req.body.jobId || Utils.generateUID(req.body.fileUrl);
97
+
98
+ // delete all jobs that finished more than 24 hours ago
99
+ const now = Date.now();
100
+ for (const [jobId, jobStatus] of renderSyncRequestStatuses.entries()) {
101
+ if (jobStatus.finished && (now - jobStatus.finished) > 24 * 60 * 60 * 1000) {
102
+ renderSyncRequestStatuses.delete(jobId);
103
+ }
104
+ }
105
+
106
+ const controller = new RenderController();
107
+ if (renderSyncRequestStatuses.has(jobId)) {
108
+ let job = renderSyncRequestStatuses.get(jobId);
109
+ return res.status(202).json({
110
+ jobId,
111
+ message: 'Job already in progress or queued.',
112
+ ...job.result
113
+ });
114
+ }
115
+
116
  let fileUrl = req.body.fileUrl;
117
  let targetUrl = req.body.targetUrl;
118
  let skipClear = req.body.skip_clear;
 
136
  // make sure only i request is being processed at a time
137
  // set headers appoprately to hint that timeout must be large
138
 
 
139
  res.setHeader('X-Job-Id', jobId);
140
  res.setTimeout(0);
141
  res.setHeader('Connection', 'keep-alive');
142
+ const perf = new PerformanceRecorder();
143
  let logs = [];
144
  try {
145
  const run = async () => {
 
146
  const dir = path.join(__dirname, 'public')
147
  const zipFile = path.join(dir, `exported-${jobId}.zip`)
148
  if (!existsSync(zipFile) || req.body.force || req.query.force) {
 
168
  },
169
  getNpmScript(req.query.media_type),
170
  undefined,
171
+ undefined,
172
+ controller
173
  );
174
  }
175
  else if (renderMethod === 'all') {
 
185
  },
186
  getNpmScript(req.query.media_type),
187
  undefined,
188
+ undefined,
189
+ controller
190
  )
191
  renderComplete = true;
192
  } catch (e) {
 
207
  {
208
  ...req.body.proxy,
209
  "framesPerChunk": req.body.proxy?.framesPerChunk || 99999
210
+ },
211
+ controller
212
  )
213
  renderComplete = true;
214
  } catch (e) {
 
230
  undefined,
231
  {
232
  ...req.body.proxy
233
+ },
234
+ controller
235
  )
236
  renderComplete = true;
237
  } catch (e) {
 
251
  },
252
  getNpmScript(req.query.media_type),
253
  req.body.ssr || {},
254
+ undefined,
255
+ controller
256
  )
257
  renderComplete = true;
258
  } catch (e) {
 
273
  },
274
  getNpmScript(req.query.media_type),
275
  req.body.ssr || {},
276
+ undefined,
277
+ controller
278
  );
279
  } else if (renderMethod === 'proxy') {
280
  await doRender(
 
288
  {
289
  ...req.body.proxy,
290
  "framesPerChunk": req.body.proxy?.framesPerChunk || 99999
291
+ },
292
+ controller
293
  );
294
  } else if (renderMethod === 'proxy-chunked') {
295
  await doRender(
 
300
  },
301
  getNpmScript(req.query.media_type),
302
  undefined,
303
+ req.body.proxy || {},
304
+ controller
305
  );
306
  }
307
  }
 
317
  clear();
318
  }
319
  return {
320
+ response_time: perf.elapsed(),
321
  urls: [uploadResult.url],
322
  url: uploadResult.url,
323
  original_manuscript: originalManuscript,
 
337
  urls.find((u) => u.includes('.jpeg')) ||
338
  urls.find((u) => u.includes('.png'));
339
  return {
340
+ response_time: perf.elapsed(),
341
  urls: urls,
342
  url,
343
  original_manuscript: originalManuscript,
 
345
  }
346
  }
347
 
348
+ renderSyncRequestStatuses.set(jobId,
349
+ {
350
+ id: jobId,
351
+ controller,
352
+ statusMessage: 'IN_PROGRESS',
353
+ result: undefined
354
+ }
355
+ );
356
+
357
  const result = await limiter.schedule(run);
358
+ let job = renderSyncRequestStatuses.get(jobId);
359
+ if (job) {
360
+ delete job.controller
361
+ renderSyncRequestStatuses.set(jobId,
362
+ {
363
+ finished: Date.now(),
364
+ id: jobId,
365
+ response_time: perf.elapsedSeconds(),
366
+ statusMessage: 'COMPLETED',
367
+ result: { jobId, success: true, ...result }
368
+ }
369
+ );
370
+ }
371
+ res.status(200).json({ jobId, success: true, response_time: perf.elapsedSeconds(), ...result });
372
  } catch (err) {
373
+ console.error(`Render job ${jobId} failed:`, err.message, err);
374
+
375
+ let job = renderSyncRequestStatuses.get(jobId);
376
+ if (job) {
377
+ delete job.controller
378
+ renderSyncRequestStatuses.set(jobId,
379
+ {
380
+ finished: Date.now(),
381
+ id: jobId,
382
+ message: err.message + ' Details : ' + logs.join('\n'),
383
+ response_time: perf.elapsedSeconds(),
384
+ statusMessage: 'FAILED',
385
+ result: { jobId, success: false }
386
+ }
387
+ );
388
+ }
389
  res.status(500).json({
390
  jobId,
391
  success: false,
ssr.js CHANGED
@@ -29,7 +29,7 @@ function updateAssetInfo(assetInfoNew) {
29
  fs.writeFileSync(assetsInfoFile, JSON.stringify(assetInfoNew))
30
  }
31
 
32
- export const renderSSR = async (outFile, startFrame, endFrame) => {
33
  const ScriptStr = fs.readFileSync(originalManuScriptPath);
34
  const ScriptInput = JSON.parse(ScriptStr);
35
  let {
@@ -121,6 +121,12 @@ export const renderSSR = async (outFile, startFrame, endFrame) => {
121
  const estimatedMsLeft = remainingFrames * (timeTakenPerFrameMs || 0);
122
  const timeLeftSeconds = formatMsToETA(estimatedMsLeft);
123
  console.log(`Rendered ${frameIndex} of ${duration} in ${timeTakenPerFrameMs?.toFixed(0)}ms Time left ${timeLeftSeconds}`);
 
 
 
 
 
 
124
  }
125
  });
126
 
@@ -134,7 +140,13 @@ export const renderSSR = async (outFile, startFrame, endFrame) => {
134
  ...renderConfig.composition,
135
  audioCodec: 'mp3',
136
  outputLocation: outFile,
137
- verbose: true
 
 
 
 
 
 
138
  })
139
 
140
  console.log('resultVideo', resultVideo)
 
29
  fs.writeFileSync(assetsInfoFile, JSON.stringify(assetInfoNew))
30
  }
31
 
32
+ export const renderSSR = async (outFile, startFrame, endFrame, controller) => {
33
  const ScriptStr = fs.readFileSync(originalManuScriptPath);
34
  const ScriptInput = JSON.parse(ScriptStr);
35
  let {
 
121
  const estimatedMsLeft = remainingFrames * (timeTakenPerFrameMs || 0);
122
  const timeLeftSeconds = formatMsToETA(estimatedMsLeft);
123
  console.log(`Rendered ${frameIndex} of ${duration} in ${timeTakenPerFrameMs?.toFixed(0)}ms Time left ${timeLeftSeconds}`);
124
+ },
125
+ cancelSignal: (callback) => {
126
+ controller.stop = () => {
127
+ console.log('Stopping render studio ssr renderframes process');
128
+ callback();
129
+ }
130
  }
131
  });
132
 
 
140
  ...renderConfig.composition,
141
  audioCodec: 'mp3',
142
  outputLocation: outFile,
143
+ verbose: true,
144
+ cancelSignal: (callback) => {
145
+ controller.stop = () => {
146
+ console.log('Stopping render studio ssr stitchFramesToVideo process');
147
+ callback();
148
+ }
149
+ }
150
  })
151
 
152
  console.log('resultVideo', resultVideo)