一键导入
verify
Drive the real NegPy desktop app headlessly and capture rendered evidence — use when verifying pipeline/UI changes end-to-end (not via pytest).
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Drive the real NegPy desktop app headlessly and capture rendered evidence — use when verifying pipeline/UI changes end-to-end (not via pytest).
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
Use when the user supplies a film-stock spec sheet, datasheet, or spectral data (PDF / URL / numbers) and wants a NegPy spectral-crosstalk .toml matrix for the Process panel's Crosstalk control, or asks to calibrate / derive channel-unmixing for a specific film or scanner. Keywords: crosstalk, datasheet, spec sheet, film stock, dye density, spectral, separation, unmixing, toml.
Use when a deliberate look/pipeline change has shifted NegPy's golden / characterization test values and they need updating — e.g. after changing the working-space TRC or primaries, the print curve, a lab/toning default (saturation, vibrance), or any default that alters rendered output, and a snapshot test now fails. Keywords: golden, goldens, characterization test, snapshot, regenerate, update expected values, test_scene_linear_relocation, test_characteristic_curve, _GOLDEN, look drift.
基于 SOC 职业分类
| name | verify |
| description | Drive the real NegPy desktop app headlessly and capture rendered evidence — use when verifying pipeline/UI changes end-to-end (not via pytest). |
The surface is the PyQt6 GUI; the render pipeline's output is the canvas.
~/Documents/NegPy:
NEGPY_USER_DIR=<scratch>/negpy_home (checked in get_default_user_dir).
Create the subdirs from _bootstrap_environment (or call it) before
StorageRepository.initialize().repo.save_global_setting("tutorial_seen", True) before
constructing MainWindow.xvfb-run -a -s "-screen 0 1920x1080x24" uv run python driver.py.
wgpu/Vulkan works fine under Xvfb on this machine (real GPU).negpy/desktop/main.py
(StorageRepository → DesktopSessionManager → AppController →
MainWindow), then drive a QTimer state machine:
controller.load_file("samples/06.raw") — same method the Files sidebar calls.controller.image_updated (skip state.last_metrics["splash"],
guard against multiple emissions per render, ~600 ms settle).session.update_config(replace(state.config, ...))
controller.request_render().window.canvas.grab() (canvas only, overlay-free) →
numpy stats; window.grab().save(...) for reviewer screenshots.A working driver from the dodge/burn + toning verification lives in the
session scratchpad as drive_verify.py — copy its grab/set_cfg/state-machine
parts rather than rewriting.
samples/06.raw is a dark graveyard scene — burn/dodge probes need the sky
band (top of frame in raw coords) to see roll-off; mid-frame is near black.before - after > threshold) instead of guessing
where a mask lands on the canvas.