MyGo 云音乐
用 Go 与 MyGo 写成的第三方网易云音乐桌面客户端。原生界面,没有 WebView;边下边播,无损与 Hi-Res,逐字歌词与「律动」,刘海播放器。
Translation pending
Detect the center gap in half-frame film scans, then split, rotate, and batch export locally in your browser.
MediaTypeScript · VueGitHub @haizakuraOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
本地优先的胶片扫描工具:识别、切分、旋转、批量导出与半格拼图 | Local-first browser tools for detecting, splitting, rotating, batch-exporting, and composing film scans.
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
一个在浏览器本地运行的胶片图像处理工具合集。图像解码、编辑与导出均在本地完成,不会上传到服务器。 • 支持批量导入 TIFF、JPEG、PNG 和 WebP,也可将文件直接拖入页面。 • 自动识别每张扫描图像的分割位置与中缝宽度,并允许手动微调。 • 两侧画面可分别旋转,也可将当前设置应用到全部图像。 • 支持导出 JPEG、PNG、WebP 与 TIF,并将批量结果打包为 ZIP 下载。 • JPEG 与 WebP 导出支持调整输出质量。Read the full README ↗
一个在浏览器本地运行的胶片图像处理工具合集。图像解码、编辑与导出均在本地完成,不会上传到服务器。
FXF1. 开头的字符串(JSON 经 DEFLATE 压缩后以 base64url 编码),可直接在聊天或网址中传递;导入时会逐项校验并限制在界面允许的范围内,无效的项目保持当前设置。页面顶部的横向菜单用于在三项工具之间切换。工具页面会保留工作状态,切换后返回不会丢失已导入的图像。
Film X 提供一个本地 stdio MCP 服务(工作区包 packages/mcp,名称 film-x-mcp),让 Claude Desktop、ChatGPT Desktop、Codex CLI 等支持 MCP 的桌面 AI Agent 直接运行三项工具并取得生成的图片。
/mcp-renderer,随网站一同部署到 Cloudflare Pages)。服务通过仅监听回环地址(127.0.0.1,随机端口)的反向代理,在无头模式的 Google Chrome 或 Microsoft Edge(playwright-core)中加载该页面,因此输出与网页版由同一份 app/utils 代码绘制(字体、标志、齿孔、EXIF 方向均一致)。GET / HEAD 请求,且不带 Cookie;无头浏览器中会阻止网站的 Service Worker;带内容哈希的 _nuxt 资源在服务运行期间缓存在内存中。每次启动浏览器时都需要能访问该网站(首次任务以及空闲 5 分钟关闭后的下一次任务)。/mcp-renderer);否则首个任务会失败,并提示部署 0.6.0 及以上版本或设置 FILM_X_SITE_URL。compose_film 与 frame_photo 输出 WebP 需网站为 0.7.0 或更高版本:渲染前服务会先检查,网站较旧时工具报错并提示改用 jpeg/png 或部署 0.7.0+,不会把 JPEG 数据写进 .webp 文件。服务与页面共用渲染协议版本,版本不一致时错误信息会指明应更新哪一侧:重新部署网站,或重新构建 / 更新 MCP 服务。FILM_X_SITE_URL 只应指向你信任的 Film X 部署,通常是你自己的部署。FILM_X_BROWSER_PATH 指定其他基于 Chromium 的浏览器可执行文件;浏览器空闲 5 分钟后自动关闭。macOS / Linux:
curl -fsSL https://filmx.nya.run/mcp/install.sh | sh
Windows(PowerShell 5.1 或 7):
irm https://filmx.nya.run/mcp/install.ps1 | iex
网站构建时会在 /mcp/ 下发布 install.sh、install.ps1、server.mjs、package.json 和 SHA256SUMS。仅当网站运行 0.6.0 或更高版本时才可用;在此之前下载会返回 404,脚本会提示网站需运行 Film X 0.6.0 或更高版本。两个脚本的步骤相同:
SHA256SUMS;若与已安装副本一致且已安装的服务仍能启动(server.mjs --version),则提示“已是最新版本”并跳过下载与 npm install(仍会打印配置,以便采用新的 Node.js 路径)。否则从 <站点>/mcp/ 下载文件并校验 SHA-256(SHA256SUMS 也列出 install.sh 与 install.ps1)。npm install --omit=dev 安装依赖(需要能访问 npm 仓库),再确认 server.mjs --version 可运行。~/.film-x-mcp(Windows 为 %LOCALAPPDATA%\film-x-mcp;可用 FILM_X_MCP_HOME 修改):新副本先在目标旁暂存再移入;仅当已有文件夹由之前的安装脚本创建(带标记文件)时才会替换,其他文件夹一律拒绝。node server.mjs --print-config 打印可直接粘贴的 Claude Desktop(JSON)和 ChatGPT Desktop / Codex(~/.codex/config.toml,或 设置 → MCP 服务器 → 添加服务器 → STDIO)配置,其中已填入该 Node.js 的绝对路径和已安装的 server.mjs,并标明各平台的配置文件位置(Claude Desktop 在 Windows 为 %APPDATA%\Claude\claude_desktop_config.json,在 macOS 为 ~/Library/Application Support/Claude/claude_desktop_config.json;Codex / ChatGPT Desktop 在 Windows 为 %USERPROFILE%\.codex\config.toml,在 macOS / Linux 为 ~/.codex/config.toml);当 FILM_X_SITE_URL 不是默认值时,配置中会包含它。脚本不会修改任何 Agent 配置,也不会上传任何内容。在 Windows 上,如需修改环境变量请先设置,例如 $env:FILM_X_MCP_HOME = 'D:\film-x-mcp'。出错时安装脚本会抛出错误而不是退出,因此 PowerShell 窗口不会被关闭。FILM_X_SITE_URL 指定安装来源及渲染所用的网站(默认 https://filmx.nya.run/;仅限 https,http 只允许 localhost)。
install.sh 与 install.ps1 的副本,以及记录安装来源网站的 site-url 文件;直接运行保留的副本即可从该网站更新同一文件夹,无需设置环境变量(设置了 FILM_X_SITE_URL / FILM_X_MCP_HOME 时仍以其为准):macOS / Linux 运行 sh ~/.film-x-mcp/install.sh,Windows 运行 powershell -NoProfile -ExecutionPolicy Bypass -File "%LOCALAPPDATA%\film-x-mcp\install.ps1"。安装 / 更新结束时打印的配置末尾会附上该安装对应的更新命令。node server.mjs --print-config;server.mjs 还支持 --version / --help。mise exec -- pnpm install
mise exec -- pnpm mcp:build
产物仅有 packages/mcp/dist/server.mjs。
图形界面应用不会继承 shell 的 PATH(mise、fish 等),因此配置中必须使用 node 的绝对路径(mise which node 会输出,例如 /Users/you/.local/share/mise/installs/node/24/bin/node)以及 dist/server.mjs 的绝对路径。
安装脚本会打印已填好的此配置。
编辑配置文件(macOS 为 ~/Library/Application Support/Claude/claude_desktop_config.json,也可在 设置 → 开发者 → 编辑配置 中打开),然后重启 Claude Desktop:
{
"mcpServers": {
"film-x": {
"command": "/absolute/path/to/node",
"args": ["/absolute/path/to/film-x/packages/mcp/dist/server.mjs"],
"env": {
"FILM_X_IMAGE_DIR": "/Users/you/Pictures/Scans",
"FILM_X_SITE_URL": "https://filmx.nya.run/"
}
}
}
}
安装脚本会打印已填好的此配置。
ChatGPT Desktop 使用 Codex 宿主的 MCP 配置,与 Codex CLI 和 IDE 扩展共用。可在 设置 → MCP 服务器 → 添加服务器 → STDIO 中填写命令与参数,或编辑 ~/.codex/config.toml:
[mcp_servers.film-x]
command = "/absolute/path/to/node"
args = ["/absolute/path/to/film-x/packages/mcp/dist/server.mjs"]
startup_timeout_sec = 30
# 处理大批量 TIFF 可能超过默认的 60 秒,因此调大工具超时。
tool_timeout_sec = 600
env = { FILM_X_IMAGE_DIR = "/Users/you/Pictures/Scans", FILM_X_SITE_URL = "https://filmx.nya.run/" }
已知问题:部分 ChatGPT Desktop 版本中,本地 MCP 工具能被发现,但不会在普通 Chat 会话中提供(见 openai/codex#38162);在 Codex CLI 和桌面端的 Work 界面中可正常使用。
FILM_X_IMAGE_DIR:list_images 默认列出的文件夹。FILM_X_SITE_URL:网站的基础 URL,默认 https://filmx.nya.run/。必须为 https;仅 localhost / 127.0.0.1 / [::1] 允许 http,用于本地测试。支持子路径部署,例如 https://example.com/film-x/。FILM_X_BROWSER_PATH:浏览器可执行文件路径,用于覆盖自动查找的 Chrome / Edge。FILM_X_MCP_HOME:安装文件夹,默认 ~/.film-x-mcp(仅安装脚本使用)。list_images:列出文件夹中受支持的图片(TIFF、JPEG、PNG、WebP),可递归。read_photo_exif:读取 EXIF、识别品牌、数码或胶片来源及说明字段,与相框工具自动填写的结果一致。split_half_frame:切分一张或多张半格扫描图,输出 <name>_01 / <name>_02(JPEG、PNG、WebP 或 TIF);未指定中心与间隙时自动识别中缝;两侧可分别旋转。compose_film:将 1–2 张照片排成半格或全画幅拼图,支持方向、比例(如 auto 或 4:5)、外边距、画面间距、背景、底纹、填充方式、齿孔带与边缘文字、胶片质感;默认在第一张照片旁输出 film-x-layout.jpg|png|webp;格式可选 JPEG、PNG 或 WebP,quality 适用于 JPEG 与 WebP(0.7–1,更低的值按 0.7 处理)。frame_photo:为一张照片添加相框,可指定模板、品牌、部分设置和/或网页版的 FXF1. 预设码,默认开启 EXIF 自动填写,并可覆盖说明文字;输出 <name>-frame.jpg|png|webp(格式可选 JPEG、PNG 或 WebP,也可用 .webp 结尾的输出路径;quality 适用于 JPEG 与 WebP,0.7–1),并返回最终设置对应的预设码,可直接粘贴到网页版。frame_preset:只解析相框设置或预设码而不渲染(只读)。使用说明:
~/…。聊天中的附件服务端不可见,请直接提供文件或文件夹路径。overwrite: true),也绝不会写入输入文件本身;返回输出路径、像素尺寸和一张小的 JPEG 预览(长边不超过 1024 px),供 Agent 查看(preview: false 可关闭)。应用框架与界面:Nuxt 4 + Vue 3 + shadcn-vue + Reka UI + Tailwind CSS
语言与主题:@nuxtjs/i18n + @nuxtjs/color-mode
图像与压缩:UTIF + fflate
相框字体:@fontsource(OFL 开源字体,仅打包拉丁字符子集)
安装、离线与更新:@vite-pwa/nuxt + Workbox
代码检查与格式化:TypeScript + Oxlint + Oxfmt
MCP:@modelcontextprotocol/sdk + playwright-core(系统 Chrome / Edge)
项目使用 mise 管理 Node.js 版本,当前配置为 Node.js 24。
mise install
mise exec -- pnpm install
mise exec -- pnpm dev
开发服务器默认运行在 http://localhost:3000。
mise exec -- pnpm check
mise exec -- pnpm test:pwa
mise exec -- pnpm test:app
mise exec -- pnpm test:mcp
mise exec -- pnpm build
test:pwa 使用 Node 原生回归测试验证多窗口空闲、忙碌、无响应、关闭、作用域、重试及并发消息下的更新激活条件。
test:app 用 Node 原生测试直接运行 app/utils 中的纯逻辑(切分矩形、EXIF 解析、相框预设码、拼图尺寸边界),无需浏览器;test 依次运行 test:pwa 与 test:app。
test:mcp 会先运行 pnpm generate(其中会构建 MCP 包),再运行 packages/mcp/tests/*.test.mjs:在本地端口上提供生成的 .output/public,通过代理对其运行测试,其中 install.test.mjs 会针对生成的站点在临时文件夹中运行真实的 curl … | sh 一键安装命令,检查打印的配置、启动已安装的服务,并验证原地更新以及对非安装脚本创建的文件夹的拒绝;能找到 PowerShell(FILM_X_PWSH 或 PATH 中的 pwsh)时,还会以 irm … | iex 运行 install.ps1,否则跳过这一项(npm 安装需要能访问 npm 仓库)。测试并使用 git 忽略的 sample/ 文件夹(或 FILM_X_SAMPLE)中的第一张图片进行验证;没有可用图片时会跳过。设置 FILM_X_SITE_URL 后,测试会改为针对已部署的网站运行。
check 会依次执行格式检查、Oxlint 和 Nuxt 类型检查。需要生成静态站点或预览构建结果时,可使用:
mise exec -- pnpm generate
mise exec -- pnpm preview
开发模式不注册 Service Worker。测试生产 PWA 时,请先运行 mise exec -- pnpm build,再运行 mise exec -- pnpm preview;或运行 mise exec -- pnpm generate,通过静态服务器提供 .output/public。测试环境同样需要 HTTPS 或 localhost。
NUXT_APP_BASE_URL 配置子路径;构建和部署时应使用一致的基础路径。sw.js、pwa-update-guard.js、manifest.webmanifest 和 HTML 应设置 Cache-Control: no-cache,让浏览器及时重新验证更新。静态托管平台需自行配置这些响应头。_nuxt hash 资源,避免仍运行旧版本的窗口加载失败。pnpm generate 与 pnpm build 都会先运行 pnpm mcp:build)会在 /mcp/ 下发布 MCP 一键安装文件(install.sh、install.ps1、server.mjs、package.json、SHA256SUMS),它们不会被 PWA Service Worker 预缓存。因此 Pages 的构建命令必须是 pnpm generate(或 pnpm build),不能直接运行 nuxt generate。public/_headers 会让 Pages 以纯文本返回这两个安装脚本,并对 /mcp/ 下的文件始终重新验证。app/pages:半格切分、排版拼图与照片相框页面,以及各自的工作流编排。app/components/film:通用的上传、图像队列、预览、参数控制与导出组件。app/composables:文件队列、自动识别、图像预览和批量导出状态。app/types:图像条目、切分设置与导出格式等共享类型。app/utils:图像解码、检测、裁切、旋转、格式转换、EXIF 读取与相框绘制工具。app/assets/css:全局主题、颜色、基础控件样式与相框字体引入。app/assets/frame-logos:相框使用的相机品牌标志 SVG 及其来源说明。public:favicon、PWA 图标与更新保护脚本 pwa-update-guard.js 等公开静态资源。packages/mcp:本地 MCP 服务(Node):回环代理、文件传输与工具定义;install.sh / install.ps1 为一键安装脚本,scripts/build-site.mjs 将安装文件生成到 dist/site 并在网站构建时发布到 /mcp/。app/pages/mcp-renderer.vue 与 app/utils/agentRenderer.ts。半格切分工作流复用了个人项目 Full2Half 的源码,并在 Film X 的统一页面结构与主题系统中重新组织。
本项目采用 Apache License 2.0(Apache-2.0)许可。