Modern Text-to-Image Generation Web App
A sleek, dark-mode AI image generator with multiple providers,
batch generation, and one-click deployment to Cloudflare Pages.
- Multiple AI Providers - Gitee AI, HuggingFace Spaces, ModelScope
- Image-to-Video - Generate videos from images (Gitee AI)
- Dark Mode UI - Gradio-style with frosted glass effects
- Flexible Sizing - Multiple aspect ratios (1:1, 16:9, 9:16, 4:3, etc.)
- 4x Upscaling - RealESRGAN integration
- Secure Storage - API keys encrypted with AES-256-GCM
- Token Rotation - Multiple API keys with automatic failover on rate limits
- Flow Mode - Visual canvas for batch generation (experimental)
- Local image caching with IndexedDB blob storage
- Dual limits: 500 images or 4GB max storage
- LRU cleanup with user confirmation before deletion
- Download all images before cleanup
Support multiple API tokens per provider for automatic rotation when hitting rate limits (429 errors).
Enter multiple tokens in the API settings, separated by English commas (,):
token_1, token_2, token_3
Note: You must use English comma (
,), Chinese comma (οΌ) will not work.
- Uses the first available token to make API requests
- When a 429 (rate limit) error occurs, automatically switches to the next token
- Exhausted tokens are tracked and skipped for the rest of the day
- Token status resets daily at UTC 00:00
- UI shows real-time token statistics (total/active/exhausted)
- Node.js 18+ / pnpm 9+
- Gitee AI API Key
See Deployment Guide for detailed instructions.
git clone https://github.com/WuMingDao/zenith-image-generator.git
cd zenith-image-generator
pnpm install
# Configure environment
cp apps/web/.env.example apps/web/.env
# Terminal 1
pnpm dev:api
# Terminal 2
pnpm dev:webOpen http://localhost:5173
After deployment, you can call the API directly:
curl -X POST https://your-project.pages.dev/api/generate \
-H "Content-Type: application/json" \
-H "X-API-Key: your-gitee-api-key" \
-d '{"prompt": "a cute cat", "width": 1024, "height": 1024}'π Full API Reference - Providers, parameters, code examples
| Doc | Description |
|---|---|
| Contributing | Local setup, LAN access, development |
| Deployment | Cloudflare, Vercel, Netlify guides |
| API Reference | Endpoints, parameters, code examples |
| Providers & Models | All providers and model details |
Browser ββHTTPSβββ Cloudflare Workers ββHTTPSβββ AI Provider (Gitee/HuggingFace)
β β
AES-256-GCM Proxy Layer
encrypted (your deployment)
- Local Encryption: API keys are encrypted with AES-256-GCM before storing in localStorage
- Transport Security: All communications use HTTPS encryption
- Proxy Architecture: Your keys are sent to your own Workers, not directly to AI providers
Important: If you use someone else's deployed instance, the operator can potentially access your API keys.
This is because:
- The deployment owner can add logging code to capture request headers
- You cannot verify what code is actually deployed (even if the repo is open source)
- Cloudflare provides tools like
wrangler tailthat can inspect live requests
Recommendations:
| Scenario | Risk Level | Recommendation |
|---|---|---|
| Self-hosted deployment | β Safe | Full control over your keys |
| Third-party instance | Use disposable/low-balance keys only | |
| Unknown source | β Unsafe | Do not enter valuable API keys |
For maximum security, always deploy your own instance.
| Layer | Tech |
|---|---|
| Frontend | React 19, Vite, Tailwind CSS, shadcn/ui |
| Backend | Hono (TypeScript) |
| Deploy | Cloudflare Pages, Vercel, Netlify |
MIT