Project Info
Inspiration
The inspiration for Echoes of Time came from the Gemini Workshop during the hackathon, which motivated us to explore the creative potential of Google's multimodal AI. We reflected on a universal human experience: capturing life's precious moments through video. Whether it's a thrilling concert, a family beach vacation, or any meaningful experience, we all document these memories through our cameras. This led us to an interesting observation—people often say life is like a TV show. But what's missing from our personal "shows"? A soundtrack! While we have the visuals captured, we rarely have music that perfectly complements the mood and atmosphere of our recorded memories. Echoes of Time bridges this gap by generating personalized songs that match the essence of your captured moments. What It Does Echoes of Time transforms your everyday videos into personalized musical experiences. Users simply upload a video from their day, and our application analyzes the content to generate a custom song that captures the mood, atmosphere, and emotions of that moment. The result is a unique soundtrack that brings your memories to life. How We Built It Our solution leverages Google Cloud Platform throughout the entire pipeline: Multimodal Analysis: We utilize Gemini's advanced multimodal capabilities to separately analyze both the audio and visual components of uploaded videos, generating detailed descriptions of the emotional undertones and contextual elements. Intelligent Processing: A secondary Gemini instance acts as an AI judge, comparing the audio and video descriptions for consistency. When descriptions align, it creates a unified summary; when they diverge, it prioritizes the video analysis to ensure accuracy. Song Generation: A third Gemini instance transforms our refined content summary into detailed song specifications, which are then processed through Lyria's API to generate the actual audio track returned as base64-encoded MP3 files. Backend Infrastructure: We built a robust Node.js and Express.js server to handle media uploads and processing, ensuring smooth user experience while managing computational overhead. Challenges We Overcame API Limitations: Working with Lyria's cutting-edge but nascent API presented unique challenges. The system is sensitive to prompt complexity and length, requiring careful optimization of our requests. Additionally, frequent credential refreshes were necessary to maintain stable connections. LLM Reliability: Large language models can sometimes produce inconsistent or hallucinated responses. We addressed this by implementing our multi-stage AI judging system to validate and refine outputs before song generation. Performance Optimization: The end-to-end process currently takes approximately 1.5 minutes per video. While functional, this processing time highlighted the need for future optimization strategies. Accomplishments We're Proud Of Successfully creating a working end-to-end pipeline that takes raw video input and produces genuinely fitting musical accompaniments. The system demonstrates remarkable accuracy in capturing the emotional essence of uploaded content and translating it into appropriate musical styles and moods. What We Learned This project deepened our understanding of multimodal AI applications and the complexities of chaining multiple AI systems together. We gained valuable experience with Google Cloud Platform's AI services and learned important lessons about API management, error handling, and user experience design in AI-powered applications. What's Next for Echoes of Time Enhanced User Experience: Redesign the interface with improved error handling, loading states, and interactive feedback to make the application more user-friendly and robust. Performance Optimization: Explore options for reducing processing time, potentially through custom-trained open-source text-to-music models or optimized prompt engineering strategies. Expanded Format Support: Extend compatibility beyond MP4 and MP3 to support a wider range of media formats, making the application accessible to more users regardless of their recording device. Mobile Application: Develop a dedicated mobile app to make video-to-song generation more convenient and accessible for on-the-go content creation. Spotify Integration: Implement user authentication with Spotify to analyze listening history and preferences, enabling more personalized song generation that aligns with individual musical tastes. Advanced Customization: Add user controls for musical style preferences, tempo adjustments, and genre specifications to give users more creative control over their generated soundtracks. Convert to typescript: Convert backend to typescript to handle errors better and improve type security. TypeScript Migration: Convert the backend from JavaScript to TypeScript for improved error handling, type safety, and development experience. This will provide compile-time error detection and better IDE support, especially important for our complex media processing workflows and Google Cloud API integrations.
Echoes of Time
A creative, AI powered web application that transform personal videos into unique, custom-generated songs. Thanks to Google Gemini and Lyria, we are able to generate a 30 second song based of the video and audio file the user sent.
Features
- 🎥 Video Upload: Support for MP4 Format
- 🤖 AI Description: Generates detailed descriptions using Google Gemini
- 🌐 Web Interface: Beautiful, responsive web UI with drag-and-drop functionality
- ⚡ Real-time Processing: Live progress updates during video processing
How It Works
- Video Upload: Users upload a video file through the web interface
- Frame Extraction: The system extracts frames at 1-second intervals (up to 30 frames for a 30-second video)
- Vision Analysis: Each frame is analyzed using Google Gemini to analyze the text from video-to-text to see the theme/mood the song should generate.
- AI Synthesis: Song generation service analysis the information received and creates a song from scratch.
- Result Display: The User is then presented with the generated song along with a quick reasoning of why the song was generated like so. Giving the user the option to do it once again.
Usage
Running the Application
-
Start the server:
npm start -
Open your browser: Navigate to
http://localhost:3000 -
Upload a video:
- Drag and drop a video file or click to browse
- Supported format: MP4
- Maximum file size: 100MB
-
Wait for processing:
- The system will extract frames and analyze them
- Processing time depends on video length and system performance
-
View results:
- The final description will appear below the upload area
- Descriptions focus on visual elements, environment, and ambiance
Example Output
For a video showing a dog playing in a park:
The video opens with a serene outdoor scene featuring a lush green field under a clear blue sky. A small dog enters the frame and begins running across the field, chasing a red ball. The playful interaction continues as the dog picks up the ball in its mouth, and soon a person wearing a blue shirt approaches. The dog drops the ball at the person's feet, who then bends down to retrieve it and throws it into the distance, initiating a game of fetch.
As the game progresses, the camera reveals additional elements of the park setting - a large tree in the background, a small pond on the left side of the field, and a park bench in the far distance with the text "Enjoy Nature" visible on it. The sky remains clear with occasional white clouds, and bright sunlight illuminates the scene. The person and dog continue their playful interaction, with the dog jumping excitedly and the person throwing the ball multiple times. The video concludes with the dog retrieving the ball one final time and then lying down contentedly next to the person, suggesting the end of their play session.
Configuration
Pre-Reqs
- Node.js: 18.x or later
- Set your API Keys for Gemini in environment
- Enable VertexAI API and create Google Cloud Project ID (see .env template to follow variable signatures)
- Git: for cloning the repository
Environment Variables
- GOOGLE_API_KEY: Your Google API key (required) and all it's other Google API features.Technical Details
- GOOGLE_ACCESS_TOKEN: Your google authentication token.
- GOOGLE_CLOUD_PROJECT: where VertexAI and Lyria are enabled
- NODE_ENV
- PORT
Architecture
- Frontend: HTML/CSS/JavaScript with drag-and-drop interface
- Node.JS Backend: The main server that handles the user requests, file management and orchestrates the AI pipeline
Models Used
- Google Gemini 2.5-flash: Used for AI powered adjudicaton and Video & Audio analysis
- Lyria-002: Music Generation from text
Analysis
View
Metric
- 29
- 27
- 2
Figures cover GitHub contributors during the hackathon window. A co-authored commit counts in full for each author, so per-member totals add up to more than the whole-team figures.
Technology
- CSSIn code
- ExpressIn code
- Google GeminiIn code
- HTMLIn code
- JavaScriptIn code
- Node.jsClaimed
5 of 6 appear in the indexed code. 1 claimed on Devpost could not be matched to code, which may simply mean the tool leaves no trace in the repository.
AI coding agents
No AI coding agent signals were found in this repository.
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
77 KB
Source files
14
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
Girlcoding22/Echoes_of_Time
32 files · 68.0 MB · @ 410304b
Structure
Interface
4 files · 13%Screens, components and styles rendered to the user.
Application logic
9 files · 28%Domain rules, services and shared utilities.
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here — open the file browser to check anything the diagram implies.
Languages
- JavaScript61%
- HTML24%
- CSS10%
- Markdown5%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
package.json
npm · 6- @google/generative-ai
- cors
- dotenv
- express
- multer
- +1 more
Declared in the repository’s manifests at the indexed commit. A declared package is not proof it is used, and runtime dependencies are listed first.
This project’s features have not been analysed yet.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.