Second StudioDocs llms.txtRequest access

Quickstart

1. Get your keys

Request access. Every account is approved by a person. Once yours is, you receive two API keys and a starting credit balance:

Store both somewhere safe, like a password manager. Only a hash of each key is stored, so a lost key cannot be recovered — ask for a new one and the old one is revoked.

2. Connect your agent

The fastest way is the remote MCP server — no install. In Claude Code:

claude mcp add --transport http second-studio https://frugal-anteater-681.convex.site/mcp --header "Authorization: Bearer YOUR_AGENT_KEY"

Other clients: see Connect an agent. Then just ask your agent, for example:

Analyze the editing style of reference.mp4, then cut my clips in ./footage to that style with track.mp3 as the music, and show me the result.

3. Or do it yourself with curl

Every step below is what the agent does for you.

export SS=https://frugal-anteater-681.convex.site
export KEY=ss_live_...      # your agent key

# Upload a file: get a one-time URL, send the bytes, register the result.
upload() {
  url=$(curl -s -X POST "$SS/v1/assets/upload-url" -H "Authorization: Bearer $KEY" | jq -r .uploadUrl)
  sid=$(curl -s -X POST "$url" -H "Content-Type: $2" --data-binary @"$1" | jq -r .storageId)
  curl -s -X POST "$SS/v1/assets" -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
       -d "{\"storageId\":\"$sid\",\"filename\":\"$(basename "$1")\"}" | jq -r .id
}
REF=$(upload reference.mp4 video/mp4)
CLIP1=$(upload clip1.mp4 video/mp4)
CLIP2=$(upload clip2.mov video/quicktime)
MUSIC=$(upload track.mp3 audio/mpeg)

# Analyze the reference's style (2 credits). Jobs are asynchronous: poll until done.
JOB=$(curl -s -X POST "$SS/v1/styles" -H "Authorization: Bearer $KEY" \
      -H "Content-Type: application/json" -d "{\"assetId\":\"$REF\"}" | jq -r .id)
until [ "$(curl -s "$SS/v1/jobs/$JOB" -H "Authorization: Bearer $KEY" | jq -r .status)" = succeeded ]; do sleep 3; done
STYLE=$(curl -s "$SS/v1/jobs/$JOB" -H "Authorization: Bearer $KEY" | jq -r .result.styleId)

# Cut your clips to that style (5 credits).
JOB=$(curl -s -X POST "$SS/v1/edits" -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" -d "{
  \"styleId\": \"$STYLE\", \"clipAssetIds\": [\"$CLIP1\", \"$CLIP2\"], \"musicAssetId\": \"$MUSIC\",
  \"captions\": [\"The hook goes first\", \"Then the proof\", \"Then the payoff\"] }" | jq -r .id)
until [ "$(curl -s "$SS/v1/jobs/$JOB" -H "Authorization: Bearer $KEY" | jq -r .status)" = succeeded ]; do sleep 5; done
curl -s "$SS/v1/jobs/$JOB" -H "Authorization: Bearer $KEY" | jq -r '.outputs[] | select(.role=="edit") | .url'

A failed job reports status: "failed" with an error, and its credits are refunded automatically.

Next

Agents: this page is also available as Markdown; the whole reference is in llms-full.txt.