Skip to content

Guides

Export formats

Lottie, animated SVG, video with alpha, GIF, sprites, stickers, logos and stills, at any size. Exports never cost credits.

An export renders a mascot (and, for animated formats, one of its animations) to a file. Exports are jobs because video encoding takes a few seconds, but they never call a model and never cost credits. Vector formats come straight from the rig, so they stay sharp at any size and weigh kilobytes.

Formats#

Animated#

These need an animation: an animation id, an animation name, or any preset id such as wave (presets are fitted to the rig on the fly, even if you never saved one).

formatOutputNotes
lottieapplication/jsonTrue vector: every part is a named layer, no embedded bitmaps. Plays in lottie-web, iOS, Android.
animated-svgimage/svg+xmlSelf-contained SVG with CSS keyframes. No JavaScript needed.
webmvideo/webmVP9 with an alpha channel: transparent video.
mp4video/mp4H.264, no alpha. Background defaults to white.
gifimage/gifWorks everywhere, heaviest per second.
webpimage/webpAnimated WebP with transparency.
apngimage/apngAnimated PNG with transparency (.png extension).
spriteimage/pngOne PNG sheet: frames left to right, then top to bottom, on a grid of ceil(√frames) columns. The API returns the sheet only, not a JSON atlas.

Stills#

animation is optional here: with it, the still is posed at time t of that animation; without it you get the rest pose.

formatOutputNotes
pngimage/pngTransparent unless you pass background.
svgimage/svg+xmlThe posed drawing as plain vector.
stickerimage/pngDie-cut: a thick white border and a soft shadow.
logoimage/svg+xmlVector badge: the head in a circle of the mascot's main colour.
logo-pngimage/pngThe same badge, rasterised at size.

Export options#

POST/mascots/{id}/exports

NameTypeDescription
formatrequiredstringOne of the formats above.
animationstringAnimation id, name, or preset id. Required for animated formats.
sizeintegerOutput width in px for raster formats, 64–2048. Default 512.
fpsintegerFrames per second for animated formats, 6–60. Default 30.
backgroundstringA #rrggbb fill. Omit for transparency (mp4 falls back to white).
tnumberFor stills: seconds into the animation to capture.
version_idstringRender an older version without restoring it.
curl -X POST https://lumorig.com/api/v1/mascots/msc_…/exports -H "Authorization: Bearer $LUMORIG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "format": "webm", "animation": "wave", "size": 768, "fps": 30 }'
# 202 → { "id": "job_…", "type": "export", "status": "queued", … }

curl "https://lumorig.com/api/v1/jobs/job_…?wait=60" -H "Authorization: Bearer $LUMORIG_API_KEY"
# → { "status": "succeeded", "result": { "file": { "id": "file_…", "url": "/api/v1/files/file_…", "mime": "video/webm", "bytes": … } } }

Downloading files#

A finished export job has result.file. Its url is relative to the API origin and, like every file endpoint, needs your API key.

GET/files/{id}

NameTypeDescription
downloadqueryAny value (e.g. ?download=1) sends Content-Disposition: attachment with a filename like lumorig-file_….webm. Without it the file is served inline.
download
curl -L "https://lumorig.com/api/v1/files/file_…?download=1" -H "Authorization: Bearer $LUMORIG_API_KEY" -o pip-wave.webm

Files are immutable, so responses carry a year-long private cache header. Store the bytes on your own CDN if you serve them to users.

Previews#

For thumbnails and quick checks there is a synchronous still renderer. It answers in the request (no job), works with an API key or, for public mascots, with no key at all.

GET/mascots/{id}/preview

NameTypeDescription
formatstringpng (default), svg, sticker or logo.
animationstringPose from this animation (id, name or preset).
tnumberSeconds into that animation.
sizenumberWidth in px, default 512.
vstringA version id. With it the response is cacheable forever; mascot.preview_url already includes it.
thumbnail
<img src="https://lumorig.com/api/v1/mascots/msc_…/preview?animation=wave&t=0.6&size=256" alt="Pip waving" />

Choosing a format#

Measured on one character, a two-second wave at 30 fps and 512 px. Your numbers will vary with the drawing, but the ratios hold.

FormatSizePick it when
lottie48.0 KB · 4.4 KB gzippedYou ship to web, iOS or Android and want the smallest, sharpest file.
animated-svg48.5 KB · 8.6 KB gzippedYou want motion on a web page with no player script at all.
mp498.0 KBSocial posts, decks, anywhere video goes and transparency doesn't matter.
webm147.0 KBTransparent video over your own UI.
gif686.0 KBChat apps, READMEs and places that only take GIFs.
webp · apng675.0 KB · 1.76 MBTransparent animated images where GIF's edges look rough.
spriteone PNG sheetGame engines and canvas renderers.