# Lottie Ship > A post-authoring workbench for Lottie (Bodymovin) animations. You bring a > finished file; the app tells you what happens when you ship it. URL: https://lottie-ship.skillsafe.ai/ API tutorial: https://lottie-ship.skillsafe.ai/api.html Token management: https://lottie-ship.skillsafe.ai/tokens.html ## What it does Paste or drop a Lottie JSON. A probe runs immediately, entirely in the browser, with no account and no upload, and reports: - A feature inventory — expressions, effects, track mattes, masks, blend modes, merge paths, repeaters, gradient strokes, text, per-character animators, slots, time remapping, 3D layers, box text, baked glyph outlines, audio, camera and data layers — each with the layer it occurs on and how often. - A renderer support matrix across six shipping runtimes: lottie-web (SVG), lottie-web (canvas), Skottie/CanvasKit, rlottie (dotLottie native), lottie-ios and lottie-android. Every cell is "full", "partial" or "dropped", and every non-full cell carries the reason. - A real gzip measurement of transfer weight (via CompressionStream), with the avoidable contributors named and quantified: embedded images, baked glyph outlines, float precision beyond three decimal places. - Blank-render and load blockers found by inspection, including the failure classes that make lottie-web throw during document completion: a text layer missing its animators array, easing handles placed on the destination keyframe instead of the segment's start, a font entry with no ascent, a text grouping alignment that is not a two-vector, incomplete text-document keyframes, layers with no in/out point, and a dangling asset reference. - A live preview with an SVG/canvas renderer swap, so the matrix's predictions can be seen rather than trusted. Three metered lanes then take the same file and the probe's facts: - **compat** — a per-runtime compatibility report for the targets you select: what each one drops, why, and what the rebuild is. - **slim** — a weight-reduction plan against a KB budget and a device class, each step costed in bytes and risk-rated, with a projected final size. - **embed** — production integration code for React, Next.js, Vue, Svelte, plain JavaScript, a web component, iOS or Android, handling reduced motion, lazy loading, layout reservation, accessibility and external asset paths. ## Contract The three lanes share one output envelope: `task`, `title`, `verdict` (`ship` / `ship-with-changes` / `do-not-ship`), `summary`, `sections[]`, `checklist[]`, `facts_used[]`, `notes[]`. The compat lane adds `targets[]`, the slim lane adds `savings[]` and `projected_gzip_bytes`, the embed lane adds `code[]`. Every answer is reconciled against the client-side probe before it is shown. Where the model is more optimistic than the support table, where a savings plan does not add up, or where generated embed code omits the asset path a file with external images needs, the app says so above the report rather than letting it pass. The Lottie document itself is never sent to the model. Only the probe's derived facts travel — the analysis happens in your browser. ## Sources and licensing A derived work built on the reference material of the open-source `text-to-lottie` skill by Diffusion Studio (https://github.com/diffusionstudio/lottie, MIT), whose player contract and SVG-compatibility notes ground the renderer matrix and the text-rendering rules. Preview rendering uses the lottie-web light build (MIT, Airbnb). Lottie and Bodymovin are trademarks of their respective owners; this app is not affiliated with them. ## Cost and accounts The probe, the preview, the exports and the bundled examples are free and need no account. The three model lanes are metered per run against your SkillSafe credit balance; the app shows the reserved hold before you run and the actual charge afterwards. History is stored in your SkillSafe account, with semantic search over past reports. Signed-in history is stored in the account and mirrored on the device, and the two stores are unioned by record identity rather than one replacing the other, so a fetch cannot delete a local entry and a local entry cannot delete a stored one. Runs and free probes made while signed OUT stay on the device with that signed-out session and are NOT uploaded on sign-in: one browser is shared by more than one person, and there is no way to tell whose a signed-out run was, so uploading it could file somebody else's run permanently under your account. Re-run the lane while signed in if you want it in the account. Everything personal this app stores on the device — the history mirror and the document stashed across a sign-in redirect — is keyed to the account or guest it belongs to, so another person using the same browser cannot read it. Signing out deletes that person's mirror and stash from the device, clears the pasted document from the page, and drops the app token; account records are untouched and come back on the next sign-in. The theme and the chosen render targets are preferences, not personal data, and persist across sessions.