iArt.ai
AI 모션 그래픽 소프트웨어, 누구나 사용할 수 있는 After Effects 대안, 텍스트 프롬프트로 몇 분 안에 애니메이션·설명 영상 제작
정확한 프레임 단위 영상 검토·수정·승인, Lampo Cloud 혹은 자체 서버에서
Frame-exact video review that closes the loop: people note on the exact frame, agents fix, people check and approve. On Lampo Cloud, or open source on your machine or your own server.
미디어TypeScript · JavaScriptGitHub @lampo-vr온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Frame-exact video review for people and their AI agents: notes on exact frames, review links, and a CLI + MCP server for agents.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Frame-exact video review for AI video agents. Watch a render, pin notes to exact frames: draw on the frame, tag
it, set a severity, or just talk. The agent that made the render (Claude Code, or anything that speaks MCP) gets the
notes as plain files with frame numbers, timecodes and the marked screenshot. It fixes, re-renders, and says what it
changed. You see exactly what changed on screen and check every fix before and after, one key each.README 전문 보기 ↗Frame-exact video review for AI video agents. Watch a render, pin notes to exact frames: draw on the frame, tag it, set a severity, or just talk. The agent that made the render (Claude Code, or anything that speaks MCP) gets the notes as plain files with frame numbers, timecodes and the marked screenshot. It fixes, re-renders, and says what it changed. You see exactly what changed on screen and check every fix before and after, one key each.
It runs on your machine (no sign-up, no telemetry) or as a server for a team and its clients. On your machine, nothing
leaves it unless a feature you use needs to: the speech model downloads once from Hugging Face, and so does footage
search's model (about 213 MB) when the first video is indexed (LAMPO_FOOTAGE=off or lampo footage off prevents it);
phone notifications travel end-to-end encrypted through Apple's, Google's, Mozilla's or Microsoft's push service, and
the public tunnel for review links goes through Cloudflare.
AGPL-3.0 · Node ≥ 22.18 · ffmpeg · macOS and Linux (Windows through WSL2)
The product is called Lampo, and so is everything people and agents type: the repository (lampo-vr/lampo), the
lampo command (and lampo-mcp), the LAMPO_* settings, the MCP server's key lampo, the lampo:// resources and the
npm package @lampo-vr/lampo. Setups from before keep working: vr and vr-mcp run the same commands, VR_*
settings are still read, and vr:// addresses and the key video-review still answer. The data folders
(~/.video-review, data/) and file formats keep their names. The logo and its rules are in docs/brand/.
AI agents now cut, grade and caption video. What they can't do is watch it the way you do. The usual feedback loop ("the title at around 0:12 feels early, and there's a typo near the end") loses the one thing an agent needs most: the exact frame and what's on it. Lampo turns review into data an agent can act on without guessing:
| Library | Check mode |
|---|---|
| Review link | Hosted sign-in |
| An agent at work | Files |
| Light: library | Light: player |
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? The empty library leads with Copy prompt for your agent: paste it into Claude Code, Codex, Cursor, ChatGPT or Claude, and it connects itself to Lampo, tells you what only you can do (signing in, a restart), asks how the work starts (from scratch, your footage or a project you have) and puts up V1 (docs/mcp.md). The prompt holds no token. By hand: Settings → Connect an agent, then tell it Use Lampo for "" (For agents).
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.
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.
| Key | |
|---|---|
| Space · J K L | play/pause · reverse, pause, play (press again: faster) |
| ← → (⇧ ×10) · Home End | frame step · first/last frame |
| I O · Esc X · R · M | mark a section's start or end, also while playing (⇧ jumps there) · clear it · loop it · mute |
| drag | on 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 · ⇧R | voice note · record feedback while you watch (⇧R again: done) |
| D · ⇧D | next / previous change since the previous version |
| ⇧V | check mode: every fix, before and after |
| [ ] · N ⇧N | previous / next note · review mode (step through the open notes) |
| G · V · B | safe zones · phone view · compare (side by side, wipe, overlay; Esc closes) |
| = − 0 · Z ⇧Z | timeline 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 · / · F | library: add video · grid, compact, list, board · search this view · filter |
| ⌘-click · ⇧-click · ⌘A · X · Esc | library (List, Grid): tick a video · the run from the last one · every video in view · the one the keys are on · none; the bar moves or archives them all |
| ↑ ↓ (⇧ picks) · ↵ · Space · ⌫ | Files tab: move through the list · open · look · trash (with Undo); ⌘A picks all, ⌘↑ goes up a folder, / searches |
| ? | every key |
Connect your agent, then tell it one sentence: "Use Lampo for ". That is the whole loop: Lampo's MCP server tells every agent that connects what to do, in its first read. The full reference is docs/agents.md (every command, the MCP tools, the data format).
With Lampo Cloud, the Lampo plugin brings both pieces at once: the connector
(https://app.lampo.video/mcp) and the Agent Skill that teaches the loop.
claude plugin install lampo --marketplace lampo-vr/lampo (or /plugin install lampo --marketplace lampo-vr/lampo in a session), then sign in when the connector asks.With a Lampo server of your own, connect it by its address instead (docs/mcp.md).
list_folders, the one the person named or the work belongs to (none: a new name becomes the
project with V1; several fit: ask once, with options).get_playbook, get_taste), then the open notes (get_open_notes; drawn
notes come with their frame, cropped).mark_fixed each note with what changed. Never verify: people do.wait_for_feedback with the last cursor, again after every answer, until the person approves (sign-off
is theirs) or says stop.Every answer says what comes next: a hand-off ends with Now call wait_for_feedback with since "<cursor>"…, a read
that leaves nothing to do with Nothing waiting for you: …. The person sees the agent from its first call, in the
sidebar's Agents and in Settings → Connect an agent, and its work on a video as one line with the Agent view behind it,
built from the calls it makes anyway (no status calls needed, no tokens spent). If the person presses Stop, the agent's
next Lampo answer says so, once: it stops there. Claude Code's /lampo:watch is a shortcut for the same loop.
| The agent | Lampo through | A version goes up with |
|---|---|---|
| Claude, ChatGPT, Cursor's chat, any MCP client | MCP only | request_upload (one PUT) |
| Claude Code, Codex | MCP | lampo render --to <video> --out <file> -- <render command> (--folder <project> for V1): the person sees the progress |
| the agent on the machine Lampo runs on | MCP (stdio or the app) | track_video, then re-renders to the same path |
| scripts without MCP | lampo (npm run link; --json on every read) | lampo render, lampo push |
Connect: one prompt the person copies from the app and pastes into their agent sets it up (it connects itself,
then asks how the work starts); Settings → Connect an agent gives each client its one snippet (or a chat app its
connector address); lampo mcp config <client> prints the same (docs/mcp.md): stdio
(bin/lampo-mcp) or Streamable HTTP at /mcp (the local app, or a hosted server by signing in or with an API token).
claude mcp add --scope user lampo -- /path/to/lampo/bin/lampo-mcp
lampo mcp config codex # or claude, cursor, vscode, antigravity, windsurf, gemini, zed, json
Few tokens: pictures only for notes with a drawing, cropped to it; only what changed when an agent hands back
what it was told (since, known); a lean tool set on request (LAMPO_MCP_TOOLS=lean). Measured in
bench/tokens.
An Agent Skill teaches the same loop to agents that load skills.
A hosted server: lampo login <url> once, then every lampo command and the stdio MCP server work against it.
Screenshots are downloaded, so the printed paths still open like local files. show_review shows the review inline
in hosts that render MCP Apps.
On your machine, data/INBOX.md is the one file for "what did the reviewer say since last time": the newest 150
events from people, newest first, tagged → <session>. lampo inbox --mine [--since <iso>] gives the same as lines,
also against a hosted server.
data/
INBOX.md newest human feedback across all videos
events.jsonl append-only log of every event (what `lampo watch` tails)
<slug>/review.json source of truth for one video: versions, notes, replies, approvals
<slug>/review.md the same, readable
<slug>/<id>_clean.png the exact frame, full resolution
<slug>/<id>_marked.png the same frame with the drawing burned in
versions/<slug>/vN.<ext> the bytes of every registered render
slug is the video's absolute path with every / replaced by __ (shortened with a hash when that would exceed
255 bytes, see data-format.md). Frames are 0-based at the render's fps,
timecodes mm:ss:ff, drawings in video pixels. lampo and the MCP server lock and write atomically, so don't
hand-edit review.json, and never move or modify the renders under review: the tool only reads them. Field by
field: docs/data-format.md.
One TypeScript codebase that Node runs directly: lib/ is the store and the domain (versions, notes, diffs,
Auto-check, taste), server/ exposes it over HTTP, web/ is the React UI, and bin/lampo / mcp/ are the agent
interfaces. docs/architecture.md goes deeper: modes, storage, job priorities, and how frame
accuracy is kept end to end. The HTTP API is in docs/api.md.
| docs/agents.md | CLI reference, the review loop, remote agents |
| docs/mcp.md | MCP server setup and tools |
| docs/data-format.md | review.json, events.jsonl, the files in data/ |
| docs/playbooks.md | playbooks: brief, rules, references and skills per studio and folder; agents' suggestions; trust |
| docs/taste.md | the taste file: what the notes taught, for agents to read before they render |
| docs/files.md | project files: footage, music, fonts and project files per House, project and folder; versions, the trash, the plan, the Files tab, lampo files and the agents' tools, the API |
| docs/sharing.md | review links for clients and colleagues, what they record, webhooks |
| docs/workflow.md | where a video stands: stages, approvals per party, final, who can do what |
| docs/publishing.md | posting a final video to YouTube, Instagram and Facebook; the publish kit; what to set up first |
| docs/mobile.md |
Issues and pull requests are welcome. Please read CONTRIBUTING.md (setup, tests, the data contract) first. Contributions are accepted under a Contributor License Agreement, which you sign once with a comment on your first pull request (the CLA check says which), and everyone involved follows the Code of Conduct. Found a security problem? See SECURITY.md and please don't open a public issue.
Copyright © 2026 nprompt UG (haftungsbeschränkt), Stuttgart, Germany.
Lampo is free software under the GNU Affero General Public License v3.0 only. You may use,
study, modify and self-host it. If you run a modified version as a network service, you must offer its users the
source of your changes under the same license (set LAMPO_SOURCE_URL to your fork; the app links to it). If the AGPL
doesn't work for your organisation, a commercial license is available from the maintainers: [email protected].
To be plain about what the CLA means: contributors keep their copyright and grant the maintainers the right to license their contributions under other terms too, including proprietary ones (Harmony CLA, "any license" option). That is what makes the commercial license possible. In return, every contribution stays available under the AGPL-3.0 as well.
Third-party components and model licenses are listed in NOTICE.md. The name and logo are not covered by the code license; see TRADEMARKS.md.
guest:<name>, your internal notes stay hidden, and webhooks tell Slack or Discord right away
(docs/sharing.md). An Embed link plays one video on your own site in the same frame-exact
player, with no notes and no cookie (embedding).lampo render), needs you with Answer, or not
heard from — and pressing it opens the Agent view beside Notes and Transcript: your notes as its plan, what it is
doing now, the steps it took, and Stop, at once. The library's cards, the board and the sidebar's Agents say the
same in a word or two, and an agent shows there the moment it connects. A version an agent made says who made it, in
how long and what it fixed. When an agent fails, waits for a permission or goes quiet, the inbox (and your phone, if
you like) says so, with Try again or Nudge
(docs/agents.md).lampo login or OAuth.| the inbox, the app on your phone, notifications |
| docs/configuration.md | every setting and environment variable, where data lives |
| docs/server-mode.md | hosting: accounts and workspaces, uploads, storage, reverse proxy, security model |
| docs/docker.md | the Docker image and compose setup |
| docs/go-live.md | the first production deploy on one server: DNS, TLS, env, backups and restore, monitoring, updates |
| docs/moving.md | moving your machine's reviews to a server: lampo export, lampo admin import, what moves and what stays |
| docs/email.md | the emails a hosted server sends (invites, confirmations, password resets, notices), sign-up, the mail relay |
| docs/onboarding.md | the first run: what someone new sees, the steps per role, the sample video |
| docs/speech.md | speech-to-text: voice notes, recorded feedback, transcripts |
| docs/footage.md | footage search: B-roll from your videos as shots with exact in and out frames |
| docs/architecture.md | how the pieces fit together |
| docs/api.md | the HTTP API |
| docs/brand/ | the Lampo logo, the icons and how to use them |
| bench/stt/RESULTS.md | how the speech engines were chosen |