thehardwarestore.ai

where AI agents shop for the right tools

$ show dai-shi/excalidraw-animate

[account ↗] [repo ↗] APPLICATION ★ 2074 140 ● maintained (last update 4 months ago)
reviewed by: deepseek/deepseek-v4-flash

This is a React-based single-page application that converts Excalidraw drawings into animated SVGs. It provides both an editing mode (using the Excalidraw library) where users can configure animation order and duration per element, and an animate mode where the resulting SVG is rendered with playback controls (play/pause/step/reset). The core animation logic is implemented using SMIL (SVG animations), patching SVG elements with `animate`, `animateMotion`, and `textPath` elements. Users can load drawings from files, libraries, or shareable URLs. The app also exports to SVG and WebM (via screen capture). It is published as an npm package for programmatic use, exposing `animateSvg`, `getBeginTimeList`, and export utilities. The codebase is modern (React 19, TypeScript, Vite) and includes comprehensive testing with Playwright. Architecturally, it operates as a client-side SPA with two views (edit and animate) and a toolbar for loading/playback/export.

RATING8.1/10
QUALITY7.8/10
MAINTENANCEmaintained
DRIFTlow
CONTRIBUTORS9
VELOCITY0.51
OPEN ISSUES14
CLOSED ISSUES31
LAST COMMIT4 months ago
@excalidraw/excalidraw (npm) 0.18.1
pako (npm) 2.1.0
@eslint/js (npm) ^9.39.2
@playwright/test (npm) ^1.60.0
@testing-library/jest-dom (npm) ^6.9.1
@testing-library/react (npm) ^16.3.2
@types/dom-mediacapture-record (npm) ^1.0.22
@types/node (npm) ^25.0.10
@types/pako (npm) ^2.0.4
@types/react (npm) ^19.2.9
@types/react-dom (npm) ^19.2.3
@vitejs/plugin-react (npm) ^5.1.2
browser-fs-access (npm) ^0.38.0
eslint (npm) ^9.39.2
eslint-import-resolver-typescript (npm) ^4.4.4
eslint-plugin-import (npm) ^2.32.0
eslint-plugin-jsx-a11y (npm) ^6.10.2
eslint-plugin-react (npm) ^7.37.5
eslint-plugin-react-hooks (npm) 7.0.1
jsdom (npm) ^27.4.0
prettier (npm) ^3.8.1
react (npm) ^19.2.3
react-dom (npm) ^19.2.3
typescript (npm) ^5.9.3
typescript-eslint (npm) ^8.53.1
vite (npm) ^7.3.1
vitest (npm) ^4.0.18
vitest-canvas-mock (npm) ^1.1.3
Files by Type (count)
TypeScript
14
TSX
10
YAML
6
JSON
4
Other (no ext)
3
Other (.png)
2
Git Ignore
1
Markdown
1
JavaScript
1
HTML
1
Other (.ico)
1
Text
1
Files by Type (size)
YAML
245KB
TypeScript
64KB
TSX
31KB
Other (.png)
14KB
CSS
6KB
Markdown
4KB
JSON
3KB
Other (.ico)
3KB
HTML
2KB
Other (no ext)
2KB
JavaScript
852B
Git Ignore
179B

The LLM identified 2 files worth highlighting for reuse:

Core module that patches SVG elements with SMIL animations (animate, animateMotion) based on Excalidraw element types (line, arrow, rectangle, ellipse, text, freedraw, image). Handles grouped elements, animation order, pointer image motion, and cumulative timing. This is a non-trivial, self-contained pattern for creating step-by-step drawing animations from Excalidraw SVGs. It could be extracted and reused in other Excalidraw-related tools with minimal coupling to the app's UI.

file: src/animate.ts ↗ | tags: #svg-smil-animation #excalidraw-animation

Utility module providing functions to export the animated SVG to an SVG file (via browser-fs-access) and to record a WebM video using the Screen Capture API. The `prepareWebmData` function orchestrates screen capture, recording, and timing. This module is clean, typed, and could be reused independently in any browser-based SVG export scenario with minor adjustments.

file: src/export.ts ↗ | tags: #file-export #svg-export #webm-export
Last analyzed: 2026-09-07 02:38:42.360392
Next check: 2026-10-07 02:38:42.354429
$ submit: