The two dims stopped stacking, and centre court's crowd is graded off a lifted target
Oliver: "it is too dim to see anything on the centre court and the dark court." Both were the same mistake — standBack was ADDED to a court's own dim instead of being the default it falls back to. Centre court's crowd sheet is a night-lit navy that is dark to begin with, and the night court dims the hard-court sheet on top of that, so the pair of them went to mud. standDim is now court.dim ?? TUNE.standBack, plus the rot. Centre court carries a 0.06 of its own, the night court comes down 0.62 -> 0.5 (it no longer has the base added to it), and clay and hard keep the 0.22 that was approved. Centre court's sheet is also graded off a LIFTED target now — the old crowd it matches sat at a mean luminance of 39 against clay's 96, dark enough to throw the new roll's detail away before any dim ran. A 0.72 gamma on the target brings the sheet to 60 and the faces come back. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
0250e9bd20
commit
eab0a4e837
5 files changed
+29
-15
No files matched your search
+11
-3
@@ -55,7 +55,12 @@ PAL = 128 # colours a sheet is quantised to on save
|
||||
# HEAD, so re-running the tool after installing its own output cannot drift the palettes.
|
||||
GRADE_REF = '76ea1d0'
|
||||
|
||||
COURTS = [('x_crowd', 'x_crowd2'), ('x_crowd_c', 'x_crowd_c2'), ('x_crowd_h', 'x_crowd_h2')]
|
||||
# sheet -> how much its grade TARGET is lifted before the histogram match (a gamma; 1.0 is the old
|
||||
# sheet as it was). Centre court's old crowd sat at a mean luminance of 39 against clay's 96 — dark
|
||||
# enough that the detail in the new roll was being thrown away, and then dimmed on top of that:
|
||||
# Oliver, "it is too dim to see anything on the centre court and the dark court". The night court
|
||||
# borrows the hard-court sheet and does its own dimming in `COURTS.dim`, so it is fixed there.
|
||||
COURTS = [('x_crowd', 0.72), ('x_crowd_c', 1.0), ('x_crowd_h', 1.0)]
|
||||
|
||||
MIN_AREA, MAX_AREA = 150, 3000 # an arm blob: one pair of raised arms, or one arm
|
||||
ARM_H, ARM_W = (10, 70), (8, 90) # ...and its shape, in px of the 1408x768 sheet
|
||||
@@ -199,8 +204,11 @@ def main(review):
|
||||
print(f'{len(rows)} spectators can move, {both} of them with both poses (a real clap)')
|
||||
|
||||
stack = np.concatenate(frames, 0)
|
||||
for a_name, _ in COURTS:
|
||||
lut = grade(A, old_sheet(a_name)) # the LOOK is judged on the seated frame...
|
||||
for a_name, lift in COURTS:
|
||||
ref = old_sheet(a_name)
|
||||
if lift != 1.0:
|
||||
ref = (255 * (ref / 255.0) ** lift).astype(np.uint8)
|
||||
lut = grade(A, ref) # the LOOK is judged on the seated frame...
|
||||
pa = os.path.join(REFCHECK if review else HERE, a_name + ('_new.png' if review else '.png'))
|
||||
# ...and applied to the whole stack at once, so the frames cannot drift apart in colour
|
||||
Image.fromarray(lut(stack)).quantize(colors=PAL, method=Image.MEDIANCUT).save(pa, optimize=True)
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 1.1 MiB |
Reference in new issue
Block a user