Repository navigation
Conversation
The graticule was blended over the trace, so a trace on a line (a black picture on the 0 % line) turned grey and was hard to see. Now the trace covers the graticule by its intensity; the graticule is neutral like the background, so only the luma changes. Golden PNGs regenerated with mxl-scopes-bench --golden docs/golden and the hashes updated (both Blend2D builds): every picture with a trace on a graticule line changes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017ybuzgBaGxuB5UiaE8dRa4
A user asked for a brighter trace: the limit is 1000 % now (was 400 %), in the config (78 above it), PATCH /api/v1/scope (400 above it) and the Scope tab slider. The intensity table stays correct: a higher gain only makes it shorter (it ends at the first count that reaches 1023), every count >= 1 still at least SCOPES_TRACE_MIN (unit test at 1000 %). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017ybuzgBaGxuB5UiaE8dRa4
SCOPES_MODE=vectorscope ("Vectorscope"): a Cb/Cr 2D histogram in a square
plot in the middle of the raster, one cell per 2x2 pixels. At 1x the plot
spans 1200 chroma codes (600 from the centre to the edge), so the 100 %
targets (magenta and green 534 codes out in BT.709) and every code fit.
SCOPES_VECTOR_ZOOM (1, 2, 5; live, vector_zoom in PATCH /api/v1/scope)
zooms around the centre; samples outside the zoomed plot go to a trash
cell that is never drawn. Graticule behind the trace: a hue ring at the
edge (each angle in the hue of its direction), rings every 35 mV of
chroma, the Cb and Cr axes, vectors to the six colours, the skin-tone
line at 123 degrees, BT.709 target boxes at 75 % and 100 %, the colour
names, and the zoom ("2x") right of the plot. No measurements.
SCOPES_TRACE_COLOR=picture (luma and vectorscope): each cell in the
colour of its samples. Per cell 32-bit sums next to the count (luma: Cb
and Cr, packed in one 64-bit word; vectorscope: Y'), each code shifted
right when an update could pass 32 bits. Colour: the luma lifted to 25 %
(adding grey keeps the hue), brightened to the largest R'G'B' component
at 100 %, then scaled by the intensity curve. Float maths with two small
tables in the (shared, baseline) trace step. The other trace colours keep
their code path.
SIMD: the vectorscope analyses with the scalar step on every level, the
luma picture colour with an AVX2 step (AVX-512 uses it too). Golden PNGs
for the vectorscope (bars75, bars100, scene, picture scene) and the luma
picture colour (mxl-scopes-bench --golden docs/golden), hashes for both
builds; the existing goldens are unchanged.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017ybuzgBaGxuB5UiaE8dRa4
The mode list (Scope tab and widget controls) has the vectorscope; the trace colour has "picture colour" (luma and vectorscope); a zoom select (1x, 2x, 5x) shows for the vectorscope. Settings help texts follow. npm ci && npm run build pass. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017ybuzgBaGxuB5UiaE8dRa4
The colour of a group's six cells is computed in plain loops without branches or tables (one division for the mean, one for the gain), which the compiler partly vectorises with SSE; the vectorscope reads its cells' sums through columnOf instead of copying a sampled row per plot row. Smaller code, a little faster: trace step alone at 1080p 6.3 -> 5.9 ms (luma, camera pattern), 2.1 -> 1.8 ms (vectorscope, scene); mxl-scopes-bench render about the same (7.0 ms luma, scene). The gain is no longer rounded to a table step, so the two picture-colour golden PNGs and hashes change (both builds); every other golden stays. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017ybuzgBaGxuB5UiaE8dRa4
SPECIFICATION: §4.4 the picture colour and its rule (luma lifted to 25 %, brightened to the largest R'G'B' component at 100 %, then the intensity), §4.7 no measurements in the vectorscope, §5.1 the mode in 1.3, §5.2 its square layout, new §5.3 (cells, 1200-code scale, zoom, graticule, analyse step), §7.1 the mode tag, §8.1 SCOPES_TRACE_COLOR picture and SCOPES_VECTOR_ZOOM, §9.1 the controls, §13 a pointer to the numbers, §14.1 the vectorscope goldens. IMPLEMENTATION_PLAN: 1.3.0 status, deviations 27 (SIMD and threads of the new steps), 28 (float colour maths), 29 (no vectorscope measurements). README modes and settings, CHANGELOG 1.3.0 lines, docs/performance.md "1.3.0" with the engine numbers. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017ybuzgBaGxuB5UiaE8dRa4
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.
Everything for 1.3.0 in one release (no 1.2.2). The version is not bumped yet; that is the release step.
Changes
SCOPES_MODE=vectorscope): Cb/Cr trace in a square plot, hue ring, rings, Cb/Cr axes, vectors to the six colours, BT.709 75 % and 100 % target boxes (a test checks the bars land in them), skin-tone line, R/Mg/B/Cy/G/Yl labels. ZoomSCOPES_VECTOR_ZOOM1, 2 or 5 (live). Not included: the Lows/Mids/Highs split and HSL. No measurements in this mode.pictureforlumaandvectorscope: each trace point shows the mean colour of the samples that land in it. Luma is lifted to at least 25 %, so dark colours stay visible. The green, white and amber traces keep their code path and speed.SCOPES_INTENSITYup to 1000 % (was 400).CPU (one core, Xeon Gold 6136, 1080p in, 1080p out, AVX2, ms per update)
At 2160p (scene, line step 2 in brackets): luma 13.3 (8.5), luma + picture 28.1 (18.3), vectorscope 14.1 (9.1), vectorscope + picture 20.4 (11.5). Luma + picture at 4K fits 25 Hz updates, not every frame.
Tests
Unit tests pass in both builds (Blend2D on and off), with the scalar, AVX2 and AVX-512 paths byte-identical. Not run yet:
tests/integration/scope.sh(it was edited), and the process CPU on a real MXL flow.🤖 Generated with Claude Code
https://claude.ai/code/session_017ybuzgBaGxuB5UiaE8dRa4