Your agent has an
animation tool now.
Upload line art, optionally describe the drawing order, poll for the result, and hand the private review link back to the user. No account or general-purpose API key is required.
- Base URL
https://scribble.boringstuff.club/agent/v1- Input
- PNG or JPEG · up to 10 MB
- Retention
- Up to 24 hours
- Preview
- Free with watermark · $5 unlock
MCP and agent skill
For an MCP-capable agent, connect the Streamable HTTP endpoint at https://scribble.boringstuff.club/mcp. It provides tools to inspect current policy, create and monitor an animation, obtain downloads, redeem a user-provided unlock code, and delete a session.
The installable agent skill teaches the safe workflow and declares that MCP dependency. A deterministic ZIP package and SHA-256 digest are exposed by the discovery index. Use the REST API below when an MCP host cannot supply image bytes as base64.
Workflow
The API is asynchronous and scoped per animation. The recommended agent workflow is:
- Create an animation with a multipart image and a unique
Idempotency-Key. - Store the returned
animation_idandaccess_tokensecurely. - Poll
status_urlwith the bearer capability until the status iscompletedorfailed. - Download the free watermarked preview, and give
manage_urlto the user for browser review or unlock. - After
unlockedbecomes true, download the clean video. Delete the session early when the user no longer needs it.
Create an animation
Send multipart/form-data to POST /agent/v1/animations. Version 1 accepts uploaded bytes only and never fetches a remote image URL.
| Field or header | Required | Meaning |
|---|---|---|
image | Yes | PNG or JPEG, up to 10 MB and 4096 × 4096 pixels. |
order_text | No | Natural-language component order, up to 2,000 characters. Blank asks the model to choose. |
show_hand | No | true or false; defaults to false. |
speed | No | slow, normal, or fast. |
accept_retention | Yes | Must be true to acknowledge 24-hour file retention. |
accept_terms | Yes | Must be true. |
terms_version | Yes | Current version: 2026-08-23.1. Read Terms of Use. |
client_name | Yes | A short non-personal client label. |
client_version | No | The calling integration’s version. |
marketplace | No | A directory label such as the marketplace that supplied the integration. |
Idempotency-Key | Yes | A unique, non-personal retry key, 8–200 characters. |
X-Agent-Installation-Id | Recommended | A stable non-personal installation identifier; only a one-way hash is retained. |
curl --request POST 'https://scribble.boringstuff.club/agent/v1/animations' \
--header 'Idempotency-Key: job-20260823-0001' \
--header 'X-Agent-Installation-Id: install-a1b2c3d4' \
--form 'image=@illustration.png;type=image/png' \
--form 'order_text=Draw the title, then the diagram, then the labels.' \
--form 'show_hand=true' \
--form 'speed=normal' \
--form 'accept_retention=true' \
--form 'accept_terms=true' \
--form 'terms_version=2026-08-23.1' \
--form 'client_name=Example Agent' \
--form 'client_version=1.0.0'
A new request returns HTTP 202. Repeating the identical request with the same idempotency scope and key returns HTTP 200 with idempotent_replay: true. Reusing the key for different input returns 409.
Poll status
Call GET /agent/v1/animations/{animation_id}. Poll conservatively—every 3–5 seconds is sufficient for a job that usually takes about two minutes.
{
"animation_id": "00000000-0000-4000-8000-000000000000",
"status": "running",
"stage": "Drawing your illustration",
"progress": 62,
"expires_at": "2026-08-24T12:00:00+00:00",
"unlocked": false,
"preview_download_available": false,
"clean_download_available": false,
"status_url": "https://scribble.boringstuff.club/agent/v1/animations/…",
"preview_url": "https://scribble.boringstuff.club/agent/v1/animations/…/preview",
"clean_url": "https://scribble.boringstuff.club/agent/v1/animations/…/clean",
"manage_url": "https://scribble.boringstuff.club/s/…#token=…"
}
Terminal statuses are completed and failed. A failed response includes a safe error code and message.
User handoff and unlock
The recommended payment boundary is browser-based: give manage_url to the user. They can review the watermarked result, buy a $5 single-use unlock code through Buy Me a Coffee, and enter it on the private page. The agent never needs payment details.
The agent can continue polling until unlocked becomes true. A trusted client that already has a code may instead send JSON to POST /agent/v1/animations/{animation_id}/unlock:
{ "code": "UNLOCK-XXXX-XXXX-XXXX" }
Unused purchase codes expire after 30 days and can unlock any one animation. A code is consumed atomically and cannot be reused.
Download or delete
GET /agent/v1/animations/{animation_id}/previewdownloads the completed watermarked MP4.GET /agent/v1/animations/{animation_id}/cleandownloads the completed clean MP4 after unlock.DELETE /agent/v1/animations/{animation_id}immediately removes the active session and its files.
A cloud deployment may answer a download with a short-lived redirect to private object storage. Clients should follow HTTP redirects without forwarding the bearer header to a different host.
Errors and limits
| Status | Meaning | Agent behavior |
|---|---|---|
400 | Invalid upload, consent, terms version, or unlock code. | Correct the request; do not blindly retry. |
401 | Missing or malformed bearer capability. | Restore the capability returned at creation. |
403 | The clean video is still locked. | Give the user manage_url. |
404 | Animation, capability pairing, or video not found. | Do not probe other identifiers. |
409 | Video not ready or idempotency conflict. | Poll status, or use a new key for different input. |
410 | Animation expired or was deleted. | Create a new animation if the user requests it. |
422 | Malformed request shape. | Fix fields using the OpenAPI schema. |
429 | Generation or unlock-attempt limit reached. | Respect Retry-After when present. |
503 | Capacity or temporary storage/dispatch failure. | Retry safely with the same idempotency key. |
Failed direct unlock attempts are limited over 15 minutes: 5 per animation, 20 per source-IP hash, and 100 globally.
Security and retention
- Uploaded artwork, instructions, working files, and videos expire within 24 hours.
- Do not place names, emails, filenames, prompts, bearer capabilities, or other personal data in client labels, installation identifiers, idempotency keys, or logs.
- The raw installation identifier and idempotency key are not retained; one-way hashes support attribution and safe retries.
- Never expose the bearer capability to a different user, model prompt, analytics system, or third-party download host.
- Users must own or have permission to process the submitted artwork and should review AI-generated results.
See the Privacy Policy, Terms of Use, and FAQ for the authoritative product rules.