storyforge 0.11.2 → 0.11.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5640,6 +5640,8 @@ var renderGeminiRemotion = async (shot, ctx) => {
5640
5640
  propsPath,
5641
5641
  "--output",
5642
5642
  ctx.sceneOutPath,
5643
+ "--frames",
5644
+ `0-${durationFrames - 1}`,
5643
5645
  "--concurrency",
5644
5646
  "4"
5645
5647
  ],
@@ -5980,6 +5982,8 @@ var renderRemotion = async (shot, ctx) => {
5980
5982
  propsPath,
5981
5983
  "--output",
5982
5984
  ctx.sceneOutPath,
5985
+ "--frames",
5986
+ `0-${durationFrames - 1}`,
5983
5987
  "--concurrency",
5984
5988
  "4"
5985
5989
  ],
@@ -6237,6 +6241,11 @@ var renderWebArticleRemotion = async (shot, ctx) => {
6237
6241
  `web-article+remotion requires shot.sourceUrl for shot ${shot.id}`
6238
6242
  );
6239
6243
  }
6244
+ if (/\.pdf(\?|$|#)/i.test(shot.sourceUrl)) {
6245
+ throw new Error(
6246
+ `web-article+remotion: sourceUrl is a PDF (${shot.sourceUrl}). PDFs aren't extractable by readability; planner should not pick PDFs for this engine.`
6247
+ );
6248
+ }
6240
6249
  const captureMode = shot.captureMode ?? "preview-card";
6241
6250
  if (captureMode === "screenshot-cropped" || captureMode === "screenshot-full") {
6242
6251
  if (!process.env.MICROLINK_API_KEY) {
@@ -6304,6 +6313,8 @@ var renderWebArticleRemotion = async (shot, ctx) => {
6304
6313
  propsPath,
6305
6314
  "--output",
6306
6315
  ctx.sceneOutPath,
6316
+ "--frames",
6317
+ `0-${durationFrames - 1}`,
6307
6318
  "--concurrency",
6308
6319
  "4"
6309
6320
  ],
@@ -6779,6 +6790,17 @@ var renderDocumentaryV2Lambda = async (shot, ctx) => {
6779
6790
  `lambda: shot.prompt must be CompositionV2Data JSON or a path (shot ${shot.id})`
6780
6791
  );
6781
6792
  }
6793
+ let cfg;
6794
+ try {
6795
+ cfg = readLambdaCfg();
6796
+ } catch (err) {
6797
+ ctx.progress.emit({
6798
+ phase: "preparing",
6799
+ shotId: shot.id,
6800
+ warnings: [`lambda: ${err.message.split(".")[0]} \u2014 falling back to local documentary-v2 adapter`]
6801
+ });
6802
+ return renderDocumentaryV2(shot, ctx);
6803
+ }
6782
6804
  ctx.progress.emit({ phase: "preparing", shotId: shot.id });
6783
6805
  let data;
6784
6806
  if (shot.prompt.trimStart().startsWith("{")) {
@@ -6789,7 +6811,6 @@ var renderDocumentaryV2Lambda = async (shot, ctx) => {
6789
6811
  }
6790
6812
  data = JSON.parse(fs12.readFileSync(shot.prompt, "utf8"));
6791
6813
  }
6792
- const cfg = readLambdaCfg();
6793
6814
  let renderMediaOnLambda;
6794
6815
  let getRenderProgress;
6795
6816
  try {
@@ -6981,10 +7002,16 @@ var renderManimRunPod = async (shot, ctx) => {
6981
7002
  throw new Error(`runpod-manim: shot.manimCode required for shot ${shot.id}`);
6982
7003
  }
6983
7004
  const endpointId = process.env.RUNPOD_MANIM_ENDPOINT_ID;
6984
- if (!endpointId) {
6985
- throw new Error(
6986
- "runpod-manim: RUNPOD_MANIM_ENDPOINT_ID not set. Deploy via `cd apps/web/lib/runpod && python -m runpod_flash deploy flash-manim.py`."
6987
- );
7005
+ const apiKey2 = process.env.RUNPOD_API_KEY;
7006
+ if (!endpointId || !apiKey2) {
7007
+ const missing = !apiKey2 ? "RUNPOD_API_KEY" : "RUNPOD_MANIM_ENDPOINT_ID";
7008
+ ctx.progress.emit({
7009
+ phase: "preparing",
7010
+ shotId: shot.id,
7011
+ warnings: [`runpod-manim: ${missing} not set \u2014 falling back to local manim adapter for ${ctx.resolvedEngine}`]
7012
+ });
7013
+ const localAdapter = ctx.resolvedEngine === "manim+remotion" ? renderManimRemotion : ctx.resolvedEngine === "gemini+manim+remotion" ? renderGeminiManimRemotion : renderManim;
7014
+ return localAdapter(shot, ctx);
6988
7015
  }
6989
7016
  ctx.progress.emit({ phase: "preparing", shotId: shot.id });
6990
7017
  const status = await runJob(
@@ -7040,10 +7067,15 @@ var renderHyperframesRunPod = async (shot, ctx) => {
7040
7067
  throw new Error(`runpod-hyperframes: shot.hyperframesHtml required for shot ${shot.id}`);
7041
7068
  }
7042
7069
  const endpointId = process.env.RUNPOD_HYPERFRAMES_ENDPOINT_ID;
7043
- if (!endpointId) {
7044
- throw new Error(
7045
- "runpod-hyperframes: RUNPOD_HYPERFRAMES_ENDPOINT_ID not set. Deploy via `cd apps/web/lib/runpod && python -m runpod_flash deploy flash-hyperframes.py`."
7046
- );
7070
+ const apiKey2 = process.env.RUNPOD_API_KEY;
7071
+ if (!endpointId || !apiKey2) {
7072
+ const missing = !apiKey2 ? "RUNPOD_API_KEY" : "RUNPOD_HYPERFRAMES_ENDPOINT_ID";
7073
+ ctx.progress.emit({
7074
+ phase: "preparing",
7075
+ shotId: shot.id,
7076
+ warnings: [`runpod-hyperframes: ${missing} not set \u2014 falling back to local hyperframes adapter`]
7077
+ });
7078
+ return renderHyperframes(shot, ctx);
7047
7079
  }
7048
7080
  ctx.progress.emit({ phase: "preparing", shotId: shot.id });
7049
7081
  const dims = ctx.aspect === "9:16" ? { width: 1080, height: 1920 } : { width: 1920, height: 1080 };
package/dist/index.js CHANGED
@@ -1615,7 +1615,7 @@ Return ONLY the complete updated TSX. No markdown fences, no explanation.`;
1615
1615
  return "0.0.0";
1616
1616
  })();
1617
1617
  void (async () => {
1618
- const { BridgePoller } = await import("./bridge-poller-WP2BQ3UQ.js");
1618
+ const { BridgePoller } = await import("./bridge-poller-6AWMIF3V.js");
1619
1619
  const poller = new BridgePoller({ baseUrl: bridgeUrl, token: bridgeToken, clientVersion: `storyforge ${pkgVersion}` });
1620
1620
  poller.start();
1621
1621
  })();
@@ -2438,7 +2438,7 @@ function resolveBridgeToken2(explicit) {
2438
2438
  // package.json
2439
2439
  var package_default = {
2440
2440
  name: "storyforge",
2441
- version: "0.11.2",
2441
+ version: "0.11.4",
2442
2442
  description: "StoryForge \u2014 local bridge for the Forge video production web app. Parallel clip-render orchestrator (Remotion 4 + Manim + HyperFrames + ffmpeg) + final video stitcher + dependency doctor.",
2443
2443
  type: "module",
2444
2444
  bin: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "storyforge",
3
- "version": "0.11.2",
3
+ "version": "0.11.4",
4
4
  "description": "StoryForge — local bridge for the Forge video production web app. Parallel clip-render orchestrator (Remotion 4 + Manim + HyperFrames + ffmpeg) + final video stitcher + dependency doctor.",
5
5
  "type": "module",
6
6
  "bin": {