Spaces:
Runtime error
Web UI — developer guide
Set up, run, and deploy the Gemini Studio Web stack (FastAPI + React). Product scope: SPEC_WEB_UI.md.
Imports: Code lives under VideoGeneration-release/web/. Use PYTHONPATH=. with cwd = VideoGeneration-release (parent of web/). Do not set PYTHONPATH to web/ alone.
1. Prerequisites
- Python 3.10+
- Node.js 18+ and npm (frontend build)
- ffmpeg on
PATH(strip audio from MP4s)
2. Python venv
From VideoGeneration-release:
cd /path/to/VideoGeneration-release
python3 -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r web/requirements.txt
3. Environment variables
Do not commit secrets; use a .env with your process manager if you like.
| Variable | Purpose |
|---|---|
GEMINI_API_KEY |
Server-side only. |
WEB_UI_PASSWORD |
Login password. |
SESSION_SECRET |
Session signing, e.g. openssl rand -hex 32. |
GENERATION_OPTIONS_PATH |
Optional. Overrides default web/config/generation_options.json. |
export GEMINI_API_KEY="your_key"
export WEB_UI_PASSWORD="password"
export SESSION_SECRET="$(openssl rand -hex 32)"
4. generation_options.json
Edit web/config/generation_options.json (or the file from GENERATION_OPTIONS_PATH). The UI loads GET /api/config/generation-options after login. JSON-only changes need no frontend rebuild; React/TS/CSS changes do.
image:models(value+label),aspect_ratios,resolutions,thinking_levels.video/video_frames:models,aspect_ratios,resolutions,durations_seconds. Onvideo,supports_reference_images(e.g. Veo Lite =false). With reference images, duration is forced to 8s. 首尾帧 route always 8s (no 4/6s like prompt-only 720p).
5. Build frontend
cd web/frontend
npm install
npm run build
Output: web/backend/static/. Missing build → root URL returns 503.
6. Run server
cd /path/to/VideoGeneration-release
PYTHONPATH=. uvicorn web.backend.main:app --host 127.0.0.1 --port 8000
LAN: --host 0.0.0.0. Dev: add --reload.
7. Dev mode (hot reload)
A — API, cwd VideoGeneration-release:
PYTHONPATH=. uvicorn web.backend.main:app --reload --host 127.0.0.1 --port 8000
B — Vite (web/frontend): npm run dev (proxies /api to 8000). Open the printed URL (e.g. http://127.0.0.1:5173).
8. Stable URL
The app does not provide a hostname. Use DNS to a domain you control, static/elastic IP, reverse proxy (nginx/Caddy), or a tunnel (Cloudflare Tunnel, Tailscale Funnel, etc.). One DNS name → current server when you move machines.
9. Checklist
-
ffmpeg -version -
pip install -r web/requirements.txt -
npm run buildinweb/frontendat least once -
GEMINI_API_KEY,WEB_UI_PASSWORD,SESSION_SECRETset - Uvicorn from
VideoGeneration-releasewithPYTHONPATH=.
10. Hugging Face Spaces (Docker)
Use Docker (sdk: docker), not Streamlit/Gradio. Dockerfile at repo root next to web/ and assets/.
10.1 Create Space
Hugging Face → New Space → SDK: Docker. Space id: YOUR_USERNAME/YOUR_SPACE_NAME.
10.2 Root README.md
YAML frontmatter must validate. This repo’s README is preconfigured.
sdk: dockercolorFrom/colorTo: each must be one ofred,yellow,green,blue,indigo,purple,pink,gray(other names → upload error).
10.3 Upload
Cwd: VideoGeneration-release (contains Dockerfile, web/, assets/).
CLI (write token):
pip install -U huggingface_hub
huggingface-cli login
cd /path/to/VideoGeneration-release
hf upload YOUR_USERNAME/YOUR_SPACE_NAME . . --repo-type space
Example:
hf upload LehongWu/VideoGeneration-release . . --repo-type space
Then check Space → Logs for the Docker build.
Git:
git remote add hf https://huggingface.co/spaces/YOUR_USERNAME/YOUR_SPACE_NAME
git push -u hf main
Or connect GitHub in Space settings and push there.
10.4 Secrets
Settings → Variables and secrets — names must match exactly (case-sensitive). Same as §3.
| Name | Purpose |
|---|---|
GEMINI_API_KEY |
Gemini key; never commit. |
WEB_UI_PASSWORD |
Login password. |
SESSION_SECRET |
e.g. openssl rand -hex 32. |
Optional: GENERATION_OPTIONS_PATH (custom JSON path inside the container).
Saving restarts the Space. Never put secrets in Git or README.md.
10.5 Runtime
- Listens on
PORTor7860(Dockerfile:uvicorn ... --port ${PORT:-7860}). --forwarded-allow-ips='*'— required behind HF’s reverse proxy soX-Forwarded-Proto: httpsis trusted. Without it, Uvicorn often seeshttp, session cookies misbehave, and the UI keeps asking you to log in.- ffmpeg in image.
- First build / cold start can take minutes.
10.6 Local Docker
cd /path/to/VideoGeneration-release
docker build -t gemini-studio-web .
docker run --rm -p 7860:7860 \
-e GEMINI_API_KEY="your_key" \
-e WEB_UI_PASSWORD="your_password" \
-e SESSION_SECRET="$(openssl rand -hex 32)" \
gemini-studio-web
Open http://127.0.0.1:7860.