[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-1203":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":8,"htmlUrl":8,"language":9,"languages":8,"totalLinesOfCode":8,"stars":10,"forks":11,"watchers":12,"openIssues":13,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":14,"stars7d":13,"stars30d":15,"stars90d":14,"forks30d":14,"starsTrendScore":14,"compositeScore":16,"rankGlobal":8,"rankLanguage":8,"license":8,"archived":17,"fork":17,"defaultBranch":18,"hasWiki":19,"hasPages":17,"topics":20,"createdAt":8,"pushedAt":8,"updatedAt":21,"readmeContent":22,"aiSummary":23,"trendingCount":14,"starSnapshotCount":14,"syncStatus":13,"lastSyncTime":24,"discoverSource":25},1203,"himi-recorder","jrainlau\u002Fhimi-recorder","jrainlau",null,"Swift",380,21,1,2,0,37,42.73,false,"main",true,[],"2026-06-12 04:00:08","\u003Cp align=\"center\">\n  \u003Cimg src=\"icon.jpg\" width=\"128\" height=\"128\" alt=\"Himi Recorder\" \u002F>\n\u003C\u002Fp>\n\n\u003Ch1 align=\"center\">Himi Recorder\u003C\u002Fh1>\n\n\u003Cp align=\"center\">一款具有隐身能力的 macOS 录屏工具 —— 绕过系统录屏检测机制，让被录制的应用无法感知正在被录屏。常驻菜单栏，框选任意区域，录制为 MP4。\u003C\u002Fp>\n\n## 演示\n\n\nhttps:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F22803ddf-d6dd-4332-963b-76b792cde45e\n\n\n\n\n\n\n## 核心原理\n\n### 为什么不用系统录屏 API？\n\nmacOS 传统的录屏方案（如 `AVCaptureScreenInput`）会触发系统级的录屏指示器，让被录制的应用能够检测到正在被录屏。Himi Recorder 使用 **ScreenCaptureKit** 的 `SCStream` API，以排除自身窗口的方式进行屏幕捕获，录制内容不包含应用自身的 UI 元素（控制条、边框等）。\n\n### 反检测机制\n\n常见的录屏检测手段是扫描所有进程的文件描述符（`proc_pidfdinfo`），检查是否有进程正在写入 `.mp4`\u002F`.mov` 等视频文件。Himi Recorder 通过以下策略规避：\n\n- **伪装文件扩展名**: 录制过程中使用 `.tmp` 后缀写入临时文件，`AVAssetWriter` 的容器格式由 `fileType` 参数决定，不依赖文件扩展名\n- **延迟重命名**: 录制完成后（`finishWriting` 回调后）才将 `.tmp` 重命名为 `.mp4`，确保活跃写入期间不暴露视频文件特征\n\n### 技术架构\n\n```\n┌─────────────────────────────────────────────────┐\n│                  AppDelegate                     │\n│  (录制流程协调：框选 → 倒计时 → 录制 → 预览)       │\n├──────────┬──────────┬───────────┬────────────────┤\n│StatusBar │Selection │ControlBar │  Preview       │\n│Controller│ Overlay  │  Window   │  Window        │\n├──────────┴──────────┴───────────┴────────────────┤\n│           ScreenCaptureEngine (SCStream)          │\n│  ┌─────────────────────────────────────────────┐  │\n│  │ SCShareableContent → SCContentFilter        │  │\n│  │ → SCStream + SCStreamOutput                 │  │\n│  │ → CMSampleBuffer → CGImage                  │  │\n│  └─────────────────────────────────────────────┘  │\n├──────────────────────────────────────────────────┤\n│           VideoWriter (AVAssetWriter)             │\n│  CGImage → CVPixelBuffer → H.264 → MP4           │\n└──────────────────────────────────────────────────┘\n```\n\n- **ScreenCaptureKit (`SCStream`)**: 以流的方式捕获指定屏幕区域，通过 `sourceRect` 只截取框选范围，帧率可配（24\u002F30\u002F60fps）\n- **AVAssetWriter**: 实时将每帧 `CGImage` 转为 `CVPixelBuffer`，编码为 H.264 写入 MP4\n- **多屏幕支持**: 在所有屏幕上显示框选遮罩，自动检测框选区域所在的显示器\n- **坐标系处理**: NSScreen（左下原点）↔ CG\u002FQuartz（左上原点）自动转换\n\n## 功能特性\n\n- **菜单栏常驻**: 轻量后台运行，不占 Dock 位置\n- **任意区域框选**: 支持多屏幕，可拖拽调整框选范围（8 个手柄）\n- **3 秒倒计时**: 录制前倒计时，居中显示在框选区域\n- **录制时长显示**: 控制条实时显示录制时长 + 闪烁红点\n- **视频预览编辑**:\n  - 速度调节：0.5x \u002F 1x \u002F 1.5x \u002F 2x \u002F 2.5x \u002F 3x \u002F 3.5x \u002F 4x\n  - QuickTime 风格裁剪条：拖拽首尾手柄截取片段\n- **导出方式**:\n  - 「导出」按钮：选择路径保存 MP4 到本地\n  - 「✓」按钮：复制到系统剪贴板，可直接粘贴到微信等 IM 发送\n- **快捷键支持**: 可自定义开始\u002F结束录制的全局快捷键\n- **ESC 一键取消**: 在框选、倒计时或录制过程中，随时按 ESC 取消整个录制流程\n- **帧率可选**: 24 \u002F 30 \u002F 60 fps，默认 60fps\n\n## 系统要求\n\n- **macOS 14.0 (Sonoma)** 或更高版本\n- 需要授予「屏幕录制」权限\n\n## 快速开始\n\n### 1. 克隆并构建\n\n```bash\ngit clone \u003Crepo-url> himi-recorder\ncd himi-recorder\n.\u002Fbuild.sh\n```\n\n### 2. 首次运行\n\n```bash\nopen HimiRecorder.app\n```\n\n首次启动时，系统会请求屏幕录制权限：\n1. 点击「打开系统设置」\n2. 在「隐私与安全性 → 屏幕录制」中打开 Himi Recorder 的开关\n3. 重新启动应用\n\n### 3. 使用方法\n\n1. 点击菜单栏图标 → 「开始录制」\n2. 在任意屏幕上**框选**需要录制的区域（可拖拽手柄调整）\n3. 点击控制条上的**「开始录制」**按钮（按 **ESC** 可随时取消）\n4. 等待 **3 秒倒计时**\n5. 录制进行中，控制条显示时长\n6. 点击**「结束录制」**（或按 **ESC** 取消并丢弃录制）\n7. 在预览窗口中：\n   - 调整播放速度\n   - 拖拽裁剪条截取片段\n   - 点击「导出」保存到本地，或点击「✓」复制到剪贴板\n\n## 项目结构\n\n```\nhimi-recorder\u002F\n├── Package.swift                 # SPM 包配置\n├── build.sh                      # 一键构建脚本\n├── HimiRecorder\u002F\n│   ├── App\u002F\n│   │   ├── main.swift            # 应用入口\n│   │   └── AppDelegate.swift     # 录制流程协调\n│   ├── Protocols\u002F                # 可测试性协议抽象\n│   │   ├── ScreenCapturing.swift\n│   │   ├── VideoWriting.swift\n│   │   ├── SettingsStoring.swift\n│   │   └── HotKeyRegistering.swift\n│   ├── Core\u002F\n│   │   ├── ScreenCaptureEngine.swift  # SCStream 截图引擎\n│   │   └── VideoWriter.swift          # AVAssetWriter 视频编码\n│   ├── Controllers\u002F\n│   │   ├── StatusBarController.swift\n│   │   ├── SelectionOverlayWindowController.swift\n│   │   ├── PreviewWindowController.swift\n│   │   └── SettingsWindowController.swift\n│   ├── Views\u002F\n│   │   ├── SelectionOverlayView.swift\n│   │   ├── ControlBarView.swift\n│   │   ├── CountdownView.swift\n│   │   └── ShortcutRecorderView.swift\n│   ├── Managers\u002F\n│   │   ├── SettingsManager.swift\n│   │   └── HotKeyManager.swift\n│   └── Utils\u002F\n│       ├── CGImage+PixelBuffer.swift\n│       └── PermissionHelper.swift\n├── HimiRecorderTests\u002F            # 100+ 单元测试\n│   ├── SettingsManagerTests.swift\n│   ├── SelectionGeometryTests.swift\n│   ├── ControlBarTests.swift\n│   ├── ScreenCaptureEngineTests.swift\n│   ├── VideoWriterTests.swift\n│   ├── HotKeyManagerTests.swift\n│   ├── CGImagePixelBufferTests.swift\n│   ├── E2ERecordingFlowTests.swift\n│   └── Mocks\u002F\n├── DetectorTestApp\u002F              # 录屏检测测试工具 (详见 DetectorTestApp\u002FREADME.md)\n└── HimiRecorder.app\u002F             # 构建产物\n```\n\n## Recording Detector — 隐身效果测试工具\n\n项目附带一个独立的测试 APP [Recording Detector](DetectorTestApp\u002FREADME.md)，用于验证 Himi Recorder 的隐身能力。它通过 `proc_pidfdinfo` 扫描所有进程的文件描述符，检测是否有进程正在写入视频文件（`.mp4`\u002F`.mov` 等），能够检测到 QQ、OBS 等常见录屏软件。\n\nHimi Recorder 的规避策略：录制期间使用 `.tmp` 后缀写入临时文件，录制完成后才重命名为 `.mp4`，因此在录制过程中不会被视频文件写入检测捕获。\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"imgs\u002FQQ20260417-104040.png\" width=\"360\" alt=\"未检测到录屏\" \u002F>\n  \u003Cimg src=\"imgs\u002FQQ20260417-104135.png\" width=\"360\" alt=\"检测到 QQ 录屏\" \u002F>\n\u003C\u002Fp>\n\n```bash\ncd DetectorTestApp && .\u002Fbuild.sh && open DetectorTestApp.app\n```\n\n> 详细说明见 [DetectorTestApp\u002FREADME.md](DetectorTestApp\u002FREADME.md)\n\n## 开发\n\n```bash\n# 构建\nswift build\n\n# 运行测试\nswift test\n\n# Release 构建 + 打包 APP\n.\u002Fbuild.sh\n```\n\n## 许可证\n\nMIT License\n\n## 免责声明\n\n本项目仅供技术学习与交流使用，旨在探索 macOS 屏幕捕获与反检测的技术实现。\n\n**严禁**将本软件用于以下行为：\n\n- 未经他人同意录制其屏幕内容，侵犯他人隐私权\n- 盗录影视、游戏、直播等受著作权法保护的内容\n- 规避数字版权保护（DRM）措施，进行盗版传播\n- 任何违反《中华人民共和国著作权法》《中华人民共和国个人信息保护法》《中华人民共和国网络安全法》及其他适用法律法规的行为\n\n使用者应自行确保其使用行为合法合规，并对使用本软件产生的一切后果承担全部法律责任。本项目作者不对任何因使用或滥用本软件而导致的直接或间接损失、法律纠纷承担任何责任。\n\n**下载、安装或使用本软件即表示您已阅读并同意上述声明。**\n\n## Star History\n\n\u003Ca href=\"https:\u002F\u002Fwww.star-history.com\u002F?repos=jrainlau%2Fhimi-recorder&type=date&logscale=&legend=bottom-right\">\n \u003Cpicture>\n   \u003Csource media=\"(prefers-color-scheme: dark)\" srcset=\"https:\u002F\u002Fapi.star-history.com\u002Fchart?repos=jrainlau\u002Fhimi-recorder&type=date&theme=dark&logscale&legend=top-left\" \u002F>\n   \u003Csource media=\"(prefers-color-scheme: light)\" srcset=\"https:\u002F\u002Fapi.star-history.com\u002Fchart?repos=jrainlau\u002Fhimi-recorder&type=date&logscale&legend=top-left\" \u002F>\n   \u003Cimg alt=\"Star History Chart\" src=\"https:\u002F\u002Fapi.star-history.com\u002Fchart?repos=jrainlau\u002Fhimi-recorder&type=date&logscale&legend=top-left\" \u002F>\n \u003C\u002Fpicture>\n\u003C\u002Fa>\n","Himi Recorder 是一款专为 macOS 设计的录屏工具，能够绕过系统录屏检测机制，让被录制的应用无法感知正在被录屏。其核心功能包括使用 ScreenCaptureKit 的 SCStream API 进行屏幕捕获，支持任意区域框选、3秒倒计时、实时显示录制时长以及视频预览编辑等。技术上，Himi Recorder 通过伪装文件扩展名和延迟重命名策略来规避常见的录屏检测手段。该工具适用于需要在不被察觉的情况下进行屏幕录制的场景，如软件测试、教程制作或隐私保护等。简洁的菜单栏常驻设计和多屏幕支持使其成为高效且易用的录屏解决方案。","2026-06-11 02:42:19","CREATED_QUERY"]