AI motion graphics generator using React, Remotion, TypeScript, and Google Gemini API.
Provide a text prompt. Frame Studio generates a Remotion video project, compiles it, renders an MP4 directly in your browser, and downloads it. No server-side rendering, no AWS, no credit card needed.
Browser Server (Vercel - FREE)
β β
βββ prompt βββββββββββββββΊ β
β βββ Plan (Gemini)
β βββ Codegen (Gemini)
β βββ TypeScript check + fix loop
β βββ Compile TSX β JS (esbuild)
ββββ compiled code βββββββ β
β β
βββ renderMediaOnWeb() β
βββ (WebCodecs + Mediabunny)
βββ download MP4 β
Flow:
- Plan: Gemini creates video structure from prompt
- Codegen: Gemini writes React/Remotion code
- Compile: TypeScript validation in sandbox
- Fix: Gemini repairs compilation errors (max 3 attempts)
- Server compiles TSX β JS using esbuild
- Browser evaluates the code and renders MP4 using
@remotion/web-renderer - Instant download β no queue, no waiting
Tech:
- Next.js 15 (free Vercel deployment)
- Remotion 4.0 for video rendering (client-side via WebCodecs)
- Google Gemini API for AI code generation
- Supabase for auth, storage, and database
- PWA-ready with manifest + standalone display
- Zero infrastructure costs β no servers, no AWS, no credit card
- Node.js 18+
- pnpm
- Google Gemini API key
- Supabase project (free tier)
pnpm installCopy .env.example to .env.local and fill in the values:
cp .env.example .env.localGEMINI_API_KEY=your_gemini_key
NEXT_PUBLIC_SUPABASE_URL=https://your-project.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_anon_key
NEXT_PUBLIC_SITE_URL=http://localhost:3000- Create a project at supabase.com
- Go to Authentication β Providers and enable Email/Password
- Set Site URL to
http://localhost:3000(or your production URL) - Run the SQL from
supabase-setup.sqlin the SQL editor
pnpm devApplication runs at http://localhost:3000.
You can also provide your Gemini API key in the web UI instead of the env var.
pnpm buildDeploy to Vercel. Set these environment variables in Vercel:
| Variable | Description |
|---|---|
GEMINI_API_KEY |
Your Gemini API key |
NEXT_PUBLIC_SUPABASE_URL |
Supabase project URL |
NEXT_PUBLIC_SUPABASE_ANON_KEY |
Supabase anon/public key |
NEXT_PUBLIC_SITE_URL |
Your production URL (e.g. https://frame-studio.vercel.app) |
Also update the Supabase Dashboard Site URL and Redirect URLs to match your production domain.
- Zero infrastructure β renders entirely in the browser
- Model selector (8 Gemini models)
- Real-time progress screen with stage updates
- Apply-style presets for quick prompts
- Sign up / sign in - email/password or magic link
- Forgot password - reset flow with branded email
- Profile settings - edit name, change email, update password
- Avatar upload - profile picture stored in Supabase Storage
- Video history - save videos, browse on profile, preview & delete
- Apple-level design - glassmorphism, Plus Jakarta Sans, subtle shadows
- Responsive layout - bottom tab nav on mobile, floating pill header on desktop
- PWA-ready - manifest.json, standalone display, apple-touch-icon
- Custom animated cursor - macOS-style arrow (hidden on touch devices)
- Smooth animations - framer-motion micro-interactions throughout
- CDN-loaded Plus Jakarta Sans from Google Fonts
- Gradient accent bars matching each email's purpose
- Premium CTA buttons with subtle glow
- Clean white cards on light gray background
Client-side video rendering requires the WebCodecs API:
- Chrome 94+
- Firefox 130+
- Edge 94+
pnpm dev # Start dev server
pnpm build # Production build
pnpm lint # Lintapps/web/ Next.js app with API routes and UI
βββ app/
β βββ api/
β β βββ apikey/ API key management (httpOnly cookie)
β β βββ auth/user/ Current user endpoint
β β βββ generate/ Video generation pipeline
β β βββ videos/ Save / list / delete saved videos
β βββ auth/
β β βββ callback/ OAuth + auth callback handler
β β βββ signin/ Sign-in page (password + magic link)
β β βββ signout/ Sign-out route
β β βββ signup/ Sign-up page
β β βββ forgot-password/ Request reset link
β β βββ reset-password/ Set new password
β βββ profile/ Video history grid with preview & delete
β βββ settings/ Edit name, email, password, avatar
βββ components/
β βββ Header.tsx Desktop pill nav / mobile bottom tab bar
β βββ PreviewScreen.tsx Full-screen mobile preview with save/download
β βββ ... PromptBox, ProgressScreen, Footer, etc.
βββ lib/
β βββ supabase/
β β βββ client.ts Browser Supabase client
β β βββ server.ts Server Supabase client (cookies)
β βββ apiKey.ts Server-side API key cookie management
βββ public/
β βββ manifest.json PWA manifest
β βββ icon-192.svg App icon
βββ middleware.ts Auth redirect middleware
packages/pipeline/ AI processing (prompts, schemas, LLM client)
packages/remotion-skeleton/ Template for video projects
- Uses webpack (not Turbopack) for stability
- Gemini API key stored in HTTP-only cookies
- Saved videos stored in Supabase Storage (
videosbucket) - Video metadata stored in a
videosPostgreSQL table (RLS-protected) - Avatars stored in Supabase Storage (
avatarsbucket) - Videos render at 1920x1080, 30fps
- Custom cursor is disabled on touch devices automatically
- Email templates load Plus Jakarta Sans from Google Fonts CDN
MIT
