Skip to content
/ VideoLM Public

EngThi/VideoLM

Folders and files

NameName
Last commit message
Last commit date

Latest commit

May 6, 2026
3cdc8a3 · · May 6, 2026

History

143 Commits
Mar 14, 2026
Apr 26, 2026
May 1, 2026
Apr 26, 2026
Apr 29, 2026
Jan 10, 2026
May 1, 2026
May 1, 2026
May 1, 2026
Apr 29, 2026
Apr 29, 2026
Apr 29, 2026
Apr 29, 2026
May 1, 2026
Apr 29, 2026
Apr 29, 2026
Dec 27, 2025
Apr 23, 2026
May 6, 2026
Jan 5, 2026
Apr 29, 2026
Mar 14, 2026
Apr 29, 2026
Apr 29, 2026
Apr 26, 2026
Apr 29, 2026
May 1, 2026
Mar 14, 2026
Mar 14, 2026
Mar 14, 2026
Mar 14, 2026
Jan 5, 2026
Mar 14, 2026
Dec 28, 2025
Apr 29, 2026
Mar 14, 2026

Repository files navigation

VideoLM Factory

VideoLM Factory is a full-stack video generation workspace. It combines research ingestion, NotebookLM automation, Gemini-compatible generation, FFmpeg rendering, and a queue-backed API that can be used from the hosted web UI.

Current reviewer URL:

https://54-162-84-165.sslip.io/engine-demo

Tip

The reviewer-safe HOMES-Engine demo uses the cached 8min21s MP4 below. It is served publicly and validated by HEAD 200 with content-type: video/mp4 before the player appears.
https://54-162-84-165.sslip.io/videos/videolm_primary_cached.mp4

Visual Walkthrough

The project has several moving parts, so reviewers should be able to understand the system from screenshots before running a long render. Add the images below to the root assets directory with the exact file names shown here.

Note

These screenshots should show the hosted production UI at https://54-162-84-165.sslip.io, not local development mocks.

What This Repo Contains

  • React + Vite frontend for creating videos, running NotebookLM research, uploading sources, and downloading generated artifacts.
  • NestJS backend that serves the app and exposes /api/... endpoints.
  • BullMQ + Redis render queue so heavy FFmpeg jobs run one at a time.
  • NotebookLM integration through notebooklm-mcp-cli.
  • Docker Compose production stack with Caddy HTTPS reverse proxy.
  • Public no-auth demo bridge for reviewer smoke tests.

Documentation

Quick Health Check

export APP_URL="https://54-162-84-165.sslip.io"

curl -fsS S "$APP_URL/api/video/demo/health"

Expected response:

{
   "status": "ok",
   "service": "VideoLM Demo Bridge",
   "baseUrl": "https://54-162-84-165.sslip.io",
   "timestamp": "..."
}}

If a client receives HTML or Unexpected token '<'t;', it is calling a frontend route instead of an API route. API clients must call /api/....

Recommended Reviewer Path

Start with the hosted demo instead of local setup:

  1. Open https://54-162-84-165.sslip.io/engine-demo.
  2. Click [run] $ homes-engine health.
  3. Click [run] $ homes-engine demo.
  4. Confirm the terminal logs cache, verifying mp4, HEAD 200, content-type: video/mp4, and mp4 verified.
  5. Play the MP4 that appears in the page, or open the public MP4 directly:
https://54-162-84-165.sslip.io/videos/videolm_primary_cached.mp4

For advanced NotebookLM artifacts, run $ homes-engine config or $ homes-engine notebooklm --help in the page. The heavy NotebookLM path is intentionally secondary so the reviewer demo is deterministic.

For the full authenticated workspace at https://54-162-84-165.sslip.io, use:

email: [email protected]
password: VideoLMReview2026!

The Register button is optional for new accounts. Reviewers should use the demo credentials above if they only need to inspect the hosted app.

The hosted app avoids local FFmpeg and local environment setup for reviewers. NotebookLM and AI-key setup are documented for users who want to run the full workflow themselves.

Local Development

Requirements:

  • Node.js 20+
  • npm
  • Redis for queue-backed rendering
  • FFmpeg
  • Python 3 and uv if using NotebookLM locally

Install dependencies:

npm install

Create a local environment file:

cp .env.example .env

Run frontend and backend together:

npm run dev

Backend only:

cd server
npm install
npm run devev

NotebookLM Setup

Important

NotebookLM is optional for the basic hosted demo, but setting it up makes testing much better. With a valid NotebookLM profile, VideoLM can list notebooks, ingest sources, generate NotebookLM video overviews, download MP4/PNG artifacts, and apply the project branding automatically.

Install the upstream CLI:

uv tool install notebooklm-mcp-cli

Log in with the browser-based flow:

nlm login
nlm login --check
nlm doctoror

The default profile stores cookies at:

~/.notebooklm-mcp-cli/profiles/default/cookies.json

VideoLM can use that file directly on the server, or users can paste/upload their cookies.json in the Research Lab UI. Full setup details are in docs/NOTEBOOKLM_SETUP.md.

Production Docker

Create .env in the repo root:

GEMINI_API_KEY=...
OPENROUTER_API_KEY=...
HF_TOKENS=...
JWT_SECRET=replace-this
NLM_HOME=/home/ubuntu/.notebooklm-mcp-cli
PUBLIC_BASE_URL=https://54-162-84-165.sslip.ioip.io

Start the stack:

docker compose up -d --build

Expected containers:

videolm_factory
videolm_redis
videolm_caddy
y

Caddy serves HTTPS on port 443 and reverse-proxies to the app container on port 3001.

Public Demo Flow

The no-auth demo bridge is intended for reviewer smoke tests.

GET  /api/video/demo/health
POST /api/video/demo/assemble
GET  /api/video/:projectId/status
GET  /videos/*.mp4
p4

POST /api/video/demo/assemble expects multipart/form-data:

audio      required WAV/MP3 narration file
images     required JPG/PNG/WebP scene files, up to 100
script     optional script text for captions
bgMusic    optional background music upload
bgMusicId  optional file name from server/data/music
projectId  optional stable id for polling
ling

Use docs/API.md for exact request and response shapes.

Validation

npm run build

cd server &∓& npm test -- --runInBand
curl -fsS https://54-162-84-165.sslip.io/api/video/demo/healthh

Important Paths

App.tsx                         Main React shell
components/ResearchDashboard.tsx NotebookLM research UI
services/ffmpegService.ts        Browser-side video assembly client
server/src/research              NotebookLM research API
server/src/video                 FFmpeg render API and queue bridge
server/public/videos             Generated video files
server/data/database.sqlite      SQLite database
docker-compose.yml               Production services
Caddyfile                        HTTPS reverse proxy
e proxy

Cost And Runtime Notes

This stack is CPU-bound and can run without a GPU. For a short review window, the main AWS costs are EC2 instance hours, EBS disk, snapshots, data transfer, and public IPv4. Stop unrelated VMs, keep one production VM online, and set a billing alert.