ai-time-machine / docs /immersive_experience_hackathon_plan.md
manikandanj's picture
Prepare AI Time Machine hackathon Space
5862322 verified
|
Raw
History Blame Contribute Delete
14.3 kB

A newer version of the Gradio SDK is available: 6.20.0

Upgrade

Immersive AI Time Machine β€” Hackathon-Aligned Plan

This document filters the full immersive experience research through the lens of the Build Small Hackathon constraints and judging criteria, identifying what to build, what to skip, and what earns bonus points.


Hackathon Constraints Summary

Constraint Requirement Impact on Plan
Small models ≀ 32B parameters per model βœ… No blocker. Image gen models (Flux ~12B, SDXL ~6.6B) are well under. LLM (Qwen3-8B), STT (Nemotron 0.6B), TTS (Chatterbox) all individually under 32B
Must be Gradio App must be a Gradio application ⚠️ Cannot switch to a custom frontend. Must work within Gradio's gr.HTML(), gr.Image(), gr.Audio() injection approach. This limits Tier 2/3 complexity
Hugging Face Space Must be deployable as an HF Space βœ… Already compatible. Need to ensure any new assets (ambient audio, GSAP CDN) work in HF Space environment
Working product Functional, polished, usable by non-technical users βœ… Focus on reliable, delightful experience over bleeding-edge tech

Track Alignment: Track 2 β€” An Adventure in Thousand Token Wood ⭐

The AI Time Machine is a natural fit for Track 2. Here's how each judging criterion maps:

Delight βœ…

"Genuinely fun, memorable experiences, worth sharing"

Criterion How We Score What to Build
Genuinely fun Transporting to another era and talking to someone from that time is inherently fun AI-generated scene + character portrait make it visually fun, not just text-fun
Memorable The "Launch" moment β€” screen transforms from cockpit to destination β€” is the memory Cinematic fade-in transition, ambient sounds starting, character appearing
Worth sharing "Look at this person I met in 1920s jazz-age Harlem" + screenshot/souvenir The generated scene + portrait + souvenir are inherently shareable

AI Is Essential βœ…

"Require AI to function, AI as core mechanic, not bolted on"

AI Component Role Essential?
LLM (Qwen3-8B) Generates destinations, personas, conversations, souvenirs βœ… Core β€” the entire experience is AI-generated
TTS (Chatterbox) Character speaks with a unique voice βœ… Core β€” voice is how you "meet" the person
STT (Nemotron) You speak to the character naturally βœ… Core β€” enables voice conversation
Image Gen (Flux/Imagen) Generates scene + character portrait βœ… Core β€” this is the new "wow" layer that makes AI create the entire world, not just the text

Adding AI-generated visuals actually strengthens the AI-essential score β€” now AI creates the entire sensory experience: the world you see, the person you see, the voice you hear, and the conversation you have. Every sense is AI-generated.

Originality βœ…

"Unusual ideas, novel interactions, avoid common chatbot wrappers"

What Makes It Original Why
Time travel as interaction paradigm Not a chatbot β€” it's a portal to another era
Ordinary people, not famous figures You don't talk to "Einstein" β€” you talk to a baker in 1920s Paris
Multi-modal AI synthesis Scene + portrait + voice + conversation all generated together from one destination
Souvenir system You bring back an artifact from your trip β€” a tangible memento of an AI experience

Gradio App Polish βœ…

"Feel complete, thoughtful UX, cohesive experience"

This is where the immersive upgrades pay off most for judging:

Current State After Tier 1 Judge Impact
Text-only destination description Full-screen AI-generated scene background Night and day difference
No character visual AI-generated character portrait in aperture "You're actually meeting someone"
Silent between voice clips Ambient soundscape matching the era Cohesive world-building
Standard Gradio form layout Steampunk cockpit with particles, film grain, glow effects Off-Brand bonus badge

Bonus Merit Badges β€” What We Can Earn

βœ… Off-Brand (Custom UI) β€” Already Partially Earned, Tier 1 Maxes It Out

"Go beyond default Gradio styling. Custom layouts, advanced theming, branded UI systems, rich interaction patterns."

We already have custom CSS (steampunk cockpit, brass theme, custom fonts). Tier 1 additions (scene backgrounds, particles, film grain, cinematic transitions) would make this an exceptional Off-Brand submission.

βœ… Sharing Is Caring β€” Already Earned

"Publish and share agent traces."

The app already has JsonlTraceSink that records all events. Just need to expose/publish the traces.

βœ… Field Notes β€” Easy to Earn

"Document discoveries, experiments, lessons learned."

This research document and the implementation decisions are themselves field notes. Write up a blog-style doc about the build process.

❌ Off the Grid β€” Cannot Earn (We Use Cloud APIs)

Requires no cloud AI APIs. We use Together AI for LLM and Modal for STT/TTS.

❓ Well-Tuned β€” Possible But Not Planned

Would require publishing a fine-tuned model on HF. Not in scope for immersive upgrades.

❓ Llama Champion β€” Not Currently Applicable

Would require switching to llama.cpp runtime. Not relevant to visual immersion work.


What to Build (Hackathon-Optimized)

βœ… BUILD β€” Tier 1 Features (All Hackathon-Compatible)

Everything in Tier 1 works within Gradio and strengthens hackathon scores:

Feature Hackathon Value Implementation Constraint
AI scene background (Flux via Together AI) Massive visual wow, strengthens AI-essential + delight Use gr.Image() or base64 in gr.HTML(). Per-model ≀32B: Flux is ~12B βœ…
AI character portrait (Flux via Together AI) Character feels real, strengthens originality Same approach as scene. Displayed in existing aperture
Cinematic launch transition (CSS/JS) Memorable "Launch" moment, strengthens delight + polish Pure CSS/JS in gr.HTML() injection. No dependencies
Atmospheric particles (Canvas JS) Living world feel, strengthens Off-Brand badge Canvas element in gr.HTML(). Lightweight
Film grain + era color grading (CSS) Era authenticity, strengthens polish CSS filters + overlay in existing cockpit.css
Ambient soundscapes (pre-built library) Immersive audio, strengthens delight <audio> element in gr.HTML(), bundled CC0 loops
Portrait glow pulse on speech (CSS/JS) Character feels alive, strengthens delight CSS animation triggered by audio events in cockpit.js
GSAP transitions (CDN) Professional animation quality Load from CDN in Gradio head. Free library

⚠️ DEFER β€” Tier 2 Features (Risky for Hackathon)

Feature Why Defer
Simli real-time avatar Adds external API dependency, WebRTC complexity, may break in HF Space sandboxing. Risk vs. reward not worth it for hackathon
TalkingHead 3D avatar Requires loading Three.js + GLB models inside Gradio β€” fragile. Heavy JS that may conflict with Gradio's DOM management
Wawa-Lipsync Needs npm package bundling or CDN load inside Gradio. Adds complexity without guaranteed stability

The "audio-reactive portrait" approach from Tier 1 (glow pulse + breathing animation) gives 80% of the "alive character" feeling at 5% of the Tier 2 complexity. This is the right trade-off for a hackathon.

❌ SKIP β€” Tier 3 Features (Too Complex for Hackathon)

Feature Why Skip
360Β° Three.js panorama Heavy 3D rendering inside Gradio is fragile. HF Space may have GPU/memory constraints for client-side WebGL
WebXR / VR Niche audience, adds complexity, doesn't help judging
3D character models MetaPerson API + Three.js rendering in Gradio is too brittle

Hackathon-Optimized Implementation Plan

Phase 1: Image Generation (Backend) β€” ~4 hours

  1. New port: SceneGenerator interface with generate_scene() and generate_portrait() methods
  2. New adapter: Together AI Flux implementation (reuse existing API key, ≀32B per model βœ…)
  3. Modify encounter_service: Call image gen after destination + persona generation. Run both image calls in parallel using existing ThreadPoolExecutor pattern
  4. New events: SceneImageEvent, PortraitImageEvent carrying base64 image data
  5. Model updates: Add image data fields to EncounterSession

Phase 2: Immersive Frontend (CSS/JS/HTML) β€” ~6 hours

  1. Scene background: Full-bleed background image container behind cockpit, with vignette radial-gradient overlay
  2. Character portrait: Circular portrait in the existing .tm-cockpit-aperture, with idle breathing CSS animation
  3. Launch transition: CSS keyframe animation β€” cockpit dims β†’ radial wipe/dissolve β†’ scene fades in
  4. Particles: Lightweight canvas-based particle system. Map visual_preset_key to particle type (embers/snow/dust/fireflies)
  5. Film grain: SVG noise overlay with mix-blend-mode: overlay, opacity 0.04
  6. Era color grading: CSS filter on scene container (sepia for old, blue-shift for future, warm amber for candlelit)
  7. Audio-reactive portrait: Analyze TTS audio amplitude β†’ pulse CSS glow intensity on portrait border
  8. Floating dialogue: Conversation text near character portrait, fade-in/out with CSS transitions

Phase 3: Ambient Audio β€” ~2 hours

  1. Bundle 8-10 CC0 ambient loops: marketplace, ocean, forest, desert, rain, fire, wind, nighttime-crickets
  2. Keyword matcher: Map destination atmosphere/place text to best ambient loop
  3. Audio element: <audio> in cockpit HTML, controlled by cockpit.js, crossfade on destination change
  4. Web Audio reverb: Optional ConvolverNode for environment-matched reverb (indoor vs outdoor)

Phase 4: Gradio Integration β€” ~2 hours

  1. Wire images into view_models: Handle SceneImageEvent and PortraitImageEvent, pass base64 to frontend
  2. Update cockpit.js: Listen for Gradio state changes containing image data, update DOM
  3. Update realtime.py: Forward image events over WebSocket for live voice mode
  4. Update container.py: Wire SceneGenerator adapter into all profiles (fixture + modal + dev)

Phase 5: Polish & Test β€” ~2 hours

  1. Test across coordinate modes (past, future, strange, surprise)
  2. Test mobile viewport responsiveness
  3. Add prefers-reduced-motion for accessibility
  4. Verify HF Space deployment compatibility
  5. Run existing test suite (pytest)

Total estimated effort: ~16 hours


Model Budget Check (Per-Model ≀ 32B)

Role Model Parameters Under 32B?
LLM Qwen/Qwen3-8B 8B βœ…
STT nvidia/nemotron-3.5-asr-streaming-0.6b 0.6B βœ…
TTS ResembleAI/chatterbox-turbo ~0.3B βœ…
Image Gen Flux 2 (Schnell) ~12B βœ…

All models individually well under the 32B per-model limit.


Judging Score Projection

Criterion Before Immersive After Tier 1 Why
Delight 6/10 β€” fun concept, but text-heavy 9/10 β€” visual + audio immersion, cinematic launch Scene + portrait + ambient audio = multi-sensory delight
AI Essential 8/10 β€” LLM + STT + TTS are core 10/10 β€” AI generates everything: world, character, voice, conversation Adding image gen makes AI create the complete experience
Originality 8/10 β€” unique concept 9/10 β€” now a full "portal" experience Not just a chatbot β€” it's a time travel simulator
Polish 6/10 β€” functional but text-panel UI 9/10 β€” cinematic, branded, immersive Particles, film grain, transitions, ambient audio
Off-Brand Badge 7/10 β€” custom CSS theme 10/10 β€” completely custom visual experience Barely recognizable as Gradio

Risk Assessment

Risk Likelihood Mitigation
Image gen API slow (>5s) Medium Generate scene + portrait in parallel. Show "Temporal engines charging" animation while loading
Image gen API fails Low Graceful fallback β€” app works without images (current behavior). Show cockpit background as fallback
Ambient audio files too large for HF Space Low Compress to 64kbps OGG, ~30KB per 30-second loop. Total ~300KB for 10 loops
GSAP CDN blocked in HF Space Low Fall back to CSS keyframe animations (slightly less smooth, but functional)
Gradio DOM conflicts with injected HTML Medium Test thoroughly. Use isolated DOM containers with unique IDs. Avoid Gradio-managed elements

Files to Create/Modify

New Files

  • src/time_machine/ports/image_generation.py β€” Port interface
  • src/time_machine/adapters/image_gen/ β€” Together AI Flux adapter
  • src/time_machine/ui/assets/ambience/ β€” Bundled ambient audio loops (CC0)

Modified Files

  • src/time_machine/application/encounter_service.py β€” Image gen calls after dest/persona
  • src/time_machine/domain/models.py β€” Image data on session
  • src/time_machine/domain/events.py β€” New image event types
  • src/time_machine/application/container.py β€” Wire image gen adapter
  • src/time_machine/ui/view_models.py β€” Handle image events
  • src/time_machine/ui/realtime.py β€” Forward image events over WebSocket
  • src/time_machine/ui/assets/cockpit.html β€” Scene/portrait/particle/audio containers
  • src/time_machine/ui/assets/cockpit.css β€” Immersive visual styles
  • src/time_machine/ui/assets/cockpit.js β€” Scene loading, particles, audio-reactive portrait, ambient audio