The interface is localized. Skill descriptions and documents are machine-translated by AI into your language; code, commands, paths and technical terms stay in the original, and the author's document governs.
Explore skills
Productivity · SKILL.md

image-to-video

image-to-video

Animate still images into videos using each::sense AI. Bring photographs, illustrations, and artwork to life with motion, camera movements, and environmental effects. Transform static images into dynamic video clips with natural movement and cinematic quality. Use for: photo animation, artwork animation, social media content, living photos, cinemagraphs, an…

Independent GitHub snapshot · Automated classification · Original documentation governs

Skill documentation

GitHub

name: image-to-video description: "Animate still images into videos using each::sense AI. Bring photographs, illustrations, and artwork to life with motion, camera movements, and environmental effects. Transform static images into dynamic video clips with natural movement and cinematic quality. Use for: photo animation, artwork animation, social media content, living photos, cinemagraphs, animated illustrations. Triggers: image to video, animate image, img2vid, bring to life, animate photo, photo to video, living photo, moving image, animate picture, image animation, motion from image" allowed-tools: Bash(curl *), WebFetch

Image to Video

Animate still images into dynamic video clips using each::sense — the intelligent AI agent that automatically selects the best model for your request.

Quick Start

Requires an each::labs API key. Get one at eachlabs.ai.

Using curl

curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $EACHLABS_API_KEY" \
  -d '{
    "messages": [
      {
        "role": "user",
        "content": [
              {"type": "text", "text": "Animate this image: gentle wind blowing through the trees, leaves rustling, clouds drifting slowly across the sky, subtle camera push-in, cinematic, natural motion"},
              {"type": "image_url", "image_url": {"url": "https://example.com/landscape-photo.jpg"}}
            ]
          }
    ],
    "stream": false
  }'

Using Python (OpenAI SDK)

from openai import OpenAI

client = OpenAI(
    api_key="YOUR_EACHLABS_API_KEY",
    base_url="https://eachsense-agent.core.eachlabs.run/v1"
)

response = client.chat.completions.create(
    model="eachsense/beta",
    messages=[{
        "role": "user",
        "content": "Animate this image: gentle wind blowing through the trees, leaves rustling, clouds drifting slowly across the sky, subtle camera push-in, cinematic, natural motion"
    }],
    # Images are included in the message content array above
)

print(response.choices[0].message.content)

Images are sent inside messages using the OpenAI multimodal content format. Maximum 4 images per request.

Streaming

Set "stream": true for real-time Server-Sent Events (SSE) responses, or "stream": false to receive the complete result in a single response. Streaming is useful for showing progress in UIs; non-streaming is simpler for scripts and automation.

Motion Types

MotionDescriptionBest Image Types
Environment MotionWind, water, clouds, fireLandscapes, nature shots
Camera MovementPan, zoom, orbit, push-inAny static scene
Character MotionWalking, turning, blinkingPortraits, character art
Particle EffectsSnow, rain, petals, sparksOutdoor scenes, moody shots
Subtle AnimationHair movement, fabric swayFashion, portraits
Parallax2.5D depth movementIllustrations, layered scenes

Examples

Portrait Animation

curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $EACHLABS_API_KEY" \
  -d '{
    "messages": [
      {
        "role": "user",
        "content": [
              {"type": "text", "text": "Animate this portrait: the person slowly turns their head to face the camera, a subtle smile appears, hair moves gently as if in a light breeze, natural blinking, soft lighting remains consistent, cinematic"},
              {"type": "image_url", "image_url": {"url": "https://example.com/portrait.jpg"}}
            ]
          }
    ],
    "stream": false
  }'

Ocean Scene

curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $EACHLABS_API_KEY" \
  -d '{
    "messages": [
      {
        "role": "user",
        "content": [
              {"type": "text", "text": "Animate this beach photo: ocean waves rolling in and crashing on the shore, foam sliding up the sand, seagulls flying in the background, palm trees swaying in wind, camera static, ambient natural motion"},
              {"type": "image_url", "image_url": {"url": "https://example.com/beach-sunset.jpg"}}
            ]
          }
    ],
    "stream": false
  }'

Illustration to Animation

curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $EACHLABS_API_KEY" \
  -d '{
    "messages": [
      {
        "role": "user",
        "content": [
              {"type": "text", "text": "Animate this fantasy illustration: the dragon spreads its wings slowly, fire flickers from torches on the castle walls, clouds drift behind the mountains, magical sparkles float in the air, smooth animation, maintain the artistic style"},
              {"type": "image_url", "image_url": {"url": "https://example.com/fantasy-castle.jpg"}}
            ]
          }
    ],
    "stream": false
  }'

Product Reveal

curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $EACHLABS_API_KEY" \
  -d '{
    "messages": [
      {
        "role": "user",
        "content": [
              {"type": "text", "text": "Animate this product photo: camera slowly orbits around the product, studio lighting highlights shift as the angle changes, reflections move on the surface, premium commercial feel, smooth 360-degree rotation"},
              {"type": "image_url", "image_url": {"url": "https://example.com/product-hero.jpg"}}
            ]
          }
    ],
    "stream": false
  }'

Prompt Tips

  • Describe specific motions: "waves crashing," "hair blowing left," "slow zoom in" — vague prompts produce random movement
  • Keep motion consistent with the image: Do not ask a sitting person to run; describe plausible motion
  • Specify what stays still: "Camera static, only the water moves" prevents unwanted warping
  • Mention style preservation: "Maintain the illustration style" for artwork, "keep photorealistic" for photos
  • One primary motion focus: Videos look best when one main element moves rather than everything at once
  • Add "smooth" and "natural": Prevents jittery or unnatural animation

Image Selection Tips

Best images for animation:

  • Clear subjects with distinct foreground and background
  • High resolution source images produce better video quality
  • Simple compositions with one main subject
  • Implied motion — images that suggest movement (a person mid-stride, flowing water)

Challenging images:

  • Very busy/cluttered scenes
  • Extreme close-ups with no environmental context
  • Abstract art without clear subjects to animate
  • Very low resolution images

Related Skills

Related Models

Documentation

Saved skills