Short movie maker · compétence Open Skill

Short movie maker

Short movie maker est une Open Skill publique sur Digen. Ouvrez-la pour voir ce que ce workflow crée.

@chrisyoungg528

ShortDrama

14 0 1

https://d7qlwi7tl2u27.cloudfront.net/skill-covers/prod/4314362/2026-10-21/uy2xrkvc.jpg

---

allowed-tools:
  - generate_image
  - generate_video
  - generate_tts
  - generate_music
  - mix_clips
  - caption_video
  - memory_query
  - memory_store
---

# Photo Reel Maker

Turn still photos into short vertical (9:16) videos: animate each photo, add sound, stitch into one reel, caption it.

## When to use
- The user supplies photos (uploaded assets) and wants a video out of them.
- Phrasings: "turn these photos into a reel", "make this picture move", "photo video for TikTok", "9:16 video from my pictures", "make a slideshow video with music".

## Reference files
- `references/prompt-recipes.md`: motion-prompt templates per photo type (product, portrait, food, travel, pet), plus voiceover/music prompt wording. Read before writing any `generate_video` prompt.

## Steps

1. **Scope the job.** Confirm with the user, in one short message: number of clips (one per photo, or a subset), target length per clip (default 5s, hard max 10s), voiceover yes/no, music style, and whether captions are wanted. If the user already stated these, don't ask again — just proceed. Default: one clip per photo in the order the user supplied them, 5s each, music only, no voiceover.

2. **Recall preferences.** Call `memory_query` for the user's brand name, preferred music mood, voice style, and default clip length. If found, apply silently and mention it in one clause. Do not invent a brand if nothing is stored.

3. **Prepare each photo (only if needed).** Skip this step if the photo is already portrait and well framed. Otherwise regenerate a portrait-framed version with `generate_image`:
   - `model='i2i'`, `input_urls=[<photo asset_id>]`, `orientation='portrait'`, `resolution='1080P'`
   - Prompt: "Recompose this photo into a vertical 9:16 composition, keep the subject and colors identical, extend the background naturally to fill the frame, no text, no border."
   - `name='Prep — <n> <short subject>'`, `entity_type='prep_images'`
   - Use the returned asset as the input for step 4. Note: `i2i` may alter details, so check the result before animating it; if it distorts the subject, fall back to the original photo.

4. **Animate each photo.** One `generate_video` call per photo:
   - `model='i2v'` (image-to-video), `input_urls=[<photo asset_id from step 3 or the original>]`, `orientation='portrait'`, `duration=5` (max 10), `resolution='720P'`
   - Prompt: one of the motion recipes in `references/prompt-recipes.md`, adapted to the actual subject. Always describe camera movement + subject movement + "smooth, natural, no morphing, no text appearing".
   - `name='Clip <n> — <short subject>'`, `entity_type='clip_videos'`
   - Keep the user's photo order. Never reorder without asking.
   - If one clip fails, note it and continue with the rest — never silently drop a photo.

5. **Add sound (optional).**
   - Voiceover: `generate_tts` with `model='tts.design'`, `voice_instruction='<voice description>'`, text = the script. `name='Voiceover'`, `entity_type='voiceovers'`. Use `model='tts.clone'` with `reference_audio_url` instead if the user supplied a voice sample.
   - Music: `generate_music` with `model='music'`, prompt describing mood/tempo/instrumentation. `name='Soundtrack'`, `entity_type='music'`. Keep it instrumental unless the user asks for vocals.
   - Only generate the tracks the user asked for.

6. **Stitch the reel.** One `mix_clips` call:
   - `clips=[{ 'videos': [{'url': clip1}, {'url': clip2}, ...], 'audio': {'url': track, 'volume': 0.6}, 'subtitles': {...} }]`
   - `videos` array order = play order. Music at `volume` ~0.6 so it sits under a voiceover.
   - Burned-in subtitles: either `subtitles.items` (inline cues with `text`/`start`/`end` relative to the reel start) or `subtitles.url` pointing at an `.srt`/`.vtt`/`.ass` file. Set `style.font_name='Noto Sans CJK SC'` for Chinese/Japanese/Korean text.
   - `name='<Reel title>'`, `entity_type='final_videos'`, `orientation='portrait'`, `output_format='mp4'`, `fps=30`, `crf=23`.
   - If there