@koda-sl/baker-cli 0.294.0-dev.97421c92b → 0.295.0-dev.f941e60fb

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.
package/dist/cli.js CHANGED
@@ -16,6 +16,7 @@ import {
16
16
  RunAbortedError,
17
17
  SEEDANCE_DURATIONS,
18
18
  SEEDANCE_PROFILE,
19
+ SPOKEN_WORDS_PER_SECOND,
19
20
  VIDEO_GENERATE_MODELS,
20
21
  ValidationError,
21
22
  YtDlpError,
@@ -53,6 +54,7 @@ import {
53
54
  sha256Hex,
54
55
  spineInputFlags,
55
56
  spineInputOps,
57
+ spokenWordsIn,
56
58
  supportsLastFrame,
57
59
  supportsParam,
58
60
  supportsReferenceToVideo,
@@ -60,7 +62,7 @@ import {
60
62
  ulid,
61
63
  validateCanvasDeep,
62
64
  ytDlpBlockSignal
63
- } from "./chunk-LTXNRRXW.js";
65
+ } from "./chunk-ER3KCAW3.js";
64
66
  import {
65
67
  csvOrJson,
66
68
  daysAgoIso,
@@ -57602,6 +57604,21 @@ function uploadFailure(path47) {
57602
57604
  };
57603
57605
  }
57604
57606
 
57607
+ // src/commands/studio/spokenPace.ts
57608
+ var WORDS_PER_SECOND2 = SPOKEN_WORDS_PER_SECOND;
57609
+ var spokenWords = spokenWordsIn;
57610
+ function wordsThatFit(seconds) {
57611
+ return Math.floor(seconds * WORDS_PER_SECOND2);
57612
+ }
57613
+ function spokenPaceHint(prompt, seconds) {
57614
+ if (!seconds) return null;
57615
+ const words2 = spokenWords(prompt);
57616
+ const fits = wordsThatFit(seconds);
57617
+ if (words2 === 0 || words2 <= fits) return null;
57618
+ const rate = (words2 / seconds).toFixed(1);
57619
+ return `The line is ${words2} words and this clip is ${seconds}s \u2014 that is ${rate} words a second against a natural 2.5. The model will not run over, it will RUSH: syllables swallowed, endings clipped, and the take unusable however good the picture. Cut the line to about ${fits} words, or give it the length it needs (${Math.ceil(words2 / 2.5)}s). Do not re-render the same line at the same length and hope.`;
57620
+ }
57621
+
57605
57622
  // src/commands/studio/animate.ts
57606
57623
  var MODEL_LIST = VIDEO_MODEL_IDS;
57607
57624
  var DEFAULT_MAX_WAIT_MS = 6e5;
@@ -57653,10 +57670,10 @@ registerSchema({
57653
57670
  },
57654
57671
  duration: {
57655
57672
  type: "number",
57656
- // Left unset this SNAPS onto the model's set rather than failing: the lane
57657
- // default is 5s and Veo renders only 4/6/8, so an unstated length becomes 4
57658
- // there. An explicit length the model cannot render is refused by name.
57659
- description: `Clip length in seconds \u2014 per-model. Unset it and the lane default (5s) snaps onto what the model renders. Past 15s only bytedance/seedance-2.5 will do it, out to 30. Across the roster: ${CLIP_DURATIONS.join(", ")}`,
57673
+ // Left unset this SNAPS onto the model's set rather than failing: Veo renders
57674
+ // only 4/6/8, so an unstated length lands on the nearest of those. An explicit
57675
+ // length the model cannot render is refused by name.
57676
+ description: `Clip length in seconds \u2014 per-model. LEAVE IT OFF when someone speaks: the line sizes the clip itself, at ~2.5 words a second (40 words needs 16s), because a model handed more words than fit does not run over, it rushes and swallows syllables. Unset with nobody speaking is 5s. Past 15s only bytedance/seedance-2.5 will do it, out to 30. Across the roster: ${CLIP_DURATIONS.join(", ")}`,
57660
57677
  required: false
57661
57678
  },
57662
57679
  quality: {
@@ -57832,6 +57849,8 @@ function costHintsFor(body) {
57832
57849
  ];
57833
57850
  const pinned = pinnedModelHint({ avatar: body.avatar, model: body.model, generateAudio: body.generateAudio });
57834
57851
  if (pinned) hints2.push(pinned);
57852
+ const pace = spokenPaceHint(body.prompt, body.duration);
57853
+ if (pace) hints2.push(pace);
57835
57854
  if (count > 1) {
57836
57855
  hints2.push(
57837
57856
  "Ask for more than one take only when the MOTION is the risk \u2014 for a look you are unsure about, iterate on the still first."
@@ -57875,7 +57894,7 @@ var animateCommand = defineCommand200({
57875
57894
  "aspect-ratio": { type: "string", description: "Aspect ratio (default 9:16)", required: false },
57876
57895
  duration: {
57877
57896
  type: "string",
57878
- description: `Seconds, per-model \u2014 unset snaps the 5s default onto the model's set. Roster: ${CLIP_DURATIONS.join(" | ")}`,
57897
+ description: `Seconds, per-model \u2014 leave it off when someone speaks and the line sizes it (~2.5 words/s); 5s when nobody does. Roster: ${CLIP_DURATIONS.join(" | ")}`,
57879
57898
  required: false
57880
57899
  },
57881
57900
  quality: {