Animate Old Photos

v1.0.0

Animate old photos into AI-generated videos using the Animate Old Photos API. Upload a photo, generate a 5-second animation video, and download the result. U...

0· 82·0 current·0 all-time
byAnimate Old Photos@shurshanx

Install

OpenClaw Prompt Flow

Install with OpenClaw

Best for remote or guided setup. Copy the exact prompt, then paste it into OpenClaw for shurshanx/animate-old-photos-skill.

Previewing Install & Setup.
Prompt PreviewInstall & Setup
Install the skill "Animate Old Photos" (shurshanx/animate-old-photos-skill) from ClawHub.
Skill page: https://clawhub.ai/shurshanx/animate-old-photos-skill
Keep the work scoped to this skill only.
After install, inspect the skill metadata and help me finish setup.
Use only the metadata you can verify from ClawHub; do not invent missing requirements.
Ask before making any broader environment changes.

Command Line

CLI Commands

Use the direct CLI path if you want to install manually and keep every step visible.

OpenClaw CLI

Bare skill slug

openclaw skills install animate-old-photos-skill

ClawHub CLI

Package manager switcher

npx clawhub@latest install animate-old-photos-skill
Security Scan
Capability signals
CryptoCan make purchasesRequires OAuth token
These labels describe what authority the skill may exercise. They are separate from suspicious or malicious moderation verdicts.
VirusTotalVirusTotal
Benign
View report →
OpenClawOpenClaw
Benign
high confidence
Purpose & Capability
Name/description match the code and SKILL.md: the script and docs call the animateoldphotos.org extension API to upload an image, submit a 5s animation job, poll, and download the MP4. One mismatch: SKILL.md and scripts reference an environment variable AOP_API_KEY as an alternate way to provide credentials, but the skill metadata lists no required env vars or a primary credential. This is a documentation/metadata omission rather than functionality misalignment.
Instruction Scope
Runtime instructions and the bundled script only perform the expected actions: ask for API key (or read AOP_API_KEY), validate a local JPEG/PNG file, call the service's auth/upload/finalize/animate endpoints, poll, and download the resulting MP4. They do not instruct reading unrelated system files or exfiltrating data to unexpected endpoints; all network calls target animateoldphotos.org or presigned storage URLs returned by that service.
Install Mechanism
There is no install spec (instruction-only plus a local Bash script). No remote downloads or archive extraction occur during installation. This is low-risk from an install-mechanism perspective; the only runtime requirement is that the environment has bash, curl, and jq.
Credentials
The only credential the skill needs is the Animate Old Photos API key, which is appropriate for the described functionality. However, metadata does not declare AOP_API_KEY (the SKILL.md and script reference it), and the registry metadata lists no primary credential. This omission should be corrected so users clearly know which secret will be requested. Aside from that, no unrelated secrets or system credentials are requested.
Persistence & Privilege
The skill does not request permanent inclusion (always:false) and does not modify other skills or system-wide settings. It runs transient network calls and writes only the downloaded MP4 to the user-specified path.
Assessment
This skill appears to do exactly what it says: it will upload your local JPEG/PNG and your API key to animateoldphotos.org to produce a 5-second video (cost: 3 credits). Before installing or invoking it: (1) confirm you trust the source and the animateoldphotos.org domain; (2) note that SKILL.md/script expect AOP_API_KEY (environment variable) but the skill metadata omits that — either supply the key interactively or set AOP_API_KEY if you prefer; (3) inspect scripts/animate.sh yourself (it's readable Bash) if you have doubts; (4) be aware this is a paid service — verify credit usage and pricing; (5) do not provide unrelated credentials. If you want stricter controls, run the bundled script locally (not from an autonomous agent) so you can control where your API key is stored and when network calls occur.

Like a lobster shell, security has layers — review code before you run it.

latestvk97de6fkqw9pyq3kxzmxm26kvn84vrgx
82downloads
0stars
1versions
Updated 2w ago
v1.0.0
MIT-0

Animate Old Photos

Animate old photos into AI-generated videos via the Animate Old Photos API. The agent uploads a photo, submits an animation task, polls for completion, and downloads the resulting MP4 video.

Prerequisites

This is a paid service. You need an API key and credits.

Each animation costs 3 credits. View pricing plans

System requirements: curl and jq must be available in the shell.

Workflow

Before starting

  1. Ask the user for their API key if environment variable AOP_API_KEY is not set.
  2. Ask for the image path. Verify the file exists, is JPEG or PNG, and is under 10 MB.
  3. Ask for an optional prompt describing desired motion (e.g. "grandmother smiling and waving"). If omitted the AI auto-generates motion.
  4. Confirm with the user: "This will cost 3 credits. Proceed?"

Step 1 — Authenticate

Exchange the API key for a short-lived access token and check the credit balance.

API_KEY="${AOP_API_KEY}"
AUTH=$(curl -s -X POST https://animateoldphotos.org/api/extension/auth \
  -H "Content-Type: application/json" \
  -d "{\"licenseKey\":\"${API_KEY}\"}")
TOKEN=$(echo "$AUTH" | jq -r '.accessToken')
CREDITS=$(echo "$AUTH" | jq -r '.creditBalance')
echo "Authenticated. Credits available: $CREDITS"

If accessToken is missing or error_code is 4010/4011, tell the user their API key is invalid and link to https://animateoldphotos.org/profile/interface-key.

If credits < 3, tell the user to purchase more at https://animateoldphotos.org/pricing and stop.

Step 2 — Upload image

Get a presigned upload URL, then PUT the image binary to cloud storage.

IMAGE_PATH="photo.jpg"
FILE_SIZE=$(stat -f%z "$IMAGE_PATH" 2>/dev/null || stat -c%s "$IMAGE_PATH" 2>/dev/null)
CONTENT_TYPE="image/jpeg"  # use image/png for .png files

UPLOAD=$(curl -s -X POST https://animateoldphotos.org/api/extension/upload-token \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d "{\"fileName\":\"$(basename "$IMAGE_PATH")\",\"contentType\":\"${CONTENT_TYPE}\",\"fileSize\":${FILE_SIZE}}")
UPLOAD_URL=$(echo "$UPLOAD" | jq -r '.uploadUrl')
KEY=$(echo "$UPLOAD" | jq -r '.key')
PUBLIC_URL=$(echo "$UPLOAD" | jq -r '.publicUrl')

curl -s -X PUT "$UPLOAD_URL" \
  -H "Content-Type: ${CONTENT_TYPE}" \
  --data-binary "@${IMAGE_PATH}"
echo "Image uploaded."

Step 3 — Finalize upload

Confirm the upload and receive the encrypted payload needed for task submission.

FINALIZE=$(curl -s -X POST https://animateoldphotos.org/api/extension/upload-finalize \
  -H "Authorization: Bearer $TOKEN" \
  -F "key=${KEY}" \
  -F "publicUrl=${PUBLIC_URL}")
IMAGE_URL=$(echo "$FINALIZE" | jq -r '.url')
SS_MESSAGE=$(echo "$FINALIZE" | jq -r '.message')
DNT=$(echo "$FINALIZE" | jq -r '.dnt')
echo "Upload finalized."

Step 4 — Submit animation task

Submit the animation job. The Ss header must contain the message value from Step 3.

PROMPT=""  # optional user prompt
TASK=$(curl -s -X POST https://animateoldphotos.org/api/extension/animate \
  -H "Authorization: Bearer $TOKEN" \
  -H "Ss: ${SS_MESSAGE}" \
  -F "prompt=${PROMPT}" \
  -F "input_image_url=${IMAGE_URL}" \
  -F "dnt=${DNT}" \
  -F "type=m2v_img2video" \
  -F "duration=5" \
  -F "public=false")
TASK_ID=$(echo "$TASK" | jq -r '.taskId')
TASK_DNT=$(echo "$TASK" | jq -r '.dnt')
TASK_DID=$(echo "$TASK" | jq -r '.did')
echo "Task submitted (ID: $TASK_ID). Polling for result..."

If the response contains error_code 999990 or 10009, the user has insufficient credits — link to https://animateoldphotos.org/pricing.

Step 5 — Poll until done

Poll every 30 seconds. Typical completion time is 2–5 minutes.

OUTPUT="output.mp4"
while true; do
  sleep 30
  STATUS=$(curl -s -G "https://animateoldphotos.org/api/extension/animate" \
    --data-urlencode "taskId=${TASK_ID}" \
    --data-urlencode "dnt=${TASK_DNT}" \
    --data-urlencode "did=${TASK_DID}" \
    --data-urlencode "type=m2v_img2video" \
    -H "Authorization: Bearer $TOKEN")

  ERR_MSG=$(echo "$STATUS" | jq -r '.message // empty')
  if [ -n "$ERR_MSG" ]; then
    echo "Task failed: $ERR_MSG"
    break
  fi

  S=$(echo "$STATUS" | jq -r '.status')
  RESOURCE=$(echo "$STATUS" | jq -r '.resource // empty')
  if [ "$S" -ge 99 ] 2>/dev/null && [ -n "$RESOURCE" ]; then
    curl -s -o "$OUTPUT" "$RESOURCE"
    echo "Video saved to $OUTPUT"
    break
  fi
  echo "Still processing (status: $S)..."
done

Report the saved video path to the user when done.

One-liner alternative

You can run the full pipeline with the bundled script:

bash scripts/animate.sh <API_KEY> <IMAGE_PATH> [PROMPT] [OUTPUT_PATH]

See scripts/animate.sh for details.

Error Handling

error_codeMeaningAction
4010Invalid API keyDirect user to get a key
4011API key expiredDirect user to renew key
999998Access token invalidRe-run Step 1 to get a new token
999990Insufficient creditsDirect user to buy credits
10009Insufficient creditsDirect user to buy credits

For network errors, retry up to 3 times with exponential backoff (2s, 4s, 8s).

Interaction Flow

  1. Trigger: User says "animate this photo", "turn old photos into videos", "bring this photo to life", or similar.
  2. Gather inputs: Ask for API key (if AOP_API_KEY not set), image path, and optional prompt.
  3. Confirm: "This will cost 3 credits. You currently have {N} credits. Proceed?"
  4. Execute: Run Steps 1–5, reporting progress at each stage.
  5. Complete: "Your animated video has been saved to {output_path}."
  6. On error:

Constraints

  • Supported formats: JPEG, PNG only
  • Max file size: 10 MB
  • Min image dimension: 300 × 300 px
  • Cost per animation: 3 credits
  • Video duration: 5 seconds
  • Typical processing time: 2–5 minutes

For the complete API reference, see animate-old-photos-api.md.

Comments

Loading comments...