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.
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)
POST /api/v1/site-tools/trimOpens 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.
POST /api/v1/site-tools/cropOpens 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.
POST /api/v1/site-tools/listRead-only grid. No result. Useful for showing the user a generated mood-board or preview set.
POST /api/v1/site-tools/pickMulti-select grid with min/max. Result: { picked_uids }. Use when you want the user to commit to N choices.
POST /api/v1/site-tools/swipeTinder-style cards, one asset at a time, Keep / Discard / Undo. Result: { kept_uids, discarded_uids }. Best for fast filtering of large batches.
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.Reference
- Full API reference — every endpoint, params, energy costs, rate limits
- skill-shortodella.md (raw) — the file Claude Code loads
- How skills work in Claude Code
- Pricing & energy