Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ The MiniMax Code Agent communicates through the host MCP client. Business reques

| MiniApp | What it does | Author |
| --- | --- | --- |
| [OpenFilm](plugins/cristinamadureira353-svg/openfilm/) | Run OpenFilm inside MiniMax Code with the desktop interface: Studio editor, chat column and local agents, with a web-Studio fallback | [最爱双皮奶](https://github.com/cristinamadureira353-svg) |
| [Dynamic Workflow Console](plugins/stevenjj33/workflow-console/) | Run and supervise MiniMax Code dynamic workflows from one page: live status, a stage-and-dependency flow graph, per-node output, approval and control, templates, and report export | [stevenjj33](https://github.com/stevenjj33) |
| [MiniMax Photo](plugins/webguhui/minimax-photo/) | Layered image editing with an in-app AI assistant, local recovery and programmatic editing tools | [WebGuHui](https://github.com/WebGuHui) |
| [MiniMax Video](plugins/webguhui/minimax-video/) | Local video editing with captions, a host Agent assistant, reviewable timeline edits, and MP4/MP3 export | [WebGuHui](https://github.com/WebGuHui) |
Expand Down
1 change: 1 addition & 0 deletions README.zh-CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ MiniMax Code Agent 通过宿主 MCP 客户端与 MiniApp 协作。业务请求

| MiniApp | 功能 | 作者 |
| --- | --- | --- |
| [OpenFilm](plugins/cristinamadureira353-svg/openfilm/) | 把 OpenFilm 装进 MiniMax Code:桌面版界面(Studio 编辑器 + 聊天栏 + 本地 agent),桌面模式不可用时回落网页版 | [最爱双皮奶](https://github.com/cristinamadureira353-svg) |
| [动态工作流控制台](plugins/stevenjj33/workflow-console/README.zh-CN.md) | 在一个页面里运行并盯住 MiniMax Code 动态工作流:实时状态、按阶段与依赖画出的流程图、节点输出、审核与控制、模板与报告导出 | [stevenjj33](https://github.com/stevenjj33) |
| [MiniMax Photo](plugins/webguhui/minimax-photo/) | 图层图片编辑、应用内 AI 助手、本地恢复与程序化编辑工具 | [WebGuHui](https://github.com/WebGuHui) |
| [MiniMax Video](plugins/webguhui/minimax-video/) | 本地视频剪辑、字幕、宿主 Agent 助手、可预览的时间线修改与 MP4/MP3 导出 | [WebGuHui](https://github.com/WebGuHui) |
Expand Down
11 changes: 11 additions & 0 deletions plugins/cristinamadureira353-svg/openfilm/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# 自己机器上的覆盖配置(个人路径、个人偏好),不进仓库
miniapp.config.local.json

# 依赖与系统垃圾
node_modules/
.DS_Store
*.log

# 运行时的东西(token、锁、缓存)不该进包
panel-token
starting.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"schemaVersion": 1,
"name": "openfilm",
"displayName": "OpenFilm",
"version": "1.0.0",
"description": "OpenFilm inside MiniMax Code: the full desktop interface (Studio editor, chat column, local agents) with no extra chrome. Runs the official openfilm/openfilm release (npx openfilm@0.2.5) against your release project library (~/Movies/OpenFilm/Projects). Original project: https://github.com/openfilm/openfilm; this package only wraps it as a MiniApp.",
"author": "cristinamadureira353-svg",
"icon": "icon.png",
"category": "Productivity",
"exampleQueries": [
"Open the OpenFilm panel",
"Show the most recent OpenFilm project",
"Open Settings → Agents in OpenFilm"
],
"apps": [],
"mcpServers": [],
"skills": [
"skills/openfilm/SKILL.md"
],
"hooks": []
}
21 changes: 21 additions & 0 deletions plugins/cristinamadureira353-svg/openfilm/LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
MIT License

Copyright (c) 2026 cristinamadureira353-svg

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
20 changes: 20 additions & 0 deletions plugins/cristinamadureira353-svg/openfilm/NOTICE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# 原作者与出处 / Original project and credit

**OpenFilm 是原作者的开源项目,原仓库:[openfilm/openfilm](https://github.com/openfilm/openfilm)。**

OpenFilm 是原作者开源的作品,其源代码、界面与许可证均见原仓库:
https://github.com/openfilm/openfilm (许可证:**MIT**,见该仓库的 [`LICENSE`](https://github.com/openfilm/openfilm/blob/main/LICENSE);SPDX: `MIT`)。

**本仓库(openfilm-miniapp)只是将 OpenFilm 打包为 MiniMax Code 中的 MiniApp,方便在 MiniMax Code 里直接使用。**

**本仓库的打包与公开分享已获得 OpenFilm 原作者本人授权(2026-10-24,由本仓库所有者确认)。**

- 本仓库不是 OpenFilm 官方仓库,也不隶属于原作者团队;上述打包与分享已获原作者本人授权。
- 本仓库不包含 OpenFilm 的源代码;运行时通过 `npx openfilm` 与用户本地的 OpenFilm 克隆来驱动它。
- 打包过程中没有修改 OpenFilm 本身的行为;OpenFilm 的商标与名称归其权利人所有。

---

**OpenFilm is an open-source project by its authors: [openfilm/openfilm](https://github.com/openfilm/openfilm).**

This repository only packages OpenFilm as a MiniApp for MiniMax Code. It is not the OpenFilm project and is not affiliated with its authors. **The original author has authorized this packaging and public sharing (confirmed by the repository owner on 2026-10-24).** No OpenFilm source code is vendored here; OpenFilm is driven at runtime via `npx openfilm` and the user's local clone. OpenFilm's own license and notices apply to OpenFilm itself: **MIT** — https://github.com/openfilm/openfilm/blob/main/LICENSE (SPDX: `MIT`).
126 changes: 126 additions & 0 deletions plugins/cristinamadureira353-svg/openfilm/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
# OpenFilm MiniApp

English | [简体中文](README.zh-CN.md)

> **原作者 / Original project: [openfilm/openfilm](https://github.com/openfilm/openfilm).** OpenFilm is an open-source project by its authors.
> **This repository only packages OpenFilm as a MiniApp for MiniMax Code** — it is not the OpenFilm project, is not affiliated with its authors, and contains no OpenFilm source code. **The original author has authorized this packaging and public sharing.** See [NOTICE.md](NOTICE.md).

Run **OpenFilm inside MiniMax Code** — the desktop app's interface (the Studio editor **with the chat column and local agents**), not just the web Studio.

The panel is the OpenFilm desktop page itself. The native bridge the desktop app normally gets from Electron (`window.openfilmNative`) is replaced with an HTTP one, and the desktop app's own main-process handlers (chat, local agents, skills, agent roster) are reused as plain Node modules. So the chat, the agent menu and Settings → Agents behave like the desktop app, because they *are* the desktop app's code.

## What you get

- The full OpenFilm editor: media pool, viewer, inspector, timeline, export.
- The desktop chat column: conversation history, composer, agent menu, local agent turns.
- Settings → Agents with the real roster (Codex, Claude Code, MiniMax Code, BYOK, …).
- Opens your most recent OpenFilm project on launch; switching projects happens inside OpenFilm itself (no extra chrome of our own).
- An agent-callable endpoint (`POST /miniapp/open-desktop`) that launches/activates the installed OpenFilm desktop app.
- A pure web-Studio fallback when the desktop mode is unavailable.

## Requirements

- MiniMax Code **3.1.2 or newer** on macOS (the Host's loopback credential guards the panel's port).
- Node.js 22+ and `npx` (the panel starts OpenFilm with `npx -y openfilm@0.2.5`).
- **Desktop mode only:** a local clone of [openfilm/openfilm](https://github.com/openfilm/openfilm) and one shell build. `@openfilm/desktop` is not published to npm, so the desktop handlers can only come from the repository.

```sh
git clone https://github.com/openfilm/openfilm.git ~/Developer/openfilm
cd ~/Developer/openfilm && pnpm install
pnpm --filter @openfilm/desktop build:shell
```

Without the repository the panel still works — it falls back to the plain web Studio (no chat column).

## Install

Copy this whole plugin directory (including the hidden `.minimax-plugin/` directory) into your MiniMax Code plugins directory, e.g. `~/.minimax/plugins/openfilm/`, restart MiniMax Code, then ask the Agent to "打开 OpenFilm 面板".

The manifest must end up at `~/.minimax/plugins/openfilm/.minimax-plugin/plugin.json`.

## Configuration

Edit `miniapp.config.json` in the plugin directory. Put machine-specific overrides in `miniapp.config.local.json` (gitignored, never committed).

| Key | Default | Meaning |
|---|---|---|
| `openfilmBin` / `openfilmArgs` | `npx -y openfilm@0.2.5` (pinned) | Which OpenFilm to start (first run downloads it from npm). |
| `flavor` | `release` | Which project list to show: `release` (`~/.openfilm`, `~/Movies/OpenFilm/Projects`) or `dev` (`~/.openfilm-dev`). |
| `desktopMode` | `true` | Desktop interface + chat + local agents. `false` = plain web Studio. |
| `openfilmRepo` | `~/Developer/openfilm` | Where the OpenFilm clone is (also `OPENFILM_REPO` env). Needed for desktop mode. |
| `shellDist` | `<repo>/apps/desktop/shell/dist` | The built desktop page. |
| `desktopApp` | auto-detected (fixed) | The app the `POST /miniapp/open-desktop` endpoint launches: repo dev runtimes first, then `/Applications/OpenFilm.app`. Not configurable. |
| `studioHome` / `studioPort` | `context.dataDir/openfilm-studio` / `4823` | The panel's own Studio home/port. `studioHome` may be overridden for an existing state directory (documented exception); `studioPort` for isolated tests. |

## Data & access

**Processes started by this package**

- `npx -y openfilm@0.2.5 open` — starts the Studio (`openfilmBin`/`openfilmArgs` are pinned to this; the first run downloads OpenFilm from `registry.npmjs.org`).
- `open -n <app>` / `open -a <app>` (macOS) — only for the fixed app locations in `desktopCandidates()` (repo dev runtimes, `/Applications/OpenFilm.app`, `~/Applications/OpenFilm.app`).
- `open -R <path>` — reveals a project path in Finder (restricted to project folders).
- `ps -ax -o command=` — to check whether that app is already running.
- `pbcopy` — only for the chat's "copy diagnostic report".

**Network**

- `registry.npmjs.org` (first `npx` run).
- Loopback only for the panel itself and Studio (`127.0.0.1`/`localhost`). Agents you invoke use their own accounts/network as usual.

**Files read**

- `~/.openfilm/studio.json` (or `~/.openfilm-dev/studio.json` when `flavor` is `dev`): which projects exist (read-only).
- Each listed project's `.film/id` (read-only), to address the project.
- `<openfilmRepo>/apps/desktop/src/*.mjs` — the desktop handlers, imported and run (the documented desktop-mode requirement).
- `<openfilmRepo>/apps/desktop/.dev/runtime/*` — to find a dev app to launch.
- `<openfilmRepo>/apps/desktop/shell/dist/*` — the desktop page served.
- Agents' own config/session records under `~/.claude` and `~/.codex` (`agent-records.mjs`), when a turn's log or usage is shown.

**Files written**

- Only under `context.dataDir` (`openfilm-studio/`): Studio home, preferences, caches, logs, the BYOK master key and sealed BYOK keys.
- Project data is written through OpenFilm's own API/handlers (chat records under `.film/`, agent sessions in project folders), exactly as the desktop app does — not by the panel itself.
- A legacy `studioHome` override (`miniapp.config.local.json`) may point the Studio home elsewhere (this machine's original `~/.minimax/openfilm-studio`). It is an explicit, documented exception for an existing state directory, not a general writable path.


## Security

- **Loopback authentication is done by the Host** (MiniMax Code 3.1.2+): every `node:http` server in the MiniApp process requires the per-run credential, including direct local connections and WebSocket upgrades. This package implements no token logic of its own.
- **No secrets in pages, client JavaScript, logs, or error responses.** `/miniapp/studio` no longer returns the Studio key, and no iframe URL contains `/open?key=`; both web and desktop editors are served same-origin with the key attached only on the server side.
- **Bounded proxies.** `/api/*` allows only the route prefixes the editor uses (`/api/health`, `/api/projects`, `/api/files`, `/api/doctor`, `/api/library`, `/api/saved`, `/api/skills`, `/api/prefs`, `/api/examples`, `/api/fonts`, `/api/page-links`, `/api/exports`, `/api/look`) and forwards only `accept`, `content-type`, `range`. `/p/*` is read-only GET/HEAD. WebSocket upgrades are limited to `/api/events` and `/api/projects/<id>/events`, with only the handshake headers plus the Studio key.
- **IPC allowlist with payload validation** (`IPC_RULES` in `server.mjs`): installer, sign-in and `automatic` flows are not registered at all (they return 403), and every other channel has a parameter check. `desktop:reveal` is limited to project folders.
- **Fixed process launches.** `open-desktop` only opens the auto-detected OpenFilm app bundles; `openfilmBin`/`openfilmArgs` are pinned to `npx -y openfilm@0.2.5` with a minimal environment (`PATH`, `HOME`, `LANG`, `TMPDIR`, `OPENFILM_*`).
- **State lives in `context.dataDir`** (`openfilm-studio/`). Nothing durable is written into the plugin directory.
- BYOK keys saved through the panel are sealed with AES-256-GCM using a local `0600` master key in that state directory (the desktop app uses the OS keychain instead; the two do not share key storage). This is obfuscation for at-rest files, not keychain-grade protection — the master key sits in the same directory, and a legacy `raw:` (plaintext) value is also accepted for compatibility.


## Limitations

- The Electron window itself cannot be embedded in a MiniApp; this runs the desktop *interface* with an HTTP native bridge.
- Agent **installer, sign-in and `automatic` flows are not offered in the panel** (use the desktop app for those).
- Native file/folder pickers and screen capture return `null` (no native dialogs in a browser).
- Desktop mode needs the OpenFilm clone + shell build (see Requirements).
- The API proxy intentionally excludes admin routes (`/api/quit`, `/api/update`, `/api/open`, `/api/keys`); actions that need them are unavailable in the panel.
- Tested on macOS only. Windows/Linux are untested (some code paths use `open`, `pbcopy`, `ps`).


## Tested environment

- MiniMax Code desktop 3.1.2+ on macOS (Apple Silicon), Node 22, OpenFilm 0.2.5.
- Desktop page renders with chat column and real conversation history; project switching works.
- `chat:load` returns real sessions; agent roster lists 11 agents; Codex ACP probe starts a session; Claude Code correctly reports not-installed.
- Acceptance script: 44 checks covering boot, tree, desktop IPC, roster, SSE, web fallback, missing-shell error, concurrent boot (one Studio only), dispose with open SSE streams, the review hardening assertions (no key to the page, route/IPC allowlists, payload validation, reveal restriction), and the preview path (film page proxied, editor origin rewritten, bridge allowed same-origin, media served).

Run the acceptance yourself:

```sh
node test/accept-miniapp.mjs # SKIP_PROBE=1 to skip the Codex ACP probe
```

It uses temporary homes and ports 4900–4903 and cleans up after itself; it never touches your running panel or writes your projects. Desktop-mode checks need the OpenFilm clone + shell build (see Requirements). After installing, also open the panel once and check Settings → Agents.

## License

MIT — see [LICENSE](LICENSE).

OpenFilm is by the authors of [openfilm/openfilm](https://github.com/openfilm/openfilm); this package only drives it at runtime and contains no OpenFilm source code. See [NOTICE.md](NOTICE.md) for the full attribution.
Loading
Loading