Video from First Frame · مهارة Open Skill عامة

Video from First Frame

Video from First Frame هي Open Skill عامة على Digen. افتحها لتعرف ماذا ينشئ هذا التدفق.

@JackRhino

Roleplay

1 0 3

https://d7qlwi7tl2u27.cloudfront.net/skill-covers/prod/4284865/2026-10-21/k85s2nx6.jpg

# Video from First Frame

Turns one uploaded image into a short cinematic clip that begins on that exact frame and continues the motion already implied by the picture. The uploaded image is the creative source of truth: identity, composition, palette and light must survive into the video. There is no structured project state — keep working notes in the conversation and reference generated assets by their canvas cards.

## When to use

- The user uploads an image and asks for a short video, a moving version of it, a "living poster", or a clip that starts from this frame.
- The user wants a still animated with camera movement and ambient motion (leaves, cloth, light, fog, embers, sparks) while the subject stays recognizable.
- The user wants to re-render an earlier first-frame clip with a different camera move, motion intensity, length or orientation.

Do **not** use this skill for pure still-image requests (no video wanted), for multi-shot editing of existing footage, or for splicing clips together.

## Inputs and outputs

- **Reference image (required)** — the first frame. Its subject, silhouette, costume/props, palette, light direction, camera angle and layout are locked into the clip.
- **Text (optional)** — the user's wish for the motion: camera move, energy/pace, mood, duration, orientation, or a specific event. Follow it when present; otherwise derive the motion from what the image already suggests.
- **Output** — one short video asset on the canvas (`entity_type`: `final_videos`).

## Steps

1. **Intake and branch decision.** `read_skill_file(name="video-from-first-frame", path="references/workflow-stages.md")`. Follow its intake checks: does the user actually have an image, is the ask a video or a still, is this a fresh clip or a re-render. If no image exists and the user wants a video, ask for the image (do not invent one silently).
2. **Read the uploaded image.** Call `recognize_image` on the uploaded image (asset id / url from the conversation) with a prompt asking for: main subject and pose, costume and props, dominant and accent colors, light sources and direction, camera angle and lens feel, foreground/midground/background layout, and which elements look like they could move. Keep the answer as a short written note in your reply.
3. **Build the visual prompt.** `read_skill_file(name="video-from-first-frame", path="references/style-and-prompt.md")` and fill its templates with what step 2 found out about this specific image. Never reuse a placeholder prompt.
4. **Normalize the first frame only if needed.** If the upload's aspect ratio fights the requested orientation, or the picture has cropping/letterboxing/text that would flicker in motion, generate a clean first frame with `generate_image(prompt=<from style-and-prompt.md>, input_urls=[<uploaded image>], model='i2i.hd.lite', orientation=<portrait|landscape|square>, name='First frame', entity_type='storyboard_images')`. Otherwise use the upload unchanged as the first frame. If the user only wants a re-framed still, stop here.
5. **Write the video script.** `read_skill_file(name="video-from-first-frame", path="references/video-script.md")` and, for this request only, write a full English script (logline, duration, first-frame lock, beat-by-beat action, camera, environment motion, light/atmosphere, transition, must-keep, must-avoid). The script must follow the user's theme, mood, orientation and duration — no generic filler.
6. **Compress the script into the video prompt.** `read_skill_file(name="video-from-first-frame", path="references/video-content-constraints.md")` and apply its shot/motion/forbidden rules while compressing the script into a single-paragraph prompt that opens with the first-frame description and then describes motion only.
7. **Generate the clip.** Call `generate_video(prompt=<compressed prompt>, input_urls=[<first-frame image>], model='i2v', orientation=<portrait|landscape|square>, duration=<4-6 as scripted>, name=<short descriptive title>, enti