OpenThumbnail is a local-first thumbnail workshop for generating, remixing, and exporting YouTube-style thumbnails with OpenRouter image models.
Live app: openthumbnail.przxmus.dev
- Create multiple projects and keep each project's timeline/history.
- Import reference images from files or directly from a YouTube URL.
- Generate thumbnails with OpenRouter image models.
- Use personas (reusable reference packs) to keep style consistency.
- Edit generated images (crop, rotate, brightness, contrast, saturation, blur, sharpen).
- Export a single image as JPG or all outputs as a ZIP.
- Export/import a full project backup.
- Switch app language (
English/Polish) and theme (light/dark/system).
- Node.js 20+ (recommended for modern Vite/TanStack Start tooling)
- A package manager (
bun,npm,pnpm, oryarn) - An OpenRouter API key for image generation
- Install dependencies:
bun install- Start the app:
bun run dev- Open
http://localhost:3000 - Go to Settings and paste your OpenRouter API key (
sk-or-v1-...) - Create a project and start generating thumbnails
If you use npm:
npm install
npm run dev- Create a project from the home screen.
- Add references:
- Upload one or more local images.
- Or paste a YouTube URL to import the best available thumbnail automatically.
- Choose a model, aspect ratio, resolution (
720por1080p), and output count. - Generate outputs, then remix/edit the best result.
- Export:
- Single image as JPG.
- Batch ZIP for all outputs.
- Full project backup for migration/archive.
bun run dev- start dev server on port3000bun run build- production buildbun run preview- preview production buildbun run test- run testsbun run lint- run ESLintbun run format- run Prettierbun run check- format + auto-fix lint issues
- The app is local-first. Project data is stored in your browser (IndexedDB + localStorage).
- Your OpenRouter API key is stored locally in browser storage.
- Generated/reference images and timeline state stay on your machine unless you explicitly call an external model API.
- Image generation requests are sent to OpenRouter using your key.
- Large projects can hit browser quota limits. Use cleanup/export backup if storage warnings appear.
- No models appear: confirm your OpenRouter API key is set correctly in Settings.
- Generation fails: try a different model or simpler prompt; some providers have model-specific limitations.
- YouTube import fails: verify the URL format (
youtube.com/watch,youtube.com/shorts, oryoutu.be). - Storage quota errors: export and remove older projects/assets.
- TanStack Start + TanStack Router
- React + TypeScript
- Tailwind CSS + shadcn-style components
- IndexedDB (
idb) for local data - OpenRouter SDK +
@tanstack/aifor image generation
No license file is currently included in this repository.