diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json new file mode 100644 index 000000000..c097f3412 --- /dev/null +++ b/.claude-plugin/marketplace.json @@ -0,0 +1,12 @@ +{ + "name": "openscreen", + "owner": { "name": "Etienne Lescot", "url": "https://getopenscreen.com" }, + "description": "OpenScreen's plugin for Claude Code: demo videos made with the free, open-source screen recorder and editor.", + "plugins": [ + { + "name": "openscreen", + "source": "./plugin", + "description": "Make a demo video from one sentence: record the screen, edit and export it with OpenScreen." + } + ] +} diff --git a/.gitattributes b/.gitattributes index 2c38460da..4f60070f7 100644 --- a/.gitattributes +++ b/.gitattributes @@ -19,3 +19,9 @@ CMakeLists.txt text eol=lf # Adopted measurement manifests hash exact bytes; keep their artifacts unchanged. workbench/measurements/** -text + +# Claude's plugin directory refuses a repository whose GitHub archive exceeds +# 50 MiB, and this one was at 50.4. These ~8 MB of README media are copies of +# files in public/, served from the tree (README, raw.githubusercontent links), +# never from an archive, so leaving them out of archives costs nothing. +docs/assets/** export-ignore diff --git a/plugin/.claude-plugin/plugin.json b/plugin/.claude-plugin/plugin.json new file mode 100644 index 000000000..1cfc86ec6 --- /dev/null +++ b/plugin/.claude-plugin/plugin.json @@ -0,0 +1,11 @@ +{ + "name": "openscreen", + "displayName": "OpenScreen", + "description": "Make a demo video from one sentence: record the screen, edit and export it with OpenScreen.", + "version": "2.1.1", + "author": { "name": "Etienne Lescot", "url": "https://getopenscreen.com" }, + "homepage": "https://getopenscreen.com/docs/ai-editing", + "repository": "https://github.com/getopenscreen/openscreen", + "license": "MIT", + "keywords": ["demo video", "screen recording", "video editing", "pull request"] +} diff --git a/plugin/README.md b/plugin/README.md new file mode 100644 index 000000000..36d7ef89c --- /dev/null +++ b/plugin/README.md @@ -0,0 +1,25 @@ +# OpenScreen plugin for Claude Code + +This plugin turns one sentence into a finished demo video of an app or a feature. Its `openscreen-demo` skill has Claude plan a short storyboard, record the screen with [OpenScreen](https://getopenscreen.com), add zooms, captions and on-screen callouts, export an MP4, check the frames, and then either attach the video to a pull request or draft a post on X. + +OpenScreen is a free, open-source (MIT) screen recorder and video editor for Windows, macOS and Linux. The plugin holds the skill only; the recording and editing tools come from OpenScreen's MCP server, which is the desktop app's own executable started with `mcp`. + +## What the skill runs, sends and fetches + +- **Installs OpenScreen, only after you agree.** If the app is missing, it offers to download the latest installer from [the project's GitHub releases](https://github.com/getopenscreen/openscreen/releases/latest) and install it. +- **Registers the MCP server** with `claude mcp add openscreen -- "" mcp`. The server runs locally over stdio and needs no account. +- **Records the window you choose.** The recording and the project stay on your machine. The exported video leaves it only when you share it, as below. +- **Attaches the video to a pull request** with `gh`, on the repository you work in, when you ask for a pull request video. +- **Drafts a post on X** for a launch demo, and posts it only after your explicit yes. + +## Use it + +Install it in Claude Code: + +``` +/plugin install openscreen --marketplace getopenscreen/openscreen +``` + +Then ask Claude for a demo, for example: *make a 30-second demo of the new export dialog and add it to my PR*. The skill sets OpenScreen up on first use. + +Documentation: [Letting an agent make the whole video](https://getopenscreen.com/docs/ai-editing/#letting-an-agent-make-the-whole-video). diff --git a/skills/openscreen-demo/SKILL.md b/plugin/skills/openscreen-demo/SKILL.md similarity index 100% rename from skills/openscreen-demo/SKILL.md rename to plugin/skills/openscreen-demo/SKILL.md diff --git a/technical-documentation/engineering/build-and-packaging.md b/technical-documentation/engineering/build-and-packaging.md index 8b5c8d383..6084eebd7 100644 --- a/technical-documentation/engineering/build-and-packaging.md +++ b/technical-documentation/engineering/build-and-packaging.md @@ -278,6 +278,8 @@ Marketing and documentation assets (`demo.gif`, `preview*.png`) reside in `docs/ Copies of the same three files also remain at their old `public/` paths, because external pages (directories, articles, awesome lists) hotlink `https://raw.githubusercontent.com/getopenscreen/openscreen/main/public/demo.gif` and friends, and moving them broke those images. Vite still copies them into `dist/`, so `electron-builder.json5` excludes `dist/demo.gif` and `dist/preview*.png` from the package. Reference `docs/assets/` from anything new; do not delete the `public/` copies. +`docs/assets/` is `export-ignore` in `.gitattributes`, so GitHub's source archives leave it out. Claude's plugin directory, which lists the plugin in `plugin/`, refuses a repository whose archive exceeds 50 MiB, and the duplicates were what pushed it over. If the archive grows past the limit again, measure it with `gh api repos/getopenscreen/openscreen/tarball/main | wc -c` and leave out more media that nothing builds from. + ### Compression configuration `electron-builder.json5` declares `compression: "normal"`. For Windows NSIS installers, electron-builder's differential packaging options enforce normal, non-solid compression with a 1 MB dictionary (`dictSize = 1`, `solid = false`). Setting `"maximum"` has no effect on Windows installers and only increases build times for Linux AppImage targets without meaningful size reductions. diff --git a/website/docs/ai-editing.md b/website/docs/ai-editing.md index 7d2f5e3b5..917348b9b 100644 --- a/website/docs/ai-editing.md +++ b/website/docs/ai-editing.md @@ -100,4 +100,4 @@ codex mcp add openscreen -- "" mcp - **While OpenScreen is running, the agent works through it.** An edit to the project open in the editor appears there at once, and `Ctrl/Cmd + Z` undoes it. The agent's checkpoints then last until OpenScreen quits. If the app does not answer, edits to that project are refused, since the editor would save its own copy over them. - **A take has no transcript until the agent asks for one.** It calls `transcribe` before it cuts words or turns the captions on. Whisper runs on your machine, in OpenScreen when it is open. - **A take driven by a script** (Playwright, for example) never moves the screen pointer. The agent hands OpenScreen its own log of the actions with `setPointerTrack`, and the video gets a cursor and its zooms all the same. -- **The `openscreen-demo` skill** teaches an agent the whole job, from the storyboard to the finished video. It then attaches the video to a pull request, so reviewers watch the change in place, or drafts a post on X that it publishes only once you say yes. Add it with `npx skills add getopenscreen/openscreen --skill openscreen-demo`. The recipe is [`skills/openscreen-demo/SKILL.md`](https://github.com/getopenscreen/openscreen/blob/main/skills/openscreen-demo/SKILL.md). +- **The `openscreen-demo` skill** teaches an agent the whole job, from the storyboard to the finished video. It then attaches the video to a pull request, so reviewers watch the change in place, or drafts a post on X that it publishes only once you say yes. Add it with `npx skills add getopenscreen/openscreen --skill openscreen-demo`. The recipe is [`plugin/skills/openscreen-demo/SKILL.md`](https://github.com/getopenscreen/openscreen/blob/main/plugin/skills/openscreen-demo/SKILL.md). diff --git a/website/i18n/de/docusaurus-plugin-content-docs/current/ai-editing.md b/website/i18n/de/docusaurus-plugin-content-docs/current/ai-editing.md index 9e4d2751a..6a6c4d6cc 100644 --- a/website/i18n/de/docusaurus-plugin-content-docs/current/ai-editing.md +++ b/website/i18n/de/docusaurus-plugin-content-docs/current/ai-editing.md @@ -102,4 +102,4 @@ codex mcp add openscreen -- "" mcp - **Läuft OpenScreen, arbeitet der Agent über die App.** Eine Änderung am im Editor geöffneten Projekt erscheint dort sofort, und `Ctrl/Cmd + Z` macht sie rückgängig. Die Wiederherstellungspunkte des Agenten gelten dann, bis OpenScreen beendet wird. Antwortet die App nicht, werden Änderungen an diesem Projekt abgelehnt, denn der Editor würde seine eigene Kopie darüber speichern. - **Ein Take hat kein Transkript, bis der Agent eines anfordert.** Er ruft `transcribe` auf, bevor er Wörter schneidet oder die Untertitel einschaltet. Whisper läuft auf deinem Rechner, in OpenScreen, wenn die App geöffnet ist. - **Ein per Skript gesteuerter Take** (zum Beispiel mit Playwright) bewegt nie den Zeiger auf dem Bildschirm. Der Agent übergibt OpenScreen mit `setPointerTrack` sein eigenes Protokoll der Aktionen, und das Video bekommt trotzdem einen Cursor und dessen Zooms. -- **Der Skill `openscreen-demo`** bringt einem Agenten die ganze Arbeit bei, vom Storyboard bis zum fertigen Video. Danach hängt er das Video an einen Pull Request, damit die Reviewer die Änderung direkt dort sehen, oder entwirft einen Post auf X, den er erst veröffentlicht, wenn du Ja sagst. Füge ihn mit `npx skills add getopenscreen/openscreen --skill openscreen-demo` hinzu. Das Rezept ist [`skills/openscreen-demo/SKILL.md`](https://github.com/getopenscreen/openscreen/blob/main/skills/openscreen-demo/SKILL.md). +- **Der Skill `openscreen-demo`** bringt einem Agenten die ganze Arbeit bei, vom Storyboard bis zum fertigen Video. Danach hängt er das Video an einen Pull Request, damit die Reviewer die Änderung direkt dort sehen, oder entwirft einen Post auf X, den er erst veröffentlicht, wenn du Ja sagst. Füge ihn mit `npx skills add getopenscreen/openscreen --skill openscreen-demo` hinzu. Das Rezept ist [`plugin/skills/openscreen-demo/SKILL.md`](https://github.com/getopenscreen/openscreen/blob/main/plugin/skills/openscreen-demo/SKILL.md). diff --git a/website/i18n/es/docusaurus-plugin-content-docs/current/ai-editing.md b/website/i18n/es/docusaurus-plugin-content-docs/current/ai-editing.md index f99081c84..92357295b 100644 --- a/website/i18n/es/docusaurus-plugin-content-docs/current/ai-editing.md +++ b/website/i18n/es/docusaurus-plugin-content-docs/current/ai-editing.md @@ -102,4 +102,4 @@ codex mcp add openscreen -- "" mcp - **Mientras OpenScreen está abierto, el agente trabaja a través de la app.** Una edición del proyecto abierto en el editor aparece ahí al instante, y `Ctrl/Cmd + Z` la deshace. Los puntos de restauración del agente duran entonces hasta que cierres OpenScreen. Si la app no responde, las ediciones de ese proyecto se rechazan, porque el editor guardaría su propia copia encima. - **Una toma no tiene transcripción hasta que el agente la pide.** Llama a `transcribe` antes de cortar palabras o de activar los subtítulos. Whisper se ejecuta en tu equipo, dentro de OpenScreen cuando está abierto. - **Una toma controlada por un script** (Playwright, por ejemplo) nunca mueve el puntero de la pantalla. El agente le pasa a OpenScreen su propio registro de las acciones con `setPointerTrack`, y el video obtiene igualmente un cursor y sus zooms. -- **La skill `openscreen-demo`** le enseña a un agente todo el trabajo, desde el storyboard hasta el video terminado. Después adjunta el video a un pull request, para que los revisores vean el cambio ahí mismo, o redacta un post en X que solo publica cuando dices que sí. Agrégala con `npx skills add getopenscreen/openscreen --skill openscreen-demo`. La receta es [`skills/openscreen-demo/SKILL.md`](https://github.com/getopenscreen/openscreen/blob/main/skills/openscreen-demo/SKILL.md). +- **La skill `openscreen-demo`** le enseña a un agente todo el trabajo, desde el storyboard hasta el video terminado. Después adjunta el video a un pull request, para que los revisores vean el cambio ahí mismo, o redacta un post en X que solo publica cuando dices que sí. Agrégala con `npx skills add getopenscreen/openscreen --skill openscreen-demo`. La receta es [`plugin/skills/openscreen-demo/SKILL.md`](https://github.com/getopenscreen/openscreen/blob/main/plugin/skills/openscreen-demo/SKILL.md). diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/current/ai-editing.md b/website/i18n/fr/docusaurus-plugin-content-docs/current/ai-editing.md index a4eda4004..58d32c2c3 100644 --- a/website/i18n/fr/docusaurus-plugin-content-docs/current/ai-editing.md +++ b/website/i18n/fr/docusaurus-plugin-content-docs/current/ai-editing.md @@ -102,4 +102,4 @@ codex mcp add openscreen -- "" mcp - **Quand OpenScreen est lancé, l'agent passe par l'application.** Une modification du projet ouvert dans l'éditeur y apparaît aussitôt, et `Ctrl/Cmd + Z` l'annule. Les points de restauration de l'agent durent alors jusqu'à ce que vous quittiez OpenScreen. Si l'application ne répond pas, les modifications de ce projet sont refusées, car l'éditeur enregistrerait sa propre copie par-dessus. - **Une prise n'a pas de transcription tant que l'agent n'en demande pas.** Il appelle `transcribe` avant de couper des mots ou d'activer les sous-titres. Whisper tourne sur votre machine, dans OpenScreen quand l'application est ouverte. - **Une prise pilotée par un script** (Playwright, par exemple) ne déplace jamais le pointeur de l'écran. L'agent transmet à OpenScreen son propre journal des actions avec `setPointerTrack`, et la vidéo a malgré tout un curseur et ses zooms. -- **La skill `openscreen-demo`** enseigne à un agent tout le travail, du storyboard jusqu'à la vidéo finie. Il joint ensuite la vidéo à une pull request, pour que les relecteurs voient le changement sur place, ou rédige un post sur X qu'il ne publie qu'une fois que vous avez dit oui. Ajoutez-la avec `npx skills add getopenscreen/openscreen --skill openscreen-demo`. La recette est [`skills/openscreen-demo/SKILL.md`](https://github.com/getopenscreen/openscreen/blob/main/skills/openscreen-demo/SKILL.md). +- **La skill `openscreen-demo`** enseigne à un agent tout le travail, du storyboard jusqu'à la vidéo finie. Il joint ensuite la vidéo à une pull request, pour que les relecteurs voient le changement sur place, ou rédige un post sur X qu'il ne publie qu'une fois que vous avez dit oui. Ajoutez-la avec `npx skills add getopenscreen/openscreen --skill openscreen-demo`. La recette est [`plugin/skills/openscreen-demo/SKILL.md`](https://github.com/getopenscreen/openscreen/blob/main/plugin/skills/openscreen-demo/SKILL.md). diff --git a/website/i18n/ja/docusaurus-plugin-content-docs/current/ai-editing.md b/website/i18n/ja/docusaurus-plugin-content-docs/current/ai-editing.md index c75822922..bcd2dc82f 100644 --- a/website/i18n/ja/docusaurus-plugin-content-docs/current/ai-editing.md +++ b/website/i18n/ja/docusaurus-plugin-content-docs/current/ai-editing.md @@ -102,4 +102,4 @@ codex mcp add openscreen -- "" mcp - **OpenScreen の起動中は、エージェントはアプリを通して作業します。** エディターで開いているプロジェクトへの編集はすぐにそこに反映され、`Ctrl/Cmd + Z` で元に戻せます。このときエージェントのチェックポイントは OpenScreen を終了するまで有効です。アプリが応答しない場合、そのプロジェクトへの編集は拒否されます。エディターが自分のコピーで上書きしてしまうためです。 - **テイクには、エージェントが求めるまで文字起こしがありません。** エージェントは、単語をカットしたり字幕をオンにしたりする前に `transcribe` を呼び出します。Whisper はあなたのマシン上で実行され、OpenScreen が開いていれば OpenScreen の中で実行されます。 - **スクリプトで操作するテイク**(たとえば Playwright)では、画面のポインターはまったく動きません。エージェントが `setPointerTrack` で自分の操作ログを OpenScreen に渡せば、動画には同じようにカーソルとそのズームが付きます。 -- **`openscreen-demo` スキル**は、絵コンテから完成した動画まで、作業全体をエージェントに教えます。そのあとエージェントは、レビュアーがその場で変更を確認できるよう動画をプルリクエストに添付するか、X への投稿を下書きします。投稿は、あなたが了承してはじめて公開されます。`npx skills add getopenscreen/openscreen --skill openscreen-demo` で追加します。手順は [`skills/openscreen-demo/SKILL.md`](https://github.com/getopenscreen/openscreen/blob/main/skills/openscreen-demo/SKILL.md) にあります。 +- **`openscreen-demo` スキル**は、絵コンテから完成した動画まで、作業全体をエージェントに教えます。そのあとエージェントは、レビュアーがその場で変更を確認できるよう動画をプルリクエストに添付するか、X への投稿を下書きします。投稿は、あなたが了承してはじめて公開されます。`npx skills add getopenscreen/openscreen --skill openscreen-demo` で追加します。手順は [`plugin/skills/openscreen-demo/SKILL.md`](https://github.com/getopenscreen/openscreen/blob/main/plugin/skills/openscreen-demo/SKILL.md) にあります。 diff --git a/website/i18n/pt-BR/docusaurus-plugin-content-docs/current/ai-editing.md b/website/i18n/pt-BR/docusaurus-plugin-content-docs/current/ai-editing.md index ceaf6bb3e..12d4c2f3e 100644 --- a/website/i18n/pt-BR/docusaurus-plugin-content-docs/current/ai-editing.md +++ b/website/i18n/pt-BR/docusaurus-plugin-content-docs/current/ai-editing.md @@ -102,4 +102,4 @@ codex mcp add openscreen -- "" mcp - **Enquanto o OpenScreen está aberto, o agente trabalha por meio do app.** Uma edição do projeto aberto no editor aparece ali na hora, e `Ctrl/Cmd + Z` a desfaz. Os pontos de restauração do agente duram então até você fechar o OpenScreen. Se o app não responder, as edições desse projeto são recusadas, porque o editor salvaria a própria cópia por cima. - **Uma tomada não tem transcrição até o agente pedir uma.** Ele chama `transcribe` antes de cortar palavras ou ativar as legendas. O Whisper roda no seu computador, dentro do OpenScreen quando ele está aberto. - **Uma tomada conduzida por um script** (o Playwright, por exemplo) nunca move o ponteiro da tela. O agente passa ao OpenScreen o próprio registro das ações com `setPointerTrack`, e o vídeo ganha um cursor e seus zooms do mesmo jeito. -- **A skill `openscreen-demo`** ensina a um agente o trabalho inteiro, do storyboard até o vídeo pronto. Depois ele anexa o vídeo a um pull request, para que os revisores vejam a mudança ali mesmo, ou redige um post no X que só publica depois que você disser sim. Adicione-a com `npx skills add getopenscreen/openscreen --skill openscreen-demo`. A receita é [`skills/openscreen-demo/SKILL.md`](https://github.com/getopenscreen/openscreen/blob/main/skills/openscreen-demo/SKILL.md). +- **A skill `openscreen-demo`** ensina a um agente o trabalho inteiro, do storyboard até o vídeo pronto. Depois ele anexa o vídeo a um pull request, para que os revisores vejam a mudança ali mesmo, ou redige um post no X que só publica depois que você disser sim. Adicione-a com `npx skills add getopenscreen/openscreen --skill openscreen-demo`. A receita é [`plugin/skills/openscreen-demo/SKILL.md`](https://github.com/getopenscreen/openscreen/blob/main/plugin/skills/openscreen-demo/SKILL.md). diff --git a/website/i18n/zh-CN/docusaurus-plugin-content-docs/current/ai-editing.md b/website/i18n/zh-CN/docusaurus-plugin-content-docs/current/ai-editing.md index 6cb8c29ba..0a401b412 100644 --- a/website/i18n/zh-CN/docusaurus-plugin-content-docs/current/ai-editing.md +++ b/website/i18n/zh-CN/docusaurus-plugin-content-docs/current/ai-editing.md @@ -102,4 +102,4 @@ codex mcp add openscreen -- "" mcp - **OpenScreen 运行时,AI 代理通过应用进行编辑。** 对编辑器中打开的项目所做的编辑会立即显示在那里,并可用 `Ctrl/Cmd + Z` 撤销。此时 AI 代理的检查点会一直保留到 OpenScreen 退出。如果应用没有响应,对该项目的编辑会被拒绝,因为编辑器会用自己的副本覆盖这些编辑。 - **在 AI 代理请求之前,录制内容没有转录文本。** AI 代理会在删除词语或开启字幕之前调用 `transcribe`。Whisper 在你的电脑上运行,OpenScreen 打开时则在 OpenScreen 中运行。 - **由脚本驱动的录制**(例如 Playwright)永远不会移动屏幕指针。AI 代理通过 `setPointerTrack` 把它自己的操作日志交给 OpenScreen,视频照样会有光标及其缩放。 -- **`openscreen-demo` 技能**会教 AI 代理完成整个工作,从分镜脚本到成品视频。之后,它会把视频附加到拉取请求中,让审阅者直接在那里看到改动;或者起草一条 X 帖子,而且只有在你同意之后,它才会发布这条帖子。使用 `npx skills add getopenscreen/openscreen --skill openscreen-demo` 添加它。具体步骤见 [`skills/openscreen-demo/SKILL.md`](https://github.com/getopenscreen/openscreen/blob/main/skills/openscreen-demo/SKILL.md)。 +- **`openscreen-demo` 技能**会教 AI 代理完成整个工作,从分镜脚本到成品视频。之后,它会把视频附加到拉取请求中,让审阅者直接在那里看到改动;或者起草一条 X 帖子,而且只有在你同意之后,它才会发布这条帖子。使用 `npx skills add getopenscreen/openscreen --skill openscreen-demo` 添加它。具体步骤见 [`plugin/skills/openscreen-demo/SKILL.md`](https://github.com/getopenscreen/openscreen/blob/main/plugin/skills/openscreen-demo/SKILL.md)。 diff --git a/website/i18n/zh-TW/docusaurus-plugin-content-docs/current/ai-editing.md b/website/i18n/zh-TW/docusaurus-plugin-content-docs/current/ai-editing.md index 9fa95883f..c55b5bbc1 100644 --- a/website/i18n/zh-TW/docusaurus-plugin-content-docs/current/ai-editing.md +++ b/website/i18n/zh-TW/docusaurus-plugin-content-docs/current/ai-editing.md @@ -102,4 +102,4 @@ codex mcp add openscreen -- "" mcp - **OpenScreen 執行時,代理會透過應用程式進行編輯。** 對編輯器中開啟的專案所做的編輯會立即顯示在那裡,並可用 `Ctrl/Cmd + Z` 復原。此時代理的檢查點會保留到 OpenScreen 結束為止。如果應用程式沒有回應,對該專案的編輯會被拒絕,因為編輯器會用自己的副本覆寫這些編輯。 - **在代理要求之前,錄影沒有逐字稿。** 代理會在刪除字詞或開啟字幕之前呼叫 `transcribe`。Whisper 在你的電腦上執行,OpenScreen 開啟時則在 OpenScreen 中執行。 - **由腳本驅動的錄影**(例如 Playwright)永遠不會移動螢幕上的指標。代理會用 `setPointerTrack` 把它自己的操作記錄交給 OpenScreen,影片照樣會有游標與其縮放。 -- **`openscreen-demo` 技能**會教代理完成整個工作,從分鏡腳本到完成的影片。之後,它會把影片附加到拉取請求中,讓審閱者直接在那裡看到變更;或者草擬一則 X 貼文,而且只有在你同意之後,它才會發布這則貼文。使用 `npx skills add getopenscreen/openscreen --skill openscreen-demo` 加入它。完整步驟請見 [`skills/openscreen-demo/SKILL.md`](https://github.com/getopenscreen/openscreen/blob/main/skills/openscreen-demo/SKILL.md)。 +- **`openscreen-demo` 技能**會教代理完成整個工作,從分鏡腳本到完成的影片。之後,它會把影片附加到拉取請求中,讓審閱者直接在那裡看到變更;或者草擬一則 X 貼文,而且只有在你同意之後,它才會發布這則貼文。使用 `npx skills add getopenscreen/openscreen --skill openscreen-demo` 加入它。完整步驟請見 [`plugin/skills/openscreen-demo/SKILL.md`](https://github.com/getopenscreen/openscreen/blob/main/plugin/skills/openscreen-demo/SKILL.md)。