All docs

Documentation

Start with Lampo Cloud, connect your agent, or run Lampo yourself. The documents come from the repository.

The documents

Agents and the CLI

This page is for the agent's side: how Claude Code, Codex, a script or any other MCP client gets the notes people pin…

MCP

Lampo is an MCP server. Any agent that speaks the Model Context Protocol can read the notes people pin to frames, look…

Review links

A review link lets someone review without an account: a client, a producer, a colleague on their phone. They watch…

Workflow

Every video is in exactly one stage, from To review through the fixes and the approvals to Final. Every place shows…

Playbooks

A playbook is what the team decided before anyone watched a render: who a project is for, what every render must do…

The taste file

Every note is a data point about what the reviewer likes. The taste file sums up all the notes of a project in one…

On your phone

Everything that waits for you, across all videos, is in one list: the inbox. Answer an agent's question, check a fix,…

Speech to text

Lampo listens in three places, all with the same speech engine:

Project files

Renders are what Lampo reviews. Project files are what they are made from: footage, music, voice takes, fonts, logos,…

Footage search

Agents that edit need B-roll, and without help they look through footage frame by frame: tens of thousands of tokens…

Publishing

When a video is final, Lampo can post it to YouTube, Instagram and Facebook, or hand you a publish kit to post it…

Configuration

Lampo needs no configuration: start it and it works. To change something, set an environment variable or put the…

Run it as a server

Lampo is one app. On your own machine it signs you in by itself and can link renders where they are on your disk. On a…

Docker

The Docker image runs Lampo as a hosted server: everyone signs in, renders arrive as uploads, and everything needed to…

Going live

A runbook for the first production deploy of a hosted Lampo: one Linux server with Docker, the app and Caddy in front…

Moving to a server

You have reviewed on your own machine for a while and now run Lampo on a server (your own, see go-live.md, or one…

Email

A hosted server sends a few emails of its own: invites, confirming an address, password resets and notices about an…

The first run

What someone new sees in their first minutes, so they reach the moment Lampo is for — a note on a frame, an agent…

Data format

Everything Lampo knows lives in plain files. Agents and scripts read them without the app or the server, so the format…

HTTP API

The web app and review links use this API, and so do lampo and the stdio MCP server when they work against a hosted…

Architecture

Lampo (repository lampo, npm package @lampo-vr/lampo) is one TypeScript codebase. Node (22.18 or newer) runs the…

Quick start

You need Node ≥ 22.18 and ffmpeg with ffprobe on your PATH (macOS: brew install ffmpeg node).

git clone https://github.com/lampo-vr/lampo.git && cd lampo
npm install
npm start          # http://localhost:4747, signed in as you (builds the UI on first start)
npm run link       # puts lampo in ~/.local/bin (and says if that is not on your PATH)

Press A (Add video) to add a render: drop or choose files to upload a copy, or Link a file on this machine to review it where it lives (rendering again to the same path adds the next version), then pick its project and the agent that should act on the notes. Nothing is scanned; the tool only reads the files you add. Your owner account is created on first start; set an email and a password in Settings → Profile to sign in from your phone or another computer.

Working with an agent? Connect it in Settings → Connect an agent and tell it Use Lampo for "<project>": it puts V1 up itself (For agents). Until there is a video, the empty library offers Ask Claude Code to make one (or whichever agent you connected), with the prompt copied for you.

No footage at hand? npm run demo renders synthetic clips and builds a review history on a throwaway store: notes, an agent's fixes, a re-render with its diff, a review link and an approval. Ctrl+C deletes it again.

More ways to run it:

npm run dev        # the same with hot reload, for UI work
npm run lan        # also on your Wi-Fi (prints a link with an access token for your phone)

Where things live, and every setting: docs/configuration.md. In short, a fresh install keeps its store in ~/.video-review/:

  • data/ holds the reviews;
  • versions/ holds every render and can't be regenerated;
  • cache/ is rebuilt on demand and safe to delete while the app is stopped, except cache/uploads/ (uploads in flight).

Voice notes are transcribed on your machine by transcribe.cpp (installed with npm install, no Python): Whisper large-v3-turbo when there is a GPU (Apple Silicon, CUDA, Vulkan), Parakeet v3 on CPU-only machines. The model downloads once, on the first voice note. Details and an OpenAI-compatible server option: docs/speech.md.

Run it as a server

A server is for a team, or for sharing reviews with clients without a tunnel. This repository is the whole app: self-hosted, it is complete and has no limits, except that hiding the Powered by Lampo badge on review links is a feature of Lampo Cloud's paid plans. The maintainers also run it as a hosted service, Lampo Cloud (lampo.video), for those who'd rather not run their own; its plans and billing come from a separate module that is not part of this repository and that a self-hosted server doesn't need (docs/server-mode.md):

cp .env.example .env      # set LAMPO_DOMAIN and LAMPO_PUBLIC_URL (LAMPO_TRUST_PROXY=uniquelocal
                          # is already set), and storage for Bunny or S3 (.env is gitignored)
docker compose up -d      # the app behind Caddy, with automatic HTTPS
docker compose logs       # the first start prints a one-time setup token

Open your URL, enter the token and create the owner account. Then invite people, upload renders (drop them on the library, or lampo push), keep each project's material in its Files tab, and connect agents: through Settings → Connect an agent (a chat app by its connector address, signing in once), or lampo login, which signs in through the browser and gives lampo and the stdio MCP server an API token:

lampo login https://review.example.com
lampo push render.mp4 --folder "Acme/Reels"   # the same name again becomes V2, V3, …
lampo render --to render.mp4 --out out/v3.mp4 -- \
  npx remotion render src/index.ts Main out/v3.mp4   # the progress shows in Lampo, then V3

docs/docker.md covers the image, volumes, upgrades and backups. docs/server-mode.md covers configuration, the reverse proxy, accounts and workspaces, storage (Bunny, S3) and the security model. Going live for real: docs/go-live.md, the runbook for one server (DNS, TLS, backups with a restore drill, monitoring, updates), with node scripts/smoke.ts https://review.example.com to check a running instance.

Keys

Key
Space · J K Lplay/pause · reverse, pause, play (press again: faster)
← → (⇧ ×10) · Home Endframe step · first/last frame
I O · Esc X · R · Mmark a section's start or end, also while playing (⇧ jumps there) · clear it · loop it · mute
dragon the timeline's notes lane (⇧ anywhere on it): mark a section, and its note opens; drag its ends to adjust
C ↵note on this frame, or on the marked section; in the note, ⌘↵ presses the main button (Send, or Save on a video with an agent) and ⌘S keeps it as a draft; ⇧⌘↵ sends every note not sent yet
hold T · ⇧Rvoice note · record feedback while you watch (⇧R again: done)
D · ⇧Dnext / previous change since the previous version
⇧Vcheck mode: every fix, before and after
[ ] · N ⇧Nprevious / next note · review mode (step through the open notes)
G · V · Bsafe zones · phone view · compare (side by side, wipe, overlay; Esc closes)
= − 0 · Z ⇧Ztimeline zoom (or ⌘ + scroll; far in, every frame is a cell) · to the section or around the playhead · the whole video
⌘K (Ctrl K) · ⌘,find a video, folder or note anywhere, or run an action · Settings
A · 1–4 · / · Flibrary: add video · grid, compact, list, board · search this view · filter
↑ ↓ (⇧ picks) · ↵ · Space · ⌫Files tab: move through the list · open · look · trash (with Undo); ⌘A picks all, ⌘↑ goes up a folder, / searches
?every key