Skip to content

Latest commit

 

History

History
148 lines (138 loc) · 8.95 KB

File metadata and controls

148 lines (138 loc) · 8.95 KB

TODO — user feedback backlog (2026-07-09, after v0.6)

Open items (refreshed 2026-07-18)

  • AWB direction flip (v0.27): corrected WB model (CLAUDE.md) says the lock correction is Target/WRGB(t); shipped AWB applies WRGB(t)/Target. Indistinguishable on daylight; VERIFY on a tungsten/indoor WIDE clip through AWB + GP-Tune (wrong direction = colors pushed blue instead of warm), then flip.
  • WB Lock validation + demo clip: find/shoot a clip where auto WB visibly drifts mid-shot (indoors→outdoors, night streetlights); A/B Decode As Shot vs Lock: Daylight. Validates the flagship feature and doubles as public demo material.
  • Calibration shoot — protocol SIMPLIFIED by the corrected model (old part C tried to prove WIDE doesn't bake WB; it does): shoot any subject PTWB=5500K → the constant WRGB in telemetry IS the daylight triplet; bake it in as wrgb::DAYLIGHT (serves Decode's Lock: Daylight and AWB's Target).
  • OpenCL render path (both plugins) — see Performance section.
  • Metal render path + macOS/arm64 build target — see Performance section.
  • Hue-preserving roll-off mode (experiment) — see below.
  • Shared OFX helper crate: INFO_FIELDS/info_values/debug plumbing duplicated between prowide-awb and prowide-decode; extract when it itches or a third plugin appears.
  • GitLab CI re-enable (commented out) if a Windows runner ever gets registered; GitHub Actions is the working CI + release channel.

Obsolete since 2026-07-15 (open source pivot, docs/business-plan.md): trial/watermark + license-key infrastructure — dead, not needed.

Log Base behavior — SHIPPED v0.9 (2026-07-12)

  • Auto Log Base ON → detected LOGB used, slider grayed but its value untouched (same pattern as Target WB sliders — lets you toggle Auto for a quick detected-vs-manual comparison; revised v0.11, was "write detected value into slider"). Detected value readable in the Info section. Auto off frees the slider.
  • No LOGB header → Auto + slider both disabled, log decode/encode skipped entirely (trims/exposure apply as plain gains). ALSO: WRGB is only applied when WIDE=1 — non-WIDE clips have WB baked in and their WRGB telemetry describes gains already applied.

Clipping indicator — SHIPPED v0.9 (2026-07-12)

  • Zebra stripes now take the color of the clipped channel(s): pure red/green/blue for one, mixes (yellow/cyan/magenta) for two, white for all three. Awaiting user feedback on the presentation.

Target WB — SHIPPED v0.9 (2026-07-12)

  • Mode dropdown: "Daylight (preset)" (built-in triplet, sliders disabled) / "Custom" (sliders enabled, defaults = Daylight values).

Trim sliders — SHIPPED v0.9 (2026-07-12)

  • "Preserve Brightness" checkbox (default on) in WB Adjustments (renamed from "Normalize Trims" in v0.11 — more intuitive; script name stays normalizeTrims for project compatibility): off = raw per-channel gains (exposure shifts), on = exposure-neutral. Implemented as a checkbox, not a 0–1 mix — flag if a mix is wanted.

Panel layout / order — SHIPPED v0.9 (2026-07-12)

  • Order: Exposure + Show Clipping · WB Adjustments group (Color Temp, Trims, Normalize Trims; default-open — OFX groups are inherently collapsible, open is the best available) · Target WB group (Mode + sliders) · Auto Log Base + Log Base · Info group.

Performance: GPU (CUDA) render path

  • Measured 2026-07-11 (5.3K/25p, 32-core CPU, RTX 3090): after multithreading (v0.7) the plugin computes a frame in ~17 ms, but playback tops out at ~20 fps because Resolve spends ~31 ms/frame on the CPU⇄GPU round-trip a CPU OFX effect forces (median frame cycle 48 ms; 25p needs 40 ms). The fix is the OFX GPU render extension (CUDA on this machine — Resolve on NVIDIA/Windows runs in CUDA mode): advertise CUDA support, receive device buffers, run the 3×1D-LUT math as a kernel; the frame never leaves the GPU. Requires extending ofx-rs (no GPU render suite support) + a CUDA kernel (cudarc or NVRTC). Expected: plugin cost < 1 ms, zero transfer — fully transparent playback. Vendor coverage: the OFX GPU extension is per-API and Resolve only calls the path matching its processing mode — CUDA (NVIDIA), OpenCL (AMD/Intel), Metal (Apple Silicon); no cross-substitution, CPU stays the universal fallback. The ofx-rs plumbing is shared; each kernel is ~a dozen lines.
  • CUDA render path — SHIPPED v0.8 (2026-07-11). Kernel compiled at runtime via Resolve's bundled NVRTC (no CUDA toolkit needed anywhere), launched through nvcuda.dll driver API; advertised only when both DLLs load. Measured: 0.63 ms/frame in-plugin, playback locked at 25.0 fps (was ~20 fps on the multithreaded CPU path). GPU-vs-CPU parity tests in cuda.rs run on a real device.
  • OpenCL render path (AMD/Intel GPUs): same plumbing as CUDA, add OpenCL kernel + advertise OpenCLRenderSupported. Needed before distributing the plugin to non-NVIDIA users. Testable locally (2026-07-12): NVIDIA ships OpenCL, and Resolve's Preferences → Memory and GPU → GPU processing mode can be forced to OpenCL → full end-to-end test on the RTX 3090. Second pass on the Slimbook (Intel 13th gen iGPU + RTX 4070): standalone parity tests against Intel's stricter OpenCL compiler (NVIDIA's is permissive — compile-on-Intel is the real compatibility gate; Resolve itself on the iGPU is unsupported, don't bother).
  • Metal render path (Apple Silicon macOS): UNPARKED 2026-07-12 — M1 MacBook Pro available for testing. Needs the full macOS/arm64 build target first (Rust cross-toolchain, Mac OFX bundle layout); third-party OFX requires Resolve STUDIO on the Mac (free version ignores OFX plugins; Studio license covers 2 activations).

Carried over from earlier

  • Calibrate the true Hero-11 Daylight target triplet (current default 2.0/1.0/1.9 is an estimate from the fixture's ~5000 K samples). Agreed protocol (2026-07-10), one session, steady light: A. Any subject, PTWB=5500K → constant WRGB in metadata = Target triplet (camera's built-in daylight neutral). Read via HUD/Info. B. Gray card, AWB, few seconds to settle → through ProWide AWB (Target from A) + decoder → card level on RGB parade = whole chain incl. per-frame tracking validated. C. Gray card, PTWB=5500K, same light as B → - C pixels ≡ B pixels ⇒ formal proof WIDE=1 doesn't bake WB; - C WRGB ≡ A WRGB ⇒ preset is a scene-independent constant. Then bake the measured triplet in as the plugin's Daylight preset default (Target WB dropdown).
  • Highlight Roll-off in ProWide AWB — SHIPPED v0.12 (2026-07-12): Power-Knee port in prowide-core/src/knee.rs (MIT, xtremestuff — THIRD-PARTY-LICENSES.md added). Toggle + Toe/Power/Length group, DEFAULT OFF (GP-Tune users must not double-compress; LUT users switch it on — 3D LUTs clamp input to [0,1]). Applied per channel in LINEAR light after the gains, on CPU (baked into the LUTs) and in the CUDA kernel (GPU-vs-CPU parity test extended). Zebra flags PRE-roll-off clipping via source-side thresholds. Sliders gray while the toggle is off. CORRECTED FOLKLORE: the published scale formula does NOT map Length→1.0 — measured f(1.09)≈0.955, ceiling = toe+scale ≈0.972 at defaults; larger Length compresses harder (lower ceiling). Ported verbatim anyway for bit-parity with the reference DCTL and its Inverse (landmarks pinned in tests).
  • Roll-off refinements v0.13–v0.17 (2026-07-13, user feedback): colorist labels + 0–100 scales (Threshold / Softness inverted / Strength; 31 ≈ DCTL defaults); two-tone zebra (colored = lost, BLACK = recovered by the roll-off); AUTO STRENGTH (default on) — per-channel per-frame knee sized from the channel's actual total gain, absorbing exactly every recoverable overshoot, no knee on channels that don't overshoot. Per-frame adaptive roll-off is something static decoders (GP-Tune) cannot do.
  • Highlight Roll-off in ProWide Decode — SHIPPED with Decode v0.2 (M3, 2026-07-15): integral stage, default ON, Auto Strength.
  • Roll-off experiment (idea, user-approved direction): hue- preserving mode — roll off the max channel, scale the others proportionally to preserve the color ratio near clip; offer as a mode next to per-channel. Test on sunsets/practical lamps.
  • ProWide Decode sibling plugin — SHIPPED v0.1→v0.4 (2026-07-15): M2 skeleton parade-verified bit-exact vs the reference DCTL, M3 full plugin (trims/exposure/roll-off/zebra/Info/CUDA), v0.4 corrected WB model (As Shot / Lock modes — see CLAUDE.md).