Skip to content

About

No description, website, or topics provided.

Resources

Security policy

Stars

8 stars

Watchers

0 watching

Forks

Latest commit

 

History

90 Commits

Folders and files

Repository files navigation

TrueToneCap / 真色截图

v0.3.11 · Windows 11 24H2+ · WinUI 3 · .NET 11 · WGC · Microsoft Store · GitHub Release

TrueToneCap is a scalpel built for pixels. / TrueToneCap 是一把为像素而生的手术刀。

In the gap where HDR displays are becoming ubiquitous yet screenshot tools remain stuck in the SDR era, TrueToneCap takes a different path — capturing the display's Float16 framebuffer directly from the DXGI back-end, preserving every nit of luminance, then gracefully tone-mapping it into the visible range via GPU shaders.

在这个 HDR 显示器逐渐普及、但截图工具仍停留在 SDR 时代的间隙里,TrueToneCap 选择了不同的路——从 DXGI 底层直接捕获显示器的 Float16 浮点帧缓冲,保留每一尼特的光照信息,再用 GPU 色调映射将其优雅地落入人眼可见的范围。

🌐 English

Selection, annotation, OCR, translation — everything happens in real-time on a full-screen overlay after pressing a hotkey, with no pop-ups and no context switches. Screenshots export to PNG (mathematically lossless), JPEG (with an optional Ultra HDR gain map), AVIF, JPEG XL, and more. Translation works out of the box through four free public endpoints (Edge / Bing / MyMemory / Google); Youdao's official API (bring your own credentials) and custom LLM endpoints rank ahead of them. Don't want recognized text sent to third parties? Uncheck the free endpoints in Settings → Translation and no request is made at all.

🌐 简体中文

框选、标注、OCR、翻译——所有操作都在按下快捷键后的全屏覆盖层上实时完成,无需弹窗、无需跳转。截图可以导出为 PNG(数学无损)、JPEG(可附 Ultra HDR 增益图)、AVIF、JPEG XL 等格式。翻译开箱即用:不需要注册、不需要填任何密钥,默认走四条免费公共端点(Edge / 必应 / MyMemory / Google,按本机实测延迟排序);愿意自备有道官方凭据或自定义 LLM 的用户,它们排在免费端点之前。不想把识别到的文字发给第三方,可在 设置 → 翻译 取消勾选(取消后这几条连请求都不会发)。


Quick Start / 快速开始

Step / 步骤 English 中文
1 Install from Microsoft Store (search "TrueToneCap"), or download a GitHub Release archive 从 Microsoft Store 安装(搜 "TrueToneCap 真色截图"),或从 GitHub Release 下载压缩包
2 Extract the archive (portable edition only) 解压压缩包(仅便携版需要)
3 Run TrueToneCap.exe 双击运行 TrueToneCap.exe
4 Press Ctrl+Shift+S to capture, Ctrl+Shift+G to record 按 Ctrl+Shift+S 截图、Ctrl+Shift+G 录制动图

自行出包(维护者):.\Publish.ps1 -Tag 出包并打 v<版本> 标签,再 .\scripts\pack.ps1 -PackageDir publish\TrueToneCap-v<版本> 压缩。 文件名规则:TrueToneCap-v<版本>-win-x64.7z(未安装 7-Zip 时自动退化为同名 .zip)。 压缩包带同名 .sha256:PowerShell 用 Get-FileHash <文件>、cmd 用 certutil -hashfile <文件> SHA256、 Git-Bash / Linux 用 sha256sum -c <文件>.sha256。 解压后包内另有一份逐文件哈希 SHA256SUMS.txt(UTF-8 无 BOM / LF / 正斜杠, 与 coreutils 惯例一致),在包目录下 sha256sum -c SHA256SUMS.txt 即可整包校验; 只有末行(指向压缩包本身)要在压缩包的上一级目录才验得到 —— 日常用上面那份 .sha256 更省事。

System / 系统: Windows 11 24H2+ · HDR display optional / HDR 显示器可选


Features / 功能

Feature / 功能 English 中文
📷 Capture WGC (Windows.Graphics.Capture), Float16 HDR / BGRA8 SDR, zero-latency pooling WGC 捕获,Float16 HDR / BGRA8 SDR,池化零延迟
🎨 Color Per-monitor advanced-color detection, ICC detect & bake, target gamut: follow-display / Rec.709 / Rec.2020, ACM state readout 逐屏高级色能力探测,ICC 检测与烘焙,可选目标色域:跟随显示器 / Rec.709 / Rec.2020,ACM 状态探测
✏️ Annotate Rect, Ellipse, Arrow, Pen, Text, Mosaic — full-screen overlay 矩形、椭圆、箭头、画笔、文字、马赛克 — 全屏覆盖层
🖼️ Export PNG (lossless HDR) · JPEG (optional Ultra HDR gain map) · JPEG XL · AVIF (NVENC / MFT-QSV / libaom / SVT-AV1) · WebP · TIFF PNG(无损 HDR)· JPEG(可附 Ultra HDR 增益图)· JPEG XL · AVIF(NVENC / 系统 MFT(QSV) / libaom / SVT-AV1)· WebP · TIFF
🔤 OCR PP-OCRv6 (ONNX, DirectML/CPU) + Windows OCR fallback · zh/en strongest, ja needs ≥24px, ko unsupported PP-OCRv6(ONNX,DirectML/CPU)+ Windows OCR 兜底 · 中/英文最准,日文需字高 ≥24px,韩文不支持(转系统 OCR)
🔳 QR recognition Multi-code local decode (ZXing.Net) · plain-text display with control-char/bidi escaping · open action whitelisted to http/https and only on an explicit click — dangerous schemes (file:/ms-msdt:/…) are red-flagged and never executed 多码本机解码(ZXing.Net)· 明文展示,控制字符/双向符转义可见 · 仅 http/https 且显式点击才允许"打开链接",危险协议(file:/ms-msdt:/…)红牌展示且永不执行
🌐 Translate Custom LLM → Youdao official API → free public endpoints (Edge / Bing / MyMemory / Google — on by default, opt-out in Settings) 自定义 LLM → 有道官方开放平台 → 免费公共端点(Edge / 必应 / MyMemory / Google——默认启用,设置里可关闭)
⌨️ Hotkeys Recordable · tray minimize · autostart 可录制 · 托盘最小化 · 开机启动
🎬 Animated capture Ctrl+Shift+G recording → WebP / GIF / APNG / MP4 (ffmpeg) Ctrl+Shift+G 动图录制 → WebP / GIF / APNG / MP4(ffmpeg)

Output Formats / 输出格式

Format HDR Bit Depth Encoder / 编码器
PNG ✅ cICP 8/10/12/16-bit 托管编码器 (ManagedPngEncoder)
JPEG XL ✅ 8/10/16-bit(界面下拉三档;HDR 走 16-bit 中转) cjxl.exe 子进程 (NativeJxlEncoder) — JxlNet 依赖已移除
AVIF ✅ 8/10/12-bit(SDR 上限按编码器;HDR 以 10 为下限,libaom 可到 12) libaom / SVT-AV1 / NVENC / 系统 MFT(QSV)
WebP ❌ 8-bit cwebp.exe;缺它时整份产物换成 PNG
JPEG 单图 ❌;打开「附带增益图」⇒ ✅ Ultra HDR(HDR 在增益图里,容器不写 PQ) 8-bit(容器恒 8) jpegli(实现名,界面上这一档就叫 JPEG);增益图是 JPEG 卡片里的开关,「目标色域」选的就是底图色域
TIFF ✅ 8/16-bit 托管编码器

表里的位深是界面能选到的档,不是容器理论上限;实际生效值还要过编码器能力协商 (AvifEncoderCapabilities 等),协商改动会显式提示,不静默改参数。


Build / 构建

环境要求 / Prerequisites

组件 版本 说明
.NET SDK 11.0.100-preview.7.26381.103 global.json 里写的是下限(rollForward: latestPatch、allowPrerelease: true)⇒ 本机实际解析到 11.0.100-rc.1.26425.128;需含 Windows 桌面负载
Windows SDK ≥ 10.0.26100.0 需要 fxc.exe 编译 HLSL 着色器;构建脚本会枚举已安装的最高版本,不要写死具体版本号
GPU 支持 D3D11 的显卡 色彩管线与硬件编码必需

⚠️ Windows SDK 是硬依赖,不是可选:编译后的着色器 *.cso 被 .gitignore 排除、 不入库,全新克隆必须由 CompileShaders Target 用 fxc.exe 现场编译。 没装 Windows SDK 时构建会直接失败(若本机已有 .cso,Target 会跳过,构建仍可通过)。 另注:编译器是 fxc(SM5.0) 而非 dxc —— dxc 产出的 SM6/DXIL 会被 D3D11 CreateShader 以 E_INVALIDARG 拒绝,详见 Shaders/CompileShaders.ps1 头部。

公共 MSBuild 属性(TargetFramework / LangVersion / PlatformTarget 等)统一声明于 仓库根目录的 Directory.Build.props,各 .csproj 不再重复声明。

依赖版本统一声明于 Directory.Packages.props(NuGet 集中式包管理 / CPM), 各 .csproj 的 <PackageReference> 只写包名、不写 Version。升级依赖只需改一处。

依赖锁定:已启用 packages.lock.json(RestorePackagesWithLockFile=true), 锁死完整传递依赖图以保证可复现还原。锁定文件必须提交到版本控制。 升级依赖后重新还原以刷新锁定文件。

构建与运行 / Build & Run

dotnet restore
dotnet run --project src\TrueToneCap.App -c Release

测试 / Tests

dotnet run --project src\TrueToneCap.Test -- --all   # 全部 9 个套件
dotnet run --project src\TrueToneCap.Test -- --unit-tests   # 单套件示例

⚠️ 不要用 dotnet test。 测试项目未引用 Microsoft.NET.Test.Sdk, dotnet test 会以退出码 0 静默执行零个测试("假绿灯")——看似通过,实则什么都没跑。 唯一有效入口就是上面的 dotnet run --project src\TrueToneCap.Test -- <套件参数>。 CI 脚本若照常规写 dotnet test,会全程绿灯放行而毫无质量保障。

另注:测试运行器一次只接受一个套件参数(命中首个即返回), 需要跑多个套件时必须逐个调用,或直接用 --all。

套件 参数 需要桌面会话
核心单元(PixelOps / ToneMapper / ICC / 标注 / 编码器) --unit-tests
色彩管线精度 --color-tests
编码管线集成 --encoding-tests
基础设施服务(NativeLibraryResolver) --service-tests
OCR 服务(BitmapPreprocessor / LLM 提供商与模型清单闭合) --ocr-tests
二维码解码(往返 / 多码 / 处置分类 / 展示转义) --qr-tests
输出结构合法性(TIFF IFD / AVIF box) --format-tests
综合可用性 --usability-tests ✓
WGC 捕获 + AVIF 后端验证 --wgc-avif-tests ✓

--all 会运行全部 9 个套件;其中 WGC 套件因需独占 STA 线程与 GPU 资源, 以独立子进程方式执行,避免与其它套件相互干扰。

自动拦截(git 钩子 / CI)

校验脚本本身不会自己跑起来 —— 需要挂到 git 上:

.\scripts\install-git-hooks.ps1            # 安装(写入 core.hooksPath)
.\scripts\install-git-hooks.ps1 -Status    # 只看当前状态
.\scripts\install-git-hooks.ps1 -Uninstall # 摘掉
钩子 做什么 耗时(2026-09-27 本机实测,Debug)
pre-commit 只构建(verify.ps1 -BuildOnly),挡"编译不过" 增量 9.6 s / --no-incremental 21.2 s
pre-push 构建 + [1.6/2] 发布门禁回归 + [1.7/2] 外部判据 + [1.8/2] 色彩管线 + [1.9/2] 宿主新鲜度 + 8 个 headless 套件,挡"测不过" 105 s(全绿、一个跳过开关都不用)

分开放是有意的:把 100 多秒压在每次 commit 上,实际结果是人人都加 --no-verify, 钩子整体失效反而更糟。临时跳过用 git commit --no-verify / git push --no-verify。

钩子本体在 scripts/git-hooks/(入库、可 review),靠 core.hooksPath 挂载, 因此新克隆后需要跑一次安装脚本;不往 .git/hooks 里复制文件。

CI 见 .github/workflows/ci.yml,默认面向 self-hosted Windows 运行器 (原因写在文件头:pinned .NET 11 preview SDK、Windows SDK 26100、fxc 缺一不可)。

发布 / Publish

.\scripts\verify.ps1                   # ① 一键校验(日常提交前用)
.\scripts\verify.ps1 -IncludeDesktop   #    追加需桌面会话的 --wgc-avif-tests
.\scripts\verify.ps1 -BuildOnly        #    只构建不跑测试(约 27s)
.\scripts\verify.ps1 -SkipPublishGates #    跳过 [1.6/2] 发布门禁回归

宿主:PowerShell 7.x(默认推荐,本仓以 7.6.x 实测基线)与 Windows PowerShell 5.1(基线回退)都能跑; 哈希校验走 scripts/ps-compat.ps1 的 .NET 直调,不依赖 cmdlet 解析 (机制与取证见 docs/reviews/repo-governance/powershell-dual-shell-2026-10-26.md)。

verify.ps1 的步骤依次为:

步骤 内容 备注
[1/2] 构建解决方案 失败即退出(-SkipBuild 可跳)
[1.5/2] 代码格式检查 需 -Format;仅报告不阻断
[1.6/2] 发布门禁回归 调 verify-publish-gates.ps1;失败即退出(2026-09-15 观察期已结束,不阻断的门禁等于没有门禁)
[1.7/2] 外部判据 12 条 scripts/precision/*.py 与探针;-SkipPrecision 可跳
[1.8/2] 色彩管线判据 3 条 + --avif-hdr-depth,没有跳过开关
[1.9/2] 宿主新鲜度 Tools 宿主早于最新源码 ⇒ 本轮读数作废(增量构建会跳过没动的宿主)
[2/2] 8 个 headless 门禁套件 + -IncludeDesktop 的 WGC 套件;失败即退出

⚠ [1.7/2] / [1.8/2] 在探测不到 python / ffprobe / cjxl 时是逐条打 SKIP 并继续 —— SKIP 的含义是"这一轮没判",不是"判了且通过"。看结果要数判据条数,不能只看 exit 0。

[1.6/2] 会以子进程隔离执行(verify-publish-gates.ps1 给 git/dotnet 打桩, 同会话执行会污染后续构建);宿主路径取当前 PowerShell 自身,不写死 pwsh。

.\Publish.ps1                          # ② 版本号自动取自 Directory.Build.props
.\Publish.ps1 -Version 0.3.11     # 显式指定版本
.\Publish.ps1 -Tag                     #    出包同时打 v<版本> 附注标签(一条提交 = 一个版本)
.\Publish.ps1 -NoReadyToRun            # 禁用 ReadyToRun(体积更小)
.\PublishLogViewer.ps1                 # 单独发布日志查看器(可选工具)

.\scripts\pack.ps1 -PackageDir publish\TrueToneCap-v0.3.11   # ③ 压缩 + 压缩包哈希入库

⚠ 出包两条硬规矩(都是踩出来的):Publish.ps1 -OutputDir 会对目标目录 Remove-Item -Recurse,而旧包目录里可能有用户的 log/、settings.json ⇒ 出试验包请指到 一处独立目录(本仓现放于 publish\_scratch\),别拿正式目录当输出; pack.ps1 不给 -OutputPath 时会按固定规则命名 ⇒ 同名版本号变体会覆盖正式压缩包。

发布流程包含依赖完整性校验(缺失即中止,不会产出残缺包)、 原生工具链 SHA256 校验(src/TrueToneCap.Core/Resources/tools-manifest.json, 版本写入 build-info.json)、以及 [5.5/6] 出包冒烟验证(主程序 / 模型 / 着色器 / native 工具清单与可启动性,外加"二进制内嵌 commit 是否等于源码 HEAD"), 并在输出目录生成 SHA256SUMS.txt(完整性与来源可校验)与 build-info.json(含 commit SHA、SDK 版本、Windows SDK 版本、构建时间,便于追溯)。

冒烟不通过则不生成校验和与元数据 —— 不合格的产物不会被盖章。 冒烟也可对任意已有产物单独执行:

.\scripts\verify-package.ps1 -PackageDir publish\TrueToneCap-v0.3.11 -ExpectedVersion 0.3.11

⚠️ 发布前请退出正在运行的 TrueToneCap。如确需强制终止进程请加 -Force (未保存的截图/标注工作将丢失)。


Release Notes / 版本说明

这一节只写新增能力与工程规范。缺陷的根因、判据设计、被实测推翻的旧结论都不在这里 —— 面向用户的变更流水见 CHANGELOG.md;09-15 之后的逐条判据与实证过程见 docs/ledger/handoff-avif-10bit-wide-gamut-sdr-2026-09-17.md(维护者文档);更早版本(v0.3.3 及以前)的 NVENC 结构体偏移、GUID 实测值、容器布局等细节,权威出处是代码自身的注释 (NvEncoderNative.cs 的偏移表与 GUID 段、ManagedTiffEncoder.cs、MftEncoderNative.cs 等), 完整叙述另见 docs/reviews/pipeline-review/*.md 与 git 历史。

上游 PR #1 — VS-Cap 模式(2026-10-11 提交,2026-10-16 合入,2026-10-27 归档)

  • 归档原因与"能力并入主程序"的落点见 docs/vscap-mode.md: 富文本文字(字体/字号/加粗/斜体 + 再编辑/拖动)、统一撤销栈、置顶贴图窗已并入主程序; Qt 侧车、BuildVSCap.ps1 与「VS-Cap 模式」开关已从产品移除(源码在 git 历史里)。

v0.3.11(2026-11-04 上架 Microsoft Store)

  • JPEG 增益图恒写 ISO 21496-1(最新国际标准),元数据不做用户抉择;只认老 XMP 的查看器 会把这类图当普通 SDR 显示——这是"单一标准"的明确取舍。
  • AVIF 新增「HDR 承载方式」:传统 PQ(默认,硬件加速支持)或增益图(SDR 底图 + ISO 增益层, 10-bit 底图,只走软件编码)。
  • AVIF 默认 4:4:4 + libaom:截图以文字/UI 为主,4:2:0 的彩色文字边缘劣化实测明显; 自动档在 4:4:4 下会被静默降回 4:2:0,故默认编码器同步改为 libaom。
  • 增益图底图恒 4:4:4(与 JPEG 普通照片档的 4:2:0 分家):底图会被查看器乘增益放大还原, 色度精度优先于体积;开启增益图时色度下拉禁用并说明原因。
  • 双屏/多屏跟随:选区色彩按选区实际覆盖的屏判定(跨屏取最弱),提示气泡落在被截的屏。
  • 动图录制:Ctrl+Shift+G,WebP / GIF / APNG / MP4(ffmpeg 可选手动路径)。
  • 上架 Microsoft Store(自包含 MSIX + 真图标),捕获启动链路优化(多屏拼接 ~660ms)。

v0.3.10-beta(2026-11-02)

  • Ultra HDR 增益图不再被 ffmpeg 系工具拒读(增益图比值的分母收紧,容器声明与像素一致)。
  • 标注工具条的第二行真正可见(颜色格 / 马赛克方式 / 画笔粗细滑条 / 字体字号下拉); 文字标注支持富文本(字体/字号/加粗/斜体)与就地再编辑、拖动。
  • 性能:选区预览首帧不再等图集(首帧快约一半)、启动快约 0.5s、SDR 整屏回读省掉、 10-bit AVIF 压缩强度档位真的生效、OCR 快约两成。
  • VS-Cap 的能力全部并入主程序(侧车归档);翻译免费档开箱可用。

v0.3.9-beta(2026-10-21)

  • 修复"点识字/翻译整个软件无声消失"(每次必崩 → 正常出预览窗,失败也有可读错误)。
  • 外接屏的色域判定不再读错屏(按 GDI 设备名落屏,多屏不再张冠李戴)。
  • 上架铺路:MSIX 打包、打包形态的开机自启(StartupTask)、设置与日志按包形态落 %LOCALAPPDATA%、隐私政策与安全披露(商店政策 10.5.1 合规)、真机安装验证轮。

v0.3.7-beta(2026-09-28 ~ 10-06)

  • HDR 降级不再静默:多屏拼接放弃 HDR 这类句子提到默认日志档,用户能看到"为什么这张是 SDR"。
  • 修复三个"用户能直接撞见"的缺陷:开机后输出格式被抹回默认、dev 构建会删掉用户的开机自启、 以及另两个构造期状态串写缺陷。

v0.3.6-beta(2026-09-27)

新增能力

  • 默认格式改为 PNG:截图工具的失败模式应该是"无损但大",不是"小但不可逆"。⚠ 只影响盘上没有 FormatIndex 键的人(设置是差量写盘),显式选过格式的不受牵连。
  • 格式收成六档,增益图不再是第七个"格式":那一档对用户就叫 JPEG,Ultra HDR 是它卡片里的 「附带增益图」开关,而「目标色域」下拉选的就是这张底图的原色。旧标签 JPEG LI 是编码器实现名, 已退出所有面向用户的表面(内部枚举、日志与判据消息仍用 JPEG_LI)。
  • 目标色域只叫两个名字:Rec.709 / Rec.2020。此前同一档在界面叫 sRGB、卡片叫 BT.709、声明文案叫 BT.2020,而 BT.2020 (HDR) 那种写法把【原色】和【动态范围】混进一个词。盘上的值没动(那是 老配置迁移表与下拉匹配的键),名字现在只有 Core 一个来源。
  • AdobeRGB 目标一律收口进 Rec.2020:不是加一条映射,而是消掉三份互相矛盾的映射(界面侧、HDR 路、 JPEG XL 的 SDR 路原先各说各话)。DisplayP3 / DCI-P3 不受影响,它们各有忠实出路(cICP 12、P3 的 ICC)。
  • AVIF 的编码器选择器回来了:自动 / 系统 MFT(QSV) / libaom / SVT-AV1 / NVENC 一档 五选一,与色度、位深的能力协商联动(同一张卡上能选到的组合随编码器能力变化并显式提示)。
  • JPEG XL 的 HDR 声明正确:目标为 P3 时产物读回 P3 原色 + PQ,不再出现"ICC 的 SDR 曲线 压过 color fields、PQ 被按 SDR 曲线解释"的自相矛盾声明(根因与取证见台账 §78)。
  • BMP 不再被列为支持的格式:界面下拉里本来就没有它,Core 那个无人调用的编码器已删。
  • 英文界面收口为一条机制:XAML 写死的中文 = 翻译表键 + 一张显式声明的扫描面 + 每个窗口挂的钩子, 五个副窗口与按钮 ToolTip 全进范围;扫描面之外出现中文控件门禁直接报红,而不是不翻就算了。

工程规范(本轮新增)

  • 三条常驻判据补住"改一处漏三处":每个"以收起起步"的命名控件必须有点亮它的那一行(孤儿即红并点名)、 面向用户的格式标签不许是编码器实现名、Hint 与降级 Toast 不许留着已废弃的叫法。
  • 源码型判据不再拿 Environment.NewLine 当锚点(本仓存 LF、检出可能是 CRLF),并且锚点找不到就判红 并停手,不许退化成"整份文件都算方法体"——那会让否定断言恒假、肯定断言恒真。
  • JXL 的 HDR 层交给 libjxl 自己的 jxlinfo / djxl 读回(第三方实现,不用本仓第二份解析器自证); 第三方工具探不到时这一层报 SKIP 而不是绿。

v0.3.5-beta

新增能力

  • 色域映射卡片按真实决定渲染:五种形态(容器写 PQ / 增益图 / 屏幕不授权 / sRGB 容器装不下 PQ / 该格式没有 HDR 通道),外加逐格式的声明通道——同一枚目标色域在 PNG 写 cICP 1/13/0、在 AVIF 随 三原色取 9/13/9(不许 identity)、在 JPEG 与 WebP 只有 ICC 通道、在 TIFF 连 Rec.709 也老实嵌一份 profile、在 JPEG XL 则是 color fields 与 ICC 二选一。
  • 增益图并入 JPEG 那一档(结构变化):格式表少一档、老设置里的格式号做重映射并记日志。
  • AVIF 可选编码器与位深:libaom + HDR 从"恒 10-bit"改成"下限 10 + 上限按编码器"(可到 12)。
  • 设置只认同目录一份、改哪条即时落盘;存不下去时记一条日志并按默认值跑,不再悄悄降级到 %LOCALAPPDATA%(设置一旦有两个答案,两边内容可以完全不同)。历史遗留的"默认值交还门" 从此对老文件真的会触发。
  • 降级都会告知,并按消息内容去重:HDR + PNG 至少升到 10-bit、HDR + TIFF 恒 16-bit、非 HDR 通道的 格式开关落空都会出一条提示;此前一个进程只弹第一次,之后所有其他种类的降级永久无声。

工程规范(本轮新增)

  • [1.9/2] 宿主新鲜度:取证宿主早于最新源码即作废本轮读数。增量构建会合理跳过没动的宿主, 所以绝对值不可比,也不许拿上一轮的数顶。

v0.3.4-beta

新增能力

  • 源精度由显示器能力决定:HDR 模式 / ≥10-bit 面板 / ACM 开启时直接取显示器的 Float16 scRGB 帧; 即便导出 8-bit 目标,内部也走完整浮点链、只在末端量化一次。
  • 逐显示器高级色能力:按屏探测 SupportsAdvancedColor(FP16 / 色域 / 峰值与最小亮度), HDR 与 SDR 共用同一条色彩处理链路。
  • 可选目标色域:跟随显示器 / sRGB / BT.2020;广色域目标在编码前完成色域矩阵搬运, 并按目标色域给出配套声明(不是只改标签)。
  • 六种界面可选格式:PNG(数学无损,可带 cICP/iCCP)· JPEG LI(打开「附带增益图」即 Ultra HDR, 「目标色域」选的就是底图色域)· JPEG XL · AVIF · WebP · TIFF;HDR 通路的容器位深按各格式能力协商 并显式告知(PNG 至少 10-bit、TIFF 恒 16-bit、AVIF 10/12 随编码器、JPEG LI 与 WebP 恒 8-bit)。
  • 硬件与软件后端同一套色彩声明:AVIF 支持 NVENC 与系统 MFT(QSV 候选)硬件通路, 软件侧 libaom / SVT-AV1;同一次截图在两条路上给出相同的色域矩阵、摆幅与元数据。
  • OCR 与翻译:PP-OCRv6(ONNX)+ Windows OCR(DirectML 不可用时降 CPU), 选中 ONNX 时以下四种情况都会改用 Windows OCR 兜底:结果为空、结果的字符域与请求语言不符 (韩文整页被误认成汉字即属此类)、主引擎超时、主引擎抛异常 —— 兜底自带一份独立的时间预算, 不与主引擎共用那份已经过期的;兜底成功会在结果上标 FallbackFrom 并落一条 Warn 级日志。 单模型统一字典不随语言切换:中文/英文最准,日文需字高 ≥24px,韩文实测 0%(字典不含谚文)。 长行拆分与置信度回退。 翻译档默认不需要任何密钥就能用:默认走四条免费公共端点 (Edge 内置口 → 必应网页版 → MyMemory 匿名档 → Google), 每条的硬限制写在设置界面的勾选旁;填了有道官方凭据(用户自备)或切到 LLM 档,它们排在免费端点之前。 翻译失败时状态栏会给出「哪条链、什么原因」(如 有道 errorCode 108:AppID 不存在或输错),不再只说"失败 N 行"。

    端点选型与关闭情况的取证过程(候选清单、实测延迟、各服务限制、定价)见 docs/ledger/handoff-avif-10bit-wide-gamut-sdr-2026-09-17.md §78 —— 本文档只留结论。

工程规范

  • 可复现构建:global.json 钉住 .NET SDK;依赖版本集中在 Directory.Packages.props(CPM) 并强制提交 packages.lock.json;公共属性集中在 Directory.Build.props,版本号只写一处。
  • 质量门禁:scripts/verify.ps1 默认跑 8 个 headless 套件(-IncludeDesktop 追加第 9 个 WGC),外加 [1.7/2] 外部判据 12 条(scripts/precision/ 与 scripts/probes/)、[1.8/2] 色彩管线判据、 [1.9/2] 宿主新鲜度;判据一律用外部实现读回 (ffprobe / ffmpeg / Pillow / avifdec / 浏览器),不用仓库自己的第二份解析器自证。
  • 交付物可校验:包内 SHA256SUMS.txt(含原生工具链 SHA256 清单)与 build-info.json (commit SHA、SDK 与 Windows SDK 版本、构建时间、工作树是否干净);出包前强制冒烟, 不合格不盖章。
  • 版本锚点:一条提交 = 一个版本,发布时打附注标签(v0.3.4-beta), 使"用户装的版本"能对应到仓库中的不可变坐标。
  • 自动拦截:scripts/git-hooks/(入库、可 review)经 core.hooksPath 挂载 —— pre-commit 挡编译不过、pre-push 挡测试不过;CI 只调用同一个 verify.ps1,不复制门禁逻辑。
  • 凭据与外发:LLM Key / 有道 AppSecret 用 DPAPI 加密存储,明文不落盘;免费公共翻译端点 (Edge / 必应 / MyMemory / Google)默认启用(2026-10-23 用户拍板"开箱即用"), 设置里可随时关闭,关闭后连请求都不构造; 截图原文只在用户主动执行翻译时才发给对应服务。日志设三档(设置 → 行为 → 日志详细度), 任何一档都会先刮掉 URL 参数值与凭据赋值(q= / key= / token= 之类)再落盘; 它刮的是"参数位上的值",调用方把敏感内容拼成正文它认不出来 —— 2026-09-21 迁移那 142 处遗留调试输出时逐条把关(交接 §35.1)。
  • 第三方许可随包分发:licenses/ 收录每个再分发组件的许可全文,THIRD-PARTY-NOTICES.md 给出「组件 → 版本 → 许可 → 义务」映射;出包冒烟缺文本即变红,应用内亦可直接查看该清单。
  • 安全披露与依赖政策:SECURITY.md 写明报告渠道、支持范围,以及"哪些机制已经存在"的逐条出处; .github/dependabot.yml 只自动跟 GitHub Action 的版本,NuGet 依赖升级保持"人工核实 + 本机重生成 lock + 门禁" (为什么不开自动 PR 的理由写在该文件头部注释里)。

更早版本(新增能力摘要)

版本 新增能力
v0.3.3-beta AVIF 硬件编码首次接通(4K 约 0.12s,对比软件编码约 22s);托管编码器接管 PNG / TIFF / AVIF 容器;独立标注窗口上线;覆盖层超时与剪贴板文件粘贴
v0.3.2-beta 画笔轨迹与文字输入浮层;合成移出 UI 线程 + 纹理池化(预览管线提速);Gain Map 双模(灰度 / RGB)
v0.3.0-beta 捕获 / 色调映射 / 色彩管理 / 编码全链路重写;零 Magick.NET 依赖;NVENC GPU 纹理直通(跳过 CPU 回读);原生工具链作为资源内嵌、运行时自动提取
v0.2.0 AppServices 迁移到 Microsoft.Extensions.DependencyInjection;新增 Platform/ 抽象层(为跨平台预留);架构与色彩管线文档
v0.1.x 四模式主题系统(浅色 / 深色 / OLED / 跟随系统);Per-Monitor V2 DPI;界面字体可自定义;JPEG Gain Map(Ultra HDR)与高色深容器保护;多端点翻译降级;快捷键录制

License / 许可证

Apache 2.0 · LICENSE · Copyright 2026 TrueToneCap contributors

再分发的第三方组件(原生编码器、.NET 运行时、WindowsAppSDK、DirectML、ONNX Runtime、OCR 模型权重) 各自的许可全文见 licenses/,汇总与义务说明见 THIRD-PARTY-NOTICES.md。

AV1 提示:AVIF 编码用到的 libaom / SVT-AV1 均为 BSD 系许可,其原文明确不授予任何专利权利 (SVT-AV1 许可第 2 条)。AV1 的专利授权需另行向 Alliance for Open Media 专利池确认, 本项目的 Apache 2.0 许可证不包含该授权。

TrueToneCap — Every frame deserves to be remembered. / 让每一帧都值得被记住。

About

No description, website, or topics provided.

Resources

Security policy

Stars

8 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages