A modern, AI-powered canvas application for generating and manipulating images and videos using OpenAI GPT Image, Google Gemini, Kling AI, Hailuo AI (MiniMax), and Fal.ai. Built with React, TypeScript, and Vite.
- ๐จ Visual Canvas Interface - Drag-and-drop node-based workflow
- ๐ค Multi-Model AI Generation - GPT Image 1.5, Gemini Pro, Kling V1-V2.5 for images
- ๐ฌ Multi-Model Video Generation - Veo 3.1, Kling V1-V2.6, Hailuo 2.3/O2 for videos
- ๐ฅ Camera Angle Control - Transform any image by adjusting camera rotation and tilt angles (Qwen-Image-Edit)
- ๐ Storyboard - Create video storyboards with consistent characters and layouts
- ๐ Motion Control - Transfer motion from reference videos to character images (Kling V2.6 via Fal.ai)
- ๐ฅ TikTok Import - Download TikTok videos without watermark for use as motion references
- ๐ค Post to X - Share generated images/videos directly to Twitter/X with one click
- ๐ค Post to TikTok - Share generated videos directly to TikTok with one click
- ๐ผ๏ธ Image-to-Image - Use reference images for generation
- ๐ฝ๏ธ Frame-to-Frame Video - Animate between start and end frames
- ๐ Smart Node Connections - Type-aware validation (IMAGEโVIDEO, TEXTโIMAGE, etc.)
- ๐ฌ AI Chat Assistant - Built-in chat with LangGraph agent
- ๐ Asset Library - Save and reuse generated assets
- ๐พ Workflow Management - Save, load, and share workflows
- โก Real-time Updates - Hot module replacement for instant feedback
- ๐ฏ Aspect Ratio Control - Multiple preset ratios for images
- ๐น Resolution Options - 720p and 1080p for videos
- ๐ Secure API - Backend proxy keeps API keys safe
- ๐ Auto-Model Selection - Filters models based on input compatibility
- ๐ฅ๏ธ Local Open-Source Models - Run Stable Diffusion, ControlNet, Qwen on your GPU
- โ๏ธ Commercial Friendly - Dual-licensed or permissive terms for commercial growth
TwitCanva.Workflow.Recording.mp4
Transfer motion from a reference video to a character image - make anyone dance!
TwitCanva.Kling.Motion.Control.mp4
Download all the generated videos and use video editting tool like CapCut to create a final video. Check result below.
TwitCanva.mp4
Hollywood-scene-visits.mp4
Transform any image by adjusting camera rotation and tilt angles.
Camera.Control.Feature.Complete.mp4
Create video storyboards with consistent characters and layouts.
TwitCanva.Storyboard.mp4
- Node.js 18+
- npm or yarn
- Google Gemini API key (get one at Google AI Studio)
- Kling AI API keys (get them at Kling AI Developer)
- Requires purchasing API packages at Kling AI Pricing
- Hailuo AI API key (get one at MiniMax Platform)
- OpenAI API key (get one at OpenAI Platform)
- Requires organization verification to use GPT Image models
- Fal.ai API key (get one at Fal.ai Dashboard) - Required for Kling V2.6 Motion Control
-
Clone the repository
git clone https://github.com/SankaiAI/TwitCanva.git cd TwitCanva -
Install dependencies
npm install
-
Set up environment variables
Create a
.envfile in the root directory:# Get from https://aistudio.google.com/app/apikey GEMINI_API_KEY=your_gemini_api_key_here # Get from https://app.klingai.com/global/dev/api-key KLING_ACCESS_KEY=your_kling_access_key_here KLING_SECRET_KEY=your_kling_secret_key_here # Get from https://platform.minimax.io/user-center/basic-information/interface-key HAILUO_API_KEY=your_hailuo_api_key_here # Get from https://platform.openai.com/api-keys OPENAI_API_KEY=your_openai_api_key_here # Get from https://fal.ai/dashboard/keys (for Kling V2.6 Motion Control) FAL_API_KEY=your_fal_api_key_here # Optional: X (Twitter) Post Feature - Get from https://developer.twitter.com/en/portal # See docs/post-to-x.md for detailed setup instructions TWITTER_CLIENT_ID=your_twitter_client_id TWITTER_CLIENT_SECRET=your_twitter_client_secret TWITTER_API_KEY=your_twitter_api_key TWITTER_API_SECRET=your_twitter_api_secret TWITTER_ACCESS_TOKEN=your_twitter_access_token TWITTER_ACCESS_TOKEN_SECRET=your_twitter_access_token_secret TWITTER_CALLBACK_URL=http://127.0.0.1:3001/api/twitter/callback # Optional: TikTok Post Feature - Get from https://developers.tiktok.com/ # See docs/tiktok-integration.md for detailed setup instructions TIKTOK_CLIENT_KEY=your_tiktok_client_key TIKTOK_CLIENT_SECRET=your_tiktok_client_secret TIKTOK_CALLBACK_URL=https://your-ngrok-url.ngrok-free.app/api/tiktok-post/callback
โ ๏ธ Security: API keys are stored server-side only and never exposed to the client. -
Start the development server
npm run dev
This starts both:
- Frontend dev server:
http://localhost:5173 - Backend API server:
http://localhost:3001
- Frontend dev server:
If you prefer using Docker to run the application in a containerized environment (recommended for deployment):
-
Clone the repository and set up .env (same as steps 1-3 above)
-
Run with Docker Compose
docker compose up -d --build
- The app will run on
http://localhost:3001 - Data persists in the local
library/folder - To stop:
docker compose down
- The app will run on
TwitCanva supports running open-source AI models (like Stable Diffusion, Qwen Camera Control, ControlNet) locally on your GPU. This is optional - the cloud-based AI models work without this setup.
Requirements:
- NVIDIA GPU with 8GB+ VRAM (12GB+ recommended for larger models)
- Python 3.10+
- CUDA-compatible drivers
Setup:
# Option 1: Use npm script (recommended)
npm run setup:local-models
# Option 2: Run setup script directly
# Windows:
setup-local-models.bat
# Linux/macOS:
chmod +x setup-local-models.sh
./setup-local-models.shThis will:
- Create a Python virtual environment (
venv/) - Install PyTorch with CUDA support (~2.8GB download)
- Create the
models/directory structure - Test GPU detection
Adding Models:
Download models from HuggingFace, Civitai, or similar sites (.safetensors, .ckpt, or .pt files) and place them in the appropriate folder:
| Folder | Model Types | Examples |
|---|---|---|
models/checkpoints/ |
Main image generation models | Stable Diffusion 1.5, SDXL, DreamShaper, Juggernaut XL, Flux |
models/loras/ |
LoRA adapters for styles/characters | Art styles, character LoRAs, detail enhancers |
models/controlnet/ |
Guided generation models | OpenPose, Canny, Depth, Tile |
models/video/ |
Video generation models | AnimateDiff, Stable Video Diffusion (SVD) |
Using Local Models:
- Right-click on canvas โ Add Nodes
- Select "Local Image Model" or "Local Video Model"
- Choose your downloaded model from the dropdown
- Enter a prompt and generate!
๐ For detailed documentation, see docs/local-model-support.md
Transform your generated images with AI-powered camera angle manipulation using the Qwen Image Edit model.
For users without high-end GPUs, we provide a Modal-based cloud deployment.
-
Install Modal:
pip install modal modal setup
-
Deploy the App:
modal deploy modal/camera_angle.py
-
Configure Environment: Copy the generated
generateendpoint URL and add it to your.envfile:VITE_MODAL_CAMERA_ENDPOINT=https://your-workspace--camera-angle-control-cameraangle-generate.modal.run
-
Managing Costs:
- Auto scale-down: Containers automatically shut down after 5 minutes of inactivity (no charges when idle).
- Stop the app completely: Run
modal app stop camera-angle-controlto disable the endpoint entirely. - Restart after stopping: Run
modal deploy modal/camera_angle.pyagain to re-enable.
Tip: Stop the app when not actively using the feature to avoid any accidental charges.
This feature requires a 24GB VRAM GPU (RTX 3090/4090).
Download Models (~35GB):
# Activate venv
.\venv\Scripts\activate # Windows
source venv/bin/activate # Linux/macOS
# Download fast transformer (~20GB)
huggingface-cli download linoyts/Qwen-Image-Edit-Rapid-AIO \
--local-dir models/camera-control/qwen-rapid-aio \
--include "transformer/*"
# Download camera angle LoRA (~236MB)
huggingface-cli download dx8152/Qwen-Edit-2509-Multiple-angles \
้ๅคด่ฝฌๆข.safetensors \
--local-dir models/camera-control/lorasConfigure HuggingFace Cache (Recommended):
By default, HuggingFace caches models to your C: drive. Move the cache to prevent filling up your system drive:
# Windows - Set cache to D: drive
[System.Environment]::SetEnvironmentVariable("HF_HOME", "D:\HuggingFace_Cache", "User")
# Restart terminal after running# Linux/macOS - Add to ~/.bashrc or ~/.zshrc
export HF_HOME="/path/to/your/cache"
source ~/.bashrcStart Camera Angle Server:
.\start-camera-server.bat # Windows
./start-camera-server.sh # Linux/macOS
# Server runs on http://localhost:8100๐ For detailed documentation, see docs/camera-angle-control.md
All generated assets are automatically saved to local folders. These folders are created automatically when the server starts if they don't exist.
| Asset Type | Folder | File Format | Notes |
|---|---|---|---|
| Images | library/images/ |
.png + .json |
Auto-saved on generation |
| Videos | library/videos/ |
.mp4 + .json |
Auto-saved on generation |
| Workflows | library/workflows/ |
.json |
Manual save via UI |
| Chat Sessions | library/chats/ |
.json |
Auto-saved per message |
| Assets | library/assets/ |
Various | User uploaded files |
- On server startup: Directories are created with
fs.mkdirSync(dir, { recursive: true }) - On generation: Files are saved to disk and served via
/library/*URLs - Metadata: Each asset has a
.jsonfile with prompt, timestamp, and other info - Persistence: Assets persist across server restarts
Note: The
library/folder is in.gitignoreand won't be committed to the repository.
- Double-click on the canvas to open the context menu
- Select "Add Nodes" โ Choose node type (Image/Video)
- Enter a prompt describing what you want to generate
- Click the โจ Generate button
- Hover over a node to reveal connector buttons (+ icons)
- Click and drag from a connector to create a connection
- Release on another node to connect and chain generation
- Click the Chat button in the top bar
- Type your message or attach images from the canvas
- The AI assistant can help with prompts, ideas, and more
- Click the Workflows button in the top bar
- Enter a workflow name and click Save
- Load saved workflows anytime from the same panel
- Pan: Click and drag on empty canvas space
- Zoom:
Ctrl/Cmd + Mouse Wheelor use the zoom slider - Select: Click on a node to select it
- Multi-select:
Shift + Clickor drag a selection box - Context Menu: Right-click for additional options
Access import tools via the Wrench icon in the left toolbar.
Download TikTok videos without watermark to use as motion references for the Motion Control feature:
- Click the Wrench (Tools) icon in the left toolbar
- Select Import TikTok from the dropdown menu
- Paste a TikTok video URL (tiktok.com, vm.tiktok.com, or vt.tiktok.com)
- Click Import Video to download
- Preview the video and click Add to Canvas
Tip: The imported video will appear in your Video History and can be used as a motion reference when generating videos with Kling V2.6 Motion Control. This allows you to transfer dance moves, gestures, or any motion from TikTok videos to your AI-generated characters!
Note: First and last frames are automatically trimmed to remove TikTok watermarks (requires ffmpeg installed on your system).
Share your generated images and videos directly to Twitter/X:
- Generate an image or video using a node
- Hover over the media and click the X icon button
- Sign in with your X account (first time only)
- Add an optional caption
- Click Post to share!
Rate Limits (Free Tier): 17 posts/day, 85 media uploads/day. See Post to X Documentation for setup instructions.
Share your generated videos directly to TikTok:
- Generate a video using a node
- Hover over the video and click the TikTok icon button (๐ต)
- Sign in with your TikTok account (first time only)
- Add a caption with hashtags
- Select privacy level ("Only Me" for testing)
- Click Post to TikTok
Note: Unaudited apps can only post to private accounts. See TikTok Integration Documentation for full setup.
npm run dev # Start frontend + backend together
npm run server # Start backend server only (port 3001)
npm run build # Build for production
npm run preview # Preview production buildYour API key is never exposed to the browser:
โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ
โ Browser/Client โโโโโโถโ Backend :3001 โโโโโโถโ Gemini API โ
โ (No API key) โ โ (.env file) โ โ โ
โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ
- โ
API key stored in
.env(server-side only) - โ
.envfile is in.gitignore - โ Backend proxies all API calls
- โ No sensitive data in client code
- React 18 - UI library
- TypeScript - Type safety
- Vite - Build tool
- Tailwind CSS - Styling
- Lucide React - Icons
- Express - Web server
- LangGraph.js - Chat agent framework
- @google/genai - Gemini API client
- dotenv - Environment variables
Image Generation:
| Model | Provider | Image-to-Image | Multi-Image |
|---|---|---|---|
| GPT Image 1.5 | OpenAI | โ | โ |
| Gemini Pro | โ | โ | |
| Kling V1 | Kling AI | โ | โ |
| Kling V1.5 | Kling AI | โ | โ |
| Kling V2 New | Kling AI | โ | โ |
| Kling V2.1 | Kling AI | โ | โ |
Video Generation:
| Model | Provider | Text-to-Video | Image-to-Video | Frame-to-Frame |
|---|---|---|---|---|
| Veo 3.1 | โ | โ | โ | |
| Kling V1 | Kling AI | โ | โ | โ |
| Kling V1.5 | Kling AI | โ | โ | โ |
| Kling V1.6 | Kling AI | โ | โ | โ |
| Kling V2 Master | Kling AI | โ | โ | โ |
| Kling V2.1 | Kling AI | โ | โ | โ |
| Kling V2.1 Master | Kling AI | โ | โ | โ |
| Kling V2.5 Turbo | Kling AI | โ | โ | โ |
| Hailuo 2.3 | MiniMax | โ | โ | โ |
| Hailuo 2.3 Fast | MiniMax | โ | โ | โ |
| Hailuo 02 | MiniMax | โ | โ | โ |
| Hailuo O2 | MiniMax | โ | โ | โ |
| Kling V2.6 Motion | Fal.ai | โ | โ | Motion Control |
Chat:
- Gemini 2.0 Flash - Chat conversations
See code-style-guide.md for detailed guidelines:
- File Size Limits: Components 300 lines, Utils 200 lines
- TypeScript: Strict typing, avoid
any - Comments: JSDoc for functions, section headers for organization
- Add UI components in
src/components/ - Create custom hooks in
src/hooks/ - Add API routes in
server/index.js - Update types in
src/types.ts
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Follow the code style guide
- Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the Apache License 2.0.
If you are using this project for commercial purposes or building a commercial product, please refer to the NOTICE file for notification requirements.
- OpenAI for GPT Image generation
- Google Gemini API for AI generation
- Kling AI for video generation
- MiniMax for Hailuo AI video generation
- Fal.ai for Kling V2.6 Motion Control API
- LangGraph for agent framework
- React team for the amazing framework
- Vite team for the blazing-fast build tool
Built with โค๏ธ using React, TypeScript, and AI APIs from OpenAI, Google, Kling, MiniMax, and Fal.ai (2025)
