Skip to main content
Glama
ZermatAbdenour

Gameplay Studio MCP Server

README.md
<div align="center">

<img src="./docs/screenshots/hero-banner.jpg" alt="Gameplay Studio Banner" width="100%" style="border-radius: 14px;" />

# Gameplay Studio (`v0.7.0`)

**Multi-Track NLE Video Editor That Cuts Gameplay From Its Own Label Track • Agent-Driven Over MCP • Bring-Your-Own AI Model & Base URL • Cinema 3D `.cube` LUTs & Split-Wipe Scopes • Hardware GPU Render**

[![Labelled footage](https://img.shields.io/badge/Labelled%20Gameplay-frame--accurate%20cuts-f59e0b)](./docs/labelled-gameplay.md)
[![MCP Ready](https://img.shields.io/badge/MCP-Claude%20Code%20%7C%20opencode%20%7C%20Cursor-8b5cf6)](#connect-an-agent-mcp)
[![Tests](https://img.shields.io/badge/Vitest-132%20passing-22c55e?logo=vitest)](./test)
[![Codecs](https://img.shields.io/badge/FFmpeg-NVENC%20%7C%20AMF%20%7C%20QSV%20%7C%20ProRes-3b82f6)](#)

### [šŸ“– Labelled gameplay: how an agent cuts from a label track](./docs/labelled-gameplay.md)

</div>

---

## Visual Studio Showcase

<p align="center">
  <img src="./docs/screenshots/shot-01-editor.jpg" alt="Gameplay Studio 4-Zone Multi-Track Editor" width="100%" />
</p>

<table>
  <tr>
    <td width="50%">
      <img src="./docs/screenshots/shot-02-color-scopes.jpg" alt="Cinema 3D LUTs & Broadcast Scopes" width="100%" />
      <p align="center"><strong>Cinema 3D <code>.cube</code> LUTs, Split-Wipe Compare &amp; Broadcast RGB Scopes</strong><br/><sub>Kodak 2383, Teal &amp; Orange, Fuji Eterna, Bleach Bypass, Cyberpunk Neon + live touch/pointer Split-Wipe</sub></p>
    </td>
    <td width="50%">
      <img src="./docs/screenshots/shot-03-ai-copilot.jpg" alt="Custom API, Model Picker & AI Copilot" width="100%" />
      <p align="center"><strong>Custom API Key, Base URL &amp; Model Configurator</strong><br/><sub>OpenAI, OpenRouter, DeepSeek, NVIDIA NIM, Groq, Ollama / LM Studio + live <code>/models</code> search</sub></p>
    </td>
  </tr>
  <tr>
    <td width="50%">
      <img src="./apps/desktop/public/showcase/hero-cinema.jpg" alt="35mm Film Look Demo" width="100%" />
      <p align="center"><strong>Built-In 35mm Cinema Plates &amp; Interactive Demo Scenes</strong><br/><sub>One-click demo timelines right inside Gameplay Studio's <code>✨ Showcase</code> studio modal</sub></p>
    </td>
    <td width="50%">
      <img src="./apps/desktop/public/showcase/motion-neon.jpg" alt="High-Speed VFX & Motion Presets" width="100%" />
      <p align="center"><strong>Touch &amp; Mouse Multi-Track NLE Timeline, Speed Ramps &amp; PiP Layouts</strong><br/><sub>Smooth touch &amp; mouse splitters, UI scaling (<code>70%–150%</code>), and native Win32 Fullscreen</sub></p>
    </td>
  </tr>
</table>

---

## Architecture Overview

<p align="center">
  <img src="./docs/graphics/architecture.svg" alt="Gameplay Studio Architecture" width="100%" />
</p>

---

## Highlights in `v0.7.0`

- **Native Windows Desktop App (`GameplayStudio_installer.exe`)**: 4-Zone Resizable Studio Workspace, universal `Ctrl+K` instant search, hardware-accelerated FFmpeg (`NVENC` / `AMF` / `QSV` / `ProRes` / `HEVC`), in-place NSIS `Update` installer, and 1-click **`šŸ”„ Update`** self-updater.
- **Interactive Before / After Split-Wipe & Broadcast Scopes**: Compare raw vs. color-graded video directly inside the Player monitor (`⇆ Split Wipe`) alongside live RGB Histograms & IRE Waveforms (`šŸ“Š Scopes`).
- **Bring Your Own API Key, Base URL & AI Model (`āš™ API & Model`)**: Connect OpenAI, OpenRouter, DeepSeek, NVIDIA NIM, Groq, Ollama, LM Studio, or any custom OpenAI-compatible `/v1` endpoint with live `/models` discovery, connection testing, and natural-language AI Copilot execution on Windows.

---

## Labelled gameplay footage

This is what Gameplay Studio adds on top of a conventional NLE.

A game recorded with the [Labeled Recorder](../com.labeledrecorder) Unity package writes a sidecar next
to its video:

```
Recordings/arena_run_003.mp4            the footage
Recordings/arena_run_003.labels.json    what happened in it, frame-accurately
```

The sidecar lists the events the game fired, the things that lasted, the moments a developer flagged as
worth keeping, the chapter structure, and game-data signals sampled whenever they changed. So an agent
does not watch the video or guess from pixels — it is told, to the frame, and can justify every cut it
makes:

> `marker 'highlight' (note=triple kill from the rafters) at 00:10.666`

```
labels.attach      bring a labelled recording in (video path, label path, or asset name)
labels.describe    this game's event names, signals, chapters, busiest stretch
labels.find_windows ranked candidate clip ranges, each with a reason
labels.build_edit  put the chosen ranges on a new track, as one undo step
labels.auto_short  do all of the above with sensible defaults
```

Full workflow, including the strategies for shorts vs. trailers: **[docs/labelled-gameplay.md](./docs/labelled-gameplay.md)**.

Unlabelled footage still works; it just falls back to the pixel-based tools (`edit.highlight`,
`analysis.scenes`, `analysis.beats`), which guess.

---

## Install

Build from source. Node 20+ and Git are the only requirements; FFmpeg and FFprobe are fetched as npm
dependencies.

```bash
npm ci
npm run build
```

Download the Windows installer from [Releases](https://github.com/ZermatAbdenour/GameplayStudio/releases/latest),
or build it yourself with `npm run dist:desktop`.

---

## Quick Start (Development & Building From Source)

```bash
npm ci
npm test                        # Run all end-to-end Vitest tests
npm run build                   # Build TypeScript backend + CLI + MCP
npm run dev:api                 # Start local Gameplay Studio Engine on http://127.0.0.1:47000
npm run dev:ui                  # Start React + Vite Studio UI on http://localhost:5173
```

## Connect an agent (MCP)

Gameplay Studio is an MCP server, so any MCP-capable agent drives the whole editor — the ~110 ordinary
editing tools plus the `labels.*` family. The first call an agent should make is **`labels.guide`**,
which returns the entire labelled-footage workflow so it never has to be briefed out of band.

**Claude Code**

```bash
claude mcp add gameplaystudio   --env GAMEPLAY_STUDIO_PROJECT=.gameplaystudio/project.gameplaystudio   -- node "/path/to/Gameplay Studio/dist/mcp/stdio.js"
```

**opencode** (any model — DeepSeek, Qwen, local Ollama …) in `opencode.json`:

```json
{
  "mcp": {
    "gameplaystudio": {
      "type": "local",
      "command": ["node", "/path/to/Gameplay Studio/dist/mcp/stdio.js"],
      "environment": { "GAMEPLAY_STUDIO_PROJECT": ".gameplaystudio/project.gameplaystudio" },
      "enabled": true
    }
  }
}
```

**Claude Desktop / Cursor / anything else speaking MCP**

```json
{
  "mcpServers": {
    "gameplaystudio": {
      "command": "node",
      "args": ["/path/to/Gameplay Studio/dist/mcp/stdio.js"],
      "env": { "GAMEPLAY_STUDIO_PROJECT": ".gameplaystudio/project.gameplaystudio" }
    }
  }
}
```

`GAMEPLAY_STUDIO_PROJECT` is the `.gameplaystudio` project file the agent edits, created on first run if missing.
`GAMEPLAY_STUDIO_PROJECT` is still honoured so an existing config keeps working. An HTTP transport is available
via `gameplay-studio mcp --http`.

---

## Credits

Gameplay Studio is a renamed derivative of **[Vedit Studio](https://github.com/lilrepaer-glitch/Vedit)**
by lilrepaer-glitch, used under the MIT licence. The NLE engine, render pipeline, and desktop
shell, and the original MCP server are its work. Gameplay Studio adds the labelled-gameplay layer
(`src/labels`, `src/mcp/labels.ts`) and the rename.

The label format it reads is produced by the
[Labeled Recorder](../com.labeledrecorder) Unity package.

## License

MIT — see [LICENSE](./LICENSE).