World's #1 First Talk2Video with Voice Cloning Auto Character Generation !
Interactive AI Cartoon Companion for Kids β powered by VideoDB
ToonTalk lets children talk to their favourite cartoon characters. Upload any anime or cartoon episode β the system automatically figures out who's in it, clones their voice directly from the video, and when a kid asks a question the character answers back in their own cloned voice with a full anime-style banner sliding up over the paused video.
Works for any cartoon in any language Multilingual β Hindi dubs, English originals, whatever you upload.
| Feature | API |
|---|---|
| Video ingestion | coll.upload() / URL ingest |
| Scene understanding | video.index_scenes(model_name="pro") β VLM describes every scene |
| Dialogue transcription | video.index_spoken_words() β full semantic search index |
| Scene + dialogue search | video.search(SearchType.semantic) |
| LLM (character routing + answer) | coll.generate_text(prompt, model_name="pro") |
| Voice cloning | coll.generate_voice() with OmniVoice + ref_audio |
| Character art generation | coll.generate_image(prompt, aspect_ratio="3:4") β FLUX |
User uploads cartoon episode (MP4 file or YouTube URL)
β
VideoDB stores video β returns video_id + stream_url
β
Local metadata file created for this video
Video title sent to LLM (VideoDB generate_text)
β
LLM returns full cast: names, personalities, typical dialogue,
language (Hindi dub vs English original)
β
video.index_scenes(model_name="pro")
β VLM describes every scene: who's visible, emotions, action
β
video.index_spoken_words()
β Full dialogue indexed for semantic search
β
Language confirmed: sample 10 dialogue lines,
count Devanagari vs ASCII β hindi / english
β
Speaker verification: each character's typical dialogue
searched in spoken word index with score threshold 0.45
β Only confirmed speakers kept (prevents character bleed-in)
β
Voice extraction: 10-15s clean audio clip per confirmed character
β ffmpeg extracts + normalises β saved as ref audio
β
Video is READY
Kid watches video normally
β
Presses "Character se Puchho" β video PAUSES
β
Types or speaks their question (Hindi or English)
β
Backend pipeline (~3-5 seconds):
1. Detect question language
β Devanagari script? β Hindi
β Hinglish keywords (yaar, kya, toh, hai...)? β Hindi
β Otherwise β English
2. Scene context at pause point (Β±5 seconds)
β VLM scene description: what's visible, who's there, emotions
3. Which character?
β Keyword match first ("yagami", "shinchan", "doraemon"...)
β LLM fallback if ambiguous
4. Dialogue context (Β±15 seconds)
β Semantic search: what was actually being said near pause
5. Language-adaptive answer generation:
β Hindi video + Hindi question β Hinglish text (Latin script)
β Hindi video + English question β English text
β English video β English text
β Always first-person, scene-aware, under 25 words
6. Answer text appears on screen instantly (~3-5s)
β
7. Background TTS (~2 seconds):
β Voxtral Mini TTS (Mistral) + extracted ref audio
β Zero-shot voice cloning: answer spoken in character's own voice
β Audio plays through anime banner
β
8. Character portrait:
β VideoDB Flux generates anime portrait from character description
β White background removed via canvas processing
β Character "floats" over the banner
β Cached β instant on future questions
Anime-style banner slides up from bottom of video:
β
CHARACTER NAME KA JAWAB! β top strip with name stamp
βββββββββββββββββββββββββββββββββ β torn paper divider
"Answer text types out..." β dialogue with typewriter effect
βΆ REPLAY βββ γ°γ°γ°γ°γ°γ° β replay + waveform while playing
Character portrait floats right β Flux-generated, white bg removed
Lightning bolts, particles, aura β animated effects
β
Kid taps "Phir Suno" to replay audio
Kid taps "Aur Puchho" for another question
Kid taps "Video Continue Karo" to resume
No manual tagging needed. The LLM reads the video title β returns full cast with personalities and typical dialogue. "Death Note" β Light Yagami, L, Misa Amane. "Shinchan Hindi" β Shinchan, Misae, Hiroshi, Kazama...
Every character goes through speaker verification before being included. Semantic search on their actual dialogue lines with a score threshold β if Doraemon's lines don't appear in a Death Note video, he's not added.
The system doesn't use generic TTS voices. It finds a clean 10-15 second clip of the character actually speaking in this specific episode and uses that as the reference for zero-shot voice cloning. The answer sounds like the character from this video.
- Detects video language from actual spoken dialogue (not just title)
- Detects question language from script + keywords
- Adapts response text format accordingly
- Audio always matches the video's language
The LLM sees exactly what was happening at the paused frame β who's visible, what emotion, what action, what was being said. Answers are specific to the moment, not generic character trivia.
- Python 3.10+
- Node.js 18+
- VideoDB API Key β Medium sandbox tier recommended
- Groq API Key β free tier, for voice transcription (Whisper)
- Mistral API Key β for Voxtral TTS voice cloning
git clone https://github.com/your-username/toontalk.git
cd toontalk
# Copy and fill in your API keys
cp .env.example .env.env keys needed:
VIDEO_DB_API_KEY=... # Required β powers everything
GROQ_API_KEY=... # Required β voice question transcription
MISTRAL_API_KEY=... # Required β cloned voice TTS
cd backend
python -m venv venv
venv\Scripts\activate # Windows
# source venv/bin/activate # Mac/Linux
pip install -r requirements.txt
uvicorn main:app --host 0.0.0.0 --port 8000 --reload
# β http://localhost:8000cd frontend
npm install
npm run dev
# β http://localhost:5173- Open
http://localhost:5173 - Click Upload Video β paste a YouTube URL or upload an MP4
- Enter the video title (include the show name, e.g. "Shinchan Hindi Episode")
- Click Process β watch the progress bar (~5-10 min first time)
- Once ready β click the video β pause β ask anything!
toontalk/
βββ backend/
β βββ main.py # FastAPI β all API routes
β βββ videodb_service.py # All VideoDB SDK operations
β βββ llm_service.py # LLM calls + language detection + Whisper
β βββ character_config.py # Character personas + answer prompt
β βββ voxtral_service.py # Mistral TTS + spend tracking ($1 cap)
β βββ flux_service.py # VideoDB Flux character image generation
β βββ sandbox_manager.py # VideoDB sandbox lifecycle (singleton)
β βββ video_metadata/ # Per-video JSON (characters, voices, indexes)
β βββ ref_audio/ # Extracted character voice clips
β βββ tts_cache/ # Generated TTS audio files
β βββ character_images/ # Flux-generated character portraits (cached)
βββ frontend/
β βββ src/
β β βββ App.jsx # Main app β upload, library, player screens
β β βββ components/
β β β βββ VideoPlayer.jsx # Video player + Q&A panel
β β β βββ CharacterPopup.jsx # Anime banner overlay with all effects
β β β βββ MicButton.jsx # Voice recorder with waveform
β β βββ services/api.js # All backend API calls
β βββ public/characters/ # Static character images (Shinchan, Misae, Hiroshi)
βββ .env
| Endpoint | Method | Description |
|---|---|---|
/api/upload |
POST | Upload video file |
/api/upload-url |
POST | Upload from URL / YouTube |
/api/process/{id} |
POST | Start AI processing pipeline |
/api/status/{job_id} |
GET SSE | Real-time progress stream |
/api/videos |
GET | List all processed videos |
/api/video/{id} |
GET | Video metadata + stream URL |
/api/ask |
POST | Text question β character answer |
/api/ask-voice |
POST | Voice question β character answer |
/api/generate-tts |
POST | Generate cloned voice audio |
/api/character-image/{vid}/{char} |
GET | Get/generate character portrait |
/api/voxtral-usage |
GET | TTS spend tracker |
/api/sandbox-status |
GET | VideoDB sandbox status |
Any show the LLM knows about works automatically β no manual setup. Tested with:
- Shinchan (Hindi dub) β full family cast
- Doraemon (Hindi dub)
- Death Note (English)
- Naruto (Hindi or English)
- Dragon Ball Z
- Any cartoon β generic character fallback if show is unknown
| Task | Approx Cost |
|---|---|
| Process one episode (scene + spoken word index) | ~$0.50-2.00 VideoDB credits |
| Voice extraction per character | negligible |
| Answer text (LLM) per question | ~$0.001 |
| TTS per answer (~120 chars) | ~$0.002 Mistral |
| Flux character portrait (generated once, cached) | ~$0.01 VideoDB credits |
| 1000 questions on a processed video | ~$2.00 total |
"Pause any cartoon, ask the character anything in Hindi or English β they answer back in their own voice, aware of exactly what was happening in the scene."
MIT β Built for the VideoDB Hackathon 2026