feat(plustek): add Multi-Pass ME scanning - #1041
Closed
TobbyTravel wants to merge 1 commit into
Closed
Conversation
Updates the Plustek scanner integration for pyopticfilm PR #47 (N-bracket multi-exposure, per-model exposure envelope), which is not yet merged upstream. - ScanParams/ScannerSettings gain a MultiExposureMode (Off / Dynamic / Fixed / Multi-Pass) replacing the old multi_exposure bool, plus a bracket count for Multi-Pass. Old settings blobs migrate automatically (checked -> Dynamic, unchecked -> Off). - plustek_backend.py translates the mode into pyopticfilm's scan(multi_exposure=, me_exposure_mode=, n_brackets=) call and generalizes the previously 2-pass-only progress model to N passes. The raw/unclamped manual-exposure debug params on pyopticfilm's scan() are never called from here. - ScanSidebar: the old "Multi-exposure" checkbox becomes a mode combo + bracket slider; the Framing section (frame spec, scan window, Prescan) moves to its own full-width block right above the Scan button; crop info (when set) now sits next to Frame info instead of its own form row. Off remains the default; Dynamic/Fixed at n_brackets == 2 take the exact same pyopticfilm call as before this change, so existing scans are unaffected.
This was referenced Sep 3, 2026
Contributor
Author
|
Closing in favor of #1064. This branch was built against an earlier pyopticfilm design (N different exposures merged, like HDR bracketing) that never shipped. pyopticfilm instead shipped PR #65 with a different mechanism — repeating a single exposure |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Highlights
noise, at a roughly proportional cost in scan time. pyopticfilm's own
benchmark on an 8100 V2 (5 exposures vs. today's 2, same frame): -26%
relative chroma noise, -28% relative luma noise, visibly smoother in flat
regions.
only ever meant one specific behavior — is now a single dropdown: Off /
Dynamic (2 exposures) / Fixed (2 exposures) / Multi-Pass (2-9). Choosing
a mode is now an explicit decision instead of a hidden default.
live together as one full-width block right above the Scan button — the
last thing you touch before scanning, grouped where you touch it. Crop
info, when a crop is set, shows next to Frame info instead of its own row.
pipeline path — there's no raw exposure field, no way to type in an unsafe
value. The debug-only raw exposure overrides pyopticfilm keeps for its own
ScanLab tooling are never called from NegPy.
exposures is byte-identical to today's only multi-exposure behavior. No
existing scan or saved setting changes.
Technical changes in NegPy
ScanParams/ScannerSettingsgain aMultiExposureModeenum replacingmulti_exposure: bool, plus a bracket count meaningful only in Multi-Pass.Old settings blobs migrate automatically (
multi_exposure: true→dynamic,false→off).plustek_backend.pytranslates the mode into pyopticfilm'sscan(multi_exposure=, me_exposure_mode=, n_brackets=), and generalizesthe previously 2-pass-only scan progress model to N passes.
ScanSidebar: mode combo + bracket slider replace the checkbox; theFraming section (frame spec, scan window, Prescan) moves to a full-width
block above the Scan button; crop info relocates next to Frame info.
Why this is a PR draft
This depends on
pyopticfilmAPI surface (n_brackets,me_exposure_modewidened to
str | None,Model.me_default_exposure_mode) that only existson pyopticfilm's
feat/me-n-bracketsbranch (#47), not in any releasedversion yet. This will stay a draft until that pyopticfilm work is merged
and released, since it can't be installed as a normal dependency or fully
verified against a real release until then.