AI Image & Video Generator
A modern, lightweight AI image and video generator. Built with vanilla JavaScript (ES Modules) and deployable to Vercel with zero build configuration. Supports 47 models across OpenRouter, xAI, and Evolink.
Features
Image & Video Generation
-
Seedance 2.0 Mini I2V — In the model picker's Video tab, select Seedance 2.0 Mini labeled Image → Video and attach one start frame or two start/end frames. Supports 4–15 seconds, 480p/720p, and audio. Relaxed filtering is on by default (+10%); re-enable Standard content filter in Settings to turn it off.
-
Multi-Model Support — 47 catalog-driven models (31 image, 1 edit, 15 video)
-
Batch Generation — Create 1–4 images per request (video models produce 1)
-
Configurable Output — Aspect ratio, resolution, quality, output format, background, exact pixels, video length/quality, and model-specific options from the catalog (seed, planning depth, thinking level, fast mode, image/web search), shown only for models that support them
-
Video Generation — Text-to-video via xAI Grok and Evolink Seedance 2.0, Gemini Omni 1.2 Flash, and MiniMax H3 Max Turbo; image-to-video via Evolink Seedance 2.0, HappyHorse 1.0, Gemini Omni 1.2 Flash, and MiniMax H3 Max Turbo
-
Audio in Videos — Evolink Seedance 2.0 supports generated audio
-
Resilient Async Tasks — Evolink images and all videos poll independently, preserve partial successes, and allow per-task retry
Image Editing
- Reference Images — Attach up to 10 images, subject to the selected model's catalog limit
- Auto Compression — Accepted uploads are processed sequentially and re-encoded at up to 768px, JPEG 75%
- Model Interpretation — Describe changes and let compatible edit models apply them
- Image-to-Video — Use attached images as start frame (and optional end frame) for I2V models
- Video-to-Video — Attach an MP4 (or click Edit video on a gallery video) to edit, extend or upscale it with Gemini Omni 1.2 Flash. The browser uploads the video straight to Evolink's file store with your saved Evolink key, so it never passes through the serverless request limit
Prompt Tools
- AI Enhancement — Improve prompts with one click using Grok (xAI Responses API)
- Surprise Me — AI-generated random prompts combining subjects, styles, moods, settings, and lighting
Gallery & Organization
- Responsive Grid — Thumbnail gallery with shimmer loading animations; video cards show inline playback
- Lightbox Viewer — Full-screen preview with metadata, download, and remix options
- Folder System — Organize images and videos into custom folders with drag-and-drop
- Bulk Selection — Multi-select mode for batch operations
- Visibility Modes — Show all media or folder-only view
Cost Management
- Real-Time Tracking — Cost displayed per image/video as it generates
- Spend Dashboard — Breakdown by model with generation counts
- Total Spend — Running total accessible from the UI
User Experience
- Adaptive Settings — Focus-managed side drawer on desktop and bottom sheet on mobile, with Generation, Storage, and Keys tabs
- Consistent Dialogs — Shared visual treatment and keyboard focus behavior for confirmations, API-key prompts, folders, and prompt enhancement
- Keyboard Shortcuts — Quick actions without mouse
- Touch Gestures — Swipe-to-close lightbox on mobile
- PWA Support — Install as a standalone app and reload the cached application shell offline
- Persistent Storage — IndexedDB with localStorage fallback
- Generation Recovery — Pending tasks resume after reload; status-check retries reuse the existing task and avoid duplicate spend entries.
- Storage Quality — Choose optimized or original-quality storage for new images in Settings → Storage. New videos and preview posters are saved in IndexedDB when space allows; a warning appears when the media file cannot be saved.
- Lazy Media Loading — Thumbnail bytes load near the viewport; video previews pause and release their source when offscreen.
- Zero Build — No bundlers, transpilers, or build steps required
Supported Models
All models are defined in shared/model-catalog.json, the single source of truth for routing, settings and pricing. The tables below are generated from it: run node scripts/model-table.mjs --write after changing the catalog (npm test fails if a model is missing here).
Evolink (25)
Evolink API key. Images and videos run as async tasks.
This is the beginning of the README. Read the rest at the original. Read the full README ↗