TubeForge — Requirements Specification
> Kiro-style spec | Updated: 2026-02-27 | Framework: Google ADK + genmedia-live hybrid
TubeForge — Requirements Specification
Kiro-style spec | Updated: 2026-02-27 | Framework: Google ADK + genmedia-live hybrid Hackathon: Gemini Live Agent Challenge | Deadline: 2026-03-17
1. Product Overview
TubeForge is an AI-powered YouTube content studio that transforms photos into complete explainer/documentary videos through voice-directed conversation with an AI Creative Director ("Forge").
Target User: Solo YouTube creators running faceless channels (history, facts, documentary, motivation niches).
Problem: Creating a single faceless YouTube video currently requires 3-5 separate tools and 4-8 hours. No existing tool generates custom AI visuals or offers voice-controlled creative direction.
Solution: One conversation, one tool, one video. Upload a photo → talk to Forge → download a complete YouTube-ready MP4.
Framework: Google ADK (google-adk) multi-agent architecture — a research sub-agent (google_search only) + main Forge agent (6 media FunctionTools) — powered by Gemini 2.0 Flash Live via bidirectional streaming (run_live() + LiveRequestQueue). Media generation code ported from genmedia-live sample app.
2. Feature Requirements
F-001: Image Input (Camera + Upload)
Priority: Must-have
User Stories:
- As a creator, I want to upload a photo of a famous landmark so that Forge can identify it and create a video about it.
- As a creator, I want to point my phone camera at a monument so that Forge can see it in real-time and start a conversation.
Acceptance Criteria:
- User can upload JPEG/PNG images via file picker
- User can share live camera feed via browser MediaDevices API
- Images sent to ADK agent via WebSocket as base64 JPEG
- ADK
LiveRequestQueuereceives image data and feeds to Gemini Live session - Agent correctly identifies the subject in >90% of famous landmarks/artworks
- Supported image formats: JPEG, PNG, WebP
- Max image size: 10MB (resized to 768x768 before sending)
F-002: Voice Conversation with Forge
Priority: Must-have
User Stories:
- As a creator, I want to talk to Forge via my microphone so that I can direct the video creation naturally.
- As a creator, I want to hear Forge's responses via my speaker so that the interaction feels like talking to a creative partner.
- As a creator, I want to interrupt Forge mid-sentence to change direction, just like a real conversation.
Acceptance Criteria:
- Bidirectional audio streaming via ADK
run_live()async generator - PCM 16kHz audio input from browser microphone via Web Audio API worklets
- Audio output streamed back via WebSocket and played through browser speakers
- Interruption handling (barge-in) works correctly via
LiveRequestQueue - Forge has a distinct, named persona with consistent personality
- Session supports 30-minute conversations with ADK session resumption
- Visual indicators show listening/speaking/processing states
- Upstream (client→queue) and downstream (run_live→client) run concurrently via
asyncio.gather()
F-003: Topic Research (Google Search Grounding)
Priority: Must-have
User Stories:
- As a creator, I want Forge to research the topic before writing so that the video content is factually accurate and grounded.
Acceptance Criteria:
- Uses a dedicated researcher sub-agent with ADK built-in
google_searchtool -
google_searchis isolated in the sub-agent (cannot coexist with other tools in one agent) - Main Forge agent transfers to researcher sub-agent when research is needed
- Researcher returns key facts, dates, figures, and interesting angles
- Research results are passed back to Forge and used to ground the script (no hallucinations)
- Research completes within 10 seconds
- Agent explicitly references factual sources in narration where appropriate
Architecture Note: ADK's google_search built-in tool cannot be combined with other tools in a single agent. This requires a multi-agent architecture where the researcher is a sub-agent of the main Forge agent. Forge transfers control to the researcher for fact-gathering, then resumes creative direction.
F-004: Script Generation with Interleaved Images
Priority: Must-have
User Stories:
- As a creator, I want Forge to generate a complete video script with scene-by-scene custom AI images so that I get a visual storyboard in one pass.
- As a creator, I want to see the script and images appear in real-time as they generate.
Acceptance Criteria:
-
generate_scriptregistered as ADK FunctionTool (auto-wrapped from Python function with type hints) - Uses Gemini with
response_modalities=["TEXT", "IMAGE"]for interleaved output - Generates narration text interleaved with scene images in a single stream
- Script structure: hook (10s) → intro → sections → conclusion → CTA
- Images match the narration content and visual style
- Supports multiple styles: documentary, facts, story, explainer
- Target: 130-150 words per minute of narration
- Script segments include timing estimates
- Script for 5-minute video = ~700-750 words, 8-12 scene images
- Generated assets stored via
ToolContext.statefor cross-tool access
F-005: AI Voiceover Generation
Priority: Must-have
User Stories:
- As a creator, I want Forge to generate a professional AI voiceover from the script so that I don't need a separate TTS tool.
Acceptance Criteria:
-
generate_voiceoverregistered as ADK FunctionTool - Uses Google Cloud Text-to-Speech API
- Supports multiple voice options per content style
- Speaking rate adjustable (0.85 - 1.15x)
- Output format: LINEAR16 WAV
- Returns word-level timestamps for subtitle sync
- Voiceover duration matches script timing estimates (within 10%)
- Natural-sounding narration (Neural2 or Studio voices)
- Audio file path stored in
ToolContext.state['voiceover_id']
F-006: Thumbnail Generation
Priority: Must-have
User Stories:
- As a creator, I want Forge to generate an eye-catching YouTube thumbnail so that my video gets clicks.
Acceptance Criteria:
-
generate_thumbnailregistered as ADK FunctionTool - Uses Imagen 3 via Vertex AI (ported from genmedia-live pattern)
- Output resolution: 1280x720 (YouTube standard)
- Generates visually striking image relevant to the topic
- Style options: dramatic, colorful, mysterious, clean
- User can request regeneration via voice ("make it more dramatic")
- Thumbnail path stored in
ToolContext.state['thumbnail_id']
F-007: Video Assembly
Priority: Must-have
User Stories:
- As a creator, I want Forge to assemble all components into a downloadable MP4 so that I can upload directly to YouTube.
Acceptance Criteria:
-
assemble_videoregistered as ADK FunctionTool - FFmpeg pipeline combines: scene images + voiceover + subtitles → MP4 (ported from genmedia-live)
- Ken Burns effect (slow pan/zoom) applied to static images
- Burned-in subtitles generated from script text + word timestamps
- Output: H.264 MP4, 1920x1080, 30fps
- Audio: AAC, 128kbps
- Final video duration matches voiceover duration
- Download available via REST endpoint or WebSocket event
- Final video URL stored in
ToolContext.state['video_url']
F-008: B-Roll Video Generation
Priority: Should-have (stretch)
User Stories:
- As a creator, I want Forge to generate short atmospheric video clips for key scenes so that the video feels more dynamic and professional.
Acceptance Criteria:
-
generate_brollregistered as ADK FunctionTool - Uses Veo 2 via Vertex AI (ported from genmedia-live pattern)
- Generates 4, 6, or 8 second clips
- Aspect ratio: 16:9
- Style options: cinematic, aerial, close-up
- B-roll clips integrated into assembly pipeline at appropriate scenes
- Graceful fallback to static image if Veo generation fails
F-009: Image Editing/Regeneration
Priority: Should-have
User Stories:
- As a creator, I want to ask Forge to change a specific scene image so that I can refine the visual style.
Acceptance Criteria:
-
edit_imageregistered as ADK FunctionTool - Voice command: "change image 3 to be darker" → regenerates that image
- Uses Imagen edit capabilities or full regeneration (ported from genmedia-live)
- Updated image reflects in the preview and final assembly
- Reads/writes image references from
ToolContext.state
F-010: Niche Presets
Priority: Should-have
User Stories:
- As a creator, I want to select a content niche so that Forge automatically adjusts voice, visuals, music, and pacing.
Acceptance Criteria:
- Presets for: documentary, scary/horror, facts/lists, motivation, history, true crime
- Each preset configures: voice style, visual mood, background music, pacing
- Selectable via voice or UI button
- Preset config stored in
ToolContext.state['niche'] - Loaded from
prompts/niche_presets.json
F-011: Cloud Deployment
Priority: Must-have (hackathon requirement)
User Stories:
- As a hackathon judge, I want to see proof that the backend runs on Google Cloud.
Acceptance Criteria:
- Deploy via
adk deploy cloud_run --project=$PROJECT --region=$REGION - Vertex AI used for all AI model calls (not direct API key)
- Screen recording of GCP Console showing running Cloud Run service
-
adk webused for development/testing (shows sophisticated agent testing) - Public HTTPS URL accessible for demo
F-012: Infrastructure as Code
Priority: Nice-to-have (bonus points)
Acceptance Criteria:
- Terraform config in
terraform/main.tf - Enables required APIs, deploys Cloud Run service
- Included in public repository
3. Non-Functional Requirements
| Category | Requirement |
|---|---|
| Performance | Script + images generated within 60 seconds for 5-min video |
| Performance | Voiceover generated within 30 seconds |
| Performance | Video assembly completed within 120 seconds |
| Performance | Total end-to-end: photo → video in under 10 minutes |
| Reliability | ADK session auto-reconnects on connection drop (LiveRequestQueue graceful close) |
| Reliability | Graceful fallback if Veo/Imagen API fails |
| Security | No API keys in frontend code or git history |
| Security | Vertex AI credentials via ADK environment (GOOGLE_CLOUD_PROJECT, GOOGLE_CLOUD_LOCATION) |
| Compatibility | Chrome 90+, Firefox 90+, Safari 16+ |
| Compatibility | Mobile browser support for camera input |
| Agent Quality | adk eval golden dataset for key interactions (bonus) |
4. Out of Scope (Hackathon v1)
- YouTube Data API integration (auto-upload)
- Batch video generation (queue multiple topics)
- User accounts / login system
- Analytics or monetization tracking
- Custom intro/outro branding
- Video editing timeline UI (like Premiere)
- Multiple language support for voiceover
- Background music licensing management
- SEO optimization for YouTube titles/descriptions
- Complex multi-agent orchestration beyond researcher↔forge transfer pattern
Related Documents
GPU Selection Guide for Large Language Models (LLMs)
This guide helps you choose the right GPU for running Large Language Models, whether you're using them for inference, fine-tuning, or training.
Community AI Agent Skills Discovery Sources
**Research Date:** 2026-03-26
ReleaseKit - Technical Requirements Document
ReleaseKit provides **two interfaces** to the same underlying functionality:
api_llm Specification
Provide direct, transparent HTTP API bindings for major LLM providers without abstraction layers or automatic behaviors.