Already have a mascot? Keep it. The rebuilder is a Claude agent that redraws your art as separate vector parts with real joints, then compares its render against your original and keeps correcting until they match. The result moves like any generated character, and you get a score that says how close it is.
Upload the image#
POST /uploads takes either a multipart file field or JSON { "url": "https://…" }, and returns a file object (file_…) with status 201.
- Images: PNG, JPG, WebP or GIF (converted to PNG, EXIF rotation applied), or SVG (kept as SVG).
- Size: up to 15 MB.
- Videos (MP4, MOV, WebM) are accepted too, but they are for reference motion, not rebuilds.
curl -X POST https://lumorig.com/api/v1/uploads -H "Authorization: Bearer $LUMORIG_API_KEY" -F "file=@./mascot.png"
# 201 → { "id": "file_…", "object": "file", "kind": "upload", "mime": "image/png", "bytes": 48213, … }
# or let the server fetch it
curl -X POST https://lumorig.com/api/v1/uploads -H "Authorization: Bearer $LUMORIG_API_KEY" \
-H "Content-Type: application/json" -d '{ "url": "https://example.com/mascot.png" }'Start the rebuild#
Create a mascot with upload_id instead of a prompt. You can skip the upload step and pass image_url; the server downloads it (http or https, 20 second timeout) and uploads it for you.
curl -X POST https://lumorig.com/api/v1/mascots -H "Authorization: Bearer $LUMORIG_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "upload_id": "file_…", "notes": "the thing in its hand is a phone" }'
# 202 → { "mascot": { "id": "msc_…", "source": "image", "status": "generating" }, "job": { "type": "reconstruct", … } }| Name | Type | Description |
|---|---|---|
upload_id | string | A file from POST /uploads. Either this or image_url is required. |
image_url | string (uri) | An http(s) image URL the server fetches and uploads. |
notes | string | Hints for the rebuilder, max 1,000 characters: what an ambiguous shape is, which parts should move. |
max_cost_usd | number | Stop the job if its model spend passes this. Can only lower the built-in ceiling. |
A rebuild costs 120 credits (held up front, refunded if it fails) and usually takes about two minutes. style and detail do not apply: the rebuild follows your art. Progress streams over GET /jobs/{id}/events exactly as for generation; rebuild drafts also carry a fidelity score.
Fidelity and review#
Every rebuild is rendered and compared with your upload on silhouette overlap and colour. The score, from 0 to 1, is saved on the mascot as fidelity. Below 0.8 the mascot is flagged needs_review: true: it is usable, but look at it before you build on it. The finished job also links a side-by-side image.
{
"mascot_id": "msc_…",
"version_id": "ver_…",
"fidelity": 0.93,
"needs_review": false,
"compare_url": "/api/v1/files/file_…",
"summary": "Rebuilt as 14 parts; the scarf is split so it can trail."
}compare_url is a PNG strip: your original, the rebuild, and a difference map. Download it with your key. If the rebuild is close but not right, a chat edit ("the ears are rounder in the original") is usually cheaper than starting over.
SVG uploads#
An SVG is recognised by its content (it starts with <svg or an XML declaration containing one) and stored as-is. The mascot's source is svg. For the rebuild, the SVG is rasterised for the visual comparison and its source (the first 20,000 characters) is given to the agent, so your exact shapes and colours carry over. It is still rebuilt: SVGs rarely come split into movable parts with pivots.
Tips for good rebuilds#
Use the cleanest art you have#
A flat or lightly shaded character on a plain or transparent background, at 512 pixels or more, rebuilds best. Crop to the character.
One character, one pose#
A neutral front or three-quarter pose with arms away from the body gives the rig clear joints. Character sheets and group shots confuse it.
Say what is ambiguous#
Use notes for things the image cannot tell: "the tuft on its head is hair, not a flame", "the tail should swing", "keep the logo on the chest exactly".