Create Remotion Geist
Marve10s/Better-Fullstack
Create Remotion videos using the Geist design system aesthetic.
Implement Lottie animations using dotLottie runtimes (@lottiefiles/dotlottie-web and @lottiefiles/dotlottie-react).
$ npx skills add LottieFiles/dotlottie-web --skill dotlottie-web -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install LottieFiles/dotlottie-web dotlottie-web --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
Claude Code skills documentation · loads skills from .claude/skills/
Install the "dotlottie-web" agent skill from https://github.com/LottieFiles/dotlottie-web/tree/main into .claude/skills/dotlottie-web/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dotlottie-web", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add LottieFiles/dotlottie-web --skill dotlottie-web -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install LottieFiles/dotlottie-web dotlottie-web --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "dotlottie-web" agent skill from https://github.com/LottieFiles/dotlottie-web/tree/main into .agents/skills/dotlottie-web/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dotlottie-web", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add LottieFiles/dotlottie-web --skill dotlottie-web -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install LottieFiles/dotlottie-web dotlottie-web --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "dotlottie-web" agent skill from https://github.com/LottieFiles/dotlottie-web/tree/main into .cursor/skills/dotlottie-web/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dotlottie-web", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add LottieFiles/dotlottie-web --skill dotlottie-web -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install LottieFiles/dotlottie-web dotlottie-web --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "dotlottie-web" agent skill from https://github.com/LottieFiles/dotlottie-web/tree/main into .gemini/skills/dotlottie-web/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dotlottie-web", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install LottieFiles/dotlottie-web dotlottie-webInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add LottieFiles/dotlottie-web --skill dotlottie-web -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "dotlottie-web" agent skill from https://github.com/LottieFiles/dotlottie-web/tree/main into .github/skills/dotlottie-web/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dotlottie-web", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add LottieFiles/dotlottie-web --skill dotlottie-web -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install LottieFiles/dotlottie-web dotlottie-web --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "dotlottie-web" agent skill from https://github.com/LottieFiles/dotlottie-web/tree/main into .opencode/skills/dotlottie-web/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dotlottie-web", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
dotlottie-webImplement Lottie animations using dotLottie runtimes (@lottiefiles/dotlottie-web and @lottiefiles/dotlottie-react).
Dotlottie Web is an agent skill from LottieFiles/dotlottie-web. Implement Lottie animations using dotLottie runtimes (@lottiefiles/dotlottie-web and @lottiefiles/dotlottie-react). Use when building, debugging, or optimizing dotLottie or Lottie animations in web projects, including vanilla JS, React, and Next.js. Covers package selection, Web Workers, state machines, theming, dynamic slot overriding, performance best practices, and common patterns.
Its SKILL.md is about 3.5k tokens, which your agent loads only when the skill is triggered. The skill folder holds 557 other files, including scripts, reference files and assets (for example `.changeset/README.md`, `.changeset/config.json` and `.changeset/drop-video-support.md`).
It sits in Media & Creative, covering Motion graphics and Theming and dark mode. It works with Lottie, React, JavaScript and Next.js. The repository describes itself as: High-performance Lottie & dotLottie web player powered by Rust + WASM, with React, Vue, Svelte, Solid & Web Components. The licence is MIT.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit d8a4e9e. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 1 file in scripts/, which the agent can run.
Shell commands in SKILL.md call:
npmFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
dotlottie.ioAlso links to:
developers.lottiefiles.comlottiefiles.comcreators.lottiefiles.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Dotlottie Web loads about 3.5k tokens when it runs, and up to ~5k if it reads all its reference files. Until then it costs about 100 tokens; SKILL.md has 552 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from LottieFiles/dotlottie-web at commit d8a4e9e, republished under its MIT licence (© LottieFiles). 552 words, ~3,477 tokens.
.claude/skills/dotlottie-web/SKILL.md (or your agent's skills folder). This skill also uses 553 other files; get the full folder from GitHub.You are an expert at implementing Lottie animations using dotLottie runtimes. Follow these guidelines when working with dotLottie in web projects.
@lottiefiles/dotlottie-web when:@lottiefiles/dotlottie-react when:# Web (vanilla JS, Vue, Svelte, etc.)
npm install @lottiefiles/dotlottie-web
# React
npm install @lottiefiles/dotlottie-reactimport { DotLottie } from '@lottiefiles/dotlottie-web';
const dotLottie = new DotLottie({
canvas: document.getElementById('canvas') as HTMLCanvasElement,
src: 'https://example.com/animation.lottie',
autoplay: true,
loop: true,
});import { DotLottieReact } from '@lottiefiles/dotlottie-react';
function Animation() {
return (
<DotLottieReact
src="https://example.com/animation.lottie"
autoplay
loop
/>
);
}import { useRef } from 'react';
import { DotLottieReact } from '@lottiefiles/dotlottie-react';
import type { DotLottie } from '@lottiefiles/dotlottie-web';
function Animation() {
const dotLottieRef = useRef<DotLottie | null>(null);
return (
<DotLottieReact
src="https://example.com/animation.lottie"
dotLottieRefCallback={(dotLottie) => (dotLottieRef.current = dotLottie)}
/>
);
}Always prefer .lottie format over .json:
Use DotLottieWorker to offload animation rendering to a Web Worker, keeping the main thread free for UI interactions:
import { DotLottieWorker } from '@lottiefiles/dotlottie-web';
const dotLottie = new DotLottieWorker({
canvas: document.getElementById('canvas') as HTMLCanvasElement,
src: 'https://example.com/animation.lottie',
autoplay: true,
loop: true,
});By default, all DotLottieWorker instances share the same worker. Group animations into separate workers using workerId:
// Hero animation in its own worker
const heroAnimation = new DotLottieWorker({
canvas: heroCanvas,
src: 'hero.lottie',
workerId: 'hero-worker',
});
// UI animations share a different worker
const buttonAnimation = new DotLottieWorker({
canvas: buttonCanvas,
src: 'button.lottie',
workerId: 'ui-worker',
});Use DotLottieWorker for:
Use regular DotLottie for:
import { DotLottieWorkerReact } from '@lottiefiles/dotlottie-react';
function Animation() {
return (
<DotLottieWorkerReact
src="animation.lottie"
autoplay
loop
workerId="my-worker" // Optional: dedicate to specific worker
/>
);
}State machines enable interactive animations without code. See the State Machine Guide for details.
const dotLottie = new DotLottie({
canvas,
src: 'interactive.lottie', // Contains state machine
autoplay: true,
});
// Fire events to trigger state transitions
dotLottie.stateMachineFireEvent('click');
dotLottie.stateMachineFireEvent('hover');
dotLottie.stateMachineFireEvent('custom-event');
// Set numeric/boolean/string inputs for state conditions
// See: https://github.com/LottieFiles/dotlottie-web/wiki/dotLottie-State-Machine-Guide#working-with-inputs
dotLottie.stateMachineSetNumericInput('progress', 0.5);
dotLottie.stateMachineSetBooleanInput('isActive', true);
dotLottie.stateMachineSetStringInput('mode', 'dark');click - User click/taphover - Mouse enterunhover - Mouse leavecomplete - Animation finishedSlots allow runtime color/value customization. Themes follow the dotLottie 2.0 spec.
const dotLottie = new DotLottie({
canvas,
src: 'themed.lottie',
themeId: 'dark-mode', // Use embedded theme by ID
});
// Or apply theme data directly (JSON string per dotLottie 2.0 spec)
// See: https://dotlottie.io/spec/2.0/#themes
dotLottie.setThemeData(JSON.stringify({
rules: [
{ id: 'primary-color', value: [1, 0.34, 0.13] }, // RGB values 0-1
]
}));Slots enable runtime customization of animated properties using typed APIs. Available slot types: color, scalar, vector, gradient, text, image.
Key APIs: getSlotIds(), getSlotType(), setColorSlot(), setScalarSlot(),
setVectorSlot(), setGradientSlot(), setTextSlot(), resetSlot(), clearSlots().
For complete API reference with code examples for each slot type, animated keyframes, resetting, bulk updates, common use cases (branding, dark mode, progress indicators), and React integration, see Dynamic Slots Reference.
// Play frames 0-60
dotLottie.setSegment(0, 60);
dotLottie.play();
// Play by marker name (defined in animation)
dotLottie.setMarker('intro');
dotLottie.play();const markers = dotLottie.markers();
// Returns: [{ name: 'intro', time: 0, duration: 60 }, ...]Set autoplay: false so playback doesn't advance past your target, then call setFrame() after load. setFrame() renders synchronously, so the canvas and dotLottie.buffer (RGBA Uint8Array) hold that exact frame immediately after the call.
const dotLottie = new DotLottie({ canvas, src: 'animation.lottie', autoplay: false });
dotLottie.addEventListener('load', () => {
dotLottie.setFrame(42); // render frame 42
const dataUrl = canvas.toDataURL('image/png'); // or canvas.toBlob(cb, 'image/png')
});@napi-rs/canvas)import fs from 'node:fs';
import { createCanvas } from '@napi-rs/canvas';
const canvas = createCanvas(200, 200);
const dotLottie = new DotLottie({
canvas: canvas as unknown as HTMLCanvasElement,
src: 'animation.lottie',
autoplay: false,
});
dotLottie.addEventListener('load', async () => {
dotLottie.setFrame(42);
fs.writeFileSync('frame-42.png', await canvas.encode('png'));
dotLottie.destroy();
});For custom encoding, read raw RGBA pixels directly from dotLottie.buffer (length = width × height × 4).
dotLottie.addEventListener('load', () => {
console.log('Animation loaded');
});
dotLottie.addEventListener('play', () => {
console.log('Playing');
});
dotLottie.addEventListener('complete', () => {
console.log('Animation completed');
});
dotLottie.addEventListener('frame', ({ currentFrame }) => {
console.log('Frame:', currentFrame);
});
// Clean up
dotLottie.removeEventListener('load', handler);import { DotLottieWorker } from '@lottiefiles/dotlottie-web';
// Offload rendering to worker thread
const dotLottie = new DotLottieWorker({
canvas,
src: 'complex-animation.lottie',
});// Only load when visible
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
loadAnimation();
observer.disconnect();
}
});
});
observer.observe(container);DotLottie automatically freezes animations when they're not visible (offscreen). To disable this behavior:
const dotLottie = new DotLottie({
canvas,
src: 'animation.lottie',
renderConfig: {
freezeOnOffscreen: false, // Disable auto-freeze (not recommended)
},
});By default, devicePixelRatio is set to 75% of the actual value for better performance. For full retina quality (with higher performance cost):
const dotLottie = new DotLottie({
canvas,
src: 'animation.lottie',
renderConfig: {
devicePixelRatio: window.devicePixelRatio, // Full retina (higher CPU/GPU)
},
});// Always destroy when done (vanilla JS)
dotLottie.destroy();Note: DotLottieReact handles cleanup automatically on unmount - no manual cleanup needed.
const dotLottie = new DotLottie({
canvas,
src: 'animation.lottie',
useFrameInterpolation: true, // Smooth playback (default)
// useFrameInterpolation: false, // Match original AE frame rate
});A single .lottie file can contain multiple animations:
// Load specific animation by ID
dotLottie.loadAnimation('animation-2');
// Get all animation IDs
const animations = dotLottie.manifest?.animations;
// Returns: [{ id: 'animation-1' }, { id: 'animation-2' }]Set canvas size via CSS styles (recommended). DotLottie will automatically determine the optimal drawing area:
<canvas id="canvas" style="width: 400px; height: 400px;"></canvas>Use the autoResize render config to automatically resize when the container changes:
const dotLottie = new DotLottie({
canvas,
src: 'animation.lottie',
renderConfig: {
autoResize: true, // Canvas resizes to fit container
},
});canvas.addEventListener('mouseenter', () => dotLottie.play());
canvas.addEventListener('mouseleave', () => dotLottie.pause());canvas.addEventListener('click', () => {
dotLottie.setFrame(0);
dotLottie.setLoop(false);
dotLottie.play();
});window.addEventListener('scroll', () => {
const progress = window.scrollY / (document.body.scrollHeight - window.innerHeight);
const frame = progress * dotLottie.totalFrames;
dotLottie.setFrame(frame);
});function Animation() {
const [isLoaded, setIsLoaded] = useState(false);
return (
<>
{!isLoaded && <Skeleton />}
<DotLottieReact
src="animation.lottie"
style={{ opacity: isLoaded ? 1 : 0 }}
dotLottieRefCallback={(dotLottie) => {
dotLottie.addEventListener('load', () => setIsLoaded(true));
}}
/>
</>
);
}function ResponsiveAnimation() {
return (
<DotLottieReact
src="animation.lottie"
autoplay
loop
style={{ width: '100%', maxWidth: '400px' }}
renderConfig={{ autoResize: true }}
/>
);
}// Check if loaded
console.log('Loaded:', dotLottie.isLoaded);
// Get animation info
console.log('Duration:', dotLottie.duration);
console.log('Total Frames:', dotLottie.totalFrames);
console.log('Current Frame:', dotLottie.currentFrame);
console.log('Is Playing:', dotLottie.isPlaying);
console.log('Loop:', dotLottie.loop);
console.log('Speed:', dotLottie.speed);
// Get manifest (for .lottie files)
console.log('Manifest:', dotLottie.manifest);dotLottie.addEventListener('loadError', (error) => {
console.error('Failed to load animation:', error);
// Show fallback UI
});dotLottie requires browser APIs. For SSR frameworks:
import dynamic from 'next/dynamic';
const DotLottieReact = dynamic(
() => import('@lottiefiles/dotlottie-react').then(mod => mod.DotLottieReact),
{ ssr: false }
);
function Animation() {
return <DotLottieReact src="animation.lottie" autoplay loop />;
}© LottieFiles, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 553 other files (scripts, references, assets) in the repository root of LottieFiles/dotlottie-web.
Open the folder on GitHubat commit d8a4e9e
Dotlottie Web next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Dotlottie Web this skillLottieFiles/dotlottie-web | 892 | — | ~3.5k | Automated safety check: Pass | MIT | |
| Create Remotion GeistMarve10s/Better-Fullstack | 754 | — | ~1.4k | Automated safety check: Pass | MIT | |
| UI UX Pro Maxshobcoder/shob | 576 | — | ~3.7k | Automated safety check: Pass | MIT | |
| Motiscope RecreateKumarSashank/motiscope | 122 | — | ~2k | Automated safety check: Pass | MIT | |
| RecreateKumarSashank/motiscope | 122 | — | ~1.8k | Automated safety check: Notes | MIT | |
| Premium UI Revampbuildfastwithai/gen-ai-experiments | 785 | — | ~2k | Automated safety check: Pass | MIT |
Marve10s/Better-Fullstack
Create Remotion videos using the Geist design system aesthetic.
shobcoder/shob
UI/UX design intelligence expert for web and mobile applications.
KumarSashank/motiscope
Recreate an analyzed animation as working web code — GSAP (JavaScript), CSS/Web Animations, Framer Motion (React), or Lottie/SVG.
KumarSashank/motiscope
Recreate an analyzed animation as working web code — GSAP (JavaScript), CSS/Web Animations, Framer Motion (React), or Lottie/SVG.
buildfastwithai/gen-ai-experiments
Audit and revamp existing web interfaces into polished, professional, product-specific experiences while preserving behavior and working within the current frontend stack.
majiayu000/spellbook
A skill your agent uses when planning, building, designing, code review, refactor, fixing, improving, optimizing, enhancing, or checking UI/UX work.
Categories
Implement Lottie animations using dotLottie runtimes (@lottiefiles/dotlottie-web and @lottiefiles/dotlottie-react). Dotlottie Web is an agent skill from LottieFiles/dotlottie-web. Implement Lottie animations using dotLottie runtimes (@lottiefiles/dotlottie-web and @lottiefiles/dotlottie-react).
Dotlottie Web fits situations like: optimizing dotLottie; lottie animations in web projects; including vanilla JS.
Run `npx skills add LottieFiles/dotlottie-web --skill dotlottie-web -a claude-code`. Or copy the skill folder (the LottieFiles/dotlottie-web repository) into .claude/skills/dotlottie-web in your project. Claude Code loads it when a task matches its description.
Run `npx skills add LottieFiles/dotlottie-web --skill dotlottie-web -a codex`. Or copy the skill folder (the LottieFiles/dotlottie-web repository) into .agents/skills/dotlottie-web in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add LottieFiles/dotlottie-web --skill dotlottie-web -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/dotlottie-web, .gemini/skills/dotlottie-web, .github/skills/dotlottie-web and .opencode/skills/dotlottie-web in your project.
Going by SKILL.md and its folder, Dotlottie Web needs the command-line tools its instructions call (npm). Our summary lists: Node.js.
SKILL.md names 4 domains. In commands or code: dotlottie.io; the agent is likely to contact it when it follows the instructions. As links in the text: developers.lottiefiles.com, lottiefiles.com and creators.lottiefiles.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Dotlottie Web is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.5k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 1.5k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Dotlottie Web: Create Remotion Geist (Marve10s/Better-Fullstack, 754 stars), UI UX Pro Max (shobcoder/shob, 576 stars), Motiscope Recreate (KumarSashank/motiscope, 122 stars) and Recreate (KumarSashank/motiscope, 122 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
LottieFiles (a GitHub organization) maintains it in LottieFiles/dotlottie-web, which has 892 GitHub stars. The repository was last updated on October 7, 2026.
Source: LottieFiles/dotlottie-web on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.