Safecracker: art production spec

Drafted 2026-10-15, revised 2026-10-16, by Claude for Sarah. Source: docs/spec/safecracker-art-spec.md. Underworld game; Dutch sets the jobs. No game spec yet (section 1 records what was settled in conversation).

74
Confidence (top)
  • A game spec agreed before wave 2: +10
  • A pilot passing the dial-rotation and drum-reading checks: +10

Revised 2026-10-16. Every open question is decided (section 12). No answers are needed; the pilot can start.

Concept boards (mood only)

Concept: The Combination and The Deduction
The Combination and The Deduction. Mood reference; the Deduction's clues solve to 19.2, not a whole number.
Concept: Solve for A and The Clues
Solve for A and The Clues. Mood reference; neither puzzle has a correct answer (v = 120d + 10; x = 15.6).

Status: drafted 2026-10-15 by Claude; revised 2026-10-16 with Sarah's decisions (section 12). This spec commissions every painted asset for Safecracker's first build. No game spec exists yet; section 1 records the design settled in conversation, and the game spec will follow it. Sarah's two concept boards (Image-Assets/Safecracker/concepts/) are mood references only. Their style is not approved, their dial faces are scrambled, and none of their worked puzzles has a correct answer.

The app draws every number, word and mark: the clues, the dial and drum numerals, the ticks, the combination fields, the take, the attempts, the scratch-sheet ink and the calculator. The painter makes four places, each with its safe; three sets of lock parts; the blank papers; the contents of a safe; the scratch-sheet paper; and the Underworld tile.

1. The game the art serves

Safecracker is an Underworld game. Dutch, the Fence (bible), sets the jobs: four safes belonging to the rackets, his fee for each. Peregrine, burned and freelance, cracks them off the books. What's inside is her fee and his leads. A night runs four safes that get harder in order:

SafePlaceLockDialsWhat the clues test
StrongboxA loan shark's officeDrum windows2Linear equations in one or two variables
Wall safeA bookmaker's office at the racetrackBrass rotary dials3Systems of linear equations
Floor safeA chop shop's back officeBrass rotary dials3Percents, ratios and rates
Walk-in safeThe racket's counting roomNickel rotary dials, wheel handle3Quadratics and exponentials

The art therefore needs a place for each safe that holds still while the player reads; a safe whose door is closed or open; locks the app can set to any number; clue papers that look like scraps from the place; and contents that grow visibly with the take.

2. Sources of truth

WhatFileRule
Narrative-world styleART_DIRECTIONApplies in full, including the visual QA checklist. No pendant or hanging lamp: ART_DIRECTION reserves it for the Desk, The Lineup and interrogation scenes. Desk lamps, wall fixtures and ceiling fittings are fine.
Asset handlingASSET_PRODUCTIONApplies in full: masters, honest resolution, real transparency, manifest.
Format modelKingpin's Room art spec, The Alibi art brief, Dutch art specLayering, registration, anchors, manifest, import and review conventions.
Underworld finishImage-Assets/Kingpins-Room/plates/The Underworld's approved environment finish: places inked, warm practical light, tobacco, oxblood and brass. Safecracker's places sit in the same world without copying the room.
Dutch's paperDutch art spec §8His blank claim ticket (dutch_claim_ticket) is the job ticket that opens a night. Safecracker doesn't paint its own.
Mood referencesImage-Assets/Safecracker/concepts/2026-10-15-combination-and-deduction.png, 2026-10-15-solve-for-a-and-clues.pngHeavy dark-steel safes, brass dials, a desk lamp's pool, papers on a worn surface. Take the mood, not the layout (they are landscape), the lettering or the dial faces. The drum-window dials in the second board are the reference for the strongbox.
DistinctnessThe Raid's six locations (Image-Assets/The Raid/the-raid-production/environments/: apartment, industrial site, motor lodge, office building, townhouse, Victorian estate), Kingpin's supper-club room, The Alibi's interview room, Dutch's pawnshopNo safe's place may read as one of these (section 3).
Paper handlingImage-Assets/The Wager/Peregrine-Wager-Art-v1/README.md, Alibi brief §6Nine-slice, no lettering, no ruled lines in the text area, baked contact shadow.

3. The four places

Each place belongs to the rackets: crooks' businesses, not honest ones being robbed. Each is seen from where a safecracker would stand or kneel to work the lock. The safe is the subject; the room tells you whose it is. All four share one finish and one light logic, so a night reads as one job.

PlaceSafeThe roomLightPalette
Loan shark's officeA small squat steel strongbox with drum windows, bolted to the top of a battered desk, door facing cameraA cramped upstairs office over a shop: a frosted-glass door with no lettering, venetian blinds, a steel filing cabinet with one drawer open, a radiator, an ashtrayA gooseneck desk lamp at left; slatted cool light through the blindsGunmetal, khaki, frosted glass, tobacco
Bookmaker's officeA wall safe set into panelling, revealed behind a framed racing print swung open on its hingePanelled walls, a dark tote board's edge through an interior window, a rolltop desk, a coat standA brass wall sconce beside the safe; cool light from the interior windowMahogany, cream, racing green, brass
Chop shop back officeA floor safe under a lifted steel plate in an oil-stained concrete floor, seen from above at a steep angleA glass-walled office in a garage: through the glass, a stripped car on stands, doors leaning on a wall, hubcaps, an engine on a stand; inside, a stool and a parts catalogA caged work light clamped to a shelf, angled at the floor; cold garage light through the glassOil-dark concrete, chipped red toolbox, steel, brass
The racket's counting roomA heavy rectangular walk-in safe door set in a concrete wall, its hinges on the rightA windowless back room: bare counting tables with rubber bands and paper bands, a hand-crank adding machine with blank keys, empty canvas sacks, a single steel chairCaged ceiling fittings, cool and even; a warm spill under the door from the room beyondConcrete gray, nickel, brushed steel, canvas tan

Never in a plate. People, hands, tools in use, papers, clues, cash, text or numerals (calendars, tote boards, keys, catalogs and maker's plates stay blank), dials, drums, knobs or handles (they are separate layers, section 5), a pendant or hanging lamp, bloom, wet or glossy floors, smoke, spotlights, weapons.

Distinct from the Raid. The chop shop must read as a car-stripping garage, not the Raid's industrial site: the car parts carry it. The loan shark's office must read as one cramped rented room, not the Raid's office building. The counting room's door is rectangular and plain, never a round bank vault door.

Mood. Quiet and late. The owner has gone home. The only sound is the lock.

4. Camera, composition and layout

Canvas. Portrait 2:3. Generate at 1024 × 1536 until the assembly review passes, then upscale each place's plate and every layer registered to it by exactly 1.5× to 1536 × 2304, as one set by one method, and re-run the review, as for Kingpin's Room. The manifest records the native size and the method. An upscaled file is never described as native.

Phone fit (iPhone 16 Pro Max, 440 × 956 pt). The app fills the screen's height and crops the sides, about 15.5% of plate width per side. Keep the safe's door, lock and handle inside the central 66% of the width.

Bands, as a share of plate height:

BandPlate heightWhat it holdsArt rule
Header0–8%Status bar, Dynamic Island, the safe count and the takeDark ceiling or wall. Quiet.
Safe8–52%The safe door, its lock mounts and its handleThe door is front-on and square to camera (the floor safe reads square from above). The lock mounts are plain, flat metal, with nothing painted where a dial or drum window sits.
Work surface52–86%The clue papers, laid by the appDesk top, floor or counting table, even and matte, lit by the place's lamp. Nothing painted here.
Dock86–100%The combination fields, Try the safe, the scratch-sheet handleSurface falling into shadow. Quiet.

The scratch sheet, when raised, covers the dock and up to the top of the work surface. The safe band stays visible above it, so the player can see the lock while writing.

Lock mounts. Each plate carries plain flat mounting areas on the door in a row at its upper middle: two drum windows on the strongbox, three dials on each of the other safes. The handle's pivot sits below the row, right of center. A rotary dial mount fits a dial of at least 110 pt on the phone with 14 pt between dials; three take 358 pt. A drum-window mount fits a window of at least 120 × 70 pt. Positions go in anchors.json.

5. The lock parts

Three sets, shared across safes, so a night shows three kinds of lock without three kinds of interaction: the player types the numbers either way, and the app animates the lock to match.

### 5.1 Rotary dials: brass (wall and floor safes) and nickel (walk-in safe)

AssetWhat it isNative size (px)Notes
safecracker_dial_<finish>The dial's face: a flat disc with a turned rim and a satin face, no numerals and no ticks600 × 600The app draws 100 ticks and the numerals 0–90 by tens, and rotates the whole disc. Even in tone so the ticks read.
safecracker_bezel_<finish>The fixed ring around the dial, with a small index notch at 12 o'clock700 × 700Transparent center. Does not rotate.
safecracker_knob_<finish>The knurled center knob, front-on260 × 260Rotates with the dial; knurling even all round, so rotation shows no seam.
safecracker_index_<finish>The pointer triangle above the dial80 × 80Sits on the bezel's notch.

### 5.2 Drum windows (strongbox)

AssetWhat it isNative size (px)Notes
safecracker_drum_windowA small steel escutcheon with one rectangular window, a slim index line across its middle, a knurled thumbwheel at its right side600 × 360Transparent inside the window. One per dial; the app places two.
safecracker_drum_shadeA cylinder shading overlay sized to the window: darker at top and bottom, a soft highlight just above center, no numerals400 × 240The app draws the rolling two-digit numbers under it, so they read as printed on a turning drum.
safecracker_thumbwheelThe knurled thumbwheel alone, edge-on120 × 360The app scrolls its knurl texture as the drum turns; even knurling, no seam.

### 5.3 Handles

AssetWhat it isNative size (px)Notes
safecracker_handle_strongboxA short steel lever on a round boss500 × 500Pivot at the boss center.
safecracker_handle_brassA straight brass bar on a round boss, at rest pointing to 4 o'clock700 × 700Wall and floor safes. Pivot at the boss center.
safecracker_handle_wheelA nickel spoked wheel, four spokes, on a hub800 × 800Walk-in safe. Rotates about its hub; spokes evenly spaced so rotation reads cleanly.

All parts are lit from upper left, matching every plate's key light, with soft baked contact shadows in their alpha. Rotary dials read at 110 pt and 150 pt; drum windows at 120 pt wide.

6. Door states, contents and the alarm

Open doors. Each place has a second registered plate, safecracker_<place>_open: the same room with the safe door swung open and the interior empty and lit. Everything outside the door's swing is pixel-identical to the closed plate; the importer checks this against a mask (section 9). The app cross-fades from closed to open after a short handle-pull animation. The walk-in safe opens onto a shallow steel-shelved closet, not a room.

Contents. Transparent props the app places inside the open safe, front-on, sized for the strongbox's interior and scaled by the app for the others.

AssetWhat it showsNative size (px)
safecracker_cash_smallA thin banded stack of bills, faces unreadable600 × 300
safecracker_cash_bundleThree banded stacks, tied700 × 400
safecracker_cash_brickA tall block of banded stacks wrapped in brown paper, one corner open700 × 600
safecracker_noteA folded slip of paper, closed, slightly worn400 × 300
safecracker_ledger_pageA torn ledger page, folded once, red margin rule showing at the fold500 × 400
safecracker_jewelsA dark velvet roll, half unrolled, a few stones catching light700 × 400

Bills carry no portraits, numerals or lettering; their engraving is suggested, not drawn. The cash sizes must read apart at a glance at phone size, so the take visibly grows across a night.

The alarm. No art in v1. The app draws a red light wash and a bell's ring at the screen's edge.

7. The papers

Clue papers are scraps from the place, left by its owner. The app sets the clue text in a hand-lettered face, rotates each paper a degree or two and lays three to five on the work surface. Seen front-on and flat. Every paper kind is used in every place, so no kind ever signals a trick.

AssetObjectSilhouette and characterNative size (px)
safecracker_paper_notepadA sheet torn from a small notepadCream, a ragged perforated top edge, softened corners900 × 1100
safecracker_paper_cardAn index cardWhite card stock, crisp edges, one corner bent1000 × 650
safecracker_paper_envelopeThe back of an envelopeBuff, the flap's diagonal seams faint across the top1100 × 700
safecracker_paper_receiptA long till receiptNarrow, thin, slightly curled, a torn bottom edge600 × 1300

The night's job ticket is Dutch's claim ticket (dutch_claim_ticket, from the Dutch pack), not a Safecracker paper.

Rules for every paper. No lettering, numerals, logos, stamps or handwriting. No ruled lines in the text area (the notepad is plain, not lined). Transparent outside the paper with a soft baked contact shadow. Nine-slice ready: edge character within about 100 px of the border, an even middle, cap insets in the manifest. Text in the app's ink must read on every paper at body size.

The scratch sheet. safecracker_scratch_paper, a seamless tileable texture, 1024 × 1024, opaque: warm cream paper with a faint pale-blue 5 mm grid, very low contrast, so dark ink strokes read and the grid helps line up working. No margin line, no holes, no edge. The app frames it as a sheet with its own handle and tools.

8. The tile

game_safecracker, 512 × 512, opaque. It sits on the Underworld's plate list beside game_kingpin, drawn at 150 pt. A single brass dial on dark steel, close and slightly angled, lit from upper left, with the handle's boss just in frame. No numerals on the dial, no lettering. At 150 pt it must read as "a safe" and must not be confused with Kingpin's table or The Wager's chips.

9. Asset manifest and import contract

Folder: Image-Assets/Safecracker/safecracker-production/.

Resource nameFolderTypeNative size (px)Alpha
safecracker_<place> (×4: loanshark, bookmaker, chopshop, countingroom)plates/Closed-door plate1024 × 1536, then 1536 × 2304Opaque
safecracker_<place>_open (×4)plates/Open-door plateSame, registeredOpaque
safecracker_<place>_doormask (×4)masks/Door swing mask, not importedSameGrayscale
safecracker_dial_, _bezel_, _knob_, _index_ × brass, nickelparts/Rotary dial parts (§5.1)As listedTransparent
safecracker_drum_window, _drum_shade, _thumbwheelparts/Drum-window parts (§5.2)As listedTransparent
safecracker_handle_strongbox, _brass, _wheelparts/Handles (§5.3)As listedTransparent
safecracker_cash_small, _bundle, _brick, safecracker_note, _ledger_page, _jewelscontents/Contents (§6)As listedTransparent
safecracker_paper_notepad, _card, _envelope, _receiptpapers/Nine-slice papersAs listedTransparent
safecracker_scratch_paperpapers/Tileable texture1024 × 1024Opaque
game_safecrackertiles/Underworld tile512 × 512Opaque

That is 33 runtime files and 4 masks. Also in the pack: manifest.json (dimensions, native size, upscale method, alpha, byte size, SHA-256, cap insets, pivots), anchors.json (each plate's lock-mount centers and sizes, handle pivot, interior rectangle for contents, and work-surface rectangle, in plate pixels), specs/prompts.json (exact prompts and references for every image used) and review/ (section 10).

Proposed importer, tools/safecracker_import.py (not written; follows tools/kingpin_import.py):

10. Acceptance

Reading. At 440 × 956 pt, with placeholder UI: the locks sit on their mounts at full size; the app's ticks and numerals read on each dial, and a number set on a dial can be read against the index; the drum windows' two-digit numbers read at a glance; four clue papers with sample text read on the work surface; the dock reads over the bottom band; with the scratch sheet raised, the lock stays in view.

Rotation. Each dial and knob rotated through 360° in 3.6° steps shows no seam, wobble or lighting jump. The drum shade sells a turning cylinder with numbers scrolling under it. The thumbwheel's knurl scrolls without a seam. The brass and strongbox handles rotate 0–60° about their pivots; the wheel turns a full revolution without its hub shifting.

Registration. Each open plate matches its closed plate outside the door mask. Contents sit inside each safe's interior at a believable scale.

Fairness. Side by side, the four paper kinds are distinct, and nothing in any paper's look suggests its clue is a decoy, a plant or a missing piece.

Distinctness. The four places can't be confused with each other, with Kingpin's room, The Alibi's room, Dutch's pawnshop or any Raid location. The three locks read as three different safes at phone size. The tile can't be confused with game_kingpin or game_wager at 150 pt.

Style. ART_DIRECTION's visual QA checklist, every item recorded per plate. No hanging lamp. Blank calendars, boards, keys, catalogs, plates and bills.

Review composites in review/: each place closed and open; each place with its lock, handle, four papers and placeholder UI; the three lock types side by side at phone size; the cash sizes side by side at phone size; each paper stretched short and tall with sample text; the scratch sheet with sample ink; the tile at 150 pt beside Kingpin's and the Wager's.

11. Generation prompts

Record the exact prompt, model, size and references for every image used, in specs/prompts.json.

Shared style line, appended to every prompt: Graphic-novel noir finish: deliberate ink contours, restrained painterly shading. Matte materials, no gloss. Restrained practical light. No text, numerals, logos or signage. No people, no hands.

safecracker_loanshark

A loan shark's cramped upstairs office at night, seen standing at about 1.5 m, looking at a small squat steel strongbox bolted to the top of a battered wooden desk. The strongbox's door faces the camera square-on, centered, between 8% and 52% of image height; its door has two plain flat rectangular areas side by side in its upper middle where drum windows will go and a plain round boss area below right for a lever; no windows, numbers, lever or lettering painted on it. Below it, the desk top forms an even, matte, uncluttered surface from 52% to 86% of the height. A frosted-glass door with no lettering, venetian blinds, a steel filing cabinet with one drawer open, a radiator, an ashtray at the edge. Light from a gooseneck desk lamp at left, warm; cool slatted light through the blinds. Gunmetal, khaki, tobacco. No hanging lamp. Portrait 2:3, 1024 × 1536.

safecracker_bookmaker

A bookmaker's private office at a racetrack, at night. A wall safe set into mahogany panelling, revealed behind a framed racing print swung open on its hinge to the left. The safe door faces the camera square-on, centered, between 8% and 52% of image height, with plain flat steel areas for three dials in a row and a plain round boss area for a handle below right; no dials, no handle, no lettering. Below it, the top of a rolltop desk forms an even, matte work surface from 52% to 86% of height. A dark tote board's edge through an interior window with nothing written on it, a coat stand. A brass wall sconce beside the safe gives warm light; cool light comes through the interior window. Racing green, cream and mahogany. No hanging lamp. Portrait 2:3, 1024 × 1536.

safecracker_chopshop

The back office of a chop shop at night, seen from above at a steep angle, looking down at a floor safe set into an oil-stained concrete floor, its heavy steel cover plate lifted aside. The safe's square steel door reads square to the camera, centered, between 8% and 52% of image height, with plain flat areas for three dials in a row and a plain boss area for a handle; no dials, no handle, no lettering. Below it, bare concrete forms an even, matte surface from 52% to 86% of the height, old oil stains faint and flat. At the frame's top edge, the office's glass wall, and through it a stripped car on stands, car doors leaning on a wall, hubcaps, an engine on a stand. A chipped red toolbox at one side. A caged work light clamped to a shelf, angled down at the safe, warm; cold garage light through the glass. No hanging lamp. Portrait 2:3, 1024 × 1536.

safecracker_countingroom

A windowless counting room behind a racket's front, at night. A heavy rectangular walk-in safe door set in a concrete wall faces the camera square-on, centered, between 8% and 52% of image height, its hinges on the right; its face has plain flat nickel areas for three dials in a row across its upper middle and a plain round hub area below right for a spoked wheel; no dials, no wheel, no lettering. Below it, the top of a bare counting table forms an even, matte surface from 52% to 86% of the height, with a few loose rubber bands and paper bands at its edge. A hand-crank adding machine with blank keys, empty canvas sacks, a single steel chair. Caged ceiling fittings give cool, even light; a warm spill comes from under a door off frame. Concrete, nickel, brushed steel, canvas tan. Not a bank: no round vault door. Portrait 2:3, 1024 × 1536.

safecracker_<place>_open (an edit of the approved closed plate)

In this exact image, swing the safe door open on its hinge to show an empty interior lit by the room's light. Change nothing outside the door's swing.

safecracker_dial_brass

A single combination-safe dial disc seen perfectly front-on: a turned brass rim and a flat satin brass face, completely blank, with no numbers, no tick marks and no center knob. Lit from upper left, even in tone across the face. Transparent background with a soft contact shadow. 600 × 600.

safecracker_drum_window

A small steel lock escutcheon seen perfectly front-on, with one rectangular window opening (transparent inside), a thin index line engraved across the middle of the window's frame, and a knurled steel thumbwheel set into its right side. No numbers, no lettering. Lit from upper left. Transparent background with a soft contact shadow. 600 × 360.

safecracker_handle_wheel

A nickel spoked safe-door wheel with four evenly spaced spokes on a central hub, seen perfectly front-on, lit from upper left. No lettering. Transparent background with a soft contact shadow. 800 × 800.

The bezel, knob, index, nickel versions, drum shade, thumbwheel, other handles, contents, papers, scratch texture and tile follow sections 5–8 word for word.

12. Decisions (Sarah, 2026-10-15 and 16)

QuestionDecision
Who sets the job?Dutch, the Fence: an undercover police officer and Peregrine's connection inside the department. His claim ticket is the job ticket.
Four places, or one?Four, all the rackets' own businesses. The pawnshop went to Dutch, so the first safe is a loan shark's office; the chop shop and the counting room replaced the jeweler and the bank.
Rotary dials or drum windows?Claude's call, favoring variety: drum windows on the strongbox, brass rotary dials on the wall and floor safes, nickel rotary dials with a wheel handle on the walk-in safe.
Scratch paperFaint grid.
The last safe's dialsThree. No clue set needs more than two unknowns at once.

13. Final review

Pros. Four racket businesses make the night's climb visible and keep Peregrine on the right side of the story. Three lock types give each safe its own feel without three kinds of interaction. The app draws every numeral, so no generated image can scramble a dial again. The papers and the open-door edit follow approved Kingpin, Alibi and Dutch conventions, and the fairness rule keeps the art from leaking a trick.

Cons. Eight plates are more than any single Underworld game has needed so far. Rotating painted dials and scrolling thumbwheels must be seamless, and knurling often isn't. The chop shop's steep camera breaks the shared eye height. The design behind the art is still settled only in conversation.

Edge cases. Narrower phones crop more (about 16% per side on a 393 pt iPhone 16), which the central-66% rule covers. Three dials at 110 pt fit a 393 pt phone with room to spare. Large Dynamic Type pushes the clue text taller, so the receipt and notepad carry the longest clues. If the drum shade can't sell the cylinder over app-drawn numbers, the strongbox falls back to brass rotary dials with no other change.

Adjustments worth considering. Commission the loan shark's office with the drum-window parts and the bookmaker's office with the brass dial parts first, as a pilot that covers two of the three lock types; pass the rotation and reading checks; then commission the chop shop and the counting room. Write the game spec before the second wave.

Confidence: 74. Raised by a game spec agreed before wave 2 (+10), and a pilot passing the dial-rotation and drum-reading checks (+10).

74
Confidence (bottom)
  • A game spec agreed before wave 2: +10
  • A pilot passing the dial-rotation and drum-reading checks: +10