Track the two crowd rolls as _sheet_crowd3/3b — _refcheck is scratch and they are the only copy of the art

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
wuwiandClaude Opus 5 committed 2026-08-21 13:31:29 +02:00
1 parent 5f53a686c8
commit 1ad2898530
4 files changed
+12 -6

No files matched your search

+4 -3
View File
@@ -4,7 +4,8 @@
# uv run --with pillow --with numpy --with scipy python assets/_crowdpass.py # install # uv run --with pillow --with numpy --with scipy python assets/_crowdpass.py # install
# uv run --with pillow --with numpy --with scipy python assets/_crowdpass.py --review # to _refcheck # uv run --with pillow --with numpy --with scipy python assets/_crowdpass.py --review # to _refcheck
# #
# INPUT assets/_refcheck/crowd_seat.png + crowd_clap.png (see `_crowdroll.py`) # INPUT assets/_sheet_crowd3.png + _sheet_crowd3b.png — the two rolls (see `_crowdroll.py`),
# tracked, because _refcheck is scratch and these are the only copy of the art
# OUTPUT assets/x_crowd{,2}.png · x_crowd_c{,2}.png · x_crowd_h{,2}.png · src/crowd.js # OUTPUT assets/x_crowd{,2}.png · x_crowd_c{,2}.png · x_crowd_h{,2}.png · src/crowd.js
# #
# THE PROBLEM THIS SOLVES. Ask a generator for "the same picture with some arms raised" and about a # THE PROBLEM THIS SOLVES. Ask a generator for "the same picture with some arms raised" and about a
@@ -158,8 +159,8 @@ def write_table(boxes, h, w):
def main(review): def main(review):
A = np.asarray(Image.open(os.path.join(REFCHECK, 'crowd_seat.png')).convert('RGB')) A = np.asarray(Image.open(os.path.join(HERE, '_sheet_crowd3.png')).convert('RGB'))
B = np.asarray(Image.open(os.path.join(REFCHECK, 'crowd_clap.png')).convert('RGB')) B = np.asarray(Image.open(os.path.join(HERE, '_sheet_crowd3b.png')).convert('RGB'))
arms, lab = raisers(A, B) arms, lab = raisers(A, B)
h, w = A.shape[:2] h, w = A.shape[:2]
+8 -3
View File
@@ -1,9 +1,12 @@
# _crowdroll.py — roll the crowd sheet itself: the SEATED master, and the arms-up frame of it. # _crowdroll.py — roll the crowd sheet itself: the SEATED master, and the arms-up frame of it.
# #
# uv run --with pillow --with requests python assets/_crowdroll.py seat # -> _refcheck/crowd_seat.png # uv run --with pillow --with requests python assets/_crowdroll.py seat # -> _refcheck/crowd_seat.png
# uv run --with pillow --with requests python assets/_crowdroll.py clap # from the seated master # uv run --with pillow --with requests python assets/_crowdroll.py clap # from that seated roll
# #
# Then `_crowdpass.py` turns the two into an honest pair and grades them into the three courts. # _refcheck is SCRATCH. A roll you decide to keep is copied to `assets/_sheet_crowd3.png` (seated)
# and `_sheet_crowd3b.png` (arms up) — those two are the tracked art, they are what `_crowdpass.py`
# reads, and they are the only copy there is. Then `_crowdpass.py` turns them into an honest pair
# and grades them into the three courts.
# #
# WHY A SECOND SCRIPT. `_regen.py` cuts SPRITES out of a magenta field — every line of its canvas # WHY A SECOND SCRIPT. `_regen.py` cuts SPRITES out of a magenta field — every line of its canvas
# block is about isolating figures on a key colour. The crowd is the opposite job: one continuous # block is about isolating figures on a key colour. The crowd is the opposite job: one continuous
@@ -117,7 +120,9 @@ if __name__ == '__main__':
os.makedirs(OUT, exist_ok=True) os.makedirs(OUT, exist_ok=True)
what = sys.argv[1] if len(sys.argv) > 1 else 'seat' what = sys.argv[1] if len(sys.argv) > 1 else 'seat'
if what == 'seat': if what == 'seat':
ref = sys.argv[2] if len(sys.argv) > 2 else os.path.join(OUT, 'crowd_layout.png') # the layout reference defaults to the seated master in the repo, so a re-roll keeps the
# stand's geometry rather than inventing a new one every time
ref = sys.argv[2] if len(sys.argv) > 2 else os.path.join(HERE, '_sheet_crowd3.png')
roll(SEAT, ref, os.path.join(OUT, 'crowd_seat.png')) roll(SEAT, ref, os.path.join(OUT, 'crowd_seat.png'))
elif what == 'clap': elif what == 'clap':
roll(CLAP, os.path.join(OUT, 'crowd_seat.png'), os.path.join(OUT, 'crowd_clap.png')) roll(CLAP, os.path.join(OUT, 'crowd_seat.png'), os.path.join(OUT, 'crowd_clap.png'))
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB