Inspiration
AI video generators produce stunning clips, but stitching 10 disposable clips into a coherent story is expensive and unpredictable. We wanted a tool where you describe a story once and get a complete, editable cartoon — not a lottery ticket.
What it does
Cartoon 2D turns a natural-language prompt into a fully animated 2D cartoon with:
- AI-generated storyboard panels and SVG character rigs (bones, IK, rotation limits)
- Lip-synced dialogue via Google Cloud Text-to-Speech with viseme timing
- A visual timeline editor for actions, camera moves, dialogue, and SFX
- Deterministic animation playback — same spec always produces the same clip
- MP4 export via server-side FFmpeg muxing
How we built it
Gemini 3.1 Flash Image Preview generates scene art and comic panels. Gemini 3.1 Pro Preview produces structured character rigs and motion specifications. A TypeScript runtime compiles AI intent into validated IK-driven animation — the AI never touches keyframes directly. The app runs on Next.js with GSAP for playback, deployed to Google Cloud Run.
Challenges we ran into
Getting Gemini to produce consistent character designs across multiple panels required careful prompt engineering with identity-lock techniques. Building a general-purpose IK animation engine that works for any creature topology — not just humanoids — without hardcoding anatomy-specific heuristics was the biggest technical challenge.
What we learned
AI is best used for creative intent, not precise execution. Letting AI generate structured specifications and then compiling them deterministically produces far more reliable results than asking AI to generate final animations directly.
What's next
Multi-scene story arcs with persistent character memory, collaborative editing, and a plugin system for custom animation behaviors.
Proof of deploy: youtube.com/watch?v=Sy3GXEI0fns
Built With
- ffmpeg
- gemini-3.1-flash-image-preview
- gemini-3.1-pro-preview
- google-cloud-run
- google-cloud-text-to-speech
- google-genai-sdk
- gsap
- next.js
- react
- tailwind
- typescript
Log in or sign up for Devpost to join the conversation.