@docyrus/animaguru 0.29.1 → 0.30.0
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/README.md +17 -0
- package/dist/animaguru.js +51 -16
- package/package.json +1 -1
- package/skills/animaguru/SKILL.md +1 -1
package/README.md
CHANGED
|
@@ -311,6 +311,23 @@ animaguru assets generate PROJECT_ID --type video --model fal/flux-3-max \
|
|
|
311
311
|
|
|
312
312
|
`--keyframes` takes 1–10 `seconds,SHA` pairs, separated by semicolons, of this project's images or sprite art. Each is reached at its second, within `--seconds`; the clip has 24 frames a second and each keyframe needs a frame of its own. `--aspect-ratio auto` (default) follows the first keyframe, or give a ratio. FLUX 3 Max always works through the prompt before filming: `--prompt-expansion quality` asks for its thorough, slower level, any other value its light one. It takes `--seed`. Its dry runs are local estimates.
|
|
313
313
|
|
|
314
|
+
CLI 0.30.0 adds HeyGen Video 1's other workflows (`heygen/heygen-video-1`). Besides image-to-video, it writes videos from text (`--workflow text-to-video`, with `--aspect-ratio`) and keeps the subjects of saved files (`--workflow reference-to-video`), for 5–15 whole seconds at 480p (default), 768p, 1080p or 2K. It makes its own sound, takes no `--soundtrack`, and takes `--seed`.
|
|
315
|
+
|
|
316
|
+
```sh
|
|
317
|
+
# A 30-second scene from text; clips over 15 seconds need prompt rewriting.
|
|
318
|
+
animaguru assets generate PROJECT_ID --type video --model heygen/heygen-video-1 \
|
|
319
|
+
--workflow text-to-video --name "Potter" \
|
|
320
|
+
--prompt "A potter shapes a clay bowl on a wheel in a sunlit studio. One continuous shot, soft workshop sounds, no music" \
|
|
321
|
+
--seconds 30 --prompt-expansion balanced --resolution 1080p --aspect-ratio 16:9 --dry-run
|
|
322
|
+
# Keep a product and a place from saved images.
|
|
323
|
+
animaguru assets generate PROJECT_ID --type video --model heygen/heygen-video-1 \
|
|
324
|
+
--workflow reference-to-video --name "Harness check" \
|
|
325
|
+
--prompt "A supervisor wearing the harness in Image 1 stands still beside the line in Image 2 and speaks to camera" \
|
|
326
|
+
--references HARNESS_SHA,FACTORY_SHA --seconds 10 --resolution 768p --dry-run
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
From an image or text, HeyGen's clips run to 30 seconds while it rewrites the prompt: `--prompt-expansion balanced` asks for its fastest rewriting and `quality` its fuller one. Every second of a clip over 15 seconds costs its long-clip rate. At 1080p and 2K, text-to-video and reference-to-video are 16:9 or 9:16; from an image, the clip keeps the image's shape. `reference-to-video` takes up to nine `--references` images, three `--reference-videos` (HeyGen reads the first 5 seconds of each) and three `--audio-references`, twelve files in all, named Image 1, Video 1, Audio 1 in the prompt. It takes no `--reference`, `--end-reference` or `--middle-reference`, and `--aspect-ratio auto` (default) follows the first image or clip. HeyGen takes images of up to 5 MB, and clips and audio of up to 16 MB. Up to 5 seconds of each reference clip, and each reference image after the second, add to the cost; audio references are free.
|
|
330
|
+
|
|
314
331
|
### Vectors
|
|
315
332
|
|
|
316
333
|
CLI 0.27.0 adds vectors: editable SVG files drawn by Ideogram on fal.ai (`fal/ideogram-vector`), for logos, icons, mascots and flat illustrations that stay sharp at any size and can be animated shape by shape.
|
package/dist/animaguru.js
CHANGED
|
@@ -19761,7 +19761,7 @@ var require_ignore2 = __commonJS({
|
|
|
19761
19761
|
// cli/package.json
|
|
19762
19762
|
var package_default = {
|
|
19763
19763
|
name: "@docyrus/animaguru",
|
|
19764
|
-
version: "0.
|
|
19764
|
+
version: "0.30.0",
|
|
19765
19765
|
description: "Agent-friendly AnimaGuru CLI built with CrustJS",
|
|
19766
19766
|
type: "module",
|
|
19767
19767
|
bin: {
|
|
@@ -45042,6 +45042,9 @@ var MAX_CAMERA_KEYFRAMES = 12;
|
|
|
45042
45042
|
var MAX_CAMERA_TURNS = 32;
|
|
45043
45043
|
var MAX_IMAGE_KEYFRAMES = 10;
|
|
45044
45044
|
var KEYFRAME_FPS = 24;
|
|
45045
|
+
var HEYGEN_RESOLUTIONS = ["480p", "768p", "1080p", "2k"];
|
|
45046
|
+
var HEYGEN_WIDE = { "1080p": ["16:9", "9:16"], "2k": ["16:9", "9:16"] };
|
|
45047
|
+
var HEYGEN_LONG = { max: 30, creditsPerSecond: { "480p": 4.5, "768p": 7.5, "1080p": 10.5, "2k": 10.5 } };
|
|
45045
45048
|
var H3_MAX = "minimax/h3-max";
|
|
45046
45049
|
var FLUX_3_MAX = "blackforestlabs/flux-3-max";
|
|
45047
45050
|
var h3Endpoints = (route) => ({ "image-to-video": `${route}/image-to-video`, "text-to-video": `${route}/text-to-video`, "extend-video": `${route}/extend-video` });
|
|
@@ -45061,11 +45064,18 @@ var SPRITE_VIDEO_MODELS = [
|
|
|
45061
45064
|
id: "heygen/heygen-video-1",
|
|
45062
45065
|
label: "HeyGen Video 1",
|
|
45063
45066
|
provider: "heygen",
|
|
45064
|
-
workflows: ["image-to-video"],
|
|
45067
|
+
workflows: ["image-to-video", "text-to-video", "reference-to-video"],
|
|
45065
45068
|
resolutions: ["480p", "768p"],
|
|
45069
|
+
workflowOptions: {
|
|
45070
|
+
"image-to-video": { resolutions: HEYGEN_RESOLUTIONS, long: HEYGEN_LONG },
|
|
45071
|
+
"text-to-video": { resolutions: HEYGEN_RESOLUTIONS, long: HEYGEN_LONG, shapes: HEYGEN_WIDE },
|
|
45072
|
+
"reference-to-video": { resolutions: HEYGEN_RESOLUTIONS, shapes: HEYGEN_WIDE, referencesOnly: true, creditsPerSecond: { "480p": 7, "768p": 10, "1080p": 18, "2k": 18 } }
|
|
45073
|
+
},
|
|
45066
45074
|
modes: ["cost"],
|
|
45067
45075
|
lastFrame: false,
|
|
45068
|
-
|
|
45076
|
+
seed: true,
|
|
45077
|
+
promptExpansion: PROMPT_EXPANSION_MODES,
|
|
45078
|
+
estimatedCreditsPerSecond: { "480p": { cost: 2 }, "768p": { cost: 3.6 }, "1080p": { cost: 10 }, "2k": { cost: 10 } },
|
|
45069
45079
|
seconds: { min: 5, max: 15 }
|
|
45070
45080
|
},
|
|
45071
45081
|
{
|
|
@@ -45145,21 +45155,29 @@ function spriteVideoModel(id2) {
|
|
|
45145
45155
|
function videoResolutions(model, workflow = "image-to-video") {
|
|
45146
45156
|
return model.workflowOptions?.[workflow]?.resolutions ?? model.resolutions;
|
|
45147
45157
|
}
|
|
45148
|
-
function videoSeconds(model, workflow = "image-to-video") {
|
|
45149
|
-
|
|
45158
|
+
function videoSeconds(model, workflow = "image-to-video", rewrites = false) {
|
|
45159
|
+
const options = model.workflowOptions?.[workflow];
|
|
45160
|
+
const range = options?.seconds ?? model.seconds;
|
|
45161
|
+
return rewrites && options?.long ? { ...range, max: options.long.max } : range;
|
|
45150
45162
|
}
|
|
45163
|
+
var longVideo = (model, workflow, seconds2) => Boolean(model.workflowOptions?.[workflow]?.long) && Math.round(seconds2) > videoSeconds(model, workflow).max;
|
|
45151
45164
|
var INCLUDED_REFERENCE_TOKENS = 4096;
|
|
45152
45165
|
var imageReferenceTokens = (size) => size && size[0] > 0 && size[1] > 0 ? 32 * Math.ceil(32 * Math.max(...size) / Math.min(...size)) : 1824;
|
|
45153
45166
|
var clipReferenceTokens = (seconds2, resolution) => Math.ceil(Math.max(0, seconds2) * (resolution === "480p" ? 2700 : 6900));
|
|
45154
45167
|
var audioReferenceTokens = (seconds2) => Math.ceil(Math.max(0, seconds2) * 80);
|
|
45155
45168
|
var DEFAULT_GENERATED_REFERENCES = 2;
|
|
45169
|
+
var HEYGEN_REFERENCE_CLIP_SECONDS = 5;
|
|
45170
|
+
var HEYGEN_FREE_REFERENCE_IMAGES = 2;
|
|
45156
45171
|
function billedVideoSeconds(model, workflow, seconds2) {
|
|
45157
45172
|
const s = videoSeconds(model, workflow).fractional ? seconds2 : Math.round(seconds2);
|
|
45158
45173
|
if (workflow === "3d-to-video") return Math.max(5, s);
|
|
45159
45174
|
return workflow === "lip-sync" && s > 15 ? s * 1.2 : s;
|
|
45160
45175
|
}
|
|
45161
45176
|
function videoCreditsPerSecond(model, p) {
|
|
45162
|
-
const
|
|
45177
|
+
const workflow = p.workflow ?? "image-to-video";
|
|
45178
|
+
const options = model.workflowOptions?.[workflow];
|
|
45179
|
+
const long = p.seconds !== void 0 && longVideo(model, workflow, p.seconds) ? options?.long?.creditsPerSecond[p.resolution] : void 0;
|
|
45180
|
+
const override = long ?? options?.creditsPerSecond?.[p.resolution];
|
|
45163
45181
|
if (override !== void 0) return override;
|
|
45164
45182
|
const byMode = model.estimatedCreditsPerSecond[p.resolution] ?? model.estimatedCreditsPerSecond[model.resolutions[0]];
|
|
45165
45183
|
return byMode[p.mode] ?? byMode[model.modes[0]] ?? 0;
|
|
@@ -45167,7 +45185,7 @@ function videoCreditsPerSecond(model, p) {
|
|
|
45167
45185
|
function spriteVideoEstimate(model, p, extras2 = {}) {
|
|
45168
45186
|
const seconds2 = billedVideoSeconds(model, p.workflow ?? "image-to-video", p.seconds);
|
|
45169
45187
|
const beyond = Math.max(0, (extras2.referenceTokens ?? 0) - INCLUDED_REFERENCE_TOKENS) * 2e-3 + (extras2.generatedReferences ?? 0) * 3;
|
|
45170
|
-
return Math.max(1, Math.ceil((videoCreditsPerSecond(model, p) * seconds2 + beyond) * UNITS_PER_CREDIT));
|
|
45188
|
+
return Math.max(1, Math.ceil((videoCreditsPerSecond(model, p) * (seconds2 + (extras2.referenceSeconds ?? 0)) + beyond) * UNITS_PER_CREDIT));
|
|
45171
45189
|
}
|
|
45172
45190
|
|
|
45173
45191
|
// shared/sprites/generation-models.ts
|
|
@@ -47101,14 +47119,19 @@ function videoChecks(p, ctx) {
|
|
|
47101
47119
|
if (!model.workflows.includes(p.workflow)) return issue2("workflow", "Choose a way of making video supported by the video model.");
|
|
47102
47120
|
const w = p.workflow;
|
|
47103
47121
|
const extend2 = w === "extend-video";
|
|
47104
|
-
const
|
|
47122
|
+
const rewrites = p.promptExpansion !== "disabled";
|
|
47123
|
+
const range = videoSeconds(model, w, rewrites);
|
|
47105
47124
|
const seconds2 = p.seconds ?? defaultSeconds(model, w);
|
|
47106
47125
|
const resolution = p.resolution ?? videoResolutions(model, w)[0];
|
|
47126
|
+
const options = model.workflowOptions?.[w];
|
|
47107
47127
|
const prompt = PROMPT[w];
|
|
47108
47128
|
if (prompt === "none" && p.prompt) issue2("prompt", `${w} takes no prompt; leave it out.`);
|
|
47109
47129
|
if (!prompt && p.prompt.length < 3) issue2("prompt", "Describe the video in at least 3 characters.");
|
|
47110
47130
|
if ((w === "recast" || w === "3d-to-video") && p.prompt.length > 2e3) issue2("prompt", `${w} takes a prompt of at most 2,000 characters.`);
|
|
47111
|
-
if (!lengthFromMedia(w) && (seconds2 < range.min || seconds2 > range.max || !range.fractional && !Number.isInteger(seconds2)))
|
|
47131
|
+
if (!lengthFromMedia(w) && (seconds2 < range.min || seconds2 > range.max || !range.fractional && !Number.isInteger(seconds2))) {
|
|
47132
|
+
if (!rewrites && options?.long && Number.isInteger(seconds2) && seconds2 > range.max && seconds2 <= options.long.max) issue2("seconds", `Set promptExpansion to balanced or quality for a video over ${range.max} seconds.`);
|
|
47133
|
+
else issue2("seconds", "Choose a duration supported by the video model.");
|
|
47134
|
+
}
|
|
47112
47135
|
if (!videoResolutions(model, w).includes(resolution)) issue2("resolution", "Choose a resolution supported by the video model.");
|
|
47113
47136
|
if (p.mode && !model.modes.includes(p.mode)) issue2("mode", "Choose a mode supported by the video model.");
|
|
47114
47137
|
for (const [field, workflows] of Object.entries(TAKES)) {
|
|
@@ -47131,16 +47154,22 @@ function videoChecks(p, ctx) {
|
|
|
47131
47154
|
if (p.damage && p.style !== "vhs") issue2("damage", "Only the VHS style takes tape damage.");
|
|
47132
47155
|
if (p.soundtrack && !model.audio) issue2("soundtrack", "This video model can't use a soundtrack.");
|
|
47133
47156
|
if (p.soundtrack && w !== "lip-sync" && seconds2 < 2) issue2("seconds", "A video with a soundtrack must be at least 2 seconds long.");
|
|
47134
|
-
if (p.audioReferences.length && !model.audio) issue2("audioReferences", "Only an extension takes audio references.");
|
|
47157
|
+
if (p.audioReferences.length && !model.audio && w !== "reference-to-video") issue2("audioReferences", "Only an extension takes audio references.");
|
|
47135
47158
|
if (p.promptExpansion !== "disabled" && !model.promptExpansion?.includes(p.promptExpansion)) issue2("promptExpansion", "This video model doesn't rewrite prompts.");
|
|
47136
47159
|
if (p.seed !== void 0 && !model.seed) issue2("seed", "This video model doesn't take a seed.");
|
|
47137
47160
|
if (p.seed !== void 0 && p.seed >= 2 ** 31 && (w === "lip-sync" || w === "insert-video")) issue2("seed", `${w} takes a seed below 2,147,483,648.`);
|
|
47138
47161
|
const references = p.references ?? [];
|
|
47139
47162
|
const unique = (shas2) => new Set(shas2).size === shas2.length;
|
|
47140
47163
|
if (!unique(references) || !unique(p.referenceVideos ?? []) || !unique(p.audioReferences)) issue2("references", "Choose each reference once.");
|
|
47164
|
+
const shapes = options?.shapes?.[resolution];
|
|
47165
|
+
if (shapes && !shapes.includes(p.aspectRatio ?? (w === "text-to-video" ? "16:9" : "auto"))) issue2("aspectRatio", `At ${resolution === "2k" ? "2K" : resolution}, ${w} with this video model is ${shapes.join(" or ")}; choose one as the aspect ratio.`);
|
|
47141
47166
|
if (w === "reference-to-video") {
|
|
47167
|
+
if (options?.referencesOnly) {
|
|
47168
|
+
for (const field of ["reference", "endReference", "middleReference"]) if (p[field]) issue2(field, "This video model's reference-to-video takes references only, without a first, last or middle frame.");
|
|
47169
|
+
}
|
|
47142
47170
|
if (references.length + (p.referenceVideos?.length ?? 0) + p.audioReferences.length > MAX_REFERENCE_FILES) issue2("references", `reference-to-video takes at most ${MAX_REFERENCE_FILES} reference files in all.`);
|
|
47143
|
-
|
|
47171
|
+
const frames = !options?.referencesOnly && (p.reference || p.endReference);
|
|
47172
|
+
if (!references.length && !p.referenceVideos?.length && !p.audioReferences.length && !frames) issue2("references", `reference-to-video needs reference images, videos or audio${options?.referencesOnly ? "" : ", or a first or last frame"}.`);
|
|
47144
47173
|
if (Boolean(p.middleReference) !== (p.middleSeconds !== void 0)) issue2("middleSeconds", "A middle image needs middleSeconds, and middleSeconds a middle image.");
|
|
47145
47174
|
if (p.middleReference && (!p.reference || !p.endReference)) issue2("middleReference", "A middle image needs the starting and ending images too.");
|
|
47146
47175
|
if (p.middleReference && !["480p", "768p"].includes(resolution)) issue2("middleReference", "A middle image needs 480p or 768p.");
|
|
@@ -47291,6 +47320,12 @@ var imageEstimate = (p) => Math.ceil((130 + 40 * p.references.length) * spriteIm
|
|
|
47291
47320
|
var vectorEstimate = (p) => p.workflow === "image-to-vector" ? 100 : p.quality === "low" ? 130 : p.quality === "high" ? p.references.length ? 320 : 200 : 160;
|
|
47292
47321
|
function videoExtras(p, facts = {}) {
|
|
47293
47322
|
const w = p.workflow;
|
|
47323
|
+
if (spriteVideoModel(p.model).provider === "heygen") {
|
|
47324
|
+
if (w !== "reference-to-video") return {};
|
|
47325
|
+
const clips3 = (p.referenceVideos ?? []).reduce((sum, sha2) => sum + Math.min(HEYGEN_REFERENCE_CLIP_SECONDS, facts.seconds?.(sha2) ?? HEYGEN_REFERENCE_CLIP_SECONDS), 0);
|
|
47326
|
+
const seconds2 = clips3 + Math.max(0, (p.references?.length ?? 0) - HEYGEN_FREE_REFERENCE_IMAGES);
|
|
47327
|
+
return seconds2 ? { referenceSeconds: seconds2 } : {};
|
|
47328
|
+
}
|
|
47294
47329
|
if (w !== "reference-to-video" && w !== "insert-video" && w !== "3d-to-video") return {};
|
|
47295
47330
|
const images = (p.references ?? []).reduce((sum, sha2) => sum + imageReferenceTokens(facts.size?.(sha2)), 0);
|
|
47296
47331
|
if (w === "3d-to-video") return { referenceTokens: images + clipReferenceTokens(p.seconds, p.resolution), generatedReferences: p.references?.length ? 0 : p.generatedReferences ?? DEFAULT_GENERATED_REFERENCES };
|
|
@@ -50946,15 +50981,15 @@ Confirm code: ${device.user_code}`);
|
|
|
50946
50981
|
{ name: "transparent", type: "boolean", description: "Image: transparent background" },
|
|
50947
50982
|
{ name: "references", type: "string", description: "Comma-separated blob SHAs of this project's images or sprite art, named Image 1, Image 2\u2026 in the prompt. Image: up to 4 to follow, such as a character sheet. Vector from text: up to 5, the first leading. Video: subjects or looks to keep (reference-to-video and insert-video up to 9, 3d-to-video up to 8), or recast's new people, one photo each (up to 4)" },
|
|
50948
50983
|
{ name: "mask", type: "string", description: "Image: edit only these rectangles of Image 1 (the first --references image), as x,y,width,height fractions of its size from the top left, up to 8 separated by semicolons; the rest is kept" },
|
|
50949
|
-
{ name: "workflow", type: "string", choices: [...VIDEO_WORKFLOWS, ...VECTOR_WORKFLOWS], description: "Video: image-to-video (default), text-to-video or extend-video; H3 Max also reference-to-video, lip-sync, camera-controls, insert-video, recast, relight, 3d-to-video and style, FLUX 3 Max keyframes-to-video, as the model's videoProfiles allow. Vector: text-to-vector (default) or image-to-vector, which traces --source" },
|
|
50984
|
+
{ name: "workflow", type: "string", choices: [...VIDEO_WORKFLOWS, ...VECTOR_WORKFLOWS], description: "Video: image-to-video (default), text-to-video or extend-video; H3 Max also reference-to-video, lip-sync, camera-controls, insert-video, recast, relight, 3d-to-video and style, FLUX 3 Max keyframes-to-video, HeyGen Video 1 reference-to-video, as the model's videoProfiles allow. Vector: text-to-vector (default) or image-to-vector, which traces --source" },
|
|
50950
50985
|
{ name: "reference", type: "string", description: "Video: starting image blob SHA from this project's assets or sprites; the speaking face for lip-sync, the image the camera moves around for camera-controls. Model: the image or sprite art to build it from (image-to-3D); without one the prompt describes it" },
|
|
50951
50986
|
{ name: "end-reference", type: "string", description: "Video: ending image blob SHA; models with endFrameOnly accept it without --reference" },
|
|
50952
50987
|
{ name: "middle-reference", type: "string", description: "Reference-to-video: image blob SHA reached at --middle-seconds; needs --reference and --end-reference, 480p or 768p" },
|
|
50953
50988
|
{ name: "middle-seconds", type: "number", description: "Reference-to-video: when the middle image is reached, in seconds" },
|
|
50954
50989
|
{ name: "source", type: "string", description: "Blob SHA of a video asset in this project: the clip to extend, insert a scene into, recast or relight, or the 3D render 3d-to-video turns into footage. Vector image-to-vector: the image or sprite art to trace" },
|
|
50955
50990
|
{ name: "soundtrack", type: "string", description: "Video from an image or text: blob SHA of a music, speech or SFX asset pinned as the soundtrack (2 s or longer). Lip-sync: the speech to say (5 s\u201315 min), which sets the length" },
|
|
50956
|
-
{ name: "audio-references", type: "string", description: "Extension or reference-to-video: up to 3 comma-separated audio asset blob SHAs (2\u201315 s each, 15 s total) guiding the sound; refer to them as Audio 1, Audio 2\u2026 in the prompt" },
|
|
50957
|
-
{ name: "reference-videos", type: "string", description: "Reference-to-video or insert-video: up to 3 comma-separated video asset blob SHAs (2\u201315 s each, 15 s total) guiding motion, named Video 1, Video 2\u2026 in the prompt" },
|
|
50991
|
+
{ name: "audio-references", type: "string", description: "Extension or reference-to-video: up to 3 comma-separated audio asset blob SHAs (on fal 2\u201315 s each, 15 s total) guiding the sound; refer to them as Audio 1, Audio 2\u2026 in the prompt" },
|
|
50992
|
+
{ name: "reference-videos", type: "string", description: "Reference-to-video or insert-video: up to 3 comma-separated video asset blob SHAs (on fal 2\u201315 s each, 15 s total; HeyGen reads the first 5 s of each) guiding motion, named Video 1, Video 2\u2026 in the prompt" },
|
|
50958
50993
|
{ name: "camera", type: "string", description: 'Camera-controls: 2\u201312 keyframes time,azimuth,elevation,distance (time 0\u20131, angles in degrees, elevation \u221290\u201390) separated by semicolons, e.g. "0,0,0,1;1,90,15,1.2"' },
|
|
50959
50994
|
{ name: "keyframes", type: "string", description: 'Keyframes-to-video (FLUX 3 Max): 1\u201310 seconds,image-SHA pairs separated by semicolons, e.g. "0,SHA;2.5,SHA;5,SHA"; each image is reached at its second, on a frame of its own of the 24 fps clip, within --seconds' },
|
|
50960
50995
|
{ name: "insert-at", type: "number", description: "Insert-video: seconds into --source where the new scene starts (1.625\u201360)" },
|
|
@@ -50967,10 +51002,10 @@ Confirm code: ${device.user_code}`);
|
|
|
50967
51002
|
{ name: "generated-references", type: "number", description: "3d-to-video without --references: how many reference images it may draw, 1\u20138 (default 2)" },
|
|
50968
51003
|
{ name: "style", type: "string", choices: VIDEO_STYLES, description: "Style workflow: the preset look, at 768p for 5\u201315 whole seconds" },
|
|
50969
51004
|
{ name: "damage", type: "string", choices: VHS_DAMAGE_LEVELS, description: "VHS style: tape damage (fal's default medium)" },
|
|
50970
|
-
{ name: "seconds", type: "number", description: "Video or SFX duration in seconds (default 5); H3 takes fractions (6.5), FLUX 3 Max 5\u201320 whole seconds; extensions add this many seconds, insert-video's scene is 5\u201313; lip-sync, recast, relight and 3d-to-video take their input's length; SFX supports 0.5\u201330" },
|
|
51005
|
+
{ name: "seconds", type: "number", description: "Video or SFX duration in seconds (default 5); H3 takes fractions (6.5), FLUX 3 Max 5\u201320 whole seconds, HeyGen Video 1 5\u201315 (up to 30 from an image or text with --prompt-expansion balanced or quality); extensions add this many seconds, insert-video's scene is 5\u201313; lip-sync, recast, relight and 3d-to-video take their input's length; SFX supports 0.5\u201330" },
|
|
50971
51006
|
{ name: "resolution", type: "string", choices: VIDEO_RESOLUTIONS, description: "Video resolution supported by the selected model and workflow (default its first)" },
|
|
50972
51007
|
{ name: "mode", type: "string", choices: ["cost", "speed", "quality"], description: "Video generation mode supported by the selected model (default its first)" },
|
|
50973
|
-
{ name: "prompt-expansion", type: "string", choices: PROMPT_EXPANSION_MODES, description: "Video: how much the model may rewrite the prompt (default disabled); extensions treat any other value as on. FLUX 3 Max always reasons about the prompt: quality thoroughly, any other value lightly" },
|
|
51008
|
+
{ name: "prompt-expansion", type: "string", choices: PROMPT_EXPANSION_MODES, description: "Video: how much the model may rewrite the prompt (default disabled); extensions treat any other value as on. FLUX 3 Max always reasons about the prompt: quality thoroughly, any other value lightly. HeyGen Video 1 needs balanced or quality for clips over 15 s" },
|
|
50974
51009
|
{ name: "seed", type: "number", description: "Video or vector from text: seed for repeatable results, where the model takes one" },
|
|
50975
51010
|
{ name: "extend-output", type: "string", choices: EXTEND_OUTPUTS, description: "Extension: extended (default, source plus new footage) or continuation (a 1.625 s overlap, then the new footage)" },
|
|
50976
51011
|
{ name: "voice", type: "string", description: "Gemini voice name or ElevenLabs voice ID (defaults: Kore / George)" },
|
package/package.json
CHANGED
|
@@ -62,7 +62,7 @@ animaguru assets generate PROJECT_ID --type speech --name "Welcome" \
|
|
|
62
62
|
--prompt "Welcome, traveler." --voice Kore --delivery "Warm and welcoming" --yes
|
|
63
63
|
```
|
|
64
64
|
|
|
65
|
-
Images use the staff-managed route automatically. Use `--model` to select a model for video, music, speech or sound effects; discover the choices with `catalog` and the server's configured subset with `assets list`. Asset defaults are per type, independently of sprite project defaults. Image backgrounds are retained unless `--transparent` is supplied. CLI 0.17.0 adds `--references`, `--mask` and the 16:9 and 9:16 image shapes. `--references SHA,SHA` (up to four) makes an image follow this project's saved images, uploads or sprite art. To keep a recurring character consistent, generate a character sheet once and reference its `file` SHA in every later image; refer to references in the prompt as Image 1, Image 2 and so on, and say what to take from each. `--aspect-ratio` is 1:1, 3:2, 2:3, 16:9 or 9:16; use 16:9 or 9:16 for video scenes. `--mask x,y,width,height[;…]` (up to eight rectangles, in fractions of Image 1 from the top left) edits only those parts of Image 1, the first reference, and keeps the rest and Image 1's shape. Look at the image before choosing the rectangles. Videos require an image asset's `file` SHA from `assets list`, or a character's `art` SHA from `projects get`, in the same project. Validate video options against the selected model's `videoProfiles` in `catalog`; omitted video settings use five seconds and that provider's first resolution/mode. MiniMax H3 Max and H3 Max Turbo (`fal/minimax-h3-max`, `fal/minimax-h3-max-turbo`) also take `--workflow text-to-video` (with `--aspect-ratio`) and `--workflow extend-video` (with `--source VIDEO_SHA`, 2K resolution, `--extend-output`, and up to three comma-separated `--audio-references`). From images, they accept `--end-reference` with or without `--reference` and a `--soundtrack AUDIO_SHA`. All workflows take `--prompt-expansion` and `--seed`. These need CLI 0.8.0 or newer. CLI 0.18.0 adds H3 Max's (not Turbo's) `--workflow reference-to-video` (keep a character across clips from up to nine `--references`, three `--reference-videos` and three `--audio-references`, named Image 1, Video 1, Audio 1 in the prompt; optional `--reference`, `--end-reference`, `--middle-reference` with `--middle-seconds`), `lip-sync` (the face in `--reference` says `--soundtrack` speech of 5 s–15 min; no `--prompt`; `--transcribe`), `camera-controls` (`--camera "time,azimuth,elevation,distance;…"`, 2–12 keyframes around `--reference`; without a prompt only the camera moves), `insert-video` (a 5–13 s scene inside `--source` from `--insert-at` to `--resume-at`, guided by `--references`/`--reference-videos`), `recast` (people in `--references` replace those in `--source`; pass `--subject-consent` only after each person agreed), `relight` (`--source` relit from a `--lighting` sphere image; no prompt), `3d-to-video` (a 3D render `--source` into footage, from `--references` or `--generated-references`) and `style` (`--style vhs|retro-toon-70s|low-poly|hand-drawn|16bit-pixel`, `--damage` for VHS, 768p, 5–15 whole seconds). Lip-sync, recast, relight and 3d-to-video take their input's length; their dry runs, like reference-to-video's and insert-video's, are server estimates because the price depends on the files. H3 takes fractional `--seconds` (6.5). CLI 0.21.0 adds FLUX 3 Max (`fal/flux-3-max`): image-to-video (with an optional `--end-reference`) and text-to-video for 5–20 whole seconds at 720p or 1080p with its own sound and no `--soundtrack`, and `--workflow keyframes-to-video`, which passes through 1–10 `--keyframes "SECONDS,SHA;…"` images, each reached at its second within `--seconds`. It always reasons about the prompt: `--prompt-expansion quality` thoroughly, other values lightly. For Gemini speech, `--prompt` is spoken verbatim and `--delivery` is a separate instruction. Music uses Lyria; the Gemini TTS models are for speech.
|
|
65
|
+
Images use the staff-managed route automatically. Use `--model` to select a model for video, music, speech or sound effects; discover the choices with `catalog` and the server's configured subset with `assets list`. Asset defaults are per type, independently of sprite project defaults. Image backgrounds are retained unless `--transparent` is supplied. CLI 0.17.0 adds `--references`, `--mask` and the 16:9 and 9:16 image shapes. `--references SHA,SHA` (up to four) makes an image follow this project's saved images, uploads or sprite art. To keep a recurring character consistent, generate a character sheet once and reference its `file` SHA in every later image; refer to references in the prompt as Image 1, Image 2 and so on, and say what to take from each. `--aspect-ratio` is 1:1, 3:2, 2:3, 16:9 or 9:16; use 16:9 or 9:16 for video scenes. `--mask x,y,width,height[;…]` (up to eight rectangles, in fractions of Image 1 from the top left) edits only those parts of Image 1, the first reference, and keeps the rest and Image 1's shape. Look at the image before choosing the rectangles. Videos require an image asset's `file` SHA from `assets list`, or a character's `art` SHA from `projects get`, in the same project. Validate video options against the selected model's `videoProfiles` in `catalog`; omitted video settings use five seconds and that provider's first resolution/mode. MiniMax H3 Max and H3 Max Turbo (`fal/minimax-h3-max`, `fal/minimax-h3-max-turbo`) also take `--workflow text-to-video` (with `--aspect-ratio`) and `--workflow extend-video` (with `--source VIDEO_SHA`, 2K resolution, `--extend-output`, and up to three comma-separated `--audio-references`). From images, they accept `--end-reference` with or without `--reference` and a `--soundtrack AUDIO_SHA`. All workflows take `--prompt-expansion` and `--seed`. These need CLI 0.8.0 or newer. CLI 0.18.0 adds H3 Max's (not Turbo's) `--workflow reference-to-video` (keep a character across clips from up to nine `--references`, three `--reference-videos` and three `--audio-references`, named Image 1, Video 1, Audio 1 in the prompt; optional `--reference`, `--end-reference`, `--middle-reference` with `--middle-seconds`), `lip-sync` (the face in `--reference` says `--soundtrack` speech of 5 s–15 min; no `--prompt`; `--transcribe`), `camera-controls` (`--camera "time,azimuth,elevation,distance;…"`, 2–12 keyframes around `--reference`; without a prompt only the camera moves), `insert-video` (a 5–13 s scene inside `--source` from `--insert-at` to `--resume-at`, guided by `--references`/`--reference-videos`), `recast` (people in `--references` replace those in `--source`; pass `--subject-consent` only after each person agreed), `relight` (`--source` relit from a `--lighting` sphere image; no prompt), `3d-to-video` (a 3D render `--source` into footage, from `--references` or `--generated-references`) and `style` (`--style vhs|retro-toon-70s|low-poly|hand-drawn|16bit-pixel`, `--damage` for VHS, 768p, 5–15 whole seconds). Lip-sync, recast, relight and 3d-to-video take their input's length; their dry runs, like reference-to-video's and insert-video's, are server estimates because the price depends on the files. H3 takes fractional `--seconds` (6.5). CLI 0.21.0 adds FLUX 3 Max (`fal/flux-3-max`): image-to-video (with an optional `--end-reference`) and text-to-video for 5–20 whole seconds at 720p or 1080p with its own sound and no `--soundtrack`, and `--workflow keyframes-to-video`, which passes through 1–10 `--keyframes "SECONDS,SHA;…"` images, each reached at its second within `--seconds`. It always reasons about the prompt: `--prompt-expansion quality` thoroughly, other values lightly. CLI 0.30.0 adds HeyGen Video 1's (`heygen/heygen-video-1`) `--workflow text-to-video` (with `--aspect-ratio`) and `reference-to-video` (up to nine `--references`, three `--reference-videos`, of which it reads the first 5 s, and three `--audio-references`, named Image 1, Video 1, Audio 1 in the prompt; no `--reference`, `--end-reference` or `--middle-reference`), 1080p and 2K (16:9 or 9:16 from text or references), and `--seed`. From an image or text it runs to 30 whole seconds with `--prompt-expansion balanced` or `quality`, and every second past 15 costs more. For Gemini speech, `--prompt` is spoken verbatim and `--delivery` is a separate instruction. Music uses Lyria; the Gemini TTS models are for speech.
|
|
66
66
|
|
|
67
67
|
For ElevenLabs speech, choose `eleven_v4` or `eleven_v4_turbo`, pass an ElevenLabs voice ID with `--voice` (George is the default), and put audio tags in `--prompt` rather than using `--delivery`. For sound effects, use `--type sfx`; the only model is `eleven_text_to_sound_v2`. SFX supports `--seconds` from 0.5 to 30 (default 5), `--loop`, and `--prompt-influence` from 0 to 1 (default 0.3). These additions require CLI 0.5.0 or newer; check `catalog` before using them with an installed CLI.
|
|
68
68
|
|