Photo Motion Studio — Open Skill

Photo Motion Studio

Turn one still image into a short moving clip that stops the scroll. How it works: - Upload a photo, AI art, a painting, a portrait, or a pet picture. - Pick a motion style: Living Photo (subtle hair, fabric, and light movement), Slow Camera Move, Magical Effects (sparkles, glow, floating petals or stars), Dramatic Action, or describe your own. - Choose a seamless loop that plays forever smoothly, or a clip that plays once. - Get one version, or two to pick from. Every clip is checked against your original image so faces, colors, and art style stay true. Add your own music track if you like, and finish with ready-to-post captions and hashtags for Instagram and Facebook. Clips are 5 seconds by default (up to 10). For extra sharpness, run the finished video through your favorite upscaler app.

@AuroraLuna

Other

2 2 1

https://d7qlwi7tl2u27.cloudfront.net/skill-covers/prod/925535/2026-09-25/kjzbtbub.png

---
name: photo_motion_studio
display_name: Photo Motion Studio
description: Bring one still image to life as a short moving clip for Facebook and Instagram. Pick a motion style, choose a seamless loop or a one-time play, get one or two versions, add your own music if you like, and get ready-to-post captions.
allowed-tools:
  - recognize_image
  - generate_video
  - recognize_video
  - mix_clips
  - download_video
---

# Photo Motion Studio

## When to use
- The user uploads one image (a photo, AI art, a painting, a pet, a portrait) and wants it to move for a social post.
- The user wants another version, a different motion style, music added, or captions.

## Tool facts (confirmed with Digen, do not deviate)
- `generate_video` takes channel IDs only: `i2v` (image as start frame) and `fl2v` (first frame + last frame). Never pass concrete model names, `width`, `height`, or `gen_mode`.
- Both channels cap at 10 seconds and 480x864. Request `resolution='720P'`; the tool lowers it to the channel's limit automatically. Be honest with the user about this (see Step 6).
- `fl2v` with `input_urls=[image, image]` (the same image as first and last frame) returns to the starting pose, which makes a seamless loop.
- `mix_clips` clip: `{video:{url, volume}, audios:[{url, delay, start, duration, volume}]}`. `video.volume: 0` removes any sound the video model added.

## Step 1. Read the image
- Call `recognize_image` on the upload. Note the subject, art style (photo, painting, vector, watercolor, 3D, etc.), what could naturally move (hair, fabric, water, clouds, light, sparkles, smoke, leaves, eyes), and the image's shape: tall (portrait), square, or wide (landscape).
- If there is no image, ask for one. Keep everything family-friendly; decline adult or NSFW requests.

## Step 2. Choose the motion style
In one short sentence, say what you see and what could move. Then ask the user to pick a style, with `set_guidance` buttons (platform tool, `action.type: "send_message"`):
- `"🌿 Living Photo"`: the image stays almost still; only small natural movement (hair and fabric sway, a blink, light shimmer, drifting particles). Best for portraits.
- `"🎥 Slow Camera Move"`: a gentle push-in or drift across the scene while the subject stays still. Best for landscapes and detailed art.
- `"✨ Magical Effects"`: glowing light, sparkles, floating petals or stars, soft energy, added around the subject. Best for fantasy and cosmic art.
- `"⚡ Dramatic Action"`: bigger movement: wind-blown hair and cape, crashing waves, a turn of the head, a strong gesture.
- `"✏️ Describe my own"`: `action.type: "fill_input"`, content `"Motion: "`.

## Step 3. Loop, versions, and shape
Ask both questions in one message, then show `set_guidance` buttons for the loop choice:
- **Loop?** `"🔁 Seamless loop"` (plays forever smoothly, great for scroll-stopping posts) or `"▶️ Play once"`.
- **How many versions?** Tell the user to also add "1 version" or "2 versions" in their reply (default 1; 2 uses twice the credits).
Confirm the shape automatically from Step 1: tall images use `orientation='portrait'`, square images use `orientation='square'`, wide images use `orientation='landscape'`. Only mention shape if the image is wide: say that wide clips come out smaller on this platform, and offer a tall (portrait) version instead.

## Step 4. Generate
Build the prompt from three parts:
1. **Motion:** the chosen style, made specific to this image (name what moves and how).
2. **Faithfulness (always include, word for word):** "Keep the image exactly as it is: same face, same features, same skin tone, same colors, same art style, same composition. Only the described elements move. No new objects, no morphing, no warping, no text, no logos."
3. **Pace:** "Smooth, slow, natural motion." (For Dramatic Action: "Strong but smooth motion.")

Then call:
- **Seamless loop:** `generate_video(model='fl2v', input_urls=[<image>, <image>], prompt=<prompt> + " The clip ends exactly where it starts so it