Super Video Maker
Bomx/super-video-maker-skill
End-to-end AI video production skill for agentic frameworks.
Generate a single 4-15s vertical video clip with ByteDance Seedance 2.0 reference-to-video via fal.ai.
$ npx skills add gooseworks-ai/goose-skills --skill create-video-seedance-2-fal -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install gooseworks-ai/goose-skills create-video-seedance-2-fal --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/gooseworks-ai/goose-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/ads/packs/ugc-video-formats/create-video-seedance-2-fal .claude/skills/create-video-seedance-2-fal && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "create-video-seedance-2-fal" agent skill from https://github.com/gooseworks-ai/goose-skills/tree/main/skills/ads/packs/ugc-video-formats/create-video-seedance-2-fal into .claude/skills/create-video-seedance-2-fal/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "create-video-seedance-2-fal", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/gooseworks-ai/goose-skills/tree/main/skills/ads/packs/ugc-video-formats/create-video-seedance-2-falType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add gooseworks-ai/goose-skills --skill create-video-seedance-2-fal -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install gooseworks-ai/goose-skills create-video-seedance-2-fal --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/gooseworks-ai/goose-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/ads/packs/ugc-video-formats/create-video-seedance-2-fal .agents/skills/create-video-seedance-2-fal && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "create-video-seedance-2-fal" agent skill from https://github.com/gooseworks-ai/goose-skills/tree/main/skills/ads/packs/ugc-video-formats/create-video-seedance-2-fal into .agents/skills/create-video-seedance-2-fal/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "create-video-seedance-2-fal", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add gooseworks-ai/goose-skills --skill create-video-seedance-2-fal -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install gooseworks-ai/goose-skills create-video-seedance-2-fal --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/gooseworks-ai/goose-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/ads/packs/ugc-video-formats/create-video-seedance-2-fal .cursor/skills/create-video-seedance-2-fal && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "create-video-seedance-2-fal" agent skill from https://github.com/gooseworks-ai/goose-skills/tree/main/skills/ads/packs/ugc-video-formats/create-video-seedance-2-fal into .cursor/skills/create-video-seedance-2-fal/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "create-video-seedance-2-fal", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/gooseworks-ai/goose-skills.git --path skills/ads/packs/ugc-video-formats/create-video-seedance-2-fal--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add gooseworks-ai/goose-skills --skill create-video-seedance-2-fal -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install gooseworks-ai/goose-skills create-video-seedance-2-fal --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/gooseworks-ai/goose-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/ads/packs/ugc-video-formats/create-video-seedance-2-fal .gemini/skills/create-video-seedance-2-fal && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "create-video-seedance-2-fal" agent skill from https://github.com/gooseworks-ai/goose-skills/tree/main/skills/ads/packs/ugc-video-formats/create-video-seedance-2-fal into .gemini/skills/create-video-seedance-2-fal/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "create-video-seedance-2-fal", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install gooseworks-ai/goose-skills create-video-seedance-2-falInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add gooseworks-ai/goose-skills --skill create-video-seedance-2-fal -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/gooseworks-ai/goose-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/ads/packs/ugc-video-formats/create-video-seedance-2-fal .github/skills/create-video-seedance-2-fal && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "create-video-seedance-2-fal" agent skill from https://github.com/gooseworks-ai/goose-skills/tree/main/skills/ads/packs/ugc-video-formats/create-video-seedance-2-fal into .github/skills/create-video-seedance-2-fal/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "create-video-seedance-2-fal", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add gooseworks-ai/goose-skills --skill create-video-seedance-2-fal -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install gooseworks-ai/goose-skills create-video-seedance-2-fal --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/gooseworks-ai/goose-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/ads/packs/ugc-video-formats/create-video-seedance-2-fal .opencode/skills/create-video-seedance-2-fal && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "create-video-seedance-2-fal" agent skill from https://github.com/gooseworks-ai/goose-skills/tree/main/skills/ads/packs/ugc-video-formats/create-video-seedance-2-fal into .opencode/skills/create-video-seedance-2-fal/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "create-video-seedance-2-fal", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
create-video-seedance-2-falGenerate a single 4-15s vertical video clip with ByteDance Seedance 2.0 reference-to-video via fal.ai.
Create Video Seedance 2 Fal is an agent skill from gooseworks-ai/goose-skills. Generate a single 4-15s vertical video clip with ByteDance Seedance 2.0 reference-to-video via fal.ai. Multi-image reference (avatar + product + setting), native lip-synced VO + ambient audio (generate-audio on by default), internal multi-cut handling within one render. Routes through the GooseWorks FAL proxy (bills the Ads agent). The default clip atom for AI-creator UGC ads built on the NB2 + Seedance architecture. Validated on beauty-by-earth/video-01.
Its SKILL.md is about 6.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 11 other files, including scripts (for example `scripts/generate.py`, `scripts/media_proxy.py` and `skill.meta.json`).
It sits in Media & Creative, covering AI video generation, Influencer and creator marketing and Video production. It works with Seedance and fal. The repository describes itself as: Library of Growth & GTM skills + data APIs for Claude Code, Codex, Cursor to run ads, social, content, lead gen, seo and data scraping. The licence is MIT.
6 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit c650c6d. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 2 files in scripts/ (Python), which the agent can run.
Shell commands in SKILL.md call:
python3ffmpegcurlFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
fal.aiFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
FAL_API_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Create Video Seedance 2 Fal loads about 6.1k tokens when it runs. Until then it costs about 122 tokens; SKILL.md has 2,733 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from gooseworks-ai/goose-skills at commit c650c6d, republished under its MIT licence (© gooseworks-ai). 2,733 words, ~6,095 tokens.
.claude/skills/create-video-seedance-2-fal/SKILL.md (or your agent's skills folder). This skill also uses 9 other files; get the full folder from GitHub.Superseded in the video kit by the video-seedance-2 part (1.0.1; scripted lines use creator-h3). This atom still runs, unchanged, for skills outside the kit.
⚠️ REQUIRED PREFLIGHT (2026-06-04): every Seedance prompt that names a branded product MUST be paired with a real reference image of that exact product as one of the
--image-refinputs. Text-only product description without a ref invites Seedance to invent geometry that does not match the real SKU. If none exists, take one from the brand's assets, existing ads or product page; clean an occluded one with a gpt-image-2 edit first.
Wraps the FAL endpoint bytedance/seedance-2.0/reference-to-video. Pass 1-N image references (typically: portrait + product + optional setting) + a structured prompt → get back a 4-15s clip with native lip-synced VO and ambient audio.
Seedance 2.0 renders multiple internal cuts within a single 15s call when the prompt specifies sub-scene structure (e.g. WIDE HOOK / PRODUCT HERO / SIDESTEP / REACTION). This is the architectural win over the older NB2 + i2v multi-keyframe approach — fewer calls, native lip-sync, no Soul ID required.
Use this atom when:
--generate-audio)Do NOT use for:
15s clips → split across multiple calls and stitch (
assembly/stitch-videos-ffmpeg)
create-video-veo3 is often bettercreate-product-videos-higgsfield-ms or text-to-video SeedanceRequired:
--prompt — structured prompt block (see "Prompt template" below). Long, multi-block. Reference run example: beauty-by-earth/video-01-three-product-grwm/working/fire_seedance_facewash.py.--output — local MP4 destination.--image-url (alias --image-ref) — at least one PUBLIC reference image URL (repeatable), passed as image_urls. Order matters — first = @Image1 in prompt addressing. The proxy does NOT upload local files: host local refs via MCP get_upload_url → get_download_url and pass the URL (identical to create-video-fal).Optional:
--resolution — 480p | 720p | 1080p (default). 1080p meaningfully better for product label fidelity.--duration — 4–15 seconds (default 15). Passed as an int (seedance-2.0/reference-to-video enum {auto,4..15}); a string 400s with invalid_request (validated 2026-07-18).--aspect-ratio — 9:16 (default), 16:9, 1:1, etc.--generate-audio — bool, default true. Set false for silent B-roll where VO is added post.--seed — integer for deterministic re-runs (FAL returns a seed; pass it back to reproduce).--input-digest — a stable id of the WHOLE request: media_proxy.input_digest(model, payload) over the full payload (prompt, resolution, duration, aspect ratio, audio, seed) with each ref URL replaced by its file's sha256 or ingredient key. Pass it when refs are re-hosted between runs: a recorded rejection then still matches, and the proxy re-attaches to a running job instead of paying twice. It becomes a permanent refusal key after a policy rejection, so it must cover every input: leave the prompt or an image out and a run that changed only that input is refused.Credentials:
media_proxy.py, bundled) and bills the Ads agent, using ~/.gooseworks/credentials.json (written by the gooseworks CLI). Your cal_/agent token is not a FAL key — the old direct-key path 401'd; that's why this capability was rerouted through the proxy.0. Prefer FEWER, LONGER calls with internal multi-scene prompting over many short calls. Every new Seedance call drifts character, wardrobe, lighting, and background slightly — even with the same portrait reference. 5 short calls = 5 drift points the viewer registers as continuity breaks. Use the proven multi-scene template inside ONE 10-15s call to get internal hard-feeling cuts from a single render:
SCENE 1 (0-3s) — WIDE HOOK [framing + action + dialogue]
SCENE 2 (3-7s) — PRODUCT HERO [framing + camera move + dialogue]
SCENE 3 (7-11s) — SIDESTEP / PROOF [framing + action + dialogue]
SCENE 4 (11-15s) — REACTION + CTA [framing + action + dialogue]Setting CAN vary across internal sub-scenes within one Seedance call. Character identity is locked by the portrait reference image, not by the setting. Validated reference (ref-01 Bristle UGC, 26s) shows the same creator across 5+ different room/background settings within a single multi-scene render. Don't artificially split into multiple calls just to change rooms — bake the setting changes INTO the SCENE N (X-Ys) sub-scene structure of a single call. Distribute calls based on STORY ARC and the 15s max-duration cap, not setting count. See prompt-example.md for the validated template. Memory: feedback_seedance_long_calls_not_short.md.
0a. WARDROBE must be FULLY specified — top + bottom + hair + accessories. Validated 2026-05-23 (Bristle): if only the top is specified ("cream sweatshirt"), Seedance hallucinates the bottom (denim shorts appeared from nowhere). Every prompt must lock all of:
For confessional / single-sitting UGC, wardrobe should be IDENTICAL across all calls of the same ad (validated user preference + ref-01 + ad-03 patterns). Vary wardrobe across calls ONLY for GRWM / transformation / multi-day formats. Memory: feedback_seedance_long_calls_not_short.md.
0b. PASS A BACKGROUND REFERENCE IMAGE as image_urls[2] for locked settings. Validated 2026-05-23 (Bristle). Text-only setting description yields generic-rental aesthetic — Seedance fills with its own room prior. A background hero image (generated via NB2 Pro at fal-ai/nano-banana-pro, $0.15/1K, text-to-image with "no bokeh, infinite focus, no people, no faces" directives) LOCKS the room across all sub-scenes. Use the SAME background image across all calls of the same ad — different bg image per call reads as "she moved." Memory: feedback_seedance_long_calls_not_short.md.
0c. PRE-CLEAN PRODUCT REFERENCE IMAGES via NB2 edit if they contain accessories. Validated 2026-05-23 (Bristle hi_res-12 had vials + funnel beside the box; Seedance fused them onto the box face). Inspect source product images at intake. If accessories / secondary products / score badges / lifestyle elements visible, route through fal-ai/nano-banana/edit (quote the current proxy price first) to isolate the hero product before passing to Seedance. Approve the cleanup cost before calling it; compare with the current quoted cost of a Seedance retry. Memory: feedback_nb2_clean_product_refs.md.
0d. SEQUENTIAL CALL CONTINUITY — use seed reuse, NOT video_urls. Validated 2026-05-23 (Bristle Variant A/B test). For Call N>1 in a multi-call ad, pass the prior call's seed (via --seed) with the same image_urls. NEVER pass the prior call's mp4 as video_urls for sequential continuity — it HURTS continuity (model tries to "continue" prior video; wardrobe/product drift more than they otherwise would). video_urls is ONLY for style transfer from a REAL HUMAN reference video (e.g. take a real-creator UGC ad and recreate with AI creator). Memory: feedback_seedance_video_urls_vs_seed.md.
0e. WHEN USING video_urls (style transfer from real reference): set client timeout to 30+ min AND trim reference to ≤15s. Validated 2026-05-23:
fal_client.subscribe() 10-min timeout will fail. Use fal_client.submit() + manual polling.video_urls duration cap: 15s. FAL rejects with input_value_error: Combined video duration must not exceed 15.0s. Trim reference videos with ffmpeg -t 15 before upload.fal_helpers.upload_file() cap bumped from 10 MB to 50 MB on 2026-05-23.input_value_error / "must not exceed") in polling exceptions and bail after 1-2 retries — terminal errors don't surface via status=Failed.feedback_seedance_video_urls_vs_seed.md.1. NEVER pass AI-generated video as video_urls. FAL's content-policy validator rejects this with partner_validation_failed. The 60% video-input discount is real but only applies to REAL HUMAN reference video. For AI-avatar continuity across multiple scenes, use the same identity portrait as image_urls in every scene. Validated on BBE.
2. NSFW reject → STOP and surface, do not auto-retry (exit 4). Body-application + female + water/lather hits the classifier reliably. If FAL returns content_policy_violation or status: failed with nsfw reason, do NOT retry the same prompt. Surface to the caller with 3 options: rewrite the application beat as smell-test / fingertips-show, reframe as POV (no face), or skip the scene. Follows the project-wide moderation policy (see memory feedback_hf_moderation_surface.md).
3. duration as an INT. Pass 15, not "15". seedance-2.0/reference-to-video rejects a string duration with invalid_request (validated 2026-07-18; the old "string only" note was the deprecated v1 i2v endpoint).
4. Single product per call (except hook). Multi-product hero scenes within a single Seedance call degrade label fidelity. The exception is the hook/intro scene where all products appear together but no single label is hero.
5. 1080p for hero quality. Skin texture and product label crispness scale noticeably with resolution. Use 720p only for budget/probe calls.
python3 scripts/generate.py \
--prompt "$(cat prompt-scene-1.txt)" \
--output /path/to/scene-1.mp4 \
--image-url "https://<hosted>/portrait.png" \
--image-url "https://<hosted>/product.png" \
--resolution 1080p \
--duration 15 \
--aspect-ratio 9:16 \
--generate-audioThe script:
media_proxy.py (GooseWorks FAL proxy) — no FAL key; bills the Ads agent via ~/.gooseworks/credentials.json.--image-url values straight through as image_urls (they must already be PUBLIC URLs; the orchestrator hosts local refs via MCP).bytedance/seedance-2.0/reference-to-video through the proxy and polls to completion with:{
"prompt": <prompt>,
"image_urls": [<refs>],
"resolution": <res>,
"duration": <dur>, # int
"aspect_ratio": <ar>,
"generate_audio": <bool>,
"seed": <optional int>,
}--output.<output>.meta.json with prompt, refs, video URL, seed, duration, cost estimate.<output>.rejection.json, and exits 3 (likeness, content_policy_violation, partner_validation_failed) or 4 (NSFW / safety checker). See "Provider rejection and scene acceptance".Exit codes: 0 done · 1 other error · 3 policy rejection, or the same request already rejected · 4 NSFW rejection. The MCP relay also exits 3 when it needs the agent to make a call; it prints [mcp-relay] instead of "surface, do not retry".
<output> — MP4 clip at requested duration, resolution, aspect ratio.<output>.meta.json — request + result metadata + seed for reproducibility + cost estimate.<output>.rejection.json — only after a policy rejection: reason, kind, type, request id, HTTP status, charge state, exit code. Removed by the next successful render to the same path.| Resolution | Duration | Cost per call |
|---|---|---|
| 720p std | 15s | ~$4.54 |
| 1080p std | 15s | ~$10.20 |
| 1080p std | 8s | ~$5.44 |
| 1080p std | 4s | ~$2.72 |
Fast tier is ~20% cheaper but caps at 720p.
The prompt is the single biggest quality lever. Use the proven BBE template structure:
📱 UGC INFLUENCER [PRODUCT] REVIEW REEL (SELFIE-STYLE, NOT A COMMERCIAL)
[BLOCK 0 — anti-pattern opener]
This is NOT a cinematic commercial, NOT a [category] ad, NOT an editorial campaign.
This is a real Instagram Reel filmed by a 20-something [demographic] creator on her
iPhone front camera, talking directly to her followers in a relaxed, confiding tone...
[IMAGE REF ASSIGNMENTS]
Use @Image1 as the influencer's face/identity. Use @Image2 as the exact [product]
she is reviewing — it is a [VISUAL DESCRIPTION]. It is NOT a [common confusion].
The product and label MUST be clearly identifiable.
[FORMAT block]
- Vertical 9:16 phone-shot selfie aesthetic, slight handheld micro-shake
- WARDROBE (STRICT): [wardrobe]. ABSOLUTELY NOT [list of negations].
- Setting: [setting]
- Lighting: [lighting]
- Real, slightly imperfect skin (natural barely-any makeup), light golden tan
[IDENTITY block]
Same young woman as @Image1 — [age range, hair, eyes, skin tone]
[DYNAMIC FRAMING block]
The video must vary its framing across scenes like a real Reel — do NOT stay
on one focal length the whole time. Mix wide / medium / close-ups.
[SCENE 1 (0-3s)] WIDE HOOK — [script line] + [emotion + action]
[SCENE 2 (3-7s)] PRODUCT HERO with rotation — [script line] + [emotion + action]
[SCENE 3 (7-11s)] SIDESTEP application or smell-test — [script line] + [emotion + action]
[SCENE 4 (11-15s)] REACTION + recommendation — [script line] + [emotion + action]
[AUDIO DIRECTION]
[Voice character: tone, accent, pace per DELIVERY_STYLES.md]
NO music in the audio (we add music in post).
[GLOBAL RULES]
- Wardrobe identical across the scene
- Product stays identical and clearly visible in her hand
- Lips remain CLOSED between dialogue beats
- [NSFW sidestep negations if relevant]
[STRICT REALISM RULES — Block F]
- Tiny natural imperfections, subtle peach fuzz, faint fine lines
- NOT plastic, NOT airbrushed, NOT doll-like, NOT porcelain
- Skin highlights ONLY on nose tip, cheekbones, cupid's bow
- Hair: individual flyaway strands, slight frizz
- Image grain matches iPhone front cameraFull template reference: prompt-example.md at the repo root, plus all four scripts in beauty-by-earth/video-01-three-product-grwm/working/fire_seedance_*.py.
--duration.--image-ref portrait reference (visual check).meta.json records gateway: "fal", model: "bytedance/seedance-2.0/reference-to-video", and the FAL seed.| Failure | Cause | Recovery |
|---|---|---|
FAL 422 content_policy_violation: partner_validation_failed | AI-gen scene passed as video_urls | Remove video_urls. Use image_urls only for identity continuity. |
| FAL 422 "may contain likenesses of real people" (exit 3) | A photoreal face in image_urls read as a real person | STOP. Surface the reason, request id and charge state. Re-running the same command is refused locally. Offer a permitted route with its cost (see below). |
FAL response status: failed, nsfw reason | Body-application + female + water/lather hit classifier | STOP. Surface to caller. Rewrite sidestep beat as smell-test or fingertips-show. NEVER auto-retry. |
| FAL 404 on endpoint path | Wrong endpoint slug | Use bytedance/seedance-2.0/reference-to-video exactly — no fal-ai/ prefix. |
invalid_request on submit | duration sent as a string | Send an int: "duration": 15 (enum {auto,4..15}). |
| Product label garbled / wrong | Multi-image refs drifted, or 720p | Move to 1080p, ensure product ref is sharp + correctly cropped, add "label MUST be sharp and clearly readable" to the hero sub-scene. |
| Mouth moving when not speaking | Default Seedance behavior | Add to Global Rules: "Lips remain CLOSED between dialogue beats — no mouth movement when not speaking." |
| Cinematic slow pacing despite "iPhone selfie" prompt | Seedance prior leans cinematic | Strengthen anti-pattern block: "Casual real-time pace, NOT slow-motion, NOT dolly moves, NOT cinematic." Optionally post-process with ffmpeg setpts=0.66*PTS for 1.5x speed. |
| Heavy freckles / blotchy skin | Block B language too aggressive | Use v8 soft-skin language. Drop "freckles prominent", "real-person imperfections". Replace with "tiny natural imperfections, subtle peach fuzz, faint fine lines". |
| Wrapper RuntimeError "fal subscribe exceeded timeout" AFTER long elapse (>600s on 1080p) | Shared fal_helpers.subscribe() post-call timeout check raises even when the result returned successfully (latent bug; default bumped to 2400s on 2026-05-26 but recovery still applies for older runs) | The render likely completed on FAL — DO NOT re-fire. See Recovery Workflow below. |
FAL downstream_service_unavailable after long wait (~30 min) | Seedance backend overloaded / transient infra issue | Not billed (FAL bills on completion). Retry once. If retry also fails, wait 30 min then retry. Don't change prompt — it's infra, not your input. |
| Brand name mispronounced in native-audio output (validated 2026-06-08 on Alitu A3: rendered "Alitu" as "al-too" instead of "ah-LEE-too") | Seedance picks its own voice + interprets non-English / made-up brand names phonetically without dictionary knowledge | Preflight: use phonetic spelling directly in the dialogue (NOT a parenthetical). E.g. SPOKEN LINE: "Ali-too does the engineering for you." Avoid Dialogue: "Alitu (pronounced ah-LEE-too)" — Seedance reads the parenthetical out loud (see next row). Post-render QC: /watch:watch and confirm the Whisper transcript matches expected pronunciation. Recovery: re-roll the affected sub-scene with phonetic spelling baked into the line, OR splice an ElevenLabs reading of the brand-name beat over the Seedance visual. |
| Prompt metadata leaks into spoken line (validated 2026-06-08 on Alitu A3 v2: rendered "Alitu, pronounced Ali-tu, three syllables, does the engineering for you" — Seedance read the parenthetical voice-coaching out loud as if it were part of the dialogue) | Seedance does not distinguish "spoken text" from "voice coaching" inside a Dialogue: field. Parentheticals, notes, "(pronounced X)", "(softly)", "(stage whisper)" all get verbalized. | Prevention: keep voice-coaching OUTSIDE the dialogue field entirely. Use a separate SPOKEN LINE: heading whose content is the EXACT verbatim utterance, no parens, no notes. Put coaching under NEGATIONS: as "DO NOT say X / DO NOT explain pronunciation". Bake phonetic intent into the dialogue spelling itself (Ali-too not Alitu). |
When a Seedance render is paid for but the result was discarded by the wrapper / shell / timeout, the mp4 is still accessible via FAL's dashboard for 24-48+ hours.
https://fal.ai/dashboard/requests (or the share-link view of the model: https://fal.ai/models/bytedance/seedance-2.0/reference-to-video?share=<uuid>) signed in to the FAL account that holds FAL_API_KEY.bytedance/seedance-2.0/reference-to-video and look for the request matching the lost run's timestamp.?share=<uuid>) and pastes it back.WebFetch the share URL extracting "the v3.fal.media/files/.../*.mp4 URL plus the seed and any other metadata". The page renders all of this verbatim.curl -sSL -o <output>.mp4 "<extracted-mp4-url>" to grab the file. Zero extra cost.<output>.mp4.meta.json (seed, share URL, mp4 URL, recovery note) so downstream calls can use the seed for continuity.Prevention: Fire long Seedance calls with --with-logs so queue-update messages including the request_id stream to the atom's stdout. If the wrapper later errors, the request_id is recoverable from the background task output file at /private/tmp/claude-501/.../tasks/<id>.output and can be passed to fal_client.result(request_id) directly.
Memory: feedback_fal_helpers_timeout_bug.md. Validated: Lineage Video 01 Call 1 (2026-05-26) — recovered $8.83 render via share URL.
beauty-by-earth/video-01-three-product-grwm/working/fire_seedance_{facewash,deo_probe,hook,tanner}.pyprompt-example.mdcoworkers/video/atoms/image-generation/create-image-nano-banana-2-falcoworkers/video/molecules/ugc-ad/create-ugc-style-videocoworkers/video/atoms/_shared/fal_helpers.pygenerate.py enforces the first part. A rejection in any body shape (fal's detail with msg and/or type, or the GooseWorks provider_validation_failed wrapper) exits 3 after exactly one submit. The reason, request id and charge state go to stderr and <output>.rejection.json. The exact request is recorded (media-proxy's rejected-request ledger), so running the same command again exits 3 without sending anything. Changing the prompt, an image, the seed or the model makes a new request. charged: false means the GooseWorks proxy did not debit the explicit 4xx (read from the proxy code; one paid reproduction is still needed to confirm it).
Preserve the exact rejection reason, request id and charged/uncharged/unknown state. Stop identical rejected submissions; do not batch them or assume a provider switch is a policy bypass. Check which references the selected provider permits and review a permitted original character or non-likeness route, including changed cost, before another paid step. Historical incidents do not establish current universal policy or billing.
Record wearable counts/body locations, holding hands, object contacts and permitted gestures before generation. Review every generated frame against that checklist. Pin a reference per cast member and map speakers to lines. Compare fewer people per shot, shared referenced scenes and separately composed plates. Multi-character success rates and a six-character/two-attempt target remain unmeasured until a separately approved benchmark retains both successes and failures.
© gooseworks-ai, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 9 other files (scripts) in skills/ads/packs/ugc-video-formats/create-video-seedance-2-fal of gooseworks-ai/goose-skills.
Open the folder on GitHubat commit c650c6d
Create Video Seedance 2 Fal next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Create Video Seedance 2 Fal this skillgooseworks-ai/goose-skills | 1.2k | — | ~6.1k | Automated safety check: Pass | MIT | |
| Super Video MakerBomx/super-video-maker-skill | 310 | — | ~11k | Automated safety check: Notes | None | |
| Seedance 2 0calesthio/OpenMontage | 66k | — | ~4.4k | Automated safety check: Notes | AGPL-3.0 | |
| AI Video Generation0xsline/OpenChatCut | 2.2k | — | ~4.3k | Automated safety check: Pass | AGPL-3.0 | |
| Analyze Videokrusemediallc/arcads-claude-code | 1.6k | — | ~4.2k | Automated safety check: Pass | MIT | |
| Ffmpeg MixingvargHQ/sdk | 340 | — | ~676 | Automated safety check: Pass | MIT |
Bomx/super-video-maker-skill
End-to-end AI video production skill for agentic frameworks.
calesthio/OpenMontage
Generate cinematic clips with ByteDance Seedance 2.0 — the preferred premium video model in OpenMontage when a paid gateway is configured.
0xsline/OpenChatCut
Submits AI video generation jobs to Fal.ai, Seedance, Kling, MiniMax Hailuo, xAI Grok Imagine or OFox for text-to-video, image-to-video, transitions and clip extension.
krusemediallc/arcads-claude-code
Analyze a reference video and reverse-engineer its style into a reusable Seedance 2.0 prompting template.
vargHQ/sdk
Mix, trim, and concatenate video clips with ffmpeg without audio/video desync.
Nexus-JPF/note-companion
When the user wants to create, generate, or produce video content using AI tools or programmatic frameworks.
gooseworks-ai/goose-skills
Scrape and search Reddit posts using Apify. An agent skill from gooseworks-ai/goose-skills.
gooseworks-ai/goose-skills
Generate or edit an image via any FAL image model (nano-banana edit, gpt-image, flux, ...), ROUTED THROUGH THE fal-proxy so it bills the Ads agent.
gooseworks-ai/goose-skills
Replace an existing video's opening with a supplied clip or free kinetic text hook while retaining and verifying every original body frame, audio, captions and ending.
gooseworks-ai/goose-skills
Scrape blog posts via RSS feeds (free, no API key) with Apify fallback for JS-heavy sites.
gooseworks-ai/goose-skills
Find leads by scraping engagers from a competitor's top LinkedIn posts.
gooseworks-ai/goose-skills
Assemble a ChatGPT chat-reveal video ad from a thread + timeline JSON — one continuous Playwright recording of a ChatGPT mobile chat (user types with the iOS keyboard up → taps send → keyboard…
Categories
Generate a single 4-15s vertical video clip with ByteDance Seedance 2.0 reference-to-video via fal.ai. Create Video Seedance 2 Fal is an agent skill from gooseworks-ai/goose-skills.ai.
Create Video Seedance 2 Fal fits situations like: tasks that involve AI video generation; tasks that involve Influencer and creator marketing; tasks that involve Video production.
Run `npx skills add gooseworks-ai/goose-skills --skill create-video-seedance-2-fal -a claude-code`. Or copy the skill folder (skills/ads/packs/ugc-video-formats/create-video-seedance-2-fal in gooseworks-ai/goose-skills) into .claude/skills/create-video-seedance-2-fal in your project. Claude Code loads it when a task matches its description.
Run `npx skills add gooseworks-ai/goose-skills --skill create-video-seedance-2-fal -a codex`. Or copy the skill folder (skills/ads/packs/ugc-video-formats/create-video-seedance-2-fal in gooseworks-ai/goose-skills) into .agents/skills/create-video-seedance-2-fal in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add gooseworks-ai/goose-skills --skill create-video-seedance-2-fal -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/create-video-seedance-2-fal, .gemini/skills/create-video-seedance-2-fal, .github/skills/create-video-seedance-2-fal and .opencode/skills/create-video-seedance-2-fal in your project.
Going by SKILL.md and its folder, Create Video Seedance 2 Fal needs Python for the scripts in its folder, the command-line tools its instructions call (python3, ffmpeg and curl) and credentials named FAL_API_KEY. Our summary lists: Python 3.
SKILL.md names 1 domain. In commands or code: fal.ai; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Create Video Seedance 2 Fal is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 6.1k tokens (SKILL.md is roughly 24k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Create Video Seedance 2 Fal: Super Video Maker (Bomx/super-video-maker-skill, 310 stars), Seedance 2 0 (calesthio/OpenMontage, 66k stars), AI Video Generation (0xsline/OpenChatCut, 2.2k stars) and Analyze Video (krusemediallc/arcads-claude-code, 1.6k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
gooseworks-ai (a GitHub organization) maintains it in gooseworks-ai/goose-skills, which has 1,240 GitHub stars. The repository holds 273 skills in this directory. The repository was last updated on October 8, 2026.
Source: gooseworks-ai/goose-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.