Skip to content

G-Melissa/LLTM

Repository files navigation

LLTM

Learn Language Thru Movie is a hackathon MVP for turning uploaded videos into mixed-language lessons.

The app lets a learner upload a short video, transcribe it, mix a small number of target-language words into the transcript, generate new audio, play the lesson, quiz the learner, and save vocabulary progress.

Required API Keys

The real video pipeline needs two external API keys:

  • ELEVENLABS_API_KEY: used by yarick/lltm-tapi for speech-to-text, voice cloning, and text-to-speech.
  • FEATHERLESS_API_KEY: used by Andrii/LLM for word translation and context-aware language mixing.

Do not commit real API keys. The repo already ignores .env files in .gitignore, and yarick/lltm-tapi/.env.example is the safe template to commit.

Local Keys

Create this file:

yarick/lltm-tapi/.env

Add your real keys:

ELEVENLABS_API_KEY=your_elevenlabs_key_here
FEATHERLESS_API_KEY=your_featherless_key_here

# Optional on Melissa's Mac if Python packages are installed in Anaconda:
PYTHON_BIN=/opt/anaconda3/bin/python3

# Optional: reuse an existing ElevenLabs voice instead of cloning a new one.
# This helps avoid custom voice limits.
# ELEVENLABS_VOICE_ID=your_existing_voice_id_here

Keep yarick/lltm-tapi/.env.example without real values:

ELEVENLABS_API_KEY=
FEATHERLESS_API_KEY=

Production Keys on Cloud Run

Cloud Run does not read your local .env file. Add keys as Cloud Run environment variables:

gcloud run services update lltm \
  --region us-central1 \
  --update-env-vars ELEVENLABS_API_KEY=your_elevenlabs_key_here,FEATHERLESS_API_KEY=your_featherless_key_here

The app also needs these production environment variables:

gcloud run services update lltm \
  --region us-central1 \
  --update-env-vars GCS_BUCKET=lltm-493102-videos,USE_FIRESTORE=true,PYTHON_BIN=/opt/venv/bin/python3,REAL_PIPELINE_TIMEOUT_MS=1800000

Use ELEVENLABS_VOICE_ID in production if you want to reuse one voice and avoid creating temporary cloned voices:

gcloud run services update lltm \
  --region us-central1 \
  --update-env-vars ELEVENLABS_VOICE_ID=your_existing_voice_id_here

To check what Cloud Run currently has configured:

gcloud run services describe lltm \
  --region us-central1 \
  --format="yaml(spec.template.spec.containers[0].env)"

Local Development

npm install
npm install --prefix yarick/lltm-tapi
python3 -m pip install -r Andrii/LLM/requirements.txt
python3 -m spacy download en_core_web_sm
npm run dev

The React app runs on http://localhost:5173 and the API runs on http://localhost:5174.

For the real pipeline locally, upload a video through the website after adding yarick/lltm-tapi/.env. You can also test the pipeline directly:

cd yarick/lltm-tapi
npm start -- videos/pawpatrol.mp4 es en 15

The CLI arguments are:

npm start -- <video_path> <target_language_code> <source_language_code> <word_target>

Examples:

npm start -- videos/pawpatrol.mp4 uk en 15
npm start -- videos/pawpatrol.mp4 de en 15
npm start -- videos/spanish-video.mp4 en es 10

Production Build

npm run build
npm start

The Express server serves both the API and the built React app.

Deploy To Cloud Run

cd ~/LLTM
git pull origin main
gcloud run deploy lltm \
  --source . \
  --region us-central1 \
  --allow-unauthenticated

Recommended Cloud Run resources for the real video pipeline:

gcloud run services update lltm \
  --region us-central1 \
  --memory=4Gi \
  --cpu=2 \
  --timeout=1800 \
  --concurrency=1

Storage and Database

  • Firestore stores the demo user's preferences, saved lessons, quiz results, and per-word progress.
  • Google Cloud Storage stores uploaded source videos and generated lesson videos.
  • Local development uses server/data/db.json unless you explicitly set USE_FIRESTORE=true.

Current production values:

Project: lltm-493102
Region: us-central1
Cloud Run service: lltm
GCS bucket: lltm-493102-videos
Public URL: https://lltm-914367008814.us-central1.run.app

Supported Languages

The website currently exposes:

  • English
  • Spanish
  • Ukrainian
  • German

The real pipeline passes language codes to the transcription, translation, and speech steps:

english -> en
spanish -> es
ukrainian -> uk
german -> de

The selector is strongest for English source text because the current POS analysis uses the English spaCy model. Other source languages are wired through for the hackathon demo but may need language-specific selector tuning later.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors