color: non-sRGB preview, per-monitor display ICC, pipeline hardening

Preview now follows the project output colorspace end to end: the
display chain derives its content space from the project's OutputColorSpec
instead of a hardcoded sRGB name, self-managed ICC transforms go through
an XYZ D65 interchange stage (OCIO cie_xyz_d65_interchange) for non-sRGB
targets, and the platform layer declares the content colorspace (gpui
submodule bump). macOS defaults to OS-managed (fixes wide-gamut UI
oversaturation); Windows ACM warns once on non-sRGB targets.

Multi-monitor: the display ICC is looked up per the window's current
screen (macOS display id, Windows per-monitor DC, X11 RandR output
profile) with a throttled poll that invalidates frame caches on moves.

Pipeline precision: 10-bit+ sources fall back to YUV444P16LE + a Rust
matrix conversion when swscale lacks F32 output (no more 8-bit
truncation); BT.709/2020 SDR decodes with BT.1886 gamma 2.4 instead of
the sRGB EOTF; working-space compositing no longer clamps RGB to [0,1]
(alpha still clamped); the output node clamps to the target gamut;
frames without colorimetry metadata convert with BT.709 defaults
(warned once) instead of passing through; scopes read the
output-colorspace signal on both F32 paths.

Also: only emit rerun-if-changed for .env when it exists (a missing file
made every build fully dirty).
This commit is contained in:
2026-08-29 00:24:15 +08:00
parent 879ff8da5b
commit fdb5caabd5
42 changed files with 4423 additions and 146 deletions
+12
View File
@@ -250,6 +250,18 @@
"projprops.cache.default": "Standardort verwenden"
"projprops.cache.alongside": "Zusammen mit dem Projekt speichern"
"projprops.cache.custom": "Benutzerdefinierten Speicherort verwenden:"
"projprops.color.working": "Arbeitsfarbraum"
"projprops.color.working.acescg": "ACEScg (szenenlinear, empfohlen)"
"projprops.color.working.srgb": "sRGB (Legacy-Durchreichung)"
"projprops.color.gamut": "Ausgabefarbraum"
"projprops.color.gamut.srgb": "sRGB / Rec.709"
"projprops.color.gamut.p3": "Display P3"
"projprops.color.gamut.bt2020": "Rec.2020"
"projprops.color.transfer": "Ausgabe-Übertragungsfunktion"
"projprops.color.transfer.srgb": "sRGB"
"projprops.color.transfer.gamma22": "Gamma 2.2"
"projprops.color.transfer.pq": "PQ (ST 2084)"
"projprops.color.transfer.hlg": "HLG"
"seqprops.new.title": "Neue Sequenz"
"seqprops.title": "Sequenzeigenschaften"
"seqprops.default_name": "Sequenz 1"
+12
View File
@@ -250,6 +250,18 @@
"projprops.cache.default": "Use Default Location"
"projprops.cache.alongside": "Store Alongside Project"
"projprops.cache.custom": "Use Custom Location:"
"projprops.color.working": "Working Color Space"
"projprops.color.working.acescg": "ACEScg (scene-linear, recommended)"
"projprops.color.working.srgb": "sRGB (legacy pass-through)"
"projprops.color.gamut": "Output Gamut"
"projprops.color.gamut.srgb": "sRGB / Rec.709"
"projprops.color.gamut.p3": "Display P3"
"projprops.color.gamut.bt2020": "Rec.2020"
"projprops.color.transfer": "Output Transfer"
"projprops.color.transfer.srgb": "sRGB"
"projprops.color.transfer.gamma22": "Gamma 2.2"
"projprops.color.transfer.pq": "PQ (ST 2084)"
"projprops.color.transfer.hlg": "HLG"
"seqprops.new.title": "New Sequence"
"seqprops.title": "Sequence Properties"
"seqprops.default_name": "Sequence 1"
+12
View File
@@ -250,6 +250,18 @@
"projprops.cache.default": "Usar ubicación predeterminada"
"projprops.cache.alongside": "Almacenar junto al proyecto"
"projprops.cache.custom": "Usar ubicación personalizada:"
"projprops.color.working": "Espacio de color de trabajo"
"projprops.color.working.acescg": "ACEScg (lineal de escena, recomendado)"
"projprops.color.working.srgb": "sRGB (paso directo heredado)"
"projprops.color.gamut": "Gama de salida"
"projprops.color.gamut.srgb": "sRGB / Rec.709"
"projprops.color.gamut.p3": "Display P3"
"projprops.color.gamut.bt2020": "Rec.2020"
"projprops.color.transfer": "Función de transferencia de salida"
"projprops.color.transfer.srgb": "sRGB"
"projprops.color.transfer.gamma22": "Gamma 2.2"
"projprops.color.transfer.pq": "PQ (ST 2084)"
"projprops.color.transfer.hlg": "HLG"
"seqprops.new.title": "Nueva secuencia"
"seqprops.title": "Propiedades de la secuencia"
"seqprops.default_name": "Secuencia 1"
+12
View File
@@ -250,6 +250,18 @@
"projprops.cache.default": "Utiliser l'emplacement par défaut"
"projprops.cache.alongside": "Stocker à côté du projet"
"projprops.cache.custom": "Utiliser un emplacement personnalisé :"
"projprops.color.working": "Espace de couleur de travail"
"projprops.color.working.acescg": "ACEScg (linéaire scène, recommandé)"
"projprops.color.working.srgb": "sRGB (passage direct hérité)"
"projprops.color.gamut": "Gamut de sortie"
"projprops.color.gamut.srgb": "sRGB / Rec.709"
"projprops.color.gamut.p3": "Display P3"
"projprops.color.gamut.bt2020": "Rec.2020"
"projprops.color.transfer": "Fonction de transfert de sortie"
"projprops.color.transfer.srgb": "sRGB"
"projprops.color.transfer.gamma22": "Gamma 2.2"
"projprops.color.transfer.pq": "PQ (ST 2084)"
"projprops.color.transfer.hlg": "HLG"
"seqprops.new.title": "Nouvelle séquence"
"seqprops.title": "Propriétés de la séquence"
"seqprops.default_name": "Séquence 1"
+12
View File
@@ -250,6 +250,18 @@
"projprops.cache.default": "デフォルトの場所を使用"
"projprops.cache.alongside": "プロジェクトと同じ場所に保存"
"projprops.cache.custom": "カスタムの場所を使用:"
"projprops.color.working": "作業色空間"
"projprops.color.working.acescg": "ACEScg(シーンリニア、推奨)"
"projprops.color.working.srgb": "sRGB(レガシーパススルー)"
"projprops.color.gamut": "出力色域"
"projprops.color.gamut.srgb": "sRGB / Rec.709"
"projprops.color.gamut.p3": "Display P3"
"projprops.color.gamut.bt2020": "Rec.2020"
"projprops.color.transfer": "出力伝達関数"
"projprops.color.transfer.srgb": "sRGB"
"projprops.color.transfer.gamma22": "ガンマ 2.2"
"projprops.color.transfer.pq": "PQ (ST 2084)"
"projprops.color.transfer.hlg": "HLG"
"seqprops.new.title": "新規シーケンス"
"seqprops.title": "シーケンスのプロパティ"
"seqprops.default_name": "シーケンス 1"
+12
View File
@@ -250,6 +250,18 @@
"projprops.cache.default": "Usar localização padrão"
"projprops.cache.alongside": "Armazenar junto ao projeto"
"projprops.cache.custom": "Usar localização personalizada:"
"projprops.color.working": "Espaço de cor de trabalho"
"projprops.color.working.acescg": "ACEScg (linear de cena, recomendado)"
"projprops.color.working.srgb": "sRGB (passagem direta legada)"
"projprops.color.gamut": "Gama de saída"
"projprops.color.gamut.srgb": "sRGB / Rec.709"
"projprops.color.gamut.p3": "Display P3"
"projprops.color.gamut.bt2020": "Rec.2020"
"projprops.color.transfer": "Função de transferência de saída"
"projprops.color.transfer.srgb": "sRGB"
"projprops.color.transfer.gamma22": "Gama 2.2"
"projprops.color.transfer.pq": "PQ (ST 2084)"
"projprops.color.transfer.hlg": "HLG"
"seqprops.new.title": "Nova sequência"
"seqprops.title": "Propriedades da sequência"
"seqprops.default_name": "Sequência 1"
+12
View File
@@ -250,6 +250,18 @@
"projprops.cache.default": "Использовать расположение по умолчанию"
"projprops.cache.alongside": "Хранить рядом с проектом"
"projprops.cache.custom": "Использовать пользовательское расположение:"
"projprops.color.working": "Рабочее цветовое пространство"
"projprops.color.working.acescg": "ACEScg (сценно-линейное, рекомендуется)"
"projprops.color.working.srgb": "sRGB (устаревший прямой пропуск)"
"projprops.color.gamut": "Выходная цветовая гамма"
"projprops.color.gamut.srgb": "sRGB / Rec.709"
"projprops.color.gamut.p3": "Display P3"
"projprops.color.gamut.bt2020": "Rec.2020"
"projprops.color.transfer": "Выходная передаточная функция"
"projprops.color.transfer.srgb": "sRGB"
"projprops.color.transfer.gamma22": "Гамма 2.2"
"projprops.color.transfer.pq": "PQ (ST 2084)"
"projprops.color.transfer.hlg": "HLG"
"seqprops.new.title": "Новая последовательность"
"seqprops.title": "Свойства последовательности"
"seqprops.default_name": "Последовательность 1"
+12
View File
@@ -250,6 +250,18 @@
"projprops.cache.default": "使用默认位置"
"projprops.cache.alongside": "随工程文件存储"
"projprops.cache.custom": "使用自定义位置:"
"projprops.color.working": "工作色彩空间"
"projprops.color.working.acescg": "ACEScg(场景线性,推荐)"
"projprops.color.working.srgb": "sRGB(传统直通)"
"projprops.color.gamut": "输出色域"
"projprops.color.gamut.srgb": "sRGB / Rec.709"
"projprops.color.gamut.p3": "Display P3"
"projprops.color.gamut.bt2020": "Rec.2020"
"projprops.color.transfer": "输出传递函数"
"projprops.color.transfer.srgb": "sRGB"
"projprops.color.transfer.gamma22": "Gamma 2.2"
"projprops.color.transfer.pq": "PQ (ST 2084)"
"projprops.color.transfer.hlg": "HLG"
"seqprops.new.title": "新建序列"
"seqprops.title": "序列属性"
"seqprops.default_name": "序列 1"