Shortodellashortodella

Shortodella for Claude Code

Drop a single skill file into your Claude Code install and your agent can generate images and videos, edit existing assets, and ask you to choose between options — all driven through the Shortodella API.

What is this

Shortodella is an AI media platform: image and video generation across multiple models (nanobanana, grok, gpt-image, kling, veo, seedance), an asset library, image-to-image editing, screenshots and brand extraction, and a small set of site tools — browser interfaces that pop up so the user can trim a clip, crop an image, or pick from a batch.

The whole platform is exposed through one REST API at https://api.shortodella.com. The skill file below teaches your Claude Code agent how to drive it end-to-end: auth, generation, polling, site tools.

Install in Claude Code

Two ways. Both use the same canonical file at https://shortodella.com/skill-shortodella.md.

Option A — install for your user (all projects)

mkdir -p ~/.claude/skills
curl -sL https://shortodella.com/skill-shortodella.md > ~/.claude/skills/shortodella.md

Option B — install in the current project only

mkdir -p .claude/skills
curl -sL https://shortodella.com/skill-shortodella.md > .claude/skills/shortodella.md

After install, restart Claude Code. The skill auto-triggers on requests like generate image, make a 5-second clip, let me pick from these, etc.

The skill ships allowed-tools: Bash(curl*), Read. It only ever runs curl — no shell escapes, no file writes outside what you ask for.

Your first call

The skill walks the agent through device auth on first use. Manually it looks like this:

# 1. Request a device code
curl -X POST https://api.shortodella.com/api/v1/auth/device \
  -H "Content-Type: application/json" \
  -d '{"client_name":"Claude Code"}'

# 2. Open the verification_url, click Connect
# 3. Poll for the key
curl -X POST https://api.shortodella.com/api/v1/auth/device/token \
  -H "Content-Type: application/json" \
  -d '{"device_code":"<from step 1>"}'

# → { "status": "authorized", "api_key": "sk_..." }

Save the key once (export SK=sk_...). It does not expire. Or generate one in the dashboard at /api.

Site Tools — make the user a part of the agent loop

Most generation APIs are fire-and-forget. Site tools are the opposite — your agent asks the human to do something in their browser and waits for the answer. Two flavors:

Edit tools (single asset → new asset)

Trim videoPOST /api/v1/site-tools/trim

Opens the trim editor on a video asset. User picks in/out points, hits Save → a new video asset is created with parent_asset_uid pointing at the original.

Crop imagePOST /api/v1/site-tools/crop

Opens the crop editor on an image (png/jpg/webp/gif). User drags a rectangle, hits Save → new image asset, original preserved.

Choice tools (set → user's selection)

Pass asset_uids[], get back a session_id. Poll GET /v1/site-tools/sessions/{id} until status: done.

ListPOST /api/v1/site-tools/list

Read-only grid. No result. Useful for showing the user a generated mood-board or preview set.

PickPOST /api/v1/site-tools/pick

Multi-select grid with min/max. Result: { picked_uids }. Use when you want the user to commit to N choices.

SwipePOST /api/v1/site-tools/swipe

Tinder-style cards, one asset at a time, Keep / Discard / Undo. Result: { kept_uids, discarded_uids }. Best for fast filtering of large batches.

All site tools are energy-free. Sessions live for 24 hours and accept up to 200 asset uids each.

Recipes

Generate 4 cover variants and have the user pick 2

# 1. Generate four covers in parallel (your agent does this)
for i in 1 2 3 4; do
  curl -s -X POST https://api.shortodella.com/api/v1/generate/image \
    -H "Authorization: Bearer $SK" -H "Content-Type: application/json" \
    -d "{\"prompt\":\"podcast cover, variant $i\",\"model\":\"nanobanana\"}"
done
# Collect the four asset_uids → png_a, png_b, png_c, png_d

# 2. Ask the user to pick 2
curl -s -X POST https://api.shortodella.com/api/v1/site-tools/pick \
  -H "Authorization: Bearer $SK" -H "Content-Type: application/json" \
  -d '{
    "asset_uids": ["png_a","png_b","png_c","png_d"],
    "min": 2, "max": 2,
    "title": "Pick 2 covers"
  }'
# → { "tool_url": "...", "poll_url": "/api/v1/site-tools/sessions/sess_xxx" }

# 3. Send tool_url to the user, poll until done
curl -s "https://api.shortodella.com/api/v1/site-tools/sessions/sess_xxx" \
  -H "Authorization: Bearer $SK"
# → { "status": "done", "result": { "picked_uids": ["png_b","png_d"] } }

Trim a generated video

curl -s -X POST https://api.shortodella.com/api/v1/site-tools/trim \
  -H "Authorization: Bearer $SK" -H "Content-Type: application/json" \
  -d '{"asset_uid": "video_abc123"}'
# → { "tool_url": "https://shortodella.com/site-tools/trim?asset=video_abc123" }
# Send the URL. After Save, fetch the new asset by parent_asset_uid.

Filter a batch of 30 generated images

curl -s -X POST https://api.shortodella.com/api/v1/site-tools/swipe \
  -H "Authorization: Bearer $SK" -H "Content-Type: application/json" \
  -d '{"asset_uids": ["png_1","png_2","...","png_30"], "title": "Quick filter"}'
# Poll, then act on result.kept_uids / result.discarded_uids.
Shortodella for Claude Code - Shortodella