[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-81524":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":23,"hasPages":23,"topics":25,"createdAt":10,"pushedAt":10,"updatedAt":30,"readmeContent":31,"aiSummary":32,"trendingCount":16,"starSnapshotCount":16,"syncStatus":33,"lastSyncTime":34,"discoverSource":35},81524,"cameo","hAcKlyc\u002Fcameo","hAcKlyc","An image-first canvas for your local Codex agent.","https:\u002F\u002Fcameo.ink",null,"TypeScript",46,10,27,1,0,5,11,19,15,3.12,"GNU Affero General Public License v3.0",false,"main",[26,27,28,29],"agentic-ai","canvas","codex","codex-cli","2026-06-12 02:04:16","\u003Cp align=\"center\">\n  \u003Cimg src=\"src-tauri\u002Ficons\u002F128x128@2x.png\" width=\"88\" alt=\"Cameo\" \u002F>\n\u003C\u002Fp>\n\n\u003Ch1 align=\"center\">Cameo\u003C\u002Fh1>\n\n\u003Cp align=\"center\">\n  \u003Cb>An image-first canvas for your local Codex agent.\u003C\u002Fb>\u003Cbr\u002F>\n  Point at images, mark them up, and talk to Codex — generations and edits fan out across an infinite canvas.\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fcameo.ink\">\u003Cb>cameo.ink\u003C\u002Fb>\u003C\u002Fa> &nbsp;·&nbsp; \u003Ca href=\"#english\">English\u003C\u002Fa> &nbsp;·&nbsp; \u003Ca href=\"#中文\">中文\u003C\u002Fa> &nbsp;·&nbsp; \u003Ca href=\".\u002FLICENSE\">License (AGPL-3.0)\u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fcameo.ink\">\u003Cimg src=\"docs\u002Flanding-en.png\" width=\"840\" alt=\"Cameo — the image canvas your Codex was missing\" \u002F>\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n\u003Ca id=\"english\">\u003C\u002Fa>\n\n## What is Cameo?\n\n**Cameo is a native desktop canvas that gives your local Codex agent hands and eyes for image work.**\n\nChat is a terrible interface for images. You can't point at the corner of a photo and say \"this part.\" You can't see three variations side by side. You can't keep the original next to the edit. Codex can already generate and edit images — but a single scrolling chat column flattens all of that into a thread you lose track of.\n\nCameo puts that capability into a **spatial canvas** instead. You open a folder, its images lay out on an infinite board, and you work the way you actually think about images: select one, draw a box on the part you mean, type an instruction, and the result lands **right next to the source** so the lineage is visible. The conversation stays continuous — \"warmer,\" \"now change the background,\" \"do that to these three\" — because there's one ongoing Codex session per board.\n\nCameo is **the hands and eyes, not the brain.** It does not host a model, sell tokens, or orchestrate agents. All generation and understanding stay with Codex (using your existing ChatGPT subscription — no API key). Cameo owns only what a chat UI structurally can't: spatial layout, file identity, non-destructive lineage, and \"what you're pointing at.\"\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"docs\u002Fapp-en.png\" width=\"840\" alt=\"The Cameo desktop app — infinite canvas on the left, a continuous Codex session on the right\" \u002F>\n\u003C\u002Fp>\n\n## Key ideas\n\n- **Board = folder.** A board maps 1:1 to a local folder, which is also the agent's working directory. Your files stay yours, on disk, in a format any other tool can read.\n- **Non-destructive, always.** Originals are never overwritten. Every output is a new image with visible lineage — position (left → right) *is* the history.\n- **Point, don't describe.** Mark a region and it's sent to the agent as an image overlay — runtime-agnostic, no structured-mask API required. Any model that can see an image can use it.\n- **One continuous session per board.** Codex holds the conversation (it's stateful and can ask clarifying questions); Cameo mirrors the timeline. Not per-image one-shots.\n- **Provide context, let the agent reason.** Cameo injects what you selected and gets out of the way. No workflow state machines re-implementing intent.\n\n## Features\n\n- Infinite **PixiJS \u002F WebGL2 canvas** — pan, zoom, marquee-select, drag, resize, rotate, minimap, fit-all \u002F zoom-to-selection.\n- **Region marks** (rect \u002F ellipse \u002F arrow \u002F brush \u002F point) with per-mark notes, sent as an overlay image.\n- **Presets** for one-tap operations (e.g. remove background, upscale) plus free-form instructions.\n- **Compare** outputs with a before\u002Fafter slider or 2-up view.\n- **Crop, copy, reveal in file manager, export.**\n- **Undo \u002F redo**, **multiple sessions** per board with full timeline persistence, and a **workspaces** sidebar (recent boards, restore-last).\n- **Continuous Codex session** with streaming responses, plan\u002Ftool visibility, and clarifying-question support.\n- **Per-board generation controls** right in the input box — pick the model, intelligence (reasoning effort), and speed, mirroring the official Codex app.\n- **Settings + network proxy** that covers *all* of Cameo's traffic (Codex, gallery, telemetry, updates — not just the agent), unified logging, and **i18n (English \u002F 中文)**.\n- Cross-platform: **Windows, macOS (Apple Silicon + Intel)**.\n\n## How it works\n\nCameo is **Tauri 2 (Rust) + React + PixiJS v8**. The web layer owns chrome; a GPU compositor owns the canvas (Figma-style layering). Images are fed to the canvas through a custom Cameo image protocol with platform-specific Tauri URL shapes, path-normalization, and traversal guards; Rust handles decode \u002F downscale \u002F mipmaps off the main thread.\n\nCodex runs as a long-lived **`codex app-server`** sidecar (JSON-RPC 2.0 over stdio) — one process per board, so the session is genuinely stateful. Marked regions are flattened to an overlay image and sent alongside the clean image as file paths the agent reads itself. Image outputs (`imageGeneration` items, whether a saved path or base64) are copied into the board folder, minted as new content-addressed assets, and placed to the right of the source.\n\n## Gallery\n\nA browsable gallery of prompts and results lives at **[cameo.ink\u002Fgallery](https:\u002F\u002Fcameo.ink\u002Fgallery)** (also reachable from inside the app).\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"docs\u002Fgallery-en.png\" width=\"840\" alt=\"The Cameo prompt gallery\" \u002F>\n\u003C\u002Fp>\n\n## Quick start\n\n> **Just want the app?** Download a prebuilt release from **[cameo.ink](https:\u002F\u002Fcameo.ink)**. The steps below are for building from source.\n\nPrerequisites (all platforms):\n\n- **Codex CLI** installed and signed in: `codex login` (uses your ChatGPT subscription — no API key). Verify with `codex --version`. Cameo drives your own Codex — it is **not** bundled.\n- Node 20+ and **pnpm**, plus the **Rust** toolchain (rustup) for Tauri 2.\n- **macOS**: Xcode Command Line Tools (`xcode-select --install`).\n- **Windows**: Visual Studio Build Tools with the *Desktop development with C++* workload, and the WebView2 runtime (preinstalled on Windows 11).\n\nOne-time setup (checks toolchain, adds Rust targets, installs deps):\n\n```bash\n.\u002Fsetup.sh            # macOS (Apple Silicon + Intel)\n.\\setup.ps1           # Windows (PowerShell)\n```\n\nRun the app live:\n\n```bash\npnpm install\npnpm tauri dev        # launches the desktop app with hot reload\n```\n\nThen in the app:\n\n1. **Open a folder as a board** — its images appear on the canvas. Drag\u002Fdrop, paste, or \"Add images…\" to bring more in.\n2. **Pan \u002F zoom**: two-finger scroll pans, ⌘\u002FCtrl + scroll zooms. Click to select, shift-drag to marquee-select, drag to move.\n3. **Mark a region** (optional): press `R` (or the ▭ tool), drag a box on an image; `V` returns to select.\n4. **Ask Codex**: with image(s) selected, type an instruction (or hit a preset) and Send. A marked region is sent as an overlay.\n5. The generated image appears **to the right of the source** — keep going (\"warmer\", \"now change the background\"). The session is continuous.\n\n### Build & package\n\nBuild scripts live at the repo root (`.sh` = macOS, `.ps1` = Windows). Cameo bundles no sidecar, so macOS releases ship a single **universal** binary (one `.dmg` runs on Apple Silicon **and** Intel).\n\n| | macOS | Windows |\n|---|---|---|\n| First-time setup | `.\u002Fsetup.sh` | `.\\setup.ps1` |\n| Dev build (unsigned, fast) | `.\u002Fbuild_dev.sh` → `Cameo.app` | `.\\build_dev.ps1` → `cameo.exe` |\n| Release build | `.\u002Fbuild_release.sh` → universal `.dmg` | `.\\build_release.ps1` → NSIS installer |\n\nRelease signing is optional and read from `.env` (macOS) — see [`.env.example`](.\u002F.env.example). Without it, builds are unsigned (fine for local testing; blocked by Gatekeeper\u002FSmartScreen elsewhere). Tauri can't cross-compile between macOS and Windows, so each `build_release` must run on its own OS.\n\n## Status\n\n**v1 core loop built (dev).** The full path works end-to-end: open a folder → render on the canvas → mark a region → ask Codex → output lands with lineage → continue the conversation. Active development on branch `feat\u002Fv1-bootstrap`.\n\n## License & disclaimer\n\nLicensed under **[AGPL-3.0-or-later](.\u002FLICENSE)**. You may use, modify, and redistribute Cameo under its terms; if you run a modified version as a network service, the AGPL requires you to offer your source to its users.\n\nCameo is an independent, unofficial tool. It drives the Codex CLI but is **not** affiliated with, endorsed by, or sponsored by OpenAI. \"Codex\" and related names belong to their respective owners.\n\n---\n\n\u003Ca id=\"中文\">\u003C\u002Fa>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fcameo.ink\">\u003Cimg src=\"docs\u002Flanding-zh.png\" width=\"840\" alt=\"Cameo — 你的 Codex，就差这块画布\" \u002F>\u003C\u002Fa>\n\u003C\u002Fp>\n\n## Cameo 是什么？\n\n**Cameo 是一个原生桌面画布，给你本地的 Codex agent 装上做图用的「手」和「眼」。**\n\n聊天框是处理图片最糟糕的界面。你没法指着照片的某个角说「就这块」；没法把三个变体并排着看；没法让原图和改后图挨在一起对照。Codex 本来就能生图、改图——但一条不断下滚的聊天列把这一切压扁成了一根你很快就跟丢的线索。\n\nCameo 把这份能力搬进了**空间画布**。你打开一个文件夹，里面的图在无限画布上铺开，然后用你真正思考图片的方式去工作：选中一张、在你想改的部位画个框、敲一句指令，结果就落在**源图右边**，血缘一目了然。对话是连续的——「再暖一点」「现在换个背景」「把这三张都这么处理」——因为每个 board 对应一条持续的 Codex 会话。\n\nCameo 是**手和眼，不是脑子**。它不托管模型、不卖 token、不在 agent 层做编排。所有生成与理解都交给 Codex（用你已有的 ChatGPT 订阅，无需 API key）。Cameo 只负责聊天 UI 结构上做不到的事：空间布局、文件身份、非破坏血缘，以及「你正指着什么」。\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"docs\u002Fapp-zh.png\" width=\"840\" alt=\"Cameo 桌面应用——左边无限画布，右边连续的 Codex 会话\" \u002F>\n\u003C\u002Fp>\n\n## 核心理念\n\n- **Board = 文件夹。** 一个 board 与一个本地文件夹 1:1，它也是 agent 的工作目录。文件始终是你的、在磁盘上、任何工具都能读。\n- **永远非破坏。** 原图永不被改写。每次产出都是带可见血缘的新图——位置（左→右）本身就是历史。\n- **指，而不是描述。** 圈选的区域以图片蒙层的形式发给 agent——与 runtime 无关、不依赖结构化 mask API。只要模型能看图就能用。\n- **每个 board 一条连续会话。** 对话由 Codex 持有（有状态、会反问），Cameo 镜像时间线。不是逐图一次性问答。\n- **提供上下文，推理交给 agent。** Cameo 注入你选中的东西然后让路。不用状态机去复刻意图。\n\n## 功能\n\n- 无限 **PixiJS \u002F WebGL2 画布**——平移、缩放、框选、拖动、缩放旋转、小地图、适应全部 \u002F 缩放到选区。\n- **区域标记**（矩形 \u002F 椭圆 \u002F 箭头 \u002F 笔刷 \u002F 点），每个标记可加备注，作为蒙层图发送。\n- **预设**一键操作（如去背景、变高清）+ 自由指令。\n- **对比**：前后滑块或左右并排。\n- **裁切、复制、在文件管理器中显示、导出。**\n- **撤销 \u002F 重做**，每个 board 支持**多会话**且完整时间线持久化，以及**工作区**侧栏（最近 board、恢复上次）。\n- **连续 Codex 会话**：流式输出、plan\u002F工具过程可见、支持澄清反问。\n- **输入框内的 per-board 生成档位**——直接选模型、智能（推理力度）、速度，对照官方 Codex app。\n- **设置 + 网络代理**,覆盖 Cameo *所有*流量（Codex、画廊、埋点、更新——不只是 agent），统一日志、**国际化（English \u002F 中文）**。\n- 跨平台：**Windows、macOS（Apple Silicon + Intel）**。\n\n## 工作原理\n\nCameo = **Tauri 2（Rust）+ React + PixiJS v8**。Web 层管 chrome，GPU 合成器管画布（Figma 式分层）。图片经自定义 Cameo 图片协议喂给画布（Tauri 跨平台 URL 形态 + 路径规范化 + 防穿越），Rust 在主线程外负责解码 \u002F 降采样 \u002F mipmap。\n\nCodex 作为长驻 **`codex app-server`** sidecar 运行（JSON-RPC 2.0 over stdio）——每个 board 一个进程，所以会话是真正有状态的。圈选区域会拍平成一张蒙层图，连同干净原图一起以文件路径的形式发给 agent 自读。图像产出（`imageGeneration`，无论是 savedPath 还是 base64）会被复制进 board 文件夹、铸成内容寻址的新 asset、落在源图右侧。\n\n## 画廊\n\n一个可浏览的提示词与作品画廊在 **[cameo.ink\u002Fgallery](https:\u002F\u002Fcameo.ink\u002Fgallery)**（应用内也能进）。\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"docs\u002Fgallery-zh.png\" width=\"840\" alt=\"Cameo 提示词画廊\" \u002F>\n\u003C\u002Fp>\n\n## 快速开始\n\n> **只想用 app？** 到 **[cameo.ink](https:\u002F\u002Fcameo.ink)** 下载预编译版本。下面是从源码构建的步骤。\n\n前置（所有平台）：\n\n- **Codex CLI** 已安装并登录：`codex login`（用你的 ChatGPT 订阅，无需 API key）。用 `codex --version` 验证。Cameo 驱动你自己的 Codex——**不打包**它。\n- Node 20+ 与 **pnpm**，以及 Tauri 2 所需的 **Rust** 工具链（rustup）。\n- **macOS**：Xcode 命令行工具（`xcode-select --install`）。\n- **Windows**：带 *Desktop development with C++* 工作负载的 Visual Studio Build Tools，以及 WebView2 运行时（Windows 11 已预装）。\n\n一次性安装（检查工具链、添加 Rust target、装依赖）：\n\n```bash\n.\u002Fsetup.sh            # macOS（Apple Silicon + Intel）\n.\\setup.ps1           # Windows（PowerShell）\n```\n\n直接运行：\n\n```bash\npnpm install\npnpm tauri dev        # 启动桌面 app，热重载\n```\n\n然后在 app 里：\n\n1. **打开一个文件夹作为 board**——里面的图出现在画布上。拖拽、粘贴或「添加图片…」带入更多。\n2. **平移 \u002F 缩放**：双指滚动平移，⌘\u002FCtrl + 滚动缩放。点击选中，shift 拖拽框选，拖动移动。\n3. **标记区域**（可选）：按 `R`（或 ▭ 工具）在图上拖一个框；`V` 回到选择。\n4. **问 Codex**：选中图后输入指令（或点预设）发送。标记的区域会作为蒙层一起发出。\n5. 生成图出现在**源图右侧**——继续就好（「再暖一点」「现在换个背景」）。会话是连续的。\n\n### 构建与打包\n\n构建脚本在仓库根目录（`.sh` = macOS，`.ps1` = Windows）。Cameo 不打包 sidecar，所以 macOS release 出一份 **universal** 二进制（一个 `.dmg` 同时跑 Apple Silicon 和 Intel）。\n\n| | macOS | Windows |\n|---|---|---|\n| 首次安装 | `.\u002Fsetup.sh` | `.\\setup.ps1` |\n| 开发包（不签名，快） | `.\u002Fbuild_dev.sh` → `Cameo.app` | `.\\build_dev.ps1` → `cameo.exe` |\n| 发布包 | `.\u002Fbuild_release.sh` → universal `.dmg` | `.\\build_release.ps1` → NSIS 安装器 |\n\n发布签名可选，从 `.env` 读取（macOS）——见 [`.env.example`](.\u002F.env.example)。不配则不签名（本机测试没问题；在别的机器上会被 Gatekeeper\u002FSmartScreen 拦）。Tauri 不能在 macOS 与 Windows 之间交叉编译，所以每个 `build_release` 必须在各自的系统上跑。\n\n## 状态\n\n**v1 核心闭环已实现（dev）。** 全链路跑通：开文件夹 → 渲染到画布 → 标记区域 → 问 Codex → 产出带血缘落地 → 续聊。开发分支 `feat\u002Fv1-bootstrap`。\n\n## 许可与声明\n\n采用 **[AGPL-3.0-or-later](.\u002FLICENSE)** 许可。你可以在其条款下使用、修改、再分发 Cameo；若你将修改版作为网络服务运行，AGPL 要求你向其用户提供源码。\n\nCameo 是独立的非官方工具。它驱动 Codex CLI，但**不**隶属于 OpenAI，也未获其背书或赞助。「Codex」及相关名称归各自所有者所有。\n","Cameo 是一个以图像为主的本地桌面画布，专为本地Codex代理设计。其核心功能包括无限扩展的画布、非破坏性的图像处理以及直观的区域标记工具，允许用户直接在图片上绘制并指示Codex进行修改或生成新内容，所有操作结果均保持与原图相邻以清晰展示演变过程。该工具采用TypeScript开发，并通过空间布局而非文字聊天的方式改进了与AI模型交互时处理图像的工作流程。适用于需要频繁使用AI辅助进行图像编辑和创意工作的场景，如设计师、艺术家或者任何希望提高图像工作流程效率的人士。",2,"2026-06-11 04:05:22","CREATED_QUERY"]