# Oh My Cassette

> 你的随身 AI 剪辑搭档 | Pocket AI co-editor for video montage — AI video editing plugin & MCP server for Claude Code, Codex, Hermes & OpenCode

- **Type:** MCP server
- **Install:** `agentstack add mcp-cassette-editor-oh-my-cassette`
- **Verified:** Pending review
- **Seller:** [Cassette-Editor](https://agentstack.voostack.com/s/cassette-editor)
- **Installs:** 0
- **Category:** [Content & Media](https://agentstack.voostack.com/c/content-and-media)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [Cassette-Editor](https://github.com/Cassette-Editor)
- **Source:** https://github.com/Cassette-Editor/oh-my-cassette
- **Website:** http://43.134.224.156:8080/

## Install

```sh
agentstack add mcp-cassette-editor-oh-my-cassette
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

Oh My Cassette: Pocket AI Co-editor for Video Montage

  
    
  
  
    
  
  
    
  
  
    
  
  
  
    
  
  
    
  
  
    
  
  
    
  
  
    
  
  
    
  

  简体中文 | English

  

  
  Arm Codex, Claude, or Hermes with Cassette's amazing video editing power.
  Add a friend, chat your video into shape.
  

# 🎥 Overview

**Oh My Cassette** is an open-source AI video editing plugin and local MCP server for [Claude Code](https://claude.com/claude-code), [Codex](https://github.com/openai/codex), [Hermes Agent](https://github.com/nousresearch/hermes-agent), and [OpenCode](https://opencode.ai). It turns natural-language chat into finished montage videos on [Cassette](https://trycassette.online) — beat-synced cuts, auto-matched music, subtitles, transitions, and picture-in-picture — with minimal token overhead.

Just send your videos or audio files and chat with your agent from anywhere on your phone. Your agent will work with Cassette to understand your intent, organize your media, plan the edit, and turn your materials into a ready-to-share video with powerful montage capabilities.

We believe everyone carries a film of their own. **Oh My Cassette** helps you capture sparks of inspiration, shape scattered moments into a story, and turn raw clips into montage videos without wrestling with timelines or editing tools.

Be the director of your own story, effortlessly.

  
    
      📱 Capture Anywhere
      Send clips, audio, and ideas to your AI editing friend anytime, anywhere.
    
    
      💬 Chat-to-Edit
      Describe the video you want in natural language instead of wrestling with timelines.
    
    
      🎵 Smart Music Matching
      Automatically match music to the mood, rhythm, and story of your footage.
    
  
  
    
      🌌 Montage Storytelling
      Organize scattered moments into rhythmic, emotional, and memorable video stories.
    
    
      ✨ Advanced Editing Ability
      Support title captions, picture-in-picture, beat sync, hard cuts, transitions, motion graphics, and stylized edits.
    
    
      ✅ Ready to Share
      Preview, refine, and export polished videos ready to post on social platforms.
    
  

## 🖥️ How it works

Upload your clips, describe the video you want, and the agent edits it.

  

| Time | What happens |
| --- | --- |
| 0:00 | The brief — the same prompt as the Travel Vlog case below, typed into Claude Code |
| 0:05 | 14 files upload to Cassette; every clip is analyzed for scene content |
| 0:13 | The agent edits on its own — shot selection, titles, picture-in-picture, beat-synced cuts |
| 0:16 | The timeline comes back as a readable digest, with a clickable preview link |
| 0:25 | One `cmd+click` opens the real contact sheet — one frame per clip, zero render |
| 0:30 | Nothing renders until you say so; the export runs on your go |
| 0:36 | The finished cut lands in the project folder |

**The cut it produced**

  

Both clips are compressed hard to keep this page light, so the terminal text and the footage look softer here than they do on your machine. Prompt to rendered file took about 13 minutes of real time, sped up above.

## 🎬 Case Videos

Every case below was edited end-to-end by an AI agent through Oh My Cassette, from the exact prompt shown — real inputs, real processing times, and the output is what the agent delivered.

  
  Daily Moments Vlog
  
    🎞️ Input: 15 video clips · 1 audio track
    ⏱️ Processing Time: 10 mins
  
  Prompt
  Edit to the provided audio with beat-synced cuts. Pick the best shots from all video materials and match them to the lyrics and rhythm. Change shots whenever the lyrics change, keep a travel-like and everyday emotional progression, add centered lyric subtitles to each matching shot, and make the whole edit rhythmically synced.
  Healing Daily Feel-good Lifestyle

  
  Travel Vlog
  
    🎞️ Input: 13 video clips · 1 audio track
    ⏱️ Processing Time: 15 mins
  
  Prompt
  Edit a 30-second travel vlog using all materials with a clear viewing flow. Add the title subtitle "KOTA KINABALU" at the beginning and end. Include the vlog shooting time, overlay the character video onto similar scenic shots as a picture-in-picture effect, keep the rhythm light and memorable, and use hard cuts plus music beat sync for a fresh vacation feeling.
  Travel Vlog Beat Sync PiP

  
  Cinematic Mood Short
  
    🎞️ Input: 15 video clips · 1 audio track
    ⏱️ Processing Time: 17 mins
  
  Prompt
  Use my materials to edit a lyric-driven emotional short of around 40 seconds. Start with empty scenic shots to build the mood, then intercut solitary character moments, memories, and emotional close-ups. Alternate character shots with atmospheric shots, advance with lyric subtitles on the beat, arrange subtitle words in varied sizes, and end with a quiet pause shot.
  Music MV Cinematic

  
  Cooking Tutorial
  
    🎞️ Input: 12 video clips · 1 audio track
    ⏱️ Processing Time: 8 mins
  
  Prompt
  Use these materials to edit a cooking video for stir-fried pork with green peppers. Keep the steps smooth, preserve the cooking sounds, and add simple subtitles. The subtitles can be generated based on the visuals to help viewers understand each step. Keep the style clean and natural without covering the ingredients.
  Food Tutorial Explainer

  
  Commercial
  
    🎞️ Input: 15 video clips · 15 sound effects · 1 audio track
    ⏱️ Processing Time: 13 mins
  
  Prompt
  Use these materials to edit a 15-second product commercial. Start with opening the bottle cap, add bubbles, water splashes, ice cubes, and product details in the middle, and end with the full product and brand. Keep it refreshing, thirst-quenching, and ad-like.
  Product Short Commercial

  
  Game Highlight Video
  
    🎞️ Input: 5 video clips · 1 audio track
    ⏱️ Processing Time: 5 mins
  
  Prompt
  Use my game footage to edit a 20-30 second martial arts combat short. Give it an ink-painting visual style and a tense, solemn atmosphere. Create the cinematic feeling of entering the battlefield alone and fighting through the encirclement.
  Game Highlight Beat Sync

  ★ More cases are on the way. Star the project to follow along.

# 🏄 Try without installation

We host a public web demo so you can try the Oh My Cassette workflow from a desktop or mobile browser without installing Codex, Claude, or Hermes locally:

 TRY NOW! 

> [!WARNING]
> The public demo is for illustration and evaluation only. It is intentionally unauthenticated, so do **not** upload sensitive, private, confidential, illegal, copyrighted, regulated, or otherwise restricted content.
>
> Uploaded files, prompts, generated outputs, job state, and troubleshooting metadata may be processed by this demo server, Cassette, DeepSeek, and third-party music/search providers used by the BGM flow. Treat anything you upload as visible to the demo operator and external services involved in the workflow.
>
> The demo may be reset, rate-limited, unavailable, or changed at any time. We do not guarantee data retention, deletion timing, confidentiality, fitness for production use, output quality, copyright compliance of generated/editing results, or uninterrupted service. You are responsible for the content you upload and for reviewing any generated output before sharing it.
>
> Browser refreshes, tab closes, or navigation away from the web demo start a new web session and best-effort cleanup the previous web session's temporary uploads, chat history, and finished job files.
>
> By default, the demo uses the server-side DeepSeek configuration when available. You can open **Settings** in the web UI and provide your own DeepSeek API key for testing. Your key is sent only with requests to this demo server and is not written to this repository or server-side disk by the web app, but it still transits the public demo server; use a key you can rotate and monitor.

Deploy Web Demo Locally

The web demo is a single FastAPI service that keeps the existing Cassette gateway flow but replaces the chat surface with a browser UI. It stores runtime uploads, jobs, exports, screenshots, and outbox data under `CASSETTE_ASSET_ROOT` instead of the repository.

1. Clone the repository and create a dedicated web environment:

```bash
git clone https://github.com/Cassette-Editor/oh-my-cassette.git
cd oh-my-cassette

python3 -m venv .venv-web
. .venv-web/bin/activate
pip install -U pip
pip install -r requirements-web.txt
python -m playwright install chromium
```

2. Configure Cassette and DeepSeek runtime settings as process environment variables. The web demo does not require Hermes Agent or `~/.hermes/.env`.

```bash
cp deploy/oh-my-cassette-web.env.example ./oh-my-cassette-web.env
$EDITOR ./oh-my-cassette-web.env
```

At minimum, set:

```dotenv
CASSETTE_URL=https://sg.trycassette.online/agent
CASSETTE_AUTH_EMAIL=you@example.com
CASSETTE_AUTH_PASSWORD='your-cassette-password'
CASSETTE_ASSET_ROOT=$HOME/.oh-my-cassette/cassette
CASSETTE_BROWSER_TIMEOUT_SEC=1800

DEEPSEEK_API_KEY='your_deepseek_api_key'
DEEPSEEK_BASE_URL=https://api.deepseek.com
DEEPSEEK_MODEL=deepseek-v4-flash
OMC_WEB_HOST=0.0.0.0
OMC_WEB_PORT=8080
OMC_WEB_LOG_DIR=./web_demo/logs
```

If you load the file with `. ./oh-my-cassette-web.env`, quote any value that contains shell-special characters, spaces, or `#`. The systemd `EnvironmentFile` format also accepts quoted values.
Cassette upload/analysis waits inherit `CASSETTE_BROWSER_TIMEOUT_SEC` by default. Set `CASSETTE_UPLOAD_TIMEOUT_SEC` only when you need a different upload timeout; `0` means wait forever.

Load the variables before starting the service:

```bash
set -a
. ./oh-my-cassette-web.env
set +a
```

If you do not want to put a DeepSeek key on the server, leave `DEEPSEEK_API_KEY` empty and enter a temporary key from the web UI **Settings** panel. That browser-provided key is attached to API requests for that session and is not persisted by the web app.

Web demo service logs are separate from Hermes Agent / OhMyCassette plugin logs. By default they are written to `./web_demo/logs/web_demo.log` relative to the service working directory, or to `$OMC_WEB_LOG_DIR/web_demo.log` when `OMC_WEB_LOG_DIR` is set.
Cassette job records for the web demo are also separate when `CASSETTE_ASSET_ROOT` is set as above: raw job JSON lives in `$CASSETTE_ASSET_ROOT/jobs/cassette_*.json`, and the web UI exposes a per-job **Log** link for jobs owned by the current browser session.

3. Build the browser UI (Vite + React → `web_demo/frontend/dist`). Requires Node.js + npm at build time only:

```bash
./web_demo/build_frontend.sh
```

4. Start the web demo:

```bash
. .venv-web/bin/activate
python -m web_demo.server
```

> The server serves the built `web_demo/frontend/dist`. If it has not been built yet, `/` returns a clear 503 telling you to run the build. Re-run `web_demo/build_frontend.sh` after pulling changes under `web_demo/frontend`.

Open `http://127.0.0.1:8080/` for local testing, or `http://:8080/` from another device if the host firewall/security group allows inbound TCP `8080`.

4. Optional systemd deployment:

```bash
sudo cp deploy/oh-my-cassette-web.service.example /etc/systemd/system/oh-my-cassette-web.service
sudo cp deploy/oh-my-cassette-web.env.example /etc/oh-my-cassette-web.env
sudo $EDITOR /etc/oh-my-cassette-web.env
sudo systemctl daemon-reload
sudo systemctl enable --now oh-my-cassette-web
sudo systemctl status oh-my-cassette-web
journalctl -u oh-my-cassette-web -f
```

Before enabling the service, edit `/etc/systemd/system/oh-my-cassette-web.service` if your repository or virtualenv path differs from the example.
`journalctl` shows uvicorn stdout/access logs; Web demo business logs still go to `$OMC_WEB_LOG_DIR/web_demo.log`.

5. Smoke test:

```bash
curl -fsS http://127.0.0.1:8080/ -o /dev/null
python3 -m compileall -q web_demo tools.py notifier.py browser.py
tail -f ./web_demo/logs/web_demo.log
```

Then open the browser UI, upload a small video, send an edit request, and watch the job card/events until the export download appears.

# 🚀 Quick Start

## Before You Start 🎬

Oh My Cassette connects Codex, Claude, or Hermes to the Cassette Agent. You need:

* Codex, Claude Code, or a working Hermes Agent installation.
* A Cassette account.
* For Hermes only, a configured gateway such as QQ or Telegram.

> [!TIP]
> **Apply for a Cassette account here:** [**Cassette Sign Up**](https://trycassette.online/signup/)

If you plan to use Hermes and it is not installed yet:

```bash
curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash
```

If the Hermes Agent gateway is not configured yet:

```bash
hermes gateway setup
```

Oh My Cassette currently supports QQ and Telegram gateways.

## Requirements

- macOS, Linux, or Windows for the local MCP plugin (Codex, Claude Code, or OpenCode). The Hermes Agent gateway path is macOS/Linux only.
- Codex, Claude Code, or OpenCode for the local MCP plugin, or Hermes Agent with its gateway configured.
- Python 3.11–3.13.
- `ffmpeg`, required for Hermes gateway normalization and optional API export thumbnails.

Install system tools:

```bash
# macOS
brew install uv ffmpeg
```

```bash
# Debian/Ubuntu Linux
sudo apt-get update
sudo apt-get install -y ffmpeg
curl -LsSf https://astral.sh/uv/install.sh | sh
```

```powershell
# Windows (PowerShell)
winget install Python.Python.3.13
winget install Gyan.FFmpeg
```

## Install

### Codex

```bash
codex plugin marketplace add https://github.com/Cassette-Editor/oh-my-cassette.git
codex plugin add oh-my-cassette@cassette-editor
```

Start a new Codex task after installation so plugin discovery runs again. The plugin contributes the host-neutral `cassette-video-edit` skill and a local MCP process named `cassette`.

### Claude Code

```bash
claude plugin marketplace add Cassette-Editor/oh-my-cassette
claude plugin install oh-my-cassette@cassette-editor
```

Restart Claude Code after installation. You can verify the installation with:

```bash
claude plugin details oh-my-cassette@cassette-editor
```

### OpenCode

OpenCode has no plugin marketplace for MCP servers, so add the server and skill from a checkout. Clone the repository, then point OpenCode at the launcher from your project's `opencode.json` (a copy is committed at the repo root):

```jsonc
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "cassette": {
      "type": "local",
      "command": ["python3", "/absolute/path/to/oh-my-cassette/scripts/run_local_mcp.py"],
      "enabled": true,
      "environment": { "CASSETTE_MCP_HOST": "opencode" }
    }
  }
}
```

OpenCode discovers the host-neutral `cassette-video-edit` skill from the repository's `.agents/skills/` directory, or copy it to `~/.config/opencode/skills/cassette-video-edit/` for global use. On Windows, use `"python"` instead of `"python3"` in `command`.

### Any other MCP host

The runtime is host-neutral, so any client that launches a local stdio MCP server can use it. Point the client at `scripts/run_local_mcp.py` (run with `python3`, or `python` on Windows) and set `CASSETTE_RUNTIME_ADAPTER=mcp`. The server ships full workflow guidance in its MCP `instructions`, and every tool returns a typed `phase`/`next_action` so a host without the packaged skill can still drive the flow. For the best experience, also install the `cassette-video-edit` skill (or equivalent system prompt) so the guided-choice and review steps are followed.

### Hermes

Install through the Hermes plugin manager (recommended):

```bash
hermes plugins install Cassette-Editor/oh-my-cassette
```

The Hermes installer prompts for your Cassette account email and password and saves them to `~/.hermes/.env`. Then run the setup finisher — it installs Playwright Chromium into the Hermes Python environment, detects `ffmpeg`/`ffprobe`, and lets you pick the Cassette region — and enable the plugin:

```bash
python3 ~/.hermes/plugins/cassette/scripts/install_plugin.py --setup-only
hermes plugins

…

## Source & license

This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [Cassette-Editor](https://github.com/Cassette-Editor)
- **Source:** [Cassette-Editor/oh-my-cassette](https://github.com/Cassette-Editor/oh-my-cassette)
- **License:** MIT
- **Homepage:** http://43.134.224.156:8080/

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** yes
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** yes
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: flagged — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/mcp-cassette-editor-oh-my-cassette
- Seller: https://agentstack.voostack.com/s/cassette-editor
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
