COOLDEST VILLAGE · skill publik Open Skill
COOLDEST VILLAGE
COOLDEST VILLAGE adalah Open Skill publik di Digen. Buka untuk melihat apa yang dibuat alur ini.
Film
0 1 1
https://d7qlwi7tl2u27.cloudfront.net/skill-covers/prod/4271661/2026-10-22/cwdg6c54.jpg
# Documentary Short Filmmaker
Produces a finished narrated documentary short from a scene-by-scene script. Built and
validated on a 5:42 Siberia documentary (36 shots) end to end.
## When to use
- The user supplies a script with scene timings, narration text, and visual prompts.
- The result is a voiceover-led, cinematic, explanatory film (not a character drama).
- The user asks to re-render one shot, restyle the narration, or change the music mix.
Not for: fiction shorts with characters and dialogue, TikTok gag clips, or music videos.
## Hard platform limits (verified — design around these)
| Limit | Value | Consequence |
|---|---|---|
| Video clip duration | 10 s max (`ref2v`, `i2v`, `fl2v`, `t2v`) | A 5-minute film needs ~35 clips, not 11 |
| Video resolution | area cap `480x864`; landscape downgrades to 858x482 | 720P requests are auto-downgraded. Plan for 480p, upscale later if needed |
| Music duration | 121 s max per generation | Score a 5-min film as 3 beds, concatenated |
| `mix_clips` nested arrays | **broken** — any list inside a clip object is coerced to `{"item": [...]}` and fails validation | Use `video` + **one** `audio` per clip; never `videos`/`audios`/`subtitles.items` |
| Tool calls per turn | hard ceiling (hit ~50/task) | Batch 6-9 calls per turn; if a turn dies, resume next turn — do not restart the pipeline |
| `generate_image` channels | `t2i`/`t2i.hd`, `i2i`/`i2i.hd` (up to 14 input images) | Use `i2i.hd` for every storyboard frame that has a character |
## Pipeline
### 0. Lock the brief
One line back to the user: title, runtime, aspect, style, cast/VO, music, captions.
Derive an aspect: landscape 16:9 for documentaries, portrait 9:16 for social.
### 1. Script + shot list → document
`create_document(content=..., name="<Title> - Script", content_type="text/markdown", entity_type="scripts")`.
Subdivide each scene into **shots of ≤10 s**. A scene of 50 s becomes 5 shots. Write the
narration for each scene **split into per-shot VO lines** at roughly 12-22 words per shot —
this is what keeps narration synced to picture later. Keep a shot list with framing, action,
VO line, ref ids, and board id.
### 2. Reference art (one canonical image per recurring thing)
`generate_image(model="t2i.hd", prompt=..., orientation=<aspect>, resolution="1080P", name=..., entity_type="characters"|"locations"|"props")`.
Generate ONE image per character, animal, and location, and reuse those asset_ids everywhere.
Character sheets: front-facing, neutral background, even lighting, full body.
A 36-shot doc needs ~10-13 references. Reusing the same id is what makes the film look like
one place with the same people.
### 3. Storyboard frames
`generate_image(model="i2i.hd", input_urls=[<refs for this shot>], prompt="<framing + action + lighting>", ...)`.
Always pass the character/location reference ids so identity and costume hold.
### 4. Shot clips
`generate_video(model="ref2v", input_urls=[<storyboard frame>, <character refs>], prompt="<camera move + subject motion + what stays static>", orientation=..., resolution="720P", duration=<≤10>)`.
Prompt must end with **"no text, no subtitles, no watermark"**. Videos carry their own
ambient audio track; keep it at 0.5 volume later so the model ambience sits under the VO.
`probe_media(url=<clip id>)` to get the true duration — renders often land at 8.0 / 9.42 /
10.125 s, so use probed values, not requested ones, when building the mix.
### 5. Narration (one TTS line per shot)
`generate_tts(model="tts.design", text=<shot VO line>, voice_instruction="Male documentary narrator, mid-40s, calm low warm voice, slow measured pace, English.", name="VO nn", entity_type="voiceovers")`.
Same voice_instruction for every line so the voice is consistent. Keep lines ≤ ~22 words.
If a shot's VO is longer than the shot, trim the line — long VO will be clipped by the mixer.
### 6. Score beds
`generate_music(model="music", prompt="<mood, instrumentation, no vocals>", duration=121)`.
Generate ceil(tot