--- 指示/控え/vbuild_20261105_before_back.py +++ 道具/vbuild.py @@ -98,6 +98,10 @@ - the round ring on each side face is a thin flat circular light strip printed flush on the flat white side panel, exactly as on the reference sheet's side view - the area INSIDE the ring is the same flat white side panel as outside it — NO hole, NO opening, NO speaker cone, NO lens, NO dot or circle at its centre, NO concentric rings, NO depth or shading inside +HAKOBUKUN HEAD SHAPE — EVEN IN CLOSE-UPS (2026-11-05): +- the screen is set FLUSH into the front of the narrower rounded upper tower of the body, framed by a thin even border, exactly as on the front view of the sheet. It is NOT a separate box, NOT a TV set, NOT a thick protruding bezel, and there is NO neck +- the upper tower widens into the lower body with soft rounded shoulders; in a close-up, copy this outline from the sheet instead of inventing a new head + HAKOBUKUN BODY — ONE BLOCK: - the screen head sits directly on top of the body and faces the SAME direction as the front of the body - the round ring panel appears ONLY on the side faces of the body, never on the front""" @@ -107,6 +111,13 @@ - do NOT stretch it taller; do NOT squash it wider; do NOT slim it beside a human - Hakobukun is a WIDE, STOUT, boxy machine — when in doubt, err WIDER, never taller - draw Hakobukun upright, in front, three-quarter, or rear view only — NO tilted, NO foreshortened, NO low-angle or high-angle views""" +HAKOBU_BACK = """HAKOBUKUN REAR VIEW — COPY THE ATTACHED REAR REFERENCE EXACTLY (2026-11-05: the back was drawn differently every time): +- from behind, the screen is NOT visible. The top is a smooth rounded white dome with ONE small notch at the centre of its lower edge — NO dark grille, NO mesh, NO vents on the dome +- under the dome, centred on the upper back: ONE small dark horizontal control box holding three small controls side by side (a round button, a small square, a rocker switch). Draw them as plain shapes with NO text +- below it: ONE large flat rectangular hatch door with a small tab at its top centre and a short vertical handle on its RIGHT edge +- at the bottom of the back: a dark recessed panel with ONE long horizontal light bar (drawn as a white strip) above two blocks of short horizontal vent slots +- the white bumper base wraps around the bottom, with a dark band and small wheels below +- the round side ring is NOT on the back. Nothing else is added, and NO writing appears anywhere""" TSUKAMU = """TSUKAMUKUN — TABLETOP GRIPPER ROBOT: - copy Tsukamukun and its work table directly from the attached reference sheets — nothing is added, and NO writing appears anywhere - Tsukamukun is mounted on top of the stainless-steel two-tier work table. It is NEVER on the floor, and it has NO wheels. The table stands on adjuster feet with NO casters @@ -270,6 +281,8 @@ refs.append(("Hakobukun robot orthographic sheet (front, side, rear)", K + "ハコブくん.png")) if p.get("drawer"): refs.append(("Hakobukun with its drawer pulled open — the drawer shape only", K + "ハコブくん_トレー開き.png")) + if p.get("back"): + refs.append(("Hakobukun REAR VIEW — the exact design of its back; copy every rear detail from this", K + "hakobu_back.png")) if "ツカム" in chars: ul.append("Tsukamukun and its work table (their labelled sheets)") refs.append(("Tsukamukun tabletop gripper robot", K + "ツカムくん.png")) @@ -340,6 +353,8 @@ "its width is its height divided by 1.7", "both stand on the same invisible ground: the bottom of its wheels and the soles of the shoes are level", "do NOT enlarge Hakobukun to balance the composition, and do NOT shrink it to waist height"])) + if "ハコブ" in chars and p.get("back"): + out.append(HAKOBU_BACK) if "ツカム" in chars: out.append(TSUKAMU) if "ピカリ" in chars: @@ -589,6 +604,8 @@ X = round(x0 * 1080 + (bw - side) / 2); Y = round(y0 * 1350 + (bh - side) / 2) img.paste(win, (X, Y)) dr = ImageDraw.Draw(img); dr.rectangle((X, Y, X + side - 1, Y + side - 1), outline=(0, 0, 0), width=6) + for (sx0, sy0, sx1, sy1), (dx, dy) in getattr(m, "CLONE", {}).get(i, []): # 仕上げの座標で、近くの網点を写して余計な物を消す(2026-11-05 背中の名札) + img.paste(img.crop((sx0, sy0, sx1, sy1)), (dx, dy)) for box in getattr(m, "PATCH", {}).get(i, []): # 仕上げの座標(1080×1350)を白で塗る:余計な字・崩れた名札(2026-10-31) ImageDraw.Draw(img).rectangle(box, fill=(255, 255, 255)) img.save(d + "/仕上げ/第%d話_P%d_1080x1350.png" % (ep, i))