Pinturas e ícones
Cada ficheiro com o seu autor, fonte e licença, ou a instrução que o gerou
Each entry lists the file, the tool, the date, the exact prompt, which variant was kept, and notes.
@web files are web-sized copies (portraits 512x512 PNG; key art and map as JPEG q85 at original size, because the originals are smaller than 1920 wide and are never upscaled).
Alternates that were not chosen live in _variants/.
Established style (batch 1, 2026-10-25)
- Portraits (ChatGPT): semi-realistic painterly oil look, warm key light from the left with a gold rim light, plain warm dark-brown vignette background, square, head and shoulders, three-quarter turn to the viewer's left. All five come from one ChatGPT conversation: the first (Simon) set the style and each later prompt says "matching exactly the same painting style, lighting, framing...". Keep doing that for new NPCs. Start new portraits by attaching
portraits/simon.pngas a style reference. - Key art (ChatGPT): golden-hour painterly realism. It reads more "cinematic matte painting" than stylised WoW. ChatGPT drifts toward photo-realism unless it is told "clearly a painted illustration".
- Map (Gemini): sepia ink on aged parchment with teal and olive watercolour washes. Gemini spelled the labels correctly on the first try.
art/key_art.png (superseded, now _variants/key_art_white_synagogue.png)
Replaced on 2026-10-26 by the basalt-synagogue edit (see "Batch 2" below). The original white-synagogue image described here is now
_variants/key_art_white_synagogue.png.
-
Tool: ChatGPT (image generation), 2026-10-25
-
Size: 1672x941 PNG (3.2 MB)
-
Kept: variant 2 (follow-up edit). Variant 1 is in
_variants/key_art_v1.png; it also has the anachronistic white synagogue. -
Prompt (variant 1):
Create an image (wide 16:9 landscape, no text, no logos, no watermark): painterly, stylized fantasy-RPG key art in the spirit of World of Warcraft cinematic illustration, but grounded and historically accurate to 1st-century Galilee (around AD 28). Dawn on the Sea of Galilee seen from the shore at Capernaum. In the foreground, two wooden single-mast fishing boats are drawn up on the sand; fishing nets hang drying on simple wooden racks. A lone fisherman, seen from behind, sits on the sand mending a net: a broad-shouldered man in his 30s with dark greying hair, wearing a brown wool tunic. Behind him the village: low houses of black basalt stone with flat mud-and-reed roofs, and a white limestone synagogue rising above them. Soft mist lies over the still water; across the lake the Golan hills glow in the first warm light, with olive trees on terraced slopes. Warm Mediterranean light, earthy palette of linen, ochre, olive green, black basalt, lake teal and a touch of gold, soft rim light, gentle painterly texture. No medieval, European, armour, fantasy or modern elements, no magic or glowing effects.
-
Prompt (variant 2, same conversation):
Nice composition. Please make a second variant of the same scene and composition (16:9, no text) with these changes: make it clearly a painted illustration rather than photographic, stylized like World of Warcraft key art with painterly brushwork and slightly simplified shapes; make the village houses low, single-storey, built of very dark black basalt stone with flat mud-and-reed roofs; the synagogue should be a white limestone building that stands out against them; replace the cypress trees with olive trees and a few date palms; keep the fisherman seen from behind mending the net, the two boats on the sand, the nets drying on racks, the mist over the water and the dawn glow over the hills across the lake.
-
Notes: Variant 1 had grey multi-storey stone houses and Italian cypresses. Variant 2 fixes both (dark single-storey basalt houses, olive trees and palms, white synagogue) but is still fairly realistic rather than strongly stylised. The left third (nets and rack) is busy and the right edge has a boat and mast, so a title logo fits best centred in the upper sky band.
portraits/simon.png
-
Tool: ChatGPT, 2026-10-25. One conversation produced all five portraits, in this order.
-
Size: 1254x1254 PNG;
@web512x512 -
Kept: the only variant
-
Prompt:
Create a square (1:1) character portrait for the dialogue window of a historical role-playing game set in 1st-century Galilee (around AD 28). Style: painterly, stylized fantasy-RPG character portrait in the spirit of World of Warcraft character art, but grounded and historical; visible painterly brushwork, warm soft key light from the left, gentle warm rim light, earthy palette. Framing: bust portrait, head and shoulders, the figure turned three-quarters to the viewer's left, centred, plain warm dark brown background with a soft vignette, no props, no text, no border. Subject: Simon, a weathered Galilean fisherman in his 30s, sun-browned olive skin, strong broad face with crow's feet, dark curly hair and a full dark beard streaked with grey, honest and determined expression, wearing a coarse brown wool tunic with a simple darker brown wool mantle over one shoulder. Historically accurate clothing, no medieval or modern elements, no halo or glowing effects.
-
Notes: Fits the look of
simonin world.php (brown robe, darker mantle, grey-streaked hair).
portraits/andrew.png
-
Tool: ChatGPT, 2026-10-25 · 1254x1254 · only variant
-
Prompt:
Excellent, keep exactly this style. Now create the next portrait in the same series, matching this one exactly in painting style, lighting, framing (square, head and shoulders, three-quarter turn to the viewer's left, centred), plain warm dark brown vignette background, no text. Subject: Andrew, Simon's younger brother, a Galilean fisherman in his late 20s, family resemblance to Simon but leaner face, sun-browned olive skin, dark brown almost black hair and a shorter, darker full beard with no grey, a quieter, thoughtful, gentle expression, wearing a faded grey-brown wool tunic with a rust-brown wool mantle over the shoulder.
-
Notes: Matches world.php
andrew(grey-brown robe, rust mantle, near-black hair).
portraits/miriam.png
-
Tool: ChatGPT, 2026-10-25 · 1254x1254 · only variant
-
Prompt:
Very good. Next portrait in the same series, matching exactly the same painting style, lighting, framing (square, head and shoulders, three-quarter turn to the viewer's left, centred) and plain warm dark brown vignette background, no text. Subject: Miriam, an elderly widow of Capernaum in her 70s, deeply lined sun-browned olive skin, kind but tired dark eyes, a few wisps of grey hair visible, wearing a dark charcoal-grey wool head covering draped over her head and shoulders, and a dark slate-grey wool dress. Modest, dignified, gentle expression.
-
Notes: She reads as about 65 rather than 75. Regenerate with "very old, frail, deeply wrinkled" if she needs to look older.
portraits/tobiah.png
-
Tool: ChatGPT, 2026-10-25 · 1254x1254 · only variant
-
Prompt:
Lovely. Next portrait in the same series, matching exactly the same painting style, lighting, framing (square, head and shoulders, three-quarter turn to the viewer's left, centred) and plain warm dark brown vignette background, no text. Subject: Tobiah, the village carpenter of Capernaum, a sturdy man in his late 50s, sun-browned olive skin, short grey hair, a full grey beard, strong forearms and shoulders, a steady, practical, slightly wry expression, wearing a sand-coloured wool tunic and a dark brown leather work apron over it, with a little sawdust on the cloth.
-
Notes: The leather apron has a fairly modern bib-and-strap cut with a button. It's minor at dialogue size; for a stricter version, ask for "a simple wrap of leather tied at the waist".
portraits/eli.png
-
Tool: ChatGPT, 2026-10-25 · 1254x1254 · only variant
-
Prompt:
Great. Last portrait in the same series, matching exactly the same painting style, lighting, framing (square, head and shoulders, three-quarter turn to the viewer's left, centred) and plain warm dark brown vignette background, no text. Subject: Eli, an old scribe and elder of the Capernaum synagogue, in his late 60s, lean scholarly face, olive skin, long white-grey beard and white hair, deep-set wise and patient eyes, wearing a cream undyed linen tunic and a cream wool mantle with a narrow purple woven stripe along its edge, the mantle drawn up loosely over the back of his head. Calm, learned expression. Historically accurate, no jewellery, no props.
-
Notes: Matches world.php
eli(cream robe, purple mantle accent, white hair).
maps/galilee_map.png
-
Tool: Gemini (gemini.google.com, image generation), 2026-10-25
-
Size: 1376x768 (Gemini delivers JPEG; converted to PNG with sips);
maps/[email protected]447 KB -
Kept: variant 2 (revision). Variant 1, which adds an unrequested "Golan Heights" label, is in
_variants/galilee_map_v1_golan_label.png. -
Prompt (variant 1):
Generate an image: an illustrated, hand-drawn parchment map of the north shore of the Sea of Galilee in the 1st century AD, for a historical role-playing game. Landscape 16:9 orientation, viewed from above with north at the top. The lake fills the lower half, painted in soft teal washes. Along the north shore: the fishing village of Capernaum in the middle, drawn as a small cluster of dark basalt houses with a white synagogue; Bethsaida to the northeast, near where the Jordan River flows into the lake from the north; Tabgha with its springs a short way west of Capernaum along the shore; Magdala further to the southwest on the western shore. Rolling hills with olive trees drawn behind the shore, the Golan heights on the eastern side, a few tiny fishing boats with single masts on the water. Style: aged warm parchment, sepia ink linework, muted watercolour washes in ochre, olive green and teal, a simple decorative border and a small compass rose. Only these five text labels, in a clean classical serif hand-lettered style, spelled exactly: "Capernaum", "Bethsaida", "Tabgha", "Magdala", "Sea of Galilee". No other text, no modern roads, no modern borders, no grid, no scale bar.
-
Prompt (variant 2, same conversation):
Great. Please make the same map again, identical in every way, but remove the "Golan Heights" label entirely and leave those eastern hills unlabelled. Keep the other five labels exactly as they are, spelled exactly: "Capernaum", "Bethsaida", "Tabgha", "Magdala", "Sea of Galilee".
-
Notes: All five labels are spelled correctly. "Golan Heights" was removed because it is a modern name; the ancient region was Gaulanitis. The geography is stylised but right in relative terms: Bethsaida sits just east of the Jordan inlet, Tabgha's springs are west of Capernaum, and Magdala is on the western shore. Capernaum's dark basalt houses and white synagogue match the game.
UI art (j12-ui agent, 2026-10-26)
All four come from one ChatGPT image conversation ("Generate Game UI Frame"), in this order, so they share the same aged-bronze, green-patina meander and olive-rosette look. Originals were 1254x1254 (1536x1024 for the icons) PNG with alpha; processed with Pillow and cwebp.
images/ui/window-frame.webp (9-slice frame for .j12-window and .j12-actionbar)
-
Tool: ChatGPT, 2026-10-26. Kept: the only variant. Alpha bbox cropped to 1171x1137, scaled 25% to 293x284, WebP q90 (26 KB). Used with
border-image: url(...) 75 / 36px round. -
Prompt:
Generate an image: a game UI window frame for a World of Warcraft style RPG set in 1st-century Roman Galilee. Square 1024x1024, perfectly symmetrical, straight front view, no perspective. A rectangular frame border about 70 px thick running around all four edges: hand-painted aged bronze and warm gold metal with a carved Roman meander (Greek key) band, a dark inner bevel edge, and ornate carved corner pieces with olive leaves and a round rosette boss at each of the four corners. The whole centre inside the border is fully TRANSPARENT, and the background outside the frame is transparent too (PNG with alpha). Hand-painted Blizzard style, soft top-down light, warm highlights on edges, no text, no letters, no logo, no drop shadow outside the frame.
images/ui/parchment.webp (tile for .j12-parchment)
-
Tool: ChatGPT, same conversation. Kept: the only variant. Checked seamless by half-offsetting. Desaturated 45%, lightened to a mean of about (231, 221, 197), contrast 0.8, 512x512, WebP q82 (19 KB).
-
Prompt:
Great frame, exactly right. Now a second image in the same hand-painted Blizzard style: a seamless, tileable parchment paper texture, square 1024x1024, flat and evenly lit, warm cream and light tan aged papyrus-like parchment with subtle fibres, soft mottled stains and very gentle colour variation, no dark vignette, no burnt edges, no folds, no text, no symbols, no frame. It will be repeated as the background behind dark ink text in the game's quest log, so keep it light and calm with low contrast.
images/ui/minimap-ring.webp (bezel over the minimap canvas)
-
Tool: ChatGPT, same conversation. Kept: the only variant. Cropped to the alpha bbox (1217x1213), 400x399, WebP q84 (42 KB). The opening is 74% of the image, so the CSS draws it at 131% of the canvas.
-
Prompt:
Thanks. Third image, matching the first frame exactly (same aged bronze and gold metal, same green-patina meander band, same rosette bosses and olive leaves): a perfectly CIRCULAR ring bezel for a round minimap, square 1024x1024, straight front view, perfectly centred. The ring is about 80 px thick with the Roman meander band running all the way around, a dark inner bevel lip, and four round rosette bosses with small olive-leaf sprigs at the top, right, bottom and left. The inside of the circle and everything outside the ring are fully TRANSPARENT (PNG with alpha). No text, no letters, no compass needle, no drop shadow.
images/ui/icons/{character,skills,talents,journal,bag,controls,menu}.webp (painted icons, 128 px)
-
Tool: ChatGPT, same conversation. Kept: the only variant. A 4x2 sheet sliced by content bbox into squares, 128x128, WebP q86 (4–6 KB each). Used in the micro menu; Tabler stays as the fallback. Its
coin(a generic silver denarius on the dark sheet background) was replaced on 2026-10-28 bycoin_denariusandcoin_assarionbelow. -
Prompt:
Perfect. Last one: an icon sheet for the same game, landscape 1536x1024, a precise grid of 4 columns by 2 rows = 8 square icons, each icon centred in its own equal cell with generous empty margin, all on one plain flat very dark brown background (#17110c), no grid lines, no borders, no frames, no text. Hand-painted World of Warcraft spell-icon style: chunky readable shapes, strong silhouette, warm top-left light, rich but harmonious colours, 1st-century Judean objects only. Row 1: (1) the head and shoulders of a bearded Galilean fisherman in a brown wool tunic, (2) a carpenter's iron adze crossed with a wooden net-mending needle, (3) a lit terracotta oil lamp with a small warm flame, (4) a rolled papyrus scroll tied with a cord and a red wax seal. Row 2: (5) a worn leather satchel bag with a strap, (6) a wooden wax writing tablet with a bronze stylus, (7) a small bronze sundial, (8) a silver Roman denarius coin.
images/ui/icons/fact_{free,browser,saved,scripture}.webp (website hero facts, 128 px)
-
Tool: ChatGPT, 2026-10-29, conversation "Generate Game Icons", with a screenshot of 14 existing
ui/iconsattached as the style reference. Kept: the only variant (1536x1024). Cut per icon by content bbox (rows split at y 470/490 because the bread and the jar sit near the cell line), padded 10% to a square, 128x128, WebP q86 (4–6 KB). Used in the home page hero under the Play button, in.j12-slotsockets;fact_readycarries the WebGL check badge. -
2026-10-29 later: the facts now sit round in the portrait ring (
.j12-portrait) instead of square sockets. The browser check moved ontofact_browseras a badge and second line, sofact_ready(the oar and rope) was dropped.fact_scriptureis a copy ofjournal.webp(the sealed scroll), for "Scripture quoted word for word". -
Prompt:
Generate an image. The attached screenshot shows icons from my game. Make 4 NEW icons in exactly the same style: hand-painted World of Warcraft spell-icon style, chunky readable shapes, strong silhouette, warm top-left light, rich but harmonious colours, 1st-century Judean objects only. Landscape 1536x1024, a precise grid of 2 columns by 2 rows = 4 square icons, each icon centred in its own equal cell with generous empty margin, all on one plain flat very dark brown background (#17110c), no grid lines, no borders, no frames, no text. (1) two open cupped hands offering a round loaf of flat bread, a gift freely given. (2) a small window in a basalt stone wall with its wooden shutters thrown open, sunlight and a glimpse of blue lake and hills through it. (3) a tall cream clay scroll jar with its lid tied on with a cord, a rolled scroll peeking from a second jar beside it. (4) a wooden fisherman's oar crossed with a coiled hemp rope, ready to set out.
images/ui/divider-{centre,bar,end-l,end-r}.webp (.j12-divider and the window header rule)
-
Tool: ChatGPT, 2026-10-28, conversation "Generate game divider image". Kept: the only variant (1536x1024 PNG with alpha). Cut into four pieces on the same 320 px band around the rod (rows 349–669): left cap (x 35–152), a plain rod slice (x 180–360) that CSS stretches, the centrepiece with its meander and rosettes (x 378–1158) and right cap (x 1384–1503). Each scaled to 96 px tall, WebP q90 (1–11 KB). Replaced the stretched
divider.svg. -
Prompt:
Generate an image: a game UI ornamental horizontal divider for a World of Warcraft style RPG set in 1st-century Roman Galilee. Landscape 1536x1024, perfectly symmetrical left to right, straight front view, no perspective. The divider is a single long horizontal bar laid across the exact vertical middle of the canvas, spanning about 92% of the width. In the centre: an ornate carved centrepiece about 120 px tall and 300 px wide: a faceted gold lozenge (diamond) set with a small dark garnet cabochon, flanked on each side by curling olive leaves and a small round rosette boss. From the centrepiece, two thin straight rules run out left and right: hand-painted aged bronze and warm gold metal, about 10 px thick with a bright top highlight and a dark lower bevel, perfectly uniform along their length, and tapering to a fine sharp point at both far ends. Everything outside the divider is fully TRANSPARENT (PNG with alpha). Hand-painted Blizzard style matching an aged-bronze frame with a Roman meander band and olive-leaf corner rosettes, soft top-down light, warm highlights on edges, crisp clean silhouette, no text, no letters, no logo, no drop shadow, no background.
images/ui/portrait-ring.webp (ring around every .j12-portrait)
-
Tool: ChatGPT, 2026-10-29, conversation "Generate RPG Portrait Ring". Kept: the second, slimmer variant (1254x1254 PNG with alpha); the first had the right metal but a band half as wide as the opening's radius, too heavy for the small panel portraits. Cropped to a 1196 px square centred on the opening (not the bbox, which the bosses skew), 384x384, WebP q88 (35 KB). The ring's inner rim is 75% of the image, so the CSS draws it at 130% of the portrait. Replaced the hand-made
portrait-ring.svg. -
Prompt:
Generate an image: a round portrait frame ring for a World of Warcraft style RPG set in 1st-century Roman Galilee, the ring that sits around the player's round character portrait in the HUD. Square 1024x1024, perfectly centred, perfectly circular, straight front view, no perspective. The ring is thick and chunky, about 110 px wide, so it still reads clearly when shown very small (about 80 px on screen): a heavy cast bronze ring with a raised, polished warm-gold outer rim and inner rim, and between them a recessed band of darker aged bronze with green patina in the crevices and a bold twisted rope (cable) moulding running all the way around. Real metal texture: fine hammer marks, small scratches and wear, worn bright edges where it would be handled, darker grime in the recesses. Four round gold rivet bosses sit on the ring at the top, right, bottom and left, each slightly larger than the ring is wide. A dark inner bevel lip where the ring meets the opening. The circular opening in the middle is exactly 780 px across and fully TRANSPARENT, and everything outside the ring is fully TRANSPARENT too (PNG with alpha). Hand-painted Blizzard style matching an aged-bronze UI with a green-patina Roman meander band and olive-rosette bosses, soft top-left light, warm highlights on the upper edges, crisp clean silhouette, no text, no letters, no logo, no gems, no drop shadow, no background.
Beautiful, this is exactly the right look and texture. Please make it again in exactly the same style, metal, patina, rope moulding and rosette bosses, but with a much SLIMMER ring: square 1024x1024, the transparent circular opening is 800 px across (78% of the canvas width), and the ring band is only about 90 px wide on each side, so the band is about a quarter of the opening's radius. Keep the raised gold outer and inner rims, the twisted rope in the recessed patina band between them, and the four rosette bosses at top, right, bottom and left, but make the bosses only a little wider than the band (about 120 px) so they stick out just slightly. Keep the dark inner bevel lip thin. Perfectly circular and centred, transparent inside and outside (PNG with alpha), no text, no drop shadow, no background.
images/ui/portrait-ring-dark.webp (.j12-portrait--iron, Judas Iscariot on the website)
- Not generated: made from the same ChatGPT original as
portrait-ring.webp, with the same crop, so it lines up exactly. Pillow: luminance weighted (0.3, 0.55, 0.15), gamma 1.9 to crush the mid-tones, then tinted to a cool blackened iron (R x0.80, G x0.82, B x0.88 plus a small lift), 384x384, WebP q88 (25 KB).
Hand-made SVG (not generated)
images/ui/{olive-branch,level-badge}.svg were written in code (Python-generated SVG), not generated. Earlier SVG corner pieces, an SVG minimap ring, an SVG divider and an SVG portrait ring were replaced by the painted art above and removed.
Item icons (j12-artist, 2026-10-26)
Files: items/{key}.png (slice original, 308–648 px square) and items/{key}.webp (256×256, cwebp q85, 4–17 KB). One per key in config/game/items.php (21) and config/game/loot.php → items (12) = 33 icons.
Style for the set: WoW inventory icon. One object, centred, filling about 75–80% of the square, three-quarter view, chunky painted shapes with visible brushwork, warm key light from the upper left, soft rim light, earthy palette. No text, no frame (the HUD draws it), no hands. Generated on a flat #1a130d background in 4×3 sheets in one ChatGPT conversation ("Generate inventory icon sheet"), then post-processed so every icon has the same background: the flat sheet colour is keyed out with a soft mask and replaced with a warm radial vignette (centre about #422f20, slightly up-left toward the light, edges #0e0a07, light low-frequency noise). Slicing segments each sheet into connected components (small pieces join the nearest big piece), crops a square with 7% padding around each object, and paints out anything that belongs to a neighbouring cell. Scripts: slice3.py, finish.py (Pillow plus scipy, run from a scratchpad venv, not in the repo).
Next batch: keep using the same conversation, or start a new one with sheet A attached as the reference. Saying "smooth blending" pushed sheet B toward photo-realism, so ask instead for "stylized, chunky, bold painted highlights, like a Blizzard game icon, not a photograph". To get an adze, describe it as hoe-shaped with the blade across the handle, otherwise it comes out as an axe.
Sheet A: _variants/items_sheet_a.png (ChatGPT, 1536×1024)
Keys: fish, water_jar, wooden_bowl, bread, barley_sheaf, olive_oil, reed_bundle, salted_fish, figs, fine_net, iron_adze, wax_tablet (the bread and adze from this sheet were replaced later).
Generate an image: an inventory icon sheet for a World of Warcraft style RPG set in 1st-century Galilee (Roman-era Judea, AD 28). Landscape 1536x1024, a precise grid of 4 columns by 3 rows = 12 square icons, each object centred in its own equal cell, filling about 75% of the cell, with clear empty gutters between cells. All on one plain flat very dark warm brown background (#1a130d), no grid lines, no borders, no frames, no text, no labels, no numbers, no hands. Hand-painted Blizzard / WoW inventory icon style: strong painterly brushwork, chunky readable silhouettes that read at 40 px, warm key light from the upper left, soft rim light, earthy palette (linen, ochre, olive, basalt, lake teal, a touch of gold). Each object shown alone, slight three-quarter view. Row 1: (1) a fresh silvery-grey tilapia fish (St Peter's fish, deep-bodied, spiny dorsal fin), (2) a round-bellied terracotta clay water jar with two small handles, water glinting at the mouth, (3) a hand-turned olive-wood bowl with visible grain, (4) a round flat barley loaf with a scored, cracked crust. Row 2: (5) an armful sheaf of ripe golden barley bound with a twist of straw, (6) a small clay juglet of green-gold olive oil with a stopper, (7) a bundle of green-cut Jordan reeds tied with cord, (8) a split, salted and sun-dried flattened tilapia fish, pale and crusted with salt. Row 3: (9) a small woven reed basket heaped with ripe purple figs and a fig leaf, (10) a folded close-knotted linen casting net with small stone sinkers, (11) a carpenter's iron adze with a curved wooden handle, (12) a hinged wooden wax writing tablet open showing dark wax, with a bronze stylus.
Sheet B: _variants/items_sheet_b.png (ChatGPT, 1536×1024, second try)
Keys: wool_mantle, leather_sandals, venison, partridge, quail, goat_meat, ox_meat, mutton, feathers, fang, gazelle_horn, roe_antler.
The first try ("...One refinement: use smooth, soft painterly brush blending rather than a blocky mosaic texture. Next sheet: Row 1: (1) a folded heavy mantle of undyed cream-brown wool... (12) a short brown roe deer antler with three tines and a pearled, knobbly base.") came out photographic and was rejected and deleted. The kept version came from this follow-up:
That came out too photographic and realistic, it no longer matches the first sheet. Please redo this exact same second sheet (same 12 objects, same order, same 4x3 grid, landscape 1536x1024, same flat dark brown background, clear gutters, no text) in exactly the hand-painted World of Warcraft inventory icon style of the FIRST sheet: stylized and chunky, slightly exaggerated readable shapes, bold painted highlights and visible brush strokes, warm saturated colours, soft rim light, like a Blizzard game icon, not a photograph. The meats should look stylized and appetizing like game food icons, not raw-photo realistic.
The objects, in order: (1) a folded heavy mantle of undyed cream-brown wool, (2) a pair of worn leather sandals with knotted straps, (3) a bundle of thin dark-red strips of dried venison tied with twine, (4) a small roast partridge on a short wooden roasting stick, (5) two small plump roast quail, (6) a raw goat haunch on a broad fig leaf, (7) a large raw beef rib cut with a white bone, (8) three chunks of mutton with a band of white fat on a wooden skewer, (9) a fan of speckled grey and russet partridge feathers, (10) a single long wolf canine tooth on a leather cord, (11) a single ridged, lyre-shaped black gazelle horn, (12) a short three-tined roe deer antler with a pearled base.
Sheet C: _variants/items_sheet_c.png (ChatGPT, 1536×1024)
Keys: jackal_pelt, gazelle_hide, wolf_pelt, roe_hide, fleece, goat_hair, ox_hide, shepherds_flute, sheep_bell, plus bread from cell 12 (a flat barley loaf). Cells 10 and 11 (adzes) came out as axes and were not used. Cell 4 (roe hide) was dappled like a fawn and was replaced.
Much better, that matches. Third sheet in exactly the same hand-painted WoW icon style, background, lighting and layout (landscape 1536x1024, 4 columns by 3 rows, 12 icons, each object alone and centred in its cell with clear empty gutters, no text, no frames, no hands). Row 1: (1) a folded coarse golden-tawny jackal pelt with a bushy black-tipped tail hanging off it, (2) a thin supple sandy-fawn gazelle hide rolled up and tied with a thong, pale belly edge showing, (3) a thick folded grey wolf pelt with dense fur, (4) a soft flat red-brown roe deer hide, folded once, smooth short hair. Row 2: (5) a thick bundle of cream-white curly sheep fleece, (6) a twisted hank of long coarse black goat hair tied in the middle, (7) a heavy stiff folded dark brown ox hide tied with a rope, (8) a shepherd's double reed pipe: two thin cane pipes bound together side by side with cord, with finger holes. Row 3: (9) a small bronze sheep bell with a clapper on a frayed rope cord, (10) a carpenter's iron ADZE: the flat iron blade is set crosswise, perpendicular to the short curved wooden handle like a small hoe, NOT an axe, (11) the same kind of iron adze seen from a different angle, (12) a round flat barley flatbread, thin and broad like a disc, browned and lightly charred, with a torn edge.
- bread: the flat loaf replaces sheet A's domed loaf, which looked like a modern sourdough boule. Small flat round loaves fit the 1st century (John 6:9) better.
Sheet D: _variants/items_sheet_d_adze_roe.png (ChatGPT, 1254×1254, 2×2)
Keys: iron_adze (cell 1) and roe_hide (cell 3, folded; the rolled cell 4 was not used because gazelle_hide is already rolled).
Great set. Two objects still need fixing, same style, same background, no text: a square 1024x1024 sheet, 2 columns by 2 rows = 4 icons, each alone and centred in its cell with clear gutters. The adzes came out as axes. An adze is different: the iron blade is turned 90 degrees so its cutting edge runs ACROSS the handle, like a garden hoe or a pickaxe head, and the blade curves down toward the handle; it is swung downward to shave timber flat. Show it in clear side profile so the L-shape is obvious. Row 1: (1) a carpenter's iron adze in side profile, short curved olive-wood handle, the flat iron blade bent at a right angle to the handle like a hoe, (2) the same adze from a slightly different angle, still clearly hoe-shaped. Row 2: (3) a soft roe deer hide folded once, uniform warm red-brown short hair with NO white spots, pale cream underside showing at the edge, (4) the same roe deer hide loosely rolled and tied with a thin leather thong, uniform red-brown, no spots.
Animal portraits (j12-artist, 2026-10-26)
Files: animals/{key}.png (512×512 cell crop; 768×768 for wolf and gazelle) and animals/{key}.webp (512×512, cwebp q85, 24–49 KB). One per species key in config/game/animals.php.
Style for the set: head-and-shoulders (head-and-neck for birds), three-quarter view facing slightly left, painterly, warm key light and rim light, the body fading into a dark warm-brown vignette at the bottom. The model painted its own glow behind each animal, so the backgrounds were kept as they are (no keying). Calm and naturalistic: no glowing eyes, no snarling. Made in one ChatGPT conversation ("Generate animal portrait sheet") with portraits/simon.png attached as the style reference. Sheets are 3×2 at 1536×1024, so each cell is 512 px and is cut directly. Where the row below poked into a top-row crop (ear tips), the bottom 30–34 px were faded to dark.
Sheet A: _variants/animals_sheet_a.png (ChatGPT + simon.png reference)
Keys: hare, partridge, quail, jackal (wolf and gazelle from this sheet were replaced by sheet C).
Generate an image. The attached portrait is the style reference for my game J12 (a World of Warcraft style RPG set in 1st-century Galilee): match its painterly hand-painted brushwork, warm Mediterranean key light, soft rim light and earthy palette exactly. Make a sheet of animal portraits in that same style. Landscape 1536x1024, a precise grid of 3 columns by 2 rows = 6 square portraits, each centred in its own equal square cell, with clear empty gutters between them. All on one plain flat very dark warm brown background (#1a130d), no grid lines, no borders, no frames, no text, no labels. Each portrait is a head-and-shoulders (head-and-neck for birds) study of one real, naturalistic Levantine animal, three-quarter view facing slightly left, filling about 80% of its cell, the lower body fading softly into the dark background at the bottom. Calm and dignified, never monstrous: natural eyes (no glow), mouths closed or relaxed, no snarling, no blood. Row 1: (1) a Syrian hare (Cape hare) with long upright ears, sandy-brown fur, (2) a chukar partridge with grey breast, black eye-stripe necklace, red beak and barred flanks, (3) a small common quail, streaked brown and buff plumage. Row 2: (4) a golden jackal, lean, tawny-gold coat with darker saddle, ears up, alert and wary, (5) a mountain gazelle, slender, fawn-brown with white underside and dark side stripe, ridged lyre-shaped horns, (6) an Arabian wolf, slim, pale grey-buff coat, large ears, alert and wary, mouth closed.
Sheet B: _variants/animals_sheet_b.png (ChatGPT, same conversation)
Keys: boar, roe_deer, sheep, goat, ox, donkey.
Beautiful, exactly right. Now a second sheet in exactly the same style, lighting, background and layout (landscape 1536x1024, 3 columns by 2 rows, 6 square head-and-shoulders portraits, three-quarter view facing slightly left, filling about 80% of each cell, keep a little empty space above the ears and horns so nothing touches the cell edge, lower body fading into the dark background, no text, no frames). Calm and dignified, natural eyes, no snarling. Row 1: (1) a Mediterranean wild boar, coarse dark grey-brown bristly coat, small tusks just showing, alert, (2) a roe deer buck, small, red-brown summer coat, white muzzle patch, short three-tined antlers, (3) a fat-tailed Awassi-type sheep, cream-white wool, brown face, long drooping ears, no horns. Row 2: (4) a black Levantine goat with very long drooping ears and long black hair, small backward-curving horns, (5) a small local plough ox, reddish-brown, short curved horns, gentle eyes, a simple wooden yoke is NOT needed, (6) a Syrian donkey, grey coat, pale muzzle and eye rings, dark cross-stripe on the shoulders, long ears, patient expression.
Sheet C: _variants/animals_sheet_c_wolf_gazelle.png (ChatGPT, same conversation, 2 portraits)
Keys: wolf (left half) and gazelle (right half). Each was cropped to 768×768 from y=30, with the bottom 110 px faded to dark. Replacements were needed because the sheet A wolf was hard to tell from the jackal, and the sheet A gazelle's horns curled like a blackbuck's.
Lovely. Two replacements, in exactly the same style, lighting and dark background: landscape 1536x1024 with just 2 portraits side by side, each centred in its own half with clear empty space around it and above the ears and horns, three-quarter view facing slightly left, no text, no frames. (1) Left: a WOLF that clearly differs from the jackal: a bigger, heavier-built grey wolf of the Galilean hills, cool silver-grey and charcoal coat with a pale cream throat, broad skull, thick neck ruff, amber eyes, mouth closed, calm and watchful. (2) Right: a MOUNTAIN GAZELLE (Gazella gazella): slender, dark fawn-brown back, white belly and throat, a dark stripe along the flank, pale facial stripes, large ears, and fairly straight, upright, slightly lyre-shaped ringed horns that only curve gently back at the tips, not spiralled or strongly curled.
Batch 2 (j12-artist, 2026-10-26): basalt-synagogue key art and new NPC portraits
All images in this batch were made with ChatGPT image generation. Each portrait is 1254x1254 PNG with an @web copy at 512x512; the key art is 1672x941 PNG.
art/key_art.png (basalt synagogue)
-
Tool: ChatGPT, 2026-10-26. The previous
art/key_art.pngwas attached and edited in a fresh conversation. -
Size: 1672x941 PNG (2.9 MB);
art/[email protected](JPEG q85, 747 KB) -
Why: openspec/SCHOLAR.md section B (S-02). The white limestone synagogue at Capernaum dates from the 4th–5th century; the AD 28 building was basalt (Luke 7:5).
-
Kept: the first and only edit. The old image is in
_variants/key_art_white_synagogue.png. -
Prompt:
Edit the attached image (keep it 16:9, no text). Keep everything exactly as it is: the composition, the fisherman seen from behind mending the net, the two boats, the net racks, the baskets, the dark basalt houses, the trees, the mist, the water, the hills and the dawn light. Change only one thing: the white limestone building with columns behind the village is historically wrong for AD 28. Replace it with the 1st-century synagogue of Capernaum as archaeology shows it: a larger, plain rectangular hall built of the same very dark black basalt stone as the surrounding houses, on a basalt foundation, with a flat roof of wooden beams, reeds and clay; its front wall of more finely dressed, neatly squared basalt blocks with a simple doorway. No white stone, no limestone, no columns on the outside, no carved friezes, no arches, no gables. It should read as the most substantial building in the village but blend with the dark basalt houses.
-
Notes: Everything else is pixel-for-pixel the same composition. The synagogue is now a two-storey-high hall of squared dark basalt with a simple doorway and a flat roof. A few pale walls or terraces remain among the houses, which read as plastered courtyard walls.
Portraits (one ChatGPT conversation, portraits/simon.png attached as style reference)
The first message set up the series. Later messages each start "Next portrait, same style, lighting, framing and background". Files are named by config/game/world.php NPC key. philip and mary_magdalene aren't in world.php yet, so they use the names the coordinator gave.
portraits/james.png (series set-up message):
The attached image is the style reference for a series of square character portraits for the dialogue window of a historical role-playing game set in 1st-century Galilee (around AD 28). Match it exactly: the same painterly rendering and brushwork, warm soft key light from the left with a gentle warm gold rim light, bust framing (head and shoulders), the figure turned three-quarters to the viewer's left and centred, plain warm dark brown background with a soft vignette, square 1:1, no props, no text, no border. Historically accurate 1st-century Jewish Galilean clothing; men's mantles have small knotted fringe tassels at the corners where visible. No medieval or modern elements, no halo or glowing effects. Do not copy the man in the reference; make a new person. First portrait: James, son of Zebedee, a Galilean fisherman in his early 30s, sturdy and broad-shouldered, sun-browned olive skin, very dark brown curly hair and a full thick dark beard, intense, fiery, forthright expression, wearing an olive-drab wool tunic and a deep rust-red wool mantle over one shoulder.
Notes: no tassels are visible, because the mantle corner is out of frame.
portraits/john.png
Excellent, keep exactly this style, lighting, framing and background for every portrait in this series. Next: John, son of Zebedee and James's younger brother, a Galilean fisherman of about 19, slim, a clear family resemblance to James but younger and softer-featured, sun-browned olive skin, dark brown wavy hair, no beard yet, only faint youthful stubble, earnest, warm, eager expression, wearing a light stone-grey wool tunic and a muted sage-green wool mantle over one shoulder with small knotted fringe tassels at its corner.
Notes: matches world.php (beard: false, green mantle). One corner tassel.
portraits/zebedee.png (kept the correction, variant 2):
Very good. Next portrait, same style, lighting, framing and background: Zebedee, father of James and John, an older Galilean fisherman and boat owner in his early 60s, stocky and weathered, deeply tanned olive skin with deep creases, grey hair and a full grey beard, shrewd but warm eyes, a practical master-of-the-boat look, wearing a good brown wool tunic and a slate blue-grey wool mantle over his shoulders with small knotted fringe tassels at the corner.
Correction prompt:
Thank you. One correction: please redo the Zebedee portrait from earlier in this conversation (the grey-bearded older fisherman in the brown tunic and slate blue-grey mantle). Keep the same man, face, pose, style, lighting and background, but his mantle should have only one or two small knotted fringe tassels at a single corner, not a row of tassels along the edge.
Notes: variant 1 (_variants/zebedee_v1_edge_tassels.png) had a row of tassels along the edge, which is wrong for tzitzit (Numbers 15:38 puts them at the corners). Variant 2 has one corner tassel but looks a little younger, about 55, with less grey in his hair.
portraits/levi.png (kept variant 1):
Next portrait, same style, lighting, framing and background: Levi son of Alphaeus, a tax collector at the customs booth of Capernaum, a man in his 30s, lighter-skinned from working indoors, neatly trimmed short dark beard and tidy dark hair, intelligent but uneasy, guarded expression, glancing slightly aside; he is better dressed than the fishermen: a finer, smoothly woven tunic dyed a muted lavender-grey and a deep indigo-violet wool mantle with small knotted fringe tassels at the corner; one hand raised near his chest showing ink-stained fingertips. No jewellery except perhaps a plain signet ring, no coins, no other props.
Correction prompt (variant 2, _variants/levi_v2_corner_tassel.png):
Thanks. Same correction for the Levi portrait from earlier (the tax collector in the lavender-grey tunic and indigo-violet mantle, ink-stained fingers, signet ring): keep the same man, face, pose, hand, style, lighting and background, but his mantle should have only one or two small knotted fringe tassels at a single corner, not a row of tassels along the edge.
Notes: variant 1 is kept because it carries the brief: an uneasy, guarded look with clearly ink-stained fingertips. Its mantle has a row of edge tassels, though. Variant 2 fixes the tassels but turns his expression smug and content and loses most of the ink. Swap in variant 2 if accurate tassels matter more.
portraits/jairus.png
Next portrait, same style, lighting, framing and background. Note: on men's mantles show the fringe tassels only at a corner (one or two tassels), not along the whole edge. Subject: Jairus, ruler of the synagogue at Capernaum, a respected man in his mid 40s, olive skin, dark hair and a full beard both beginning to grey, a dignified man whose face shows grief and fear for his dying young daughter: eyes red-rimmed and worried, brow furrowed, restrained rather than theatrical; wearing a cream linen tunic and a muted plum-violet wool mantle with small knotted fringe tassels at the corner.
Notes: corner tassels are correct, with a woven stripe at the corner. He reads as grieving without melodrama.
portraits/philip.png
Perfect, exactly right with the tassels at the corner only. Next portrait, same style, lighting, framing and background: Philip of Bethsaida, a young Jewish Galilean man in his early 20s who bears a Greek name, slender, olive skin, dark brown hair cut a little shorter and neater than the fishermen's, a short soft dark beard, open, curious, friendly and earnest expression, wearing an undyed oatmeal linen tunic and a muted teal-blue wool mantle with one small knotted fringe tassel visible at the corner.
portraits/mary_magdalene.png
Next portrait, same style, lighting, framing and background: Mary of Magdala, a Jewish Galilean woman of about 30 from the lakeside town of Magdala, a woman of means and quiet strength, olive skin, dark eyes, composed, dignified, intelligent and steady expression with a hint of warmth; her dark hair fully covered by a modest madder-red wool head covering draped over her head and shoulders, over an undyed cream linen dress. Modest and respectable, like a well-to-do townswoman: not glamorous, not seductive, no loose flowing hair, no tears, no jar of ointment, no skull, no penitent pose. No jewellery.
Notes: dignified, with none of the "penitent" iconography. ChatGPT added one small tassel at the corner of her head covering, which is minor. Luke 8:2–3 is the basis for "a woman of means".
portraits/hannah.png (barley grower)
Lovely. Next portrait, same style, lighting, framing and background (for the women, no fringe tassels): Hannah, a barley grower from the fields above Capernaum, a sturdy, sun-weathered farming woman in her 40s, olive skin with laugh lines, dark eyes, a cheerful, capable, no-nonsense expression, a few strands of dark hair showing at her brow, wearing a warm honey-ochre wool head covering over her head and shoulders and a brown wool dress, a little chaff dust on the cloth.
portraits/abigail.png (weaver)
Next portrait, same style, lighting, framing and background, no fringe tassels: Abigail, a weaver of Capernaum, a woman in her mid 30s, olive skin, dark observant eyes, a patient, precise, slightly reserved expression, her dark hair covered by a soft dusty-blue wool head covering she wove herself, with a fine woven band along its edge, over a warm taupe-brown wool dress; a few loose wool threads caught on her shoulder.
Notes: Mary, Hannah and Abigail share a very similar face template, which ChatGPT tends to do. The next two prompts ask explicitly for a clearly different face.
portraits/pinchas.png (tanner and sandal-maker)
Next portrait, same style, lighting, framing and background (tassels only at a corner, one or two): Pinchas, a tanner and sandal-maker of Capernaum, a wiry, tough man in his 40s, darker sun-browned olive skin, dark hair tied back and a full dark beard, rough, stained hands not shown, a gruff but kindly, slightly self-conscious expression, wearing a coarse dark brown wool tunic, a scuffed dark leather apron wrapped and tied simply at the waist, and a worn dark umber wool mantle over one shoulder with one small knotted fringe tassel at the corner.
Notes: the apron came out as a bib with neck straps, despite asking for a waist wrap. ChatGPT does the same with Tobiah. It is minor at dialogue size.
portraits/wife.png (world.php key wife, "Your Wife"; unnamed in Scripture)
Next portrait, same style, lighting, framing and background, no fringe tassels. Please give each woman a clearly different face from the previous women (different face shape, nose, brow and build). Subject: the wife of Simon the fisherman, an ordinary Galilean village woman in her early 30s, a rounder, softer face, olive skin, warm brown eyes, a practical, affectionate, quietly strong expression with a hint of tiredness, her dark hair covered by a muted terracotta-rose wool head covering over her head and shoulders, over a plain earth-brown wool dress.
portraits/mother_in_law.png (world.php key mother_in_law, "Your Wife's Mother"; unnamed in Scripture)
Next portrait, same style, lighting, framing and background, no fringe tassels, a clearly different face from the previous women: the mother of Simon's wife, an ordinary elderly Galilean village woman in her late 60s, small and thin, a narrow lined face with high cheekbones, olive skin, sharp but kind dark eyes, a little pale and drawn as if recently recovered from a fever yet alert and ready to work, wisps of silver-grey hair at her brow, wearing a dark brown-black wool head covering over her head and shoulders and a plain dark grey-brown wool dress.
Notes: she reads as about 60, healthy rather than recovering from fever.
Style notes after batch 2
- Attaching
simon.pngwith "do not copy the man in the reference; make a new person" holds the series style well. - Tassels: say "only one or two at a single corner, not along the edge" up front, or ChatGPT draws a decorative row.
- Women: ask for a clearly different face shape and nose for each one, or they converge on one face.
- Aprons: ChatGPT defaults to a modern bib apron. Ask for "a leather hide wrapped around the hips and tied with a cord, no bib, no neck strap".
3D prop concepts (j12-modeler, 2026-10-25/26)
Reference images for the procedural props in resources/js/game/props/ (img2threejs reconstructions). All from one ChatGPT conversation, so they share one look. Saved as viewport captures of the generated image (about 1056-1217 px wide, PNG), not the full-resolution originals. Household props came as two five-object sheets (concepts/household-sheet-1.png, -2.png), each object cropped into its own file.
- concepts/fishingBoat.png
Generate an image: game concept art of a single 1st-century Sea of Galilee wooden fishing boat, about 8 metres long with a wide beam, rounded hull of warm brown planks, a single short mast with a furled cream linen sail lashed to its yard, two long oars resting across the gunwales, a pile of rope fishing nets heaped inside, a small painted eye at the bow. Three-quarter view from slightly above, the whole boat isolated on a plain light grey background, no water, no people. Style: World of Warcraft hand-painted stylized look, chunky exaggerated forms, strong readable silhouette, painterly textures with soft top-down light, warm saturated Mediterranean palette.
- concepts/oliveTree.png
Great. Now in exactly the same style, lighting and plain light grey background, generate a new image: a single ancient Galilean olive tree, three-quarter view, the whole tree in frame. A short, fat, gnarled trunk that twists and splits into two or three thick limbs, with knotted bark, hollows and a flared root base; above it a big clumped canopy of separate rounded leaf masses in silvery sage and olive green, lighter silver on top, darker beneath, a few small dark olives. Hand-painted World of Warcraft stylized look, chunky exaggerated forms, strong silhouette. No ground scenery, no people.
- concepts/datePalm.png
Excellent. Same style, lighting and plain light grey background, new image: a single date palm tree, three-quarter view, the whole tree in frame. A tall trunk with a gentle graceful curve, clearly ringed with chunky stubs of old frond bases spiralling up it, slightly flared at the base; a crown of long drooping feathery green fronds arching outward and down, a few dry brown fronds hanging below the crown, and two or three heavy hanging clusters of orange-amber dates on golden stalks under the crown. Hand-painted World of Warcraft stylized look, chunky exaggerated forms, strong silhouette. No ground scenery, no people.
- concepts/marketStall.png
Same style, lighting and plain light grey background, new landscape image: a single 1st-century Galilean village market stall, three-quarter view, whole stall in frame. Four chunky slightly crooked timber posts lashed with rope to crossbeams, a sagging striped cloth awning in madder red and undyed linen with a scalloped hanging front edge, a sturdy plank counter displaying goods: woven baskets of pomegranates, figs and lentils, a few terracotta jars, a tray of fish, folded cloth. Hand-painted World of Warcraft stylized look, chunky exaggerated forms, strong silhouette. No people, no ground scenery, no text.
- concepts/well.png
Same style, lighting and plain light grey background, new landscape image: a single 1st-century Galilean village well, three-quarter view, whole object in frame. A chunky round well-head built of big rounded dark basalt stones in courses with a flat limestone capstone rim, a sturdy timber frame of two posts and a crossbeam lashed with rope above it, a wooden pulley wheel on the beam, a rope running down into the dark water, a wooden bucket bound with rope hoops resting on the rim, and a clay water jar beside it. Hand-painted World of Warcraft stylized look, chunky exaggerated forms, strong silhouette. No people, no ground scenery, no text.
- concepts/household-sheet-1.png →
amphora.png,storageJar.png,basket.png,oilLamp.png,tabunOven.pngSame style, lighting and plain light grey background, new landscape image: a prop sheet of five separate 1st-century Galilean household objects standing in one row with clear empty space between them, all at the same scale, three-quarter view, none overlapping: (1) a tall two-handled terracotta amphora with a painted band, (2) a big fat storage jar (pithos) with a thick rolled rim, rope-impressed bands and a wooden lid, (3) a round woven wicker basket full of dark purple figs, (4) a small Herodian clay oil lamp with a spatulate nozzle and a tiny flame, shown large enough to read, (5) a domed clay tabun bread oven with a top opening, a front stoke hole with embers, potsherds pressed into its skin and flatbreads on top. Hand-painted World of Warcraft stylized look, chunky forms. No text, no labels, no people.
- concepts/household-sheet-2.png →
loom.png,sleepingMat.png,lowTable.png,netPegs.png,firewoodPile.pngSame style, lighting, scale and plain light grey background, a second prop sheet of five separate 1st-century Galilean household objects in one row with clear empty space between them, three-quarter view, none overlapping: (1) an upright warp-weighted loom of two leaning timber posts and a top beam with half-woven red cloth, hanging warp threads and round clay loom weights at the bottom, (2) a woven reed sleeping mat on the floor with a folded blue wool blanket and a small rolled pillow, (3) a low rectangular wooden table with round loaves, a bowl of olives and a small jug, (4) a timber rail on two posts with wooden pegs and brown fishing nets hung on the pegs to dry, with cork floats and a coil of rope, (5) a stacked pile of split firewood logs with a bundle of brush tied with rope and a chopping block. Hand-painted World of Warcraft stylized look, chunky forms. No text, no labels, no people.
Notes: every image was the first and only variant. ChatGPT added a clay jar beside the well and an axe on the chopping block unprompted. The loom shows the cloth in the middle (the painter's take); the model weaves from the top beam down, as a warp-weighted loom does.
-
concepts/galilean-dress.png (people's clothing reference for
models.js/figure.js; ChatGPT, 2026-10-26, new conversation, 1536×1024 original, saved as a 1345×896 viewport capture)Generate an image: a character costume concept sheet for a stylized fantasy-free RPG set in 1st-century Galilee, in the hand-painted World of Warcraft art style (chunky readable silhouettes, soft painted lighting, warm earthy palette). Plain light grey background. Four full-body figures standing side by side in a three-quarter view, feet visible, no props except a small water jar for the woman: (1) a bearded Galilean fisherman in his thirties wearing a shin-length undyed oatmeal wool tunic with long sleeves, a brown leather belt, a brown wool mantle wrapped over his left shoulder and around his back with white corner tassels each with one blue cord, simple leather sandals, short dark beard and short hair; (2) a young Galilean woman in an ankle-length madder-red tunic with a cloth sash, and a long ochre veil-mantle that covers her hair completely and falls over her shoulders and down her back to the knees, sandals; (3) an older woman in a dark brown-grey ankle-length tunic with a long dark indigo veil covering her head and shoulders; (4) a boy of about eight in a knee-length cream tunic with a cord belt and sandals, no mantle. Historically accurate: no trousers, no hoods, no armour, no jewellery, no weapons. Even lighting, no text.
Notes: first variant kept. The man's tunic came out knee length with a cloth sash rather than the asked shin length and leather belt; the models keep shin length for men. The mouse pointer is visible near the woman's hem in the capture.
Batch 3 (j12-artist, 2026-10-26): portrait fix-up pass
ChatGPT image editing, all in one conversation. Each message attached the current portrait from portraits/ and asked for a targeted edit. Every result is 1254x1254 PNG with a 512x512 @web copy. The replaced files are in _variants/. These supersede the batch 1 and 2 entries for these characters.
portraits/levi.png: edited from the uneasy version (now _variants/levi_v1_edge_tassels.png)
Edit the attached portrait (square, keep the exact same painting style, lighting, background, framing, man, face, uneasy guarded expression, raised hand with ink-stained fingertips and signet ring, lavender-grey tunic and indigo-violet mantle). Change only the tassels: remove the row of tassels along the mantle's edge entirely. Instead, show just one small knotted fringe tassel hanging from a single corner of the mantle (a 1st-century tzitzit), and nothing else along the edges.
Result: the face, expression, ink stains and ring are unchanged, and there is one corner tassel (Numbers 15:38). _variants/levi_v2_corner_tassel.png (smug) is no longer needed.
portraits/pinchas.png (old one: _variants/pinchas_v1_bib_apron.png)
New edit, on this newly attached portrait (a tanner). Keep the exact same man, face, expression, hair, beard, painting style, lighting, background, framing, tunic, mantle and its single corner tassel. Change only the apron: remove the bib apron and its neck and shoulder straps completely, so his chest shows only the brown wool tunic. Instead he wears a simple 1st-century work apron: a piece of scuffed dark leather wrapped around his hips and tied at the waist with a cord, visible only at the very bottom edge of the frame, with no bib, no straps, no buckles, no buttons.
Result: no bib or straps. A cord-tied leather wrap shows at the bottom edge.
portraits/tobiah.png (old one: _variants/tobiah_v1_bib_apron.png)
New edit, on this newly attached portrait (a village carpenter). Keep the exact same man, face, wry expression, grey hair and beard, painting style, lighting, background, framing and sand-coloured wool tunic with its sawdust. Change only the apron: remove the bib apron and its neck and shoulder straps and its button completely, so his chest shows only the sand-coloured tunic. Instead he wears a simple 1st-century work apron: a piece of worn brown leather wrapped around his hips and tied at the waist with a cord, visible only at the very bottom edge of the frame, with no bib, no straps, no buckles, no buttons. Add a sand-brown wool mantle over one shoulder with one small knotted fringe tassel at its corner.
Result: no bib, a cord-tied waist wrap, and a new mantle with one corner tassel. Face unchanged.
portraits/mary_magdalene.png (old one: _variants/mary_magdalene_v1_tassel.png)
New edit, on this newly attached portrait (Mary of Magdala, about 30). Keep the exact same woman, face, composed dignified expression, painting style, lighting, background, framing, madder-red head covering and cream linen dress. Change only one thing: remove the small tassel hanging from the corner of her red head covering, so the cloth simply drapes with a plain woven edge. No tassels or fringes anywhere.
Result: the tassel is gone and she is otherwise unchanged. Her face is kept as the reference for the other two women: about 30, oval face, straight nose.
portraits/hannah.png (old one: _variants/hannah_v1_similar_face.png)
New edit, on this newly attached portrait (Hannah, a barley grower). Keep the same painting style, lighting, background, framing, three-quarter pose, honey-ochre head covering, brown wool dress and chaff dust, but give her a clearly different face from the Mary of Magdala portrait: make her an older farming woman of about 50, with a broad, round, full face, heavier jaw and fuller cheeks, a wider, rounder nose, small deep-set crinkled eyes, thick dark eyebrows, pronounced laugh lines and sun creases, a gap-toothed hearty smile, a stockier, broader-shouldered build, and greying dark hair showing at her brow. No tassels or fringes.
Result: about 50, round and broad face, greying hair, a broad open smile showing her teeth.
portraits/abigail.png (old one: _variants/abigail_v1_similar_face.png)
New edit, on this newly attached portrait (Abigail, a weaver). Keep the same painting style, lighting, background, framing, three-quarter pose, dusty-blue head covering with its woven band, taupe-brown wool dress and loose threads, but give her a clearly different face from both the Mary of Magdala and the Hannah portraits: a slender woman in her mid 20s with a long, narrow, angular face, high sharp cheekbones, a long thin slightly aquiline nose, a narrow pointed chin, thin lips, large heavy-lidded almond eyes under straight fine brows, a few faint freckles across her nose, and a thoughtful, reserved, slightly shy expression with a closed mouth. A slighter, narrower-shouldered build. No tassels or fringes.
Result: mid 20s, narrow angular face, reserved closed-mouth expression. She is the most similar of the three to Mary, but distinct in age, face shape and mood.
portraits/mother_in_law.png (old one: _variants/mother_in_law_v1_younger.png)
First edit attempt (the result was almost unchanged and was not kept):
New edit, on this newly attached portrait (an elderly village woman, the mother of Simon's wife). Keep the same painting style, lighting, background, framing, three-quarter pose, dark brown-black head covering and grey-brown wool dress, and keep her recognisably the same woman, but make her clearly older, about 68: thinner, more deeply lined and wrinkled skin, slightly hollow cheeks, loose skin at the jaw and neck, silver-white hair at her brow, and a small, frail frame. Show a gentle trace of having just recovered from a fever: a faint pallor, a light sheen of dried perspiration at the temple, slightly shadowed tired eyes, but her expression alert, warm and dignified, as if she is getting up to serve her guests. Restrained and respectful, not sickly or grotesque. No tassels or fringes.
Kept (second attempt):
The elderly woman edit came out almost unchanged; she still looks about 58. Please redo it from the elderly woman portrait I attached earlier, and this time do not keep her face: paint a new, clearly elderly woman of about 70 in the same painting style, lighting, framing, three-quarter pose, plain warm dark brown vignette background, dark brown-black wool head covering and grey-brown wool dress. Small, thin and frail; a narrow face with deep wrinkles across the forehead, around the eyes and mouth; sunken cheeks; thin lips; loose skin at the jaw and neck; age spots; wisps of white hair at her brow. A gentle trace of a fever just broken: pale, slightly sallow skin, a faint sheen at the temple, tired shadowed eyes, yet an alert, kind, dignified expression, as though she is rising to serve her guests. Respectful, not sickly or grotesque. Square, no text, no tassels.
Result: late 60s, deeply lined, with age spots and grey-white hair; dignified. The fever trace (Mark 1:31) is very subtle and reads mostly as tiredness.
portraits/zebedee.png (old ones: _variants/zebedee_v2_younger.png and _variants/zebedee_v3_subtle_age_edit.png)
Two age edits on the attached portrait came out too subtle; both are logged here and neither was kept:
New edit, on this newly attached portrait (Zebedee, an older fisherman and boat owner, father of two grown sons). Keep the same painting style, lighting, background, framing, three-quarter pose, brown wool tunic, slate blue-grey mantle and its single corner tassel, and keep him recognisably the same man, but make him clearly older, about 62: hair mostly grey and thinning at the temples, a fuller beard that is mostly grey-white, deeper wrinkles across the forehead and around the eyes, weathered leathery skin, slightly heavier features, still strong and shrewd with a warm look.
Much better, thank you. Same treatment for this attached fisherman (Zebedee): the age edit came out too subtle and he still looks about 52. Repaint him clearly as a man of about 63, father of two grown sons, in the same painting style, lighting, framing, three-quarter pose, plain warm dark brown vignette background, brown wool tunic and slate blue-grey mantle with a single small knotted tassel at one corner. Keep a family likeness, but: hair mostly silver-grey and receding at the temples, a full beard mostly white with a little grey, deep forehead furrows, heavy crow's feet, sagging under-eye bags, deep nasolabial lines, weathered sun-spotted leathery skin, slightly heavier jowls. Still strong, shrewd and warm. Square, no text.
Kept (new generation, no attachment):
He still reads as mid 50s. Please generate a brand-new image rather than an edit: a new square portrait in exactly the same painting style, lighting, framing, three-quarter pose to the viewer's left and plain warm dark brown vignette background as the portraits above. Subject: Zebedee, an old Galilean fisherman and boat owner aged 63, grandfatherly: thinning silver-white hair receding at the temples, a full white beard with a few grey streaks, a deeply lined forehead, heavy crow's feet, pouches under the eyes, deep lines from nose to mouth, sun-spotted leathery skin, a broad, slightly heavy weathered face; shrewd, warm eyes. Brown wool tunic and slate blue-grey wool mantle with a single small knotted tassel at one corner only. No text.
Result: receding grey hair, white beard and a heavier lined face. He reads as about 60, which is acceptable for "early 60s". There is one corner tassel.
Style notes after batch 3
- ChatGPT's attached-image edits are excellent for local changes (tassels, aprons, removing an object) and keep the face pixel-close.
- They are very conservative for ageing: a face edited to look older barely changes. To age a character, ask for a new image in the same conversation ("brand-new image rather than an edit") and describe the age markers concretely.
Item icons, batch 2 (j12-artist, 2026-10-26): food, fishing gear, flax, Passover
Files: items/{key}.png (slice original, 344–650 px square) and items/{key}.webp (256×256, cwebp q85, 7–16 KB), 21 icons. Same style and background as the first item set: generated in the same ChatGPT conversation ("Generate inventory icon sheet") on a flat dark sheet, then keyed out and placed on the shared warm radial vignette, square crop with 7% padding.
Post-processing (scripts recreated in the scratchpad, not in the repo): make_bg.py rebuilds the shared vignette as a 1024 px template by taking the per-pixel median of all existing item PNGs (the background is identical in every icon) and fitting a radial model where objects cover it: centre (0.441, 0.421) of the square, v = e + (c − e)·exp(−(r/0.66)^2.6), centre about RGB (57, 41, 27), edges about RGB (0, 0, 0)–(14, 10, 7), plus the original low-frequency noise. slice.py estimates the sheet colour from the border (these sheets came out about RGB (23, 13, 4), not exactly #1a130d), builds a soft alpha from colour distance (10–30), labels connected components, assigns them to grid cells (small pieces join the nearest big piece), crops a square around the cell's objects, un-blends the sheet colour from edge pixels and composites onto the template. Tested on sheet A: the re-slices match the existing icons to within about 2% in size and are visually the same.
Sheet E: _variants/items_sheet_e.png (ChatGPT, 1536×1024)
Keys: lentils, lentil_pottage, sabbath_pot, woad_mantle, flax, flax_cord, reed_floats, stone_sinkers, casting_net, trammel_net, sardines, barbel (sinkers and barbel replaced from sheet G).
Great set. Next sheet, in exactly the same hand-painted World of Warcraft inventory icon style as the first and third sheets: stylized and chunky, slightly exaggerated readable shapes that read at 40 px, bold painted highlights and visible brush strokes, warm saturated colours, warm key light from the upper left, soft rim light, earthy palette, like a Blizzard game icon, not a photograph. Same layout and background: landscape 1536x1024, a precise grid of 4 columns by 3 rows = 12 square icons, each object alone and centred in its own equal cell, filling about 75% of the cell, with clear empty gutters between cells, all on one plain flat very dark warm brown background (#1a130d), no grid lines, no borders, no frames, no text, no labels, no hands. Everything is 1st-century Galilee. Row 1: (1) a small rough linen sack open at the top, spilling small red-orange lentils, a few loose lentils in front, (2) a rustic brown clay bowl of thick red-orange lentil stew with a sheen of green olive oil, a torn piece of flatbread leaning on the rim, (3) a squat round-bellied lidded terracotta cooking pot nestled in glowing embers and grey ash, a thin wisp of steam escaping under the lid, (4) a folded heavy wool mantle dyed deep woad blue, with a knotted tassel of white and blue cords hanging at each visible corner. Row 2: (5) a bundle of harvested flax stalks with a few small pale-blue flowers and round seed bolls, tied in the middle, a tuft of pale combed fibre at one end, (6) a neat coil of twisted pale linen cord, tied off with a loop, (7) a short string of cut, dry, golden reed segments (finger-length hollow tubes) threaded on a cord like a necklace of fishing-net floats, (8) a small heap of four smooth dark basalt pebbles, each with a groove worn around its middle, one with a cord tied in its groove. Row 3: (9) a round fishing casting net bunched up, coarse brown cord mesh, its rim weighted with small grey stones, (10) a large folded fishing net showing layered mesh, a row of golden reed floats along the top edge and dark stone sinkers along the bottom edge, substantial and well made, (11) a string of many small slim silver sardine-like fish threaded through the gills on a green reed, (12) a large heavy olive-bronze barbel fish with a long head and whiskers (barbels) at the mouth.
- barbel (rejected): long trailing whiskers made it read as a catfish, which is a scaleless, non-kosher fish and wrong for a Sabbath fish.
- stone_sinkers (rejected): the grooves read as cracks, so the stones looked split.
- woad_mantle: the corner tassels are white with blue cords; the woven border stripes are a ChatGPT addition, acceptable for a mantle.
Sheet F: _variants/items_sheet_f.png (ChatGPT, 1254×1254, 3×3)
Keys: grilled_sardines, grilled_musht, parched_grain, coals_breakfast, roast_venison, barbel_in_oil, passover_lamb, bitter_herbs, unleavened_bread. All nine kept.
Very good, that matches the set. Next sheet in exactly the same hand-painted World of Warcraft inventory icon style, lighting and background (stylized, chunky, bold painted highlights, visible brush strokes, warm upper-left key light, soft rim light, like a Blizzard game icon, not a photograph). This time a square 1024x1024 sheet, a precise grid of 3 columns by 3 rows = 9 square icons, each object alone and centred in its own equal cell, filling about 75% of the cell, with clear empty gutters between cells, all on the same plain flat very dark warm brown background (#1a130d), no grid lines, no borders, no frames, no text, no labels, no hands. Everything is 1st-century Galilee. Row 1: (1) three small grilled silver sardine-like fish on a thin reed skewer, charred grill stripes, (2) a whole grilled tilapia (St Peter's fish: deep-bodied, spiny dorsal fin) with blistered, browned skin, lying on a flat grey stone, (3) roasted golden-brown barley ears heaped in a small wooden bowl. Row 2: (4) a whole grilled fish and a round flatbread lying side by side on a small bed of glowing charcoal, (5) a joint of roasted venison on a short wooden spit, crisp browned fat, (6) a whole barbel fish (carp-like, scaled, long head) baked in a shallow clay dish, glistening with green-gold olive oil and a few sprigs of herbs. Row 3: (7) a young white lamb lying down calmly, alive, clean fluffy wool, legs folded under it, (8) a bunch of fresh wild lettuce and chicory leaves, (9) a small stack of thin, round, flat unleavened bread cakes, pale with browned blisters and pricked with small holes.
- parched_grain: the bowl came out as glazed-looking terracotta rather than wood; it still reads well.
- bitter_herbs: includes one red-leaved lettuce, which looks slightly modern but reads clearly as a bunch of greens.
Sheet G: _variants/items_sheet_g_barbel_sinkers.png (ChatGPT, 1254×1254, 2×2)
Keys: barbel (cell 2, the curved one: it fills the icon better and reads at 40 px) and stone_sinkers (cell 3, the compact heap).
Excellent. Two objects from the previous 12-icon sheet need fixing. Same style, same flat #1a130d background, no text: a square 1024x1024 sheet, 2 columns by 2 rows = 4 icons, each alone and centred in its cell with clear gutters. Row 1: (1) a large heavy long-headed barbel fish of the Sea of Galilee, side view: a carp-like body covered in big bronze-olive scales with a golden belly, a long pointed head, and only two pairs of SHORT barbels at the corners of the mouth (it must not look like a catfish: no long whiskers, no smooth skin), (2) the same barbel fish from a slightly different angle, gently curved. Row 2: (3) four smooth rounded dark grey-black basalt stones, fishing-net sinkers, in a small heap: each stone is an oval river pebble with one clear shallow groove pecked around its waist (like a belt), and a short length of tan cord tied around the groove of the front stone with a knot; they should read as whole stones, not split or cracked, (4) the same net sinkers arranged differently, three loose and one tied on a short cord.
Notes for the next batch
- The same conversation still holds the style well after seven sheets. Square 3×3 and 2×2 sheets come back at 1254×1254.
- For fish, name the distinguishing features and what it must not look like ("not a catfish"); otherwise "whiskers" turns into long catfish barbels.
- Grooves on stones need "like a belt" and "whole stones, not split", otherwise they read as cracks.
Item icons, batch 3, and two portraits (j12-artist, 2026-10-26): weapons, the smith and the hunter
Item files: items/{key}.png (slice original, 399–707 px square) and items/{key}.webp (256×256, cwebp q85, 3–12 KB). 12 new icons for config/game/weapons.php plus 3 redone icons. They are wired the same way as every painted icon: App\Game\Art adds image to the item when items/{key}.webp exists, so no config change is needed. Same ChatGPT conversation ("Generate inventory icon sheet"), same flat-sheet workflow and the same slice.py / bg_template.png vignette as batch 2.
Sheet H: _variants/items_sheet_h_weapons.png (ChatGPT, 1536×1024, 4×3)
Keys: iron_bar, bow_stave, sinew, hunting_knife, fishermans_machaira, honed_machaira, peters_machaira, self_bow, hunters_bow, composite_bow, reed_arrows, iron_tipped_arrows (struck keys replaced from sheet I).
Excellent work so far. Next sheet, in exactly the same hand-painted World of Warcraft inventory icon style as the earlier sheets: stylized and chunky, slightly exaggerated readable shapes that read at 40 px, bold painted highlights and visible brush strokes, warm saturated colours, warm key light from the upper left, soft rim light, earthy palette, like a Blizzard game icon, not a photograph. Same layout and background: landscape 1536x1024, a precise grid of 4 columns by 3 rows = 12 square icons, each object alone and centred in its own equal cell, filling about 75% of the cell, with clear empty gutters between cells, all on one plain flat very dark warm brown background (#1a130d), no grid lines, no borders, no frames, no text, no labels, no hands. Everything is 1st-century Galilee (Roman-era, AD 28): plain working tools of hunters and a village smith, no fantasy ornament, no gems, no runes, no glowing, no blood. Long objects lie on the diagonal from lower left to upper right so they fill the cell. Row 1: (1) a short, thick, rough bar of dark wrought iron, hammered square, dull grey-black with faint rust-brown patches and hammer marks, (2) a long split stave of seasoned pale-honey ash wood, roughly shaped, straight, bark stripped, split face showing the grain, (3) a twisted hank of pale cream dried animal sinew fibres, loosely twisted like a skein and tied at one end, (4) a long hunting knife: a plain leaf-shaped single iron blade about a forearm long with a simple dark wooden grip bound with a brass ferrule. Row 2: (5) a machaira: a short single-edged iron sword, the blade widening slightly toward the point and curving gently forward, the back edge straight, a simple curved pale horn grip with a small iron guard, plain and practical, (6) the same machaira, but freshly sharpened and oiled: the edge has a bright polished silver bevel and an oily sheen catching the light (a natural glint, not a magic glow), (7) the same kind of short sword in a plain brown rawhide sheath stitched along one side with a thong, only the horn grip showing, a leather belt loop, worn and simple, (8) a plain one-piece wooden self bow: a long simple D-shaped bow of pale yellow-brown wood, strung with a thin twisted pale sinew string, no decoration. Row 3: (9) a recurve hunting bow: a shorter darker wooden bow whose two tips curve sharply forward away from the archer, strung, with a leather-wrapped grip, (10) a composite bow: strongly recurved, built of visible layers, a dark wooden core, a pale cream horn strip on the belly and a tan sinew backing, bound tightly at intervals with thin dark sinew wrappings, strung, (11) three arrows lying side by side: pale golden Jordan reed shafts with visible joints, a short dark hardwood foreshaft with a plain sharpened point, and fletching of speckled grey and russet partridge feathers bound with thread, the fletching ends large and prominent, (12) three reed arrows lying side by side with leaf-shaped dark iron arrowheads, the iron heads large and prominent at the top, short grey-russet partridge fletching at the bottom.
- Rejected: the bow stave came out as a short bundle of split firewood; the recurve and composite bows showed only half a bow (one limb hooked like a question mark); the plain reed arrows got iron-looking heads, so they matched the iron-tipped arrows.
- Kept notes: the three machairas share one blade so they read as a family: plain (5), honed with a bright bevel and oily sheen (6), and Simon's in a stitched rawhide sheath with only the horn grip showing (7). Nothing violent or bloody.
Sheet I: _variants/items_sheet_i_bows.png (ChatGPT, 1536×1024, 3×2)
Keys: bow_stave (1), self_bow (2), hunters_bow (3), composite_bow (4), reed_arrows (5). Cell 6 (the composite bow from another angle) was not used.
Very good, the iron bar, sinew, knife, the three machairas and the iron-tipped arrows are perfect. A few need fixing. Same style, same flat #1a130d background, no text, no hands: landscape 1536x1024, a precise grid of 3 columns by 2 rows = 6 square icons, each object alone and centred in its own cell, filling about 80% of the cell, with clear empty gutters. The bows on the last sheet showed only half a bow: every bow must be shown WHOLE, both limbs complete from tip to tip, symmetrical about the grip, the string running straight from one tip to the other, laid on the diagonal from lower left to upper right so the whole bow fits in the cell. Row 1: (1) a single long bow stave: ONE long, slender, straight rod of pale honey-coloured seasoned wood, roughly squared and split, tapering slightly toward both ends, lying on the diagonal corner to corner, NOT a bundle and NOT a log, (2) a plain one-piece wooden self bow, whole and symmetrical, a long gentle D-shape, the wood thick enough to read at small size, pale yellow-brown, a thin pale sinew string, a simple cord-wrapped grip, (3) a whole recurve hunting bow, symmetrical: medium-brown wood, the limbs curve away from the string and then BOTH tips bend sharply forward at the ends (like a shallow M or a Cupid's bow outline), a leather-wrapped grip in the middle, string straight between the tips. Row 2: (4) a whole composite bow, symmetrical, short and strongly recurved like the previous bow but clearly built in layers: a cream horn strip on the inner face, a tan sinew layer on the outer face, a dark wood core showing at the edges, bound at several points with thin dark wrappings, the tips bent forward, string straight between the tips, (5) three reed arrows lying side by side WITHOUT any metal: pale golden reed shafts, each with a short dark hardwood foreshaft whittled to a plain wooden point, and big speckled grey and russet partridge feather fletching bound with thread, the fletched ends large and prominent, (6) the same composite bow as (4) seen from a slightly different angle.
- hunters_bow / composite_bow: both are whole bows now, drawn as a stylised S-curve "game recurve" (the tips hook toward the string rather than away from it, which a bowyer would call wrong, but it reads instantly as a recurve at icon size). The all-brown recurve and the cream-and-brown banded composite are easy to tell apart.
- reed_arrows: the whittled wooden points are painted a warm copper-brown, so they could read as bronze. They are clearly different from the grey leaf-shaped iron heads of
iron_tipped_arrows. - bow_stave / self_bow: thin diagonal objects, so they look lighter at 40 px than the chunkier icons.
Sheet J: _variants/items_sheet_j_nets_mantle.png (ChatGPT, 1254×1254, 2×2): redo of three batch 2 icons
Keys: woad_mantle (1), casting_net (2, the hanging cone), trammel_net (3). Cell 4 (the casting net spread flat as a disc) was not used. The replaced icons are _variants/{woad_mantle,casting_net,trammel_net}_v1.png.
Great, those work. Last fix-up sheet, same style, same flat #1a130d background, no text, no hands: a square 1024x1024 sheet, 2 columns by 2 rows = 4 icons, each alone and centred in its cell, filling about 80% of the cell, with clear gutters. Three earlier icons need redoing so that they read clearly at 40 px. Row 1: (1) a folded heavy wool mantle dyed deep woad blue, plain weave, with NO decorative fringe along any edge; at one single front corner hangs one tzitzit: a small bundle of a few thin twisted white cords with one blue cord, knotted several times near the top, ending in short loose cord ends (thin cords like strings, not a fluffy towel fringe and not a big tassel), (2) a CASTING NET held up by its centre: a cone or bell-shaped net hanging down from a single coiled hand rope at the top, so the silhouette is a tall triangle, coarse brown cord mesh widening toward the bottom, the wide bottom rim weighted with a ring of small dark round stone sinkers. Row 2: (3) a TRAMMEL NET: a long, wide, flat rectangular net folded in neat zig-zag layers into a low horizontal stack, clearly wider than tall, pale cream linen colour, a straight row of golden cork-like reed floats along the whole top edge and a straight row of small stone sinkers along the whole bottom edge, the folded edge showing two different mesh sizes (one large-mesh layer over a fine-mesh layer), (4) the same casting net as (2) but spread out flat as a full circle seen slightly from above, radial and ring mesh like a spider web, a ring of stone sinkers around the whole rim and the coiled hand rope in the centre.
- woad_mantle: one corner tzitzit of thin white cords with a blue cord (Numbers 15:38), no border stripes and no towel fringe.
- casting_net vs trammel_net vs fine_net: three different silhouettes now: a tall triangle (casting net), a wide flat rectangle with a float line (trammel net), and the loose bundle with big sinkers (fine net, unchanged).
Portraits: portraits/hanina.png, portraits/zabdi.png
ChatGPT, 2026-10-26, in the batch 2 portrait conversation ("Generate Portrait", which began with portraits/simon.png attached as the style reference), so they continue that series. Both are 1254×1254 PNG with a 512×512 @web copy (sips). Wired by adding hanina and zabdi to PORTRAITS in resources/js/game/hud.js (dialogue window), the same as the other NPC portraits.
portraits/hanina.png (smith; world.php hanina), kept variant 2 (edit):
Next portrait, a brand-new person, in exactly the same painting style, lighting, framing (head and shoulders, three-quarter turn to the viewer's left), plain warm dark brown vignette background and square format as the portraits above. On men's mantles show the fringe tassels only at a single corner (one small knotted tassel), never along the edge. Subject: Hanina, the village smith of Capernaum, a burly, broad-necked man in his early 50s, dark sun- and fire-browned olive skin, black hair cut short and a thick black beard with a few grey threads, singed a little at the ends, heavy brows, a calm, patient, craftsman's expression with a dry hint of humour, a faint smudge of soot on one cheekbone and a small old burn scar on his forehead; wearing a coarse soot-darkened charcoal-brown wool work tunic with the sleeves pushed up, and a dark umber wool mantle folded over one shoulder with one small knotted tassel at its corner. Historically plausible 1st-century Galilean dress, no apron straps, no bib, no tools, no fire or sparks, no jewellery, no text.
Edit (variant 1 attached, now _variants/hanina_v1_fresh_scar.png):
Edit the attached portrait (Hanina the smith). Keep the exact same man, face, expression, hair, beard, painting style, lighting, background, framing, tunic, mantle and its single corner tassel. Change only two small things: the red mark on his forehead looks like a fresh wound; make it a small, pale, long-healed old burn scar, smooth and slightly shiny, the same colour as his skin or a little lighter, no redness. And the dark smudge under his eye looks like a bruise; replace it with a faint grey smear of charcoal soot higher on the cheekbone, clearly soot, not a bruise. Square, no text.
Notes: variant 1's red forehead mark and dark cheek smudge read as a fresh cut and a bruise, as if he had been in a fight. Variant 2 has a pale healed scar and a grey soot smear. His expression is a little sterner than variant 1's. One corner tassel.
portraits/zabdi.png (hunter; world.php zabdi), kept variant 1:
Excellent. Next portrait, a brand-new person with a clearly different face, in exactly the same painting style, lighting, framing (head and shoulders, three-quarter turn to the viewer's left), plain warm dark brown vignette background and square format. Tassels only at a single corner, one small knotted tassel. Subject: Zabdi, a hunter of the hills above the Sea of Galilee, a lean, wiry man of about 40, narrow weathered face with high cheekbones and sharp, watchful, narrowed eyes, sun-darkened olive skin with crow's feet from squinting, dark brown hair and a short rough dark beard, a quiet, wry, half-amused expression; a faded tan cloth wrapped simply around his head as a sun cloth; wearing a dusty olive-khaki wool tunic and a dark olive-green wool mantle over one shoulder with one small knotted tassel at its corner, a plain leather strap across his chest, and the upper limb of a simple plain wooden bow (unstrung, no decoration) showing over his shoulder behind him. Historically plausible 1st-century Galilean dress, no fur, no feathers in the hair, no fantasy ranger styling, no hood, no arrows pointed, no blood, no jewellery, no text.
Notes: wry half-smile, tan head cloth, olive mantle with one corner tassel on the shoulder, a chest strap and a plain bow limb over his shoulder. Matches world.php look (olive robe and mantle, beard).
Notes for the next batch
- Bows: always say "WHOLE, both limbs tip to tip, symmetrical about the grip, string straight from tip to tip". Otherwise a recurve comes back as half a bow. To get a true recurve (tips bending away from the string), you would probably need a side-profile reference image.
- "Bow stave" alone gives a bundle of split wood. Ask for "ONE long slender rod, NOT a bundle, NOT a log".
- Plain arrows need "WITHOUT any metal". Even then the wooden points come out coppery.
- For items that look alike, prompt for a different silhouette (triangle, rectangle, bundle), not just different details.
Item icons, batch 4 (j12-artist, 2026-10-26): dates, palms, orchard fruit, Sychar bread
Files: items/{key}.png (slice original, 409–507 px square) and items/{key}.webp (256×256, cwebp q85, 8–13 KB), 15 icons for the gathering and palm-craft items in config/game/items.php. Picked up by App\Game\Art with no config change. Same ChatGPT conversation ("Generate inventory icon sheet"), same flat-sheet workflow. slice.py, make_bg.py and bg_template.png were recreated in the scratchpad (the template rebuilt from all existing item PNGs differs from batch 3's by a mean of 0.15/255). Both sheets came back at 1254×1254 with a sheet colour of about RGB (24, 15, 8).
Sheet K: _variants/items_sheet_k_food.png (ChatGPT, 1254×1254, 3×3)
Keys: dates, sycomore_figs, carob_pods, pomegranates, walnuts, bread_of_sychar, bread_and_date_honey, date_walnut_cakes, pigeon. All nine kept.
Excellent work on all the sheets so far. Next sheet, in exactly the same hand-painted World of Warcraft inventory icon style as the earlier sheets: stylized and chunky, slightly exaggerated readable shapes that read at 40 px, bold painted highlights and visible brush strokes, warm saturated colours, warm key light from the upper left, soft rim light, earthy palette, like a Blizzard game icon, not a photograph. Square 1024x1024 sheet, a precise grid of 3 columns by 3 rows = 9 square icons, each object alone and centred in its own equal cell, filling about 75% of the cell, with clear empty gutters between cells, all on the same plain flat very dark warm brown background (#1a130d), no grid lines, no borders, no frames, no text, no labels, no hands. Everything is 1st-century Galilee (AD 28), simple village food. Row 1: (1) a heavy hanging cluster of glossy amber-orange dates on their thick golden-yellow branching stalk, cut from the top of a date palm, sticky and shining, (2) a short thick piece of grey-brown fig-tree bough with rough bark, and growing STRAIGHT OUT OF THE BARK a tight cluster of many small round pinkish-yellow and russet figs, no basket, no leaves (sycomore figs, clearly different from a basket of purple figs), (3) a small bunch of four or five long, flat, curved, glossy dark chocolate-brown carob pods, leathery and wrinkled, tied together at the stems. Row 2: (4) two pomegranates: one whole, deep red with its small pointed crown, and one split open showing packed glistening ruby-red seeds and pale pith, (5) a small heap of four walnuts in their wrinkled tan shells, one cracked open showing the brain-like kernel, (6) two round flat barley loaves bundled together in a plain undyed linen cloth, the cloth's corners knotted on top like a traveller's bundle, the loaves' browned edges peeking out. Row 3: (7) a round flat barley flatbread beside a small brown clay bowl filled with dark glossy amber-brown date syrup, a sticky drip running down the bowl's side, (8) five small round flattened brown cakes of pressed dates studded with pieces of walnut, arranged on a flat grey stone slab, (9) a small whole roasted pigeon (rock dove), plump, browned and crisp from the coals, lying on a small rustic terracotta plate (a plate, NOT on a stick).
- sycomore_figs: pink-yellow figs on a bark log, no basket and no purple, so it reads differently from
figs(purple figs in a wicker basket). - bread_of_sychar: two flat loaves in a knotted linen bundle, clearly different from the single loaf of
bread. - pigeon: it came out in a shallow clay dish rather than on a flat plate and is drawn a little large, closer to a small chicken than a dove. It still reads as a roast bird and differs from
partridge(on a stick). Redo it if a smaller, darker bird is wanted.
Sheet L: _variants/items_sheet_l_palm.png (ChatGPT, 1254×1254, 3×3)
Keys: palm_fronds (1), palm_fibre (2), palm_cord (3, the coil), palm_mat (4), palm_basket (5), climbing_loop (8, the standing ring). Not used: cell 6 (the same loop lying flat), cell 7 (cord as a hank bound in the middle), cell 9 (sycomore figs with nicked fruit; the sheet K version has more bark and reads better).
Very good, that matches the set. Next sheet in exactly the same hand-painted World of Warcraft inventory icon style, lighting and background (stylized, chunky, bold painted highlights, visible brush strokes, warm upper-left key light, soft rim light, like a Blizzard game icon, not a photograph). Square 1024x1024 sheet, a precise grid of 3 columns by 3 rows = 9 square icons, each object alone and centred in its own equal cell, filling about 75% of the cell, with clear empty gutters between cells, all on the same plain flat very dark warm brown background (#1a130d), no grid lines, no borders, no frames, no text, no labels, no hands. Everything is 1st-century Galilee: the work of date-palm harvesters and mat plaiters. Long objects lie on the diagonal from lower left to upper right. Row 1: (1) two or three long fresh green date-palm fronds lying together on the diagonal, each a long central rib with many narrow stiff leaflets in a feather shape, bright green, (2) a rough torn sheet of coarse brown palm fibre: the hairy, woven-looking natural mesh that wraps the base of a palm frond, crisscrossed reddish-brown fibres with ragged edges, slightly curled, (3) a neat coil of DARK reddish-brown rough cord twisted from palm fibre, very hairy and coarse with stray bristly fibres sticking out all over, tied off with a loop (clearly darker, hairier and coarser than a smooth pale linen cord). Row 2: (4) a mat plaited from pale green-tan dried palm leaflets in a tight checkerboard weave, half rolled up and half lying flat, the plaited pattern clearly visible, (5) a tall, deep, EMPTY cylindrical basket plaited from green-tan palm leaflets in a diagonal twill weave, taller than it is wide, with a loop handle of dark brown palm-fibre cord at the rim, (6) one big thick closed loop of dark brown palm-fibre rope, about as thick as a wrist, lying in a wide oval ring, the two rope ends joined in a visible bound splice wrapped with thinner cord. Row 3: (7) the same dark hairy palm-fibre cord as (3), but as a loose hank bound in the middle, (8) the same big thick closed loop of palm-fibre rope as (6), seen from a slightly different angle, standing up like a ring, (9) the same small round sycomore figs as on the previous sheet, a cluster of them sprouting straight from a short knobbly piece of grey bark, a few figs nicked with a small cut, no leaves, no basket.
- palm_cord vs flax_cord: dark red-brown and bristly against the pale, smooth linen coil.
- palm_cord vs climbing_loop: the cord is a flat coil of many thin turns with a knot; the loop is one thick upright ring with a bound splice at the bottom (a different silhouette at 40 px). The flat-lying loop (cell 6) looked too much like the coil when small.
- palm_basket vs figs: tall, empty, green-tan checker plait with a cord loop handle, against the low wicker basket full of purple figs.
- palm_fibre: reads as a torn sheet of coarse woven mesh, as asked; the weave is more regular than real palm sheath fibre.
Notes for the next batch
- The conversation still holds the style after twelve-plus sheets; asking for a variant of a tricky item in the spare cells of a 3×3 sheet gives a choice without another round trip.
- Asking for the "same" object "from a slightly different angle" gives a real alternative silhouette (flat ring vs standing ring), which is useful when two items risk looking alike.
Action and attack icons (j12-artist, 2026-10-26)
Files: attacks/{key}.png + attacks/{key}.webp for the five combat attacks in config/game/animals.php (sling, staff, knife, bow, butcher), and actions/{key}.png + actions/{key}.webp for talk plus every key in config/game/actions.php (58), so 64 icons in all. The .png is the slice original (about 335–445 px square); the .webp is 256×256, cwebp q85, 5–17 KB. They replace the thin Tabler outline icons in the action bar slots; the game falls back to Tabler when a file is missing.
Style for the set (v2, current): simple ability icons for about 40 px, at the simple end of classic WoW spell and profession icons. Each has ONE central subject (one object, or two big shapes crossed or side by side) filling about 70% of the square, a bold chunky silhouette with a thick dark outline, strong value contrast and 2–3 main colours. No scenery behind the subject (at most one accent such as a wave curl, a moon or one flame), no hands except where the action needs them (teach, pray), no people or crowds, and no small particles (sparks, droplets, shavings, grains). Crowd and story actions use one symbolic object: loaves and two fish for seat_the_crowd, a torn loaf for share_the_bread, an empty cushion and low table for take_your_place, a torch for stand_with_him, a moon behind an olive tree for keep_watch. Every sheet was checked downscaled to 40×40 before saving.
Pipeline: made in one ChatGPT conversation ("Generate Ability Icons", the second of two with that title) with _variants/items_sheet_a.png attached to the first message as the style reference. Each sheet is 4×3 at 1536×1024 on flat #1a130d, then run through the item-icon pipeline (slice3.py with 7% padding, finish.py keying onto the warm radial vignette), so ability and item icons share one background. Where two cells touched (sheet 6, cells 8 and 12), the cell was cropped by hand and padded to a square.
Why v2: the first set (v1, below) was painted as full little illustrations, with hands, splashing water, scenery, sparks and shavings. The person found it unreadable at 40 px, so the whole set was redone and overwritten.
Sheet 1: _variants/actions_sheet_1.png (ChatGPT, items sheet A attached)
Keys: attacks/staff, attacks/knife, attacks/bow, attacks/butcher, actions/talk, actions/boat_fishing, actions/mend_net, actions/let_down_nets. sling, cast_net, crew_haul and night_fishing from this sheet were replaced by sheet 6 alternatives and kept in _variants/actions_alt/*_sheet1.png. The round top-down cast net looked too much like a dreamcatcher, and the night boat was too dark to read.
Generate an image. The attached sheet shows the inventory icons of my game J12 (a World of Warcraft style RPG set in 1st-century Galilee, AD 28). Now I need simple ABILITY icons for the action bar, shown tiny, at about 40 px. Style: like a classic World of Warcraft spell or profession icon (the fishing pole or the crafting hammer), at the SIMPLE end: ONE simple central subject per icon (one object, or at most two big shapes), a bold chunky silhouette with a thick dark outline, strong value contrast, only 2 or 3 main colours per icon, big flat painted shapes with a few bold highlights, warm key light from the upper left, earthy palette. Each subject is centred and fills about 70% of its cell. STRICT RULES: no scenery or landscape (no sky, hills, sea surface, rooms or backgrounds behind the subject); at most one simple accent such as a single curl of wave or a single flame; no hands, arms or people unless stated; no small particles (no sparks, droplets, splashes, shavings, grains, dust); no fine detail, no text, no frames, no borders. Landscape 1536x1024, a precise grid of 4 columns by 3 rows = 12 icons, each subject alone in its own equal cell with wide empty gutters, all on one plain flat very dark warm brown background (#1a130d). 1st-century Judean objects only, nothing medieval or modern, no magic, no glow effects. Row 1: (1) a braided leather sling: the leather pouch holding a round grey stone, the two cords trailing, one single curved motion arc; (2) a wooden shepherd's crook staff, diagonal, one single curved swoosh arc; (3) a short iron knife with a wooden handle, diagonal, blade pointing up-right; (4) a simple wooden bow, diagonal, with one arrow nocked on the string. Row 2: (5) a curved iron butchering knife lying across a folded pale animal hide; (6) two simple overlapping speech-bubble shapes, one linen-cream and one warm gold; (7) a round fishing net spread open in a circle, seen from above, with dark sinker stones evenly around its rim; (8) a small wooden fishing boat with a single mast and furled sail, in side view, one curl of teal wave under its hull. Row 3: (9) a long fishing net with a row of round cork floats along its top rope, hanging in a U shape like a hammock; (10) a big wooden netting needle threaded with cord, lying across a small square of net with a torn hole; (11) a crescent moon above a small dark fishing boat silhouette, deep blue accent; (12) a net bag bulging full of four big silver fish.
Sheet 2: _variants/actions_sheet_2.png (ChatGPT, same conversation)
Keys: cast_a_hook, row_against_the_wind, salt_fish, make_nets, skip_stones, draw_water, cut_reeds, set_stone, cook, forge, fletch, carve. All kept.
Exactly right, this is the style. Next sheet with exactly the same simple icon style, rules and layout (landscape 1536x1024, 4x3 = 12 icons, one simple central subject per cell filling about 70%, bold chunky silhouette with a thick dark outline, 2 or 3 main colours, no scenery or background, no hands or people unless stated, no small particles, wide empty gutters, flat #1a130d background, no text, no frames; it must read at 40 px). Row 1: (1) a big bronze fish hook on a short line; (2) a single wooden oar, diagonal, with one big curling teal wave crest behind its blade; (3) a split, flattened, salted fish beside a small clay bowl heaped with white salt; (4) a hank of brown twine wound on a wooden netting needle, beside a coil of cord. Row 2: (5) a flat grey stone above two simple blue ripple rings; (6) a leather well bucket full of water hanging from a rope; (7) a bundle of tall green reeds tied with cord, crossed with a small iron sickle; (8) a big black basalt block with a wooden lever under one corner. Row 3: (9) one fish lying on a small iron grill over one single orange flame; (10) an iron hammer raised over a squat square iron block anvil, the blade on it glowing orange (no horn on the anvil, no sparks); (11) a bundle of three arrows with big grey feather fletching tied with cord; (12) a wooden mallet and an iron chisel crossed in an X.
Sheet 3: _variants/actions_sheet_3.png (ChatGPT, same conversation)
Keys: pull_flax, reap, thresh, press_olives, sow, prune_vines, tread_grapes, tend_sheep, clear_stones, pick_figs, harvest_dates. repair_tower was replaced by sheet 6, because this tower had castle battlements (_variants/actions_alt/repair_tower_sheet3_battlements.png).
Next sheet with exactly the same simple icon style, rules and layout (landscape 1536x1024, 4x3 = 12 icons, one simple central subject per cell filling about 70%, bold chunky silhouette with a thick dark outline, 2 or 3 main colours, no scenery or background, no hands or people unless stated, no small particles, wide empty gutters, flat #1a130d background, no text, no frames; it must read at 40 px). Row 1: (1) a bundle of green flax stems with blue flowers on top and brown roots at the bottom, tied in the middle; (2) a curved iron sickle crossed over a golden sheaf of barley; (3) a wooden threshing sledge (a flat board with rows of stone teeth set underneath), seen at an angle; (4) a round upright basalt crushing stone like a wheel, with a small pool of green-gold olive oil and three dark olives at its foot. Row 2: (5) an open linen seed bag spilling a short stream of big golden seeds; (6) a small iron pruning hook crossed with a cut grapevine cane bearing one grape leaf; (7) a small square stone winepress basin brimming with purple grapes and dark purple juice; (8) a cream-white sheep walking through a simple wooden gate. Row 3: (9) a small round fieldstone watchtower with a wooden ladder leaning against it; (10) an iron mattock crossed over a big grey stone; (11) a short fig branch with two ripe purple figs and one broad fig leaf; (12) a heavy hanging cluster of amber dates.
Sheet 4: _variants/actions_sheet_4.png (ChatGPT, same conversation)
Keys: cut_palm_fronds, dress_sycomores, shake_carob, pick_pomegranates, gather_walnuts, weave_palm, gather_herbs, choose_lamb, bake_matzah, pastime (stone board with pebble counters), study, read_portion. All kept.
Next sheet with exactly the same simple icon style, rules and layout (landscape 1536x1024, 4x3 = 12 icons, one simple central subject per cell filling about 70%, bold chunky silhouette with a thick dark outline, 2 or 3 main colours, no scenery or background, no hands or people unless stated, no small particles, wide empty gutters, flat #1a130d background, no text, no frames; it must read at 40 px). Row 1: (1) a long green feathered palm frond crossed with a small iron sickle; (2) a short iron knife beside three small round reddish sycomore figs growing straight from a chunk of pale bark; (3) a long wooden pole crossed with a hanging cluster of dark brown curved carob pods; (4) a ripe red pomegranate on a short branch with three narrow leaves. Row 2: (5) a walnut in a split green husk with two whole brown walnuts; (6) a square of checkered woven pale palm-leaf mat with a few loose strips; (7) a tied bunch of green bitter herbs (wild lettuce and chicory) with one blue chicory flower; (8) a small spotless white lamb, sitting, head up, side view. Row 3: (9) a thin flat round unleavened cake with dark blisters, in front of the round mouth of a clay oven with an orange glow inside; (10) a flat stone game board with a scratched grid and four round pebble counters, two light and two dark; (11) an open parchment scroll on two wooden rollers, lying horizontally, with a small clay oil lamp; (12) a scroll on two wooden rollers standing upright on a small wooden reading stand.
Sheet 5: _variants/actions_sheet_5.png (ChatGPT, same conversation)
Keys: teach (a raised open hand with voice arcs), pray, keep_the_sabbath, seat_the_crowd, gather_fragments, share_the_bread, stay_two_days (a pale limestone house, which suits Samaria), spread_your_cloak, prepare_the_passover, take_your_place, keep_watch, stand_with_him. All kept. No people or faces appear, so the rule against depicting Jesus is never at stake.
Next sheet with exactly the same simple icon style, rules and layout (landscape 1536x1024, 4x3 = 12 icons, one simple central subject per cell filling about 70%, bold chunky silhouette with a thick dark outline, 2 or 3 main colours, no scenery or background, no hands or people unless stated, no small particles, wide empty gutters, flat #1a130d background, no text, no frames; it must read at 40 px). These are quiet, reverent story moments from the Gospels: plain objects only, no people, no faces, no halos, no light rays. Row 1: (1) one raised open palm (a hand from the wrist, simple shapes) with three curved lines of voice beside it; (2) two hands raised palms-up in prayer, simple shapes, no background; (3) a single small clay oil lamp with one steady flame; (4) five small round barley loaves and two fish laid on a cloth on a small patch of green grass. Row 2: (5) a wicker basket brimming with big broken pieces of bread; (6) a round flat loaf torn into two halves; (7) a small flat-roofed stone house with a warm lit doorway; (8) a striped wool cloak laid flat with one green palm branch across it. Row 3: (9) a clay cup of red wine beside a flat round unleavened bread; (10) an empty reclining cushion beside a low table with one cup on it; (11) a full moon behind a single dark gnarled olive tree; (12) one burning wooden torch, upright.
Sheet 6: _variants/actions_sheet_6.png (ChatGPT, same conversation; four new keys plus alternatives)
Keys: enter_the_tomb, go_apart_wondering, bar_the_door, watch_the_treasury (a bronze offering chest; it came out box-shaped rather than trumpet-shaped), plus the chosen alternatives: actions/cast_net (side view, flung open), actions/repair_tower (no battlements, a branch booth on top), attacks/sling (stone flying out of the pouch), actions/night_fishing (cropped by hand), and actions/crew_haul (crossed oars over a net). The unused alternatives (bow, talk, let_down_nets) are in _variants/actions_alt/*_sheet6.png.
Next sheet with exactly the same simple icon style, rules and layout (landscape 1536x1024, 4x3 = 12 icons, one simple central subject per cell filling about 70%, bold chunky silhouette with a thick dark outline, 2 or 3 main colours, no scenery or background, no hands or people unless stated, no small particles, wide empty gutters, flat #1a130d background, no text, no frames; it must read at 40 px). Plain and reverent, no people, no halos, no light rays. Row 1: (1) a great round disc-shaped rolling stone beside a dark low doorway cut in a pale rock face; (2) folded white linen grave cloths on a stone ledge; (3) a wooden plank door with a heavy wooden bar across it; (4) a trumpet-shaped bronze offering chest with two tiny copper coins falling into it. Row 2, alternatives: (5) a round fishing net flung open in the air, seen from the side like an open umbrella, dark sinker stones along its lower rim; (6) a small round fieldstone vineyard watchtower WITHOUT battlements or crenellations, a flat top with a small shelter of branches on it, a wooden ladder leaning against it; (7) a leather sling whirling in one circular arc with a round stone flying out of its pouch; (8) a small light-wooden fishing boat with a single mast under a big crescent moon, deep blue accent. Row 3, alternatives: (9) a simple wooden bow fully drawn with an arrow pointing up-right; (10) two wooden oars crossed in an X over a coil of net rope; (11) a single big cream speech-bubble shape with a small gold olive sprig; (12) a net hauled up and bulging with four big silver fish, one wave curl under it.
Superseded v1 (detailed illustrations), _variants/actions_v1_detailed/
Sheets actions_sheet_a.png to actions_sheet_f.png and alt/ came from an earlier ChatGPT conversation with the same title. The prompt asked for "ability icons ... each one shows an ACTION at a glance" with hands, motion and small figures allowed. The results were attractive but read as tiny paintings at 40 px, and every v1 file in attacks/ and actions/ was overwritten by v2. v1 also hit a content problem worth remembering: asked for a teacher "seen from behind" speaking to a crowd, the model twice painted the traditional white-robed, blue- or ochre-mantled figure of Jesus, once face-forward. Lesson: for any speaker or crowd scene, use an object or a hand instead of a figure. The first v1 prompt, for reference:
Generate an image. The attached sheet shows the inventory icons of my game J12 (a World of Warcraft style RPG set in 1st-century Galilee, AD 28). Now I need ABILITY icons for the action bar, in the spirit of WoW spell icons: each one shows an ACTION at a glance, not just an object. Same hand-painted style as the attached sheet: stylized, chunky, slightly exaggerated readable shapes, bold painted highlights and visible brush strokes, warm saturated colours, warm key light from the upper left, soft rim light, earthy palette (linen, ochre, olive, basalt, lake teal, a touch of gold), like a Blizzard game icon, not a photograph. Landscape 1536x1024, a precise grid of 4 columns by 3 rows = 12 icons, each a compact square-ish vignette centred in its own equal cell, filling about 75% of the cell, with clear empty gutters between cells. All on one plain flat very dark warm brown background (#1a130d), no grid lines, no borders, no frames, no text, no labels, no numbers. Each icon has ONE strong silhouette with high contrast against the dark background so it reads at 40 px, with a sense of motion. Hands and forearms are fine; small figures are fine but keep faces small or turned away. Clothing is 1st-century Judean only (wool and linen tunics, mantles, sleeves to the wrist or bare forearms, no trousers, nothing medieval, no armour). No magic, no glowing effects, no gore. Row 1: (1) SLING: a hand whirling a braided leather shepherd's sling in a blurred circle, a smooth round stone flying out of it with a short motion streak; (2) STAFF: a hand gripping a wooden shepherd's crook staff mid-swing in a strong diagonal arc with a swoosh of motion; (3) KNIFE: a hand holding a short iron knife with a wooden handle, blade forward, ready to strike, a glint on the edge; (4) BOW: a simple wooden self bow drawn to full curve, an arrow with grey feather fletching nocked on the string, seen from the side. Row 2: (5) BUTCHER: a curved iron butchering knife beside a pale animal hide being peeled and stretched over a wooden frame, clean, no blood; (6) TALK: two large curved painted speech swirls facing each other like a conversation, in warm linen and gold, beneath a small olive branch; (7) CAST NET: a round fishing net flung wide open in the air above lake-teal water, its lead sinkers fanning out in a circle; (8) FISH FROM THE BOAT: a small wooden Galilean fishing boat with a single mast and furled sail, a net hanging over its side into teal water. Row 3: (9) HAUL WITH A PARTNER: two pairs of arms pulling a wet net rope hand over hand over a boat's wooden gunwale; (10) MEND NET: hands with a wooden netting needle knotting a torn fishing net, a ball of cord beside it; (11) FISH THROUGH THE NIGHT: a small boat on dark blue night water under a crescent moon, a clay oil lamp glowing warm on the bow, the net going down into the dark; (12) LET DOWN THE NETS: a net bulging and bursting with silvery leaping fish being hauled up out of the water.
Notes for the next batch
- The decisive words were "ONE simple central subject", "thick dark outline", "2 or 3 main colours", "no scenery", "no small particles" and "it must read at 40 px". With those words, ChatGPT kept the style for six sheets with no drift.
- When cells touch (tall subjects in neighbouring rows),
slice3.pymerges them; crop by hand withboxcrop.py(crop the cell box and pad it to a square with the sheet background). - Reuse: no key shares an image; every action has its own icon.
Item icons, batch 4, and ability icons (j12-artist, 2026-10-26): gathered materials, staffs and slings, usable items, combat and gesture bar
Item files: items/{key}.png (slice original, 387–737 px square) and items/{key}.webp (256×256, cwebp q85, 4–13 KB). Ability files: abilities/{key}.png and abilities/{key}.webp, the same format in a new folder. Same ChatGPT conversation ("Generate inventory icon sheet"), same flat-sheet workflow: slice.py with the shared bg_template.png vignette (copied from the batch 2 scratchpad; scripts stay in the scratchpad, not the repo). Not wired into the game code.
Sheet K: _variants/items_sheet_k.png (ChatGPT, 1254×1254, 3×3)
Keys: empty_jar, olives, olive_wood, oak_bough, fieldstones, sling_stones, oak_staff, iron_shod_staff, goat_hair_sling (struck keys replaced from sheet L; the sheet K versions are _variants/{oak_staff,iron_shod_staff,goat_hair_sling}_v1_thin.png).
Excellent work so far. Next sheet, in exactly the same hand-painted World of Warcraft inventory icon style as the earlier sheets: stylized and chunky, slightly exaggerated readable shapes that read at 40 px, bold painted highlights and visible brush strokes, warm saturated colours, warm key light from the upper left, soft rim light, earthy palette, like a Blizzard game icon, not a photograph. A square 1024x1024 sheet, a precise grid of 3 columns by 3 rows = 9 square icons, each object alone and centred in its own equal cell, filling about 80% of the cell, with clear empty gutters between cells, all on the same plain flat very dark warm brown background (#1a130d), no grid lines, no borders, no frames, no text, no labels, no hands. Everything is 1st-century Galilee (Roman-era, AD 28), plain and practical, no ornament, no glowing. Long objects lie on the diagonal from lower left to upper right so they fill the cell. Row 1: (1) an EMPTY tall, slender, egg-shaped storage jar of plain unglazed red-brown Galilean terracotta, narrow neck with a thick rolled rim, two small loop handles on the shoulders, faint wheel-thrown ridges, the mouth dark and empty, no water, no contents (taller and slimmer than a round water pot), (2) a small, low, wide, shallow woven tray-basket heaped high with glossy green olives and purple-black olives, a sprig of narrow silver-green olive leaves on top, (3) one short thick split billet of olive wood: pale honey-coloured heartwood with dark brown swirling grain on the flat split face, rough grey-brown bark on the rounded back. Row 2: (4) ONE long, straight, freshly cut oak bough: a single slender branch with the side twigs trimmed off to short stubs, grey-brown bark, and a small cluster of two or three green lobed oak leaves still at the tip, lying corner to corner, NOT a bundle and NOT a log, (5) a small heap of three or four rough, porous, pitted black basalt fieldstones, irregular and angular, (6) five smooth, rounded, egg-sized river pebbles in grey and tan, polished by water, glistening with a few clear water drops, in a loose little group. Row 3: (7) a heavy, straight shepherd's staff of dark oak with a rounded knob at the top, worn smooth and polished by hands, the whole staff shown on the diagonal corner to corner, (8) the same dark oak staff but with a dark iron ferrule capping the foot and two iron bands just below the knob, (9) a shepherd's sling woven of black goat hair: two long thin dark cords with a small diamond-shaped woven pouch in the middle and a small finger loop at one end, laid out in a loose S-curve.
- empty_jar: tall, slim, two-handled amphora-like jar with a dark empty mouth; a clearly different silhouette from the round
water_jar. - olives: a shallow wide basket, so it does not repeat the deep basket of
figs. - oak_bough: one trimmed branch with three lobed leaves at the tip, not a bundle. It is thin, so it reads lighter at 40 px than the chunky icons (like
bow_stave). - Rejected: the two staffs were thin lines at 40 px and the iron shoe barely showed; the black goat-hair sling vanished into the dark background.
Sheet L: _variants/items_sheet_l.png (ChatGPT, 1254×1254, 3×3)
Keys: braided_sling, iron_sickle, jar_of_wine, wound_dressing, fig_cake, bread_of_sychar, oak_staff, iron_shod_staff, goat_hair_sling. All nine kept.
Very good, that matches the set. The jar, olives, olive wood, basalt stones and river pebbles are perfect. Next sheet in exactly the same hand-painted World of Warcraft inventory icon style, lighting and background (stylized, chunky, bold painted highlights, visible brush strokes, warm upper-left key light, soft rim light, like a Blizzard game icon, not a photograph). A square 1024x1024 sheet, a precise grid of 3 columns by 3 rows = 9 square icons, each object alone and centred in its own equal cell, filling about 80% of the cell, with clear empty gutters, all on the same plain flat very dark warm brown background (#1a130d), no grid lines, no borders, no frames, no text, no labels, no hands. Everything is 1st-century Galilee, plain and practical, no glowing, no blood. Row 1: (1) a finer shepherd's sling braided in LIGHT colours: long cords in a neat visible braid of cream-white wool and light brown flax, a small tan leather pouch in the middle, a finger loop at one end, laid out in a loose S-curve, bright and pale so it stands out from the dark background, (2) a curved iron harvest sickle: a crescent-shaped dark iron blade with a bright worn edge and a slightly serrated inner edge, a short olive-wood handle, (3) a SMALL squat round terracotta jug with one handle, its mouth closed with a grey clay stopper, and a dark red wine stain dribbling down from the mouth over the side. Row 2: (4) a rolled strip of off-white linen bandage tied with a thin cord, one loose end stained golden-yellow with olive oil, and beside it a tiny round clay flask, no blood, (5) a round, flat, pressed cake of dried figs, dark brown and studded with tiny fig seeds, a few fig halves pressed into the top, lying on a broad green fig leaf, (6) two round flat barley loaves stacked, wrapped in a plain undyed cream cloth bundle, the cloth's corners folded over the top and tied loosely, so it reads as a cloth-wrapped bundle of bread. Row 3: these redo two staffs and a sling from the last sheet, which were too thin to read at small size: (7) a heavy shepherd's staff of dark brown oak, made THICK and chunky (about twice as thick as before), lying corner to corner on the diagonal, a big round knob at the top, worn smooth, a bright warm highlight running along its length, (8) the same thick oak staff with a LARGE bright grey iron ferrule capping the whole foot (a long iron cap with a strong highlight) and two wide iron bands just below the knob, so the iron reads clearly, (9) the black goat-hair sling again but larger and easier to read: a big woven diamond-shaped pouch in the centre filling much of the cell, thick cords, painted in charcoal and dark grey with strong pale grey-blue rim light and highlights along every cord so it stands out from the dark background, a finger loop at one end.
- oak_staff / iron_shod_staff: chunky now, so they read at 40 px, at the cost of looking shorter (closer to a cudgel than a full-length staff). The iron-shod one has a long bright iron foot cap and two bands under the knob, clearly different from the plain staff.
- goat_hair_sling vs braided_sling: charcoal with grey-blue rim light and a big woven pouch, against cream-and-brown braided cords with a tan leather pouch. Easy to tell apart.
- jar_of_wine: small, squat, one handle, grey stopper and a red dribble; clearly different from
empty_jar(tall, two handles, open) andolive_oil(glass-green juglet). - iron_sickle: the serration came out as bold teeth, which reads well at icon size.
- bread_of_sychar: a knotted cloth bundle with two loaves showing, clearly different from the flat open loaf in
bread.
Sheet M: _variants/abilities_sheet_m.png (ChatGPT, 1254×1254, 3×3): ability icons
Keys (in abilities/): sling, staff, knife, butcher, interact, gesture_wave, gesture_sit, gesture_kneel, gesture_dance (struck keys replaced from sheet N).
Excellent, all nine work. Now a different kind of sheet: ACTION BAR ability icons for the same game, in exactly the same hand-painted World of Warcraft icon style, lighting and background as the item sheets (stylized, chunky, bold painted highlights, visible brush strokes, warm upper-left key light, soft rim light, like a Blizzard game ability icon, not a photograph). A square 1024x1024 sheet, a precise grid of 3 columns by 3 rows = 9 square icons, each subject alone and centred in its own equal cell, filling about 80% of the cell, with clear empty gutters, all on the same plain flat very dark warm brown background (#1a130d), no grid lines, no borders, no frames, no text, no labels. No people and no faces; where a hand is needed, show only one hand and wrist with warm olive-brown skin and a plain undyed linen sleeve cuff. 1st-century Galilee, plain and practical, no magic, no glowing effects, no halo, no sparkles, no blood. Motion arcs are soft pale painted streaks like brush strokes, not glowing energy. Row 1: (1) SLING: a shepherd's sling mid-swing, its two cords whirling in a circle with a round stone held in the pouch, a soft curved pale motion arc following the circle, (2) STAFF: a thick wooden shepherd's staff with a knob at the top swung diagonally across the cell, a short soft pale motion arc trailing behind its head, (3) KNIFE: a plain fisherman's iron knife, point straight up, a simple leaf-shaped single-edged blade with a bright edge and a plain dark wooden grip bound with cord. Row 2: (4) BUTCHER: a small curved iron skinning knife lying across a neatly folded tan raw animal hide, no blood, no carcass, (5) INTERACT: one open hand reaching forward toward the viewer, palm out, fingers relaxed, bathed in warm golden light from the upper left (plain warm sunlight, not a glow effect), (6) WAVE: one raised open hand seen from the palm side, fingers spread, waving a greeting, two short soft motion lines beside it. Row 3: (7) SIT: a simple low three-legged wooden stool with a folded cream wool mantle lying on its seat, (8) PRAY: two hands with palms pressed together, fingers pointing up in prayer, simple linen sleeve cuffs, lit warmly from above, no halo, no rays, no glow, plain dark background, (9) DANCE: a round wooden frame drum (a tof: a shallow wooden hoop with a stretched pale skin head, no jingles in the frame) seen at a slight angle, with three or four small bronze jingle discs lying beside it.
- sling / staff: pale painted motion streaks, no glow. The staff is a gnarled crook-less stick with a knob.
- gesture_kneel: the praying hands are lit from above with no halo and no rays.
- gesture_dance: the tof's rim is laced with cord; the "jingles" came out as small bronze finger cymbals, which read fine.
- Rejected: the knife was vertical and narrow (thin at 40 px) and its knapped blade read as flint; the stool's mantle had a striped border and a fringe along the whole edge (the series keeps tassels to one corner).
Sheet N: _variants/icons_sheet_n_fixups.png (ChatGPT, 1254×1254, 2×2): fix-ups
Keys: abilities/knife (1), abilities/gesture_sit (2), items/oak_bough (3). Cell 4 (interact, palm out) was not used: at 40 px it had nearly the same silhouette as gesture_wave, so abilities/interact stays the sheet M palm-up reaching hand; cell 4 is _variants/interact_v2_palm_out.png. The replaced versions are _variants/knife_v1_flint.png, _variants/gesture_sit_v1_fringe.png and _variants/oak_bough_v1_thin.png.
Very good: the sling, staff, skinning knife on hide, waving hand, praying hands and frame drum are perfect. A few need fixing. Same style, same flat #1a130d background, no text, no frames, no glow: a square 1024x1024 sheet, 2 columns by 2 rows = 4 icons, each alone and centred in its cell, filling about 80% of the cell, with clear gutters. Row 1: (1) KNIFE: a plain fisherman's knife lying on the diagonal from lower left to upper right so it fills the cell, point toward the upper right: a broad leaf-shaped single-edged blade of smooth forged dark grey IRON (smooth metal with a bright polished silver edge bevel and a strong highlight, NOT chipped stone, NOT flint), a plain dark wooden grip bound with tan cord, chunky enough to read at 40 px, (2) SIT: a simple low three-legged wooden stool with a neatly folded plain cream wool mantle lying on its seat; the mantle is plain weave with NO fringe and NO stripes along its edges; only at one single front corner hangs one small tassel of a few thin twisted white cords with one blue cord, knotted near the top. Row 2: (3) a single long, straight, freshly cut oak bough lying on the diagonal corner to corner, drawn THICKER and chunkier than before so it reads at small size: grey-brown bark with a bright highlight, the side twigs trimmed to short stubs, and at the upper tip a generous cluster of four or five big green lobed oak leaves; one branch, NOT a bundle, NOT a log, (4) INTERACT, a second version: one open hand and wrist reaching straight toward the viewer with the PALM facing the viewer, fingers relaxed and slightly spread, as if gently reaching out to touch or greet, plain linen sleeve cuff, warm golden sunlight from the upper left on the palm, no glow effect, no rays.
- knife: smooth forged iron with a bright bevel, on the diagonal; clearly iron now.
- gesture_sit: plain mantle with one white-and-blue corner tassel (Numbers 15:38), no border fringe.
Notes for the next batch
- The "Generate inventory icon sheet" conversation still holds the style after 14 sheets. Ability icons work in the same conversation: say "ACTION BAR ability icons ... same style and background" and describe motion arcs as "soft pale painted streaks like brush strokes, not glowing energy".
- Long thin objects (staffs, boughs, knives) need "THICK and chunky, about twice as thick" and "on the diagonal"; a vertical knife comes out too narrow for 40 px.
- Black or dark objects (goat hair) vanish on the dark background: ask for "strong pale grey-blue rim light and highlights along every cord".
- Iron blades need "smooth forged iron, NOT chipped stone, NOT flint"; otherwise the hammered texture reads as knapped flint.
- Any folded mantle needs "NO fringe and NO stripes; one corner tassel only".
- Hand icons: keep each hand pose a different silhouette (palm-up reach, raised palm with motion lines, pressed palms). Two open palms facing the viewer look the same at 40 px.
- In Chrome, keep in-page polling scripts under 40 s; a longer
javascript_toolcall timed out and the tab group was lost (the conversation itself was unharmed).
Item icons, batch 5 (j12-artist, 2026-10-27): harvest and household, tools and weapons, existing items without icons
Files: items/{key}.png (slice original, 401–722 px square) and items/{key}.webp (256×256, cwebp q85, 4–15 KB), 27 icons. Same ChatGPT conversation ("Generate inventory icon sheet"), same flat-sheet workflow. The slicing scripts were rewritten in the scratchpad (not the repo): make_bg.py rebuilds the warm radial vignette template from all existing items/*.png (centre about RGB 56/41/27, corners 23/17/11, centred slightly above the middle), and slice2.py finds each object as a connected blob (difference from the flat sheet colour, dilated), assigns it to a grid cell by its centre, crops a padded square (7%) and keys it onto the vignette. A plain equal-grid crop failed on sheet P, because ChatGPT lets objects cross the grid lines. All four sheets came back at 1254×1254 with a sheet colour of about RGB (24–30, 14–17, 6–8). Every icon was checked at 40×40.
Sheet O: _variants/items_sheet_o.png (ChatGPT, 1254×1254, 3×3)
Keys: honeycomb, mustard_seed, hyssop, charcoal, willow_withies, beeswax, herb_salve, honey_barley_cakes, herb_roasted_fish. All nine kept.
Excellent work on all the sheets so far. Next sheet, in exactly the same hand-painted World of Warcraft inventory icon style as the earlier item sheets: stylized and chunky, slightly exaggerated readable shapes that read at 40 px, bold painted highlights and visible brush strokes, warm saturated colours, warm key light from the upper left, soft rim light, earthy palette, like a Blizzard game icon, not a photograph. A square 1024x1024 sheet, a precise grid of 3 columns by 3 rows = 9 square icons, each object alone and centred in its own equal cell, filling about 80% of the cell, with clear empty gutters between cells, all on the same plain flat very dark warm brown background (#1a130d), no grid lines, no borders, no frames, no text, no labels, no hands. Everything is 1st-century Galilee (AD 28), plain and practical, no ornament, no glowing, no blood. Long objects lie on the diagonal from lower left to upper right and are THICK and chunky. Row 1: (1) a broken slab of wild honeycomb, golden wax hexagon cells, some cells oozing thick amber honey that drips down the edge, lying on a small flat grey stone, (2) a small heap of tiny round golden-brown mustard seeds spilling out of a little open undyed linen pouch, and beside it a sprig of small bright yellow four-petalled mustard flowers, (3) a tied bundle of hyssop (Syrian oregano, za'atar): woody stems, small fuzzy grey-green leaves, tiny white flower clusters at the tips, bound in the middle with tan twine. Row 2: (4) a heap of black lumps of wood charcoal with the wood grain and cracks visible, painted in charcoal and dark grey with STRONG pale grey-blue rim light and highlights on every lump so it stands out from the dark background (no fire, no embers, no glow), (5) a bundle of long, slender, flexible willow rods (withies), pale yellow-green and reddish-brown, with a few narrow green willow leaves, tied in the middle with cord, lying corner to corner on the diagonal, a chunky bundle, (6) a round flat cake of yellow beeswax, smooth slightly domed top with a paler rim and a soft waxy sheen. Row 3: (7) a small squat round clay pot filled to the brim with green-gold herbal ointment, a sprig of grey-green hyssop leaning against the pot, (8) three small round golden barley cakes glazed with honey, stacked loosely on a broad green leaf, a glossy honey shine, (9) a whole roasted tilapia (St Peter's fish) with crisp golden-brown skin, sprinkled with chopped green herbs and a few mustard seeds, lying on a small flat wooden board.
- charcoal: came out as squarish charcoal-grey blocks with only a faint rim light, but it is lighter than the background and reads at 40 px.
- mustard_seed: the pouch is burlap-textured rather than smooth linen; fine at icon size.
- beeswax: a tall round cake (more like a cheese wheel than a flat disc). It reads as wax by colour; redo flatter if it is confused with a cheese.
Sheet P: _variants/items_sheet_p.png (ChatGPT, 1254×1254, 3×3)
Keys: iron_axe, pruning_hook, fish_trap, fish_hooks, shepherds_rod, fishers_coat, linen_headcloth kept; boar_spear and antler_arrows replaced from sheet R (the sheet P versions are _variants/boar_spear_v1_thin.png and _variants/antler_arrows_v1_mid_feathers.png).
Perfect, all nine match the set. Next sheet in exactly the same hand-painted World of Warcraft inventory icon style, lighting and background (stylized, chunky, bold painted highlights, visible brush strokes, warm upper-left key light, soft rim light, like a Blizzard game icon, not a photograph). A square 1024x1024 sheet, a precise grid of 3 columns by 3 rows = 9 square icons, each object alone and centred in its own equal cell, filling about 80% of the cell, with clear empty gutters, all on the same plain flat very dark warm brown background (#1a130d), no grid lines, no borders, no frames, no text, no labels, no hands. Everything is 1st-century Galilee, plain and practical tools, no ornament, no glowing, no blood. All iron is smooth forged dark grey iron with a bright polished silver edge and a strong highlight (NOT chipped stone, NOT flint). Long objects lie on the diagonal from lower left to upper right, corner to corner, and are THICK and chunky (about twice as thick as a realistic tool) so they read at 40 px. Row 1: (1) a felling axe: a narrow, dark forged iron axe head with a bright polished cutting edge, on a straight thick pale olive-wood haft, on the diagonal, (2) a short iron pruning hook (billhook): a broad blade that curves forward into a hook at its tip, smooth forged iron with a bright inner edge, a thick wooden handle, (3) a conical woven wicker fish trap made of pale willow rods, wide open funnel mouth at the big end, the narrow end tied shut with cord, lying on its side on the diagonal. Row 2: (4) three big iron fish hooks of different sizes, bold and chunky with bright metal highlights, lying beside a small coil of thin pale flax fishing line, (5) a hunting spear with a broad leaf-shaped iron head and two small side lugs just below the head, on a THICK straight ash-wood shaft, lying on the diagonal from the lower left corner to the upper right corner, (6) a short heavy oak club (a shepherd's rod): a thick dark oak shaft with a big round knotted knob head, a loop of leather wrist thong at the handle end, THICK, on the diagonal. Row 3: (7) three arrows fanned out, each with a pale cream point carved from deer antler, straight reed shafts and grey feather fletching, THICK, (8) a short sleeveless outer tunic of coarse undyed oatmeal wool, neatly folded, with a thick twisted rope belt lying over it; plain, NO fringe, NO stripes, NO tassels, (9) a folded square of off-white linen headcloth with a dark brown twisted cord band (a ring of cord) lying on top of it; plain, NO fringe, NO stripes.
- iron_axe: a short hatchet-length haft rather than a long felling haft; it reads as an axe at 40 px.
- fishers_coat: a folded coarse tunic with a knotted rope belt, no fringe, no stripes.
- Rejected: the spear shaft was a thin line at 40 px; the arrows had a second set of feathers just behind the points.
Sheet Q: _variants/items_sheet_q.png (ChatGPT, 1254×1254, 3×3)
Keys: grey_mullet, jar_of_old_coins, lake_pearl, oak_bark, potters_clay, sea_bream, turtledove kept; clay_lamp and sunken_amphora replaced from sheet R (_variants/clay_lamp_v1_box_nozzle.png, _variants/sunken_amphora_v1_barnacles.png). These are existing items in config/game/items.php that had no painted icon.
Very good. Next sheet in exactly the same hand-painted World of Warcraft inventory icon style, lighting and background (stylized, chunky, bold painted highlights, visible brush strokes, warm upper-left key light, soft rim light, like a Blizzard game icon, not a photograph). A square 1024x1024 sheet, a precise grid of 3 columns by 3 rows = 9 square icons, each object alone and centred in its own equal cell, filling about 80% of the cell, with wide clear empty gutters so no object crosses into a neighbouring cell, all on the same plain flat very dark warm brown background (#1a130d), no grid lines, no borders, no frames, no text, no letters, no labels, no hands. Everything is 1st-century Judea and Galilee, plain and practical, no glowing. Row 1: (1) a small, plain, wheel-made Herodian clay oil lamp of buff-orange terracotta: a round closed body with a wide filling hole on top and a short broad spatula-shaped nozzle pared flat with a knife, unlit, no flame, (2) a whole silver-grey mullet fish, long torpedo-shaped body, big silvery scales with faint darker grey stripes along its side, a broad blunt head, lying on the diagonal, (3) a small squat clay jar stopped with a lump of black pitch, cracked open at the side, spilling a little heap of small round bronze coins with a green patina (plain worn coins, no readable writing). Row 2: (4) an open dark blue-black freshwater mussel shell with a pearly lining, holding one large round pale cream pearl with a soft pink-white lustre and a bright highlight, (5) two or three curled slabs of rough grey-brown oak bark, deeply furrowed on the outside, the smooth tan-orange inner side showing on the curled pieces, (6) a heavy lump of wet, glistening red-brown potter's clay, half wrapped in a damp, crumpled undyed linen cloth. Row 3: (7) a whole silvery sea bream, a deep oval body with a pale silver side, a faint gold band between the eyes, a spiny dorsal fin, lying on the diagonal, clearly rounder and taller than the mullet, (8) a tall slender terracotta amphora with two handles and a pointed foot, crusted with patches of pale whitish lake deposits and tiny shells, a strand of green water weed hanging from one handle, standing slightly tilted, (9) a small grey turtledove with a pinkish-buff breast and a black-and-white striped patch on its neck, sitting inside a small round wicker cage with a domed top, the dove clearly visible between the open wicker bars.
- Style drift: this sheet has a faint mosaic-like blocky texture on the terracotta and bark (visible at full size, invisible at 40 px). Sheet R asked for "smooth painted surfaces (no mosaic or tiled texture)", which helped only partly.
- grey_mullet vs sea_bream: long torpedo body against a deep oval body with the gold brow band; clearly different at 40 px.
- Rejected: the lamp read as a round pot with a square box spout; the amphora was covered in marine barnacles (wrong for the freshwater lake).
Sheet R: _variants/items_sheet_r_fixups.png (ChatGPT, 1254×1254, 2×2): fix-ups
Keys: clay_lamp (1), antler_arrows (2), boar_spear (3), sunken_amphora (4). All four kept.
Good: the mullet, coins, pearl, bark, clay, bream and dove are right. A few need fixing. Same hand-painted style, same flat #1a130d background, smooth painted surfaces (no mosaic or tiled texture), no text, no frames, no glow: a square 1024x1024 sheet, 2 columns by 2 rows = 4 icons, each alone and centred in its own cell, filling about 80% of the cell, with wide clear gutters. Row 1: (1) a small Herodian clay oil lamp seen from above at an angle, shaped like a flattened teardrop: a round, low, closed body of smooth orange-buff terracotta with a round filling hole in the middle of the top, and at the front a short broad nozzle with a flat spatula-shaped end and a small round wick hole at its tip, a little soot on the nozzle, unlit, no flame, no handle, (2) three arrows lying side by side on the diagonal from lower left to upper right, THICK and chunky: each a straight reed shaft with a pointed pale cream point carved from deer antler at the UPPER RIGHT end, and grey feather fletching ONLY at the lower left tail end (no feathers anywhere near the points). Row 2: (3) a hunting spear lying exactly corner to corner on the diagonal, drawn THICK and chunky (about twice as thick as before): a broad leaf-shaped head of smooth forged iron with a bright polished edge and a strong highlight, two short stubby lugs sticking out sideways just below the head, a thick straight pale ash-wood shaft with a leather binding at the socket, (4) a tall slender two-handled terracotta amphora with a pointed foot, tilted slightly, patchily crusted with a pale whitish-grey lime deposit and a few tiny brown spiral freshwater snail shells stuck to it (no barnacles), a strand of green water weed hanging from one handle.
- clay_lamp: now a round closed body with a filling hole and a sooty spatula nozzle: a Herodian lamp.
- boar_spear: thick, with the lugs and a leather-bound socket, but drawn short (like the thick staffs in batch 4).
- sunken_amphora: lime crust and spiral snail shells (plausible for the lake), weed on the handle.
Notes for the next batch
- The conversation still holds the style after 18 sheets, but sheet Q started to show a blocky mosaic texture; if it grows, start a new conversation with
_variants/items_sheet_o.pngattached as the reference. - "Fletching ONLY at the tail end (no feathers anywhere near the points)" is needed for arrows.
- For freshwater finds, say "no barnacles"; ChatGPT defaults to a marine wreck look.
- Slice by connected blobs, not by the equal grid: objects regularly overlap the grid lines by 20–40 px.
Face textures for the 3D heads (j12-artist, 2026-10-27)
Files: faces/{key}.png (tile crop, 398–491 px square) and faces/{key}.webp (256×256, cwebp q85, 5–8 KB), 18 keys: man_young, man_middle, man_old, man_weathered, man_broad, woman_young, woman_middle, woman_old, youth, man_lean, man_scholar, man_stern, man_gentle, man_soldier, woman_stern, woman_gentle, girl, man_elder. A new ChatGPT conversation ("Generate Face Textures"), no reference image attached. Each sheet has thin flat dark gutters between the tiles; faces.py (scratchpad) finds the gutters from row and column profiles, insets each tile by 1% and crops it square. Not wired into the game code.
Contract as delivered: strictly frontal and symmetrical, flat even light (the cheek edges and the area below the jaw are painted a little darker, by about 30% at the very edge), skin to every edge with no gutter remnants, no hair, no ears, no headwear, no background, one medium olive skin tone. Measured on all 18: pupils at about 22% of the tile height from the top (19–25%) and the mouth line at about 73% (69–76%); the eyes sit near the top because the crop starts at mid-forehead. Eyebrows are painted dark; man_old, man_elder and woman_old have grey-flecked brows. A faint grey stubble shadow remains around the mouth on the men (much less than in sheet 1); if it shows under a re-tint, the code can lift it, or the next batch can try "paint the skin around the mouth exactly the same colour as the cheeks".
Sheet 1: _variants/faces_sheet_1.png (ChatGPT, 1254×1254, 3×3)
Keys kept: woman_young, woman_middle, woman_old. The other six (man_young, man_middle, man_old, man_weathered, man_broad, youth) were replaced by sheet 3; the sheet 1 versions are in _variants/faces_v1/{key}_sheet1.png.
Generate an image. I need face textures for the low-poly 3D characters of my browser game J12 (a World of Warcraft style RPG set in 1st-century Galilee, AD 28). Each texture is painted flat onto the front of a simple 3D head, so the face must be like an unwrapped face texture, not a portrait. Make a square 1024x1024 texture sheet: a precise grid of 3 columns by 3 rows = 9 equal square tiles, separated by thin straight gutters of flat very dark brown (#1a130d). Inside each tile, SKIN FILLS THE WHOLE TILE TO EVERY EDGE: the tile is cropped tightly from the middle of the forehead at the top edge to just under the chin at the bottom edge, and from cheek edge to cheek edge at the left and right edges, so there is no background, no outline of the head, no ears, no hair, no hairline, no beard, no moustache, no stubble, no headwear, no neck, no clothing. Every face is strictly FRONTAL and symmetrical, looking straight at the viewer, centred in its tile with the eyes at the same height in every tile (a little above the middle), with even soft flat lighting and almost no cast shadow (the game lights the head itself). Neutral, calm expression, eyes open, mouth closed. Style: hand-painted stylized World of Warcraft character texture, clean painted shapes, bold features that still read when the face is small on screen: clear dark eyebrows, eyes with dark lashes and visible brown irises, soft nose shading, defined lips. Use the SAME single medium olive skin tone in all nine tiles (the game re-tints each one), Middle Eastern Jewish faces. Tiles, row by row: Row 1: (1) a young man of about 20, smooth skin; (2) a man of about 40, a few faint lines; (3) an old man of about 70 with wrinkles on the forehead and around the eyes and deep-set eyes; Row 2: (4) a weathered fisherman of about 45 with sun lines at the eye corners and across the brow; (5) a broad-faced man of about 35 with a heavy brow ridge and a wide nose; (6) a young woman of about 20, soft features, fine brows. Row 3: (7) a woman of about 40, (8) an old woman of about 70 with fine wrinkles, (9) a boy of about 12 with a rounder, childlike face. No text, no labels, no numbers, no borders inside the tiles.
- The format worked on the first try: skin to every edge, frontal, flat light. The rendering is more painterly-realistic than stylized WoW, which suits a texture that is seen small.
- Rejected: the men had a grey-green stubble shadow around the mouth and jaw despite "no stubble", and the boy (tile 9) read as a girl.
Sheet 2: _variants/faces_sheet_2.png (ChatGPT, 1254×1254, 3×3)
Keys: man_lean, man_scholar, man_stern, man_gentle, man_soldier, woman_stern, woman_gentle, girl, man_elder. All nine kept.
Excellent, this is exactly the right format. Make a second sheet in exactly the same format, style, crop, eye height, skin tone and flat even lighting: a square 1024x1024 sheet, 3 columns by 3 rows = 9 equal square tiles separated by thin straight flat very dark brown (#1a130d) gutters, skin filling every tile to every edge, strictly frontal and symmetrical faces looking straight at the viewer, neutral calm expression, eyes open, mouth closed, no hair, no hairline, no ears, no headwear, no background. This time the men must be completely clean-shaven SMOOTH skin: NO stubble, NO beard shadow, no grey, green or blue tint around the mouth, chin and jaw (the game adds beards as 3D shapes). Give every face a clearly different face shape, nose, brow and lips from the others and from the first sheet. Row 1: (1) a lean man of about 30 with a long narrow face, hollow cheeks and a thin straight nose; (2) a thoughtful scholar of about 50 with fine, delicate features, a high forehead and a slender nose; (3) a stern man of about 45 with a furrowed brow, a hard set mouth and straight heavy eyebrows. Row 2: (4) a gentle man of about 40 with a soft rounded face, kind eyes and softly arched brows; (5) a hard-jawed soldier of about 30 with a square jaw, a strong chin, a slightly broken nose and a firm mouth; (6) a stern woman of about 50 with a narrow face, a thin firm mouth and a straight nose. Row 3: (7) a gentle woman of about 35 with a soft oval face, full cheeks and warm eyes; (8) a girl of about 10 with a small round childlike face, a small nose and big eyes; (9) a very old man of about 85 with heavy drooping eyelids, deep wrinkles across the forehead and around the eyes and mouth, and sunken cheeks. No text, no labels, no numbers.
- man_lean: the jaw line shows as a darker skin tone in the two lower corners (still skin, no background).
- man_elder: deeply wrinkled with grey brows; the lids are only moderately heavy.
Sheet 3: _variants/faces_sheet_3_fixups.png (ChatGPT, 1536×1024, 3×2): fix-ups
Keys: youth, man_young, man_middle, man_weathered, man_broad, man_old. All six kept (they replace the sheet 1 versions). The tiles are about 490 px, so these PNGs are larger than the others; the webps are all 256.
Very good. One more sheet in exactly the same format, style, crop, eye height, skin tone and flat even lighting, but landscape 1536x1024: 3 columns by 2 rows = 6 equal SQUARE tiles separated by thin straight flat very dark brown (#1a130d) gutters, skin filling every tile to every edge, strictly frontal and symmetrical, neutral calm expression, eyes open, mouth closed, no hair, no hairline, no ears, no headwear, no background. These redo faces from the FIRST sheet. Every man must be completely clean-shaven SMOOTH skin: NO stubble, NO beard shadow, no grey, green or blue tint around the mouth, chin and jaw. Row 1: (1) a BOY of about 12, clearly a boy and not a girl: a rounder childlike face, straight thicker boyish eyebrows, a slightly broader nose, no eye makeup, no long lashes; (2) the same young man of about 20 as the first tile of the first sheet, now with smooth clean-shaven skin; (3) the same man of about 40 as the second tile of the first sheet, smooth clean-shaven skin. Row 2: (4) the same weathered fisherman of about 45 as the first tile of the second row of the first sheet, sun lines kept, smooth clean-shaven skin; (5) the same broad-faced man of about 35 with the heavy brow and wide nose, smooth clean-shaven skin; (6) the same old man of about 70 with wrinkles and deep-set eyes, smooth clean-shaven skin. No text, no labels, no numbers.
- youth: now clearly a boy (straight thick brows, broader nose).
- Stubble: measured as the red-minus-green balance beside the mouth against the cheek, every sheet 3 man is closer to the cheek colour than his sheet 1 version, but a faint shadow remains.
NPC portraits, batch 4 (j12-artist, 2026-10-27): soldiers, lakeside, Jerusalem, Sychar and the coast
Files: portraits/{key}.png (512×512 cell crop) and portraits/{key}@web.png (512×512, the same pixels, kept for the existing naming), keys from the npcs arrays in config/game/*.php. Made in one new ChatGPT conversation ("Generate Character Portrait Sheet") with portraits/simon.png attached to the first message as the style reference. Each sheet is 3×2 at 1536×1024; every cell is a self-contained 512 px portrait with its own vignette, cut on the equal grid (portraits.py in the scratchpad). Jesus is skipped. Not wired into the game code.
Sheet 1: _variants/portraits_sheet_1_soldiers.png (ChatGPT + simon.png)
Keys: marcus, demetrios, rufus, titus, sabinus, alexandros. All six kept.
Generate an image. The attached portrait is the style reference for a series of character portraits for my game J12, a World of Warcraft style RPG set in 1st-century Judea and Galilee (AD 28-30). Match it exactly: the same semi-realistic painterly oil rendering and brushwork, warm soft key light from the left with a gentle warm gold rim light, bust framing (head and shoulders), each figure turned three-quarters to the viewer's left, plain warm dark brown background with a soft vignette. Do not copy the man in the reference; make new people, each with a clearly different face. Make a landscape 1536x1024 sheet: a precise grid of 3 columns by 2 rows = 6 square portraits, each a complete, self-contained square portrait filling its own equal cell edge to edge with its own dark brown vignette background, nothing crossing into a neighbouring cell, no gutters, no borders, no frames, no text, no labels. No halo, no glow, no weapons drawn, no blood. Calm, watchful expressions. These are six ROMAN AUXILIARY SOLDIERS stationed in Judea around AD 30 (locally recruited Syrian and Greek-speaking men of a provincial auxiliary cohort, not legionaries): each wears a plain wool tunic in a dull madder or brick red, a simple, plain, rounded bronze or iron helmet with cheek guards and a small neck guard (NO plume, NO crest, NO decoration), and over the tunic either a shirt of iron mail (ring mail) with doubled shoulder pieces or just a plain leather-edged military belt and a brown wool cloak pinned at the shoulder with a simple bronze brooch. NO lorica segmentata (no banded plate armour), nothing medieval, no fantasy armour, no trousers. Row 1: (1) Marcus, sentry of the Antonia fortress, about 30, a tall, solid man, clean-shaven, short dark brown hair under an iron helmet, light olive skin, iron mail, a disciplined, steady look; (2) Demetrios, an auxiliary at the East Gate, about 24, slim, clean-shaven, fair olive skin, brown hair, a bronze helmet, red tunic with a brown cloak pinned at the shoulder, no mail, a young, alert, slightly bored look; (3) Rufus, guard by the Pool Gate, about 35, darker brown skin, black hair and a short black beard, iron helmet, iron mail, a gruff, wary look. Row 2: (4) Titus, North Gate sentry, about 50, grey hair cropped short, clean-shaven, a lined fair olive face, iron mail and a bronze helmet, a veteran's patient, tired look; (5) Sabinus, a watchman of the Lower City, about 30, broad and heavy-set, clean-shaven, olive skin, dark hair, a plain iron helmet, red tunic and brown cloak, no mail, a blunt, unimpressed look; (6) Alexandros, an auxiliary on the Bethany road, about 40, a short greying brown beard, olive skin, iron mail, bronze helmet, a thoughtful, quiet look.
- Plain Coolus/Weisenau-style helmets with cheek guards and neck guards, no plumes; mail with doubled shoulders and a leather strap, or a brown cloak with a round bronze brooch (Demetrios, Sabinus, matching their
shield: falselight kit). The background is a little more golden than simon.png but sits well beside it. - The helmet tops touch the top edge of the cell; later prompts ask for "a little space above each head".
Sheet 2: _variants/portraits_sheet_2.png (ChatGPT, same conversation)
Keys: quintus, aelius, yair (named "Hilkiah | Olive Presser" in config), nahum, hanan, elazar. All six kept.
Excellent, exactly right. Next sheet in exactly the same style, lighting, three-quarter turn to the viewer's left, framing and dark brown vignette background: landscape 1536x1024, 3 columns by 2 rows = 6 square, self-contained portraits filling their cells edge to edge, nothing crossing into a neighbouring cell, no gutters, no borders, no text. Leave a little space above each head so the top of the head or helmet is not cut off. Every face clearly different. Historically accurate 1st-century Judean and Galilean dress: wool and linen tunics, wool mantles (on men's mantles at most one small knotted tassel at a single corner, never a row along the edge), women in a head covering over head and shoulders; never trousers, nothing medieval. Row 1: (1) Quintus, an auxiliary watchman on the north road, about 38, the same kind of auxiliary as before: a plain rounded iron helmet with cheek guards (no plume, no crest), brick-red tunic, iron mail with doubled shoulder pieces, light olive skin, dark brown hair and a short dark brown beard, a sober, patient look; (2) Aelius, an auxiliary watchman on the Capernaum road, about 26, clean-shaven, warm olive skin, very dark brown hair, a plain bronze helmet, brick-red tunic and a brown wool cloak pinned at the shoulder with a bronze brooch, no mail, a curious, easy-going look; (3) Hilkiah the olive presser of Capernaum, about 45, sturdy, sun-browned olive skin, dark brown hair and a full dark beard, an olive-brown wool tunic and a dark olive-green wool mantle, a few glints of olive oil on his forearm, a quiet, steady look. Row 2: (4) Nahum the thresher, about 65, wiry and strong, deeply tanned skin, white hair and a full white beard, a dusty fawn wool tunic and a brown wool mantle, a little chaff caught in his beard, a cheerful, weathered look; (5) Hanan the harbour mason of Capernaum, about 40, broad-shouldered, olive skin, black hair and a black beard, a grey-brown wool work tunic and a slate blue-teal wool mantle, a little stone dust on his shoulders, a practical, confident look; (6) Elazar, a fisherman of the Seven Springs, about 35, lean and sun-dark, very dark brown hair and a full black beard, a weathered taupe wool tunic and a dark brown-red wool mantle, a frank, outdoor look.
- ChatGPT added fitting props on its own: Nahum shoulders a barley sheaf, Hanan holds a stone hammer, Elazar has a net over his shoulder, Hilkiah rests an oily forearm on a tool handle.
- aelius shares the young-auxiliary face of demetrios (curly hair, bronze helmet, brown cloak); they are told apart by the helmet colour only. Redo one of them if they stand near each other in game.
Sheet 3: _variants/portraits_sheet_3.png (ChatGPT, same conversation)
Keys: shelomit, menahem, ezra, shua, yoezer, malik. All six kept.
Very good. Next sheet, the same in every way (style, lighting, three-quarter turn to the viewer's left, framing with a little space above each head, dark brown vignette background, landscape 1536x1024, 3 columns by 2 rows = 6 self-contained square portraits filling their cells, no gutters, no borders, no text). Every face clearly different from all earlier ones (different face shape, nose and brow). 1st-century Galilean dress only; on men's mantles at most one small knotted tassel at a single corner; women wear a wool head covering over head and shoulders; no trousers. Hands and props are optional. Row 1: (1) Shelomit, a herb gatherer of the hills above the lake, a woman of about 45, lean, olive skin, dark brown hair mostly covered by a warm tan-brown wool head covering, a muted sage-green wool dress, a small sprig of grey-green hyssop tucked at her shoulder, a shrewd, kindly look; (2) Menahem, a farmer, about 60, stocky, deeply tanned, grey hair and a full grey beard, an earthy brown wool tunic and a dusty olive-brown mantle, a slow, patient look; (3) Ezra, a vinedresser, about 45, wiry, sun-browned, brown hair and a brown beard, a dark brown tunic and a muted wine-red wool mantle, a vine leaf caught on his shoulder, a content, quiet smile. Row 2: (4) Shua, a shepherd, about 30, lean, sun-dark skin, black hair and a short black beard, a fawn wool tunic and a dark charcoal-brown goat-hair mantle, a calm, watchful look; (5) Yoezer, a farmer, about 70, thin, very weathered, silver-white hair and a long silver-white beard, an earth-brown tunic and a moss-green wool mantle, a wise, wry look; (6) Malik, a caravaneer from Damascus, a Nabataean-Syrian trader of about 40, olive-brown skin, black hair and a neat black beard, a pale sand-coloured robe, a deep red wool mantle and a simple off-white linen head cloth wrapped around his head, a worldly, amused look.
- malik: the cream head cloth is held by a twisted dark-red band, which edges toward a modern keffiyeh-and-agal look; acceptable for a Syrian caravaneer, but redo with "a plain wrapped linen cloth, no headband" if it reads as modern.
- shua: holds a wooden crook staff; ezra has a vine sprig on his shoulder, shelomit a hyssop sprig.
Sheet 4: _variants/portraits_sheet_4.png (ChatGPT, same conversation)
Keys: gedalyah, rivka, yose, batya, nathanael, dosa. All six kept.
Lovely. Next sheet, the same in every way (style, lighting, three-quarter turn to the viewer's left, framing with a little space above each head, dark brown vignette background, landscape 1536x1024, 3 columns by 2 rows = 6 self-contained square portraits filling their cells, no gutters, no borders, no text). Every face clearly different from all earlier ones; the two women must look clearly different from each other and from Shelomit (different face shape, nose and build). 1st-century Galilean dress only; on men's mantles at most one small knotted tassel at a single corner; women wear a wool head covering over head and shoulders; no trousers. Row 1: (1) Gedalyah, an innkeeper on the lake road, about 55, portly, olive skin, grey hair and a full grey beard, a taupe-brown wool tunic and a dark grey-green wool mantle, a hospitable but shrewd look; (2) Rivka, a maker of stone net-weights in Capernaum, a woman of about 35, strong-armed, a broad face, olive skin, black hair under a slate-blue wool head covering, a plain brown wool dress, a little grey stone dust on her sleeve, a capable, direct look; (3) Yose, a reed cutter from the marshes by the lake, about 25, slim, sun-browned, dark brown hair and a short young beard, a khaki-fawn wool tunic and a dull olive-green mantle, a few green reed leaves on his shoulder, an easy, open look. Row 2: (4) Batya, a winemaker, a woman of about 40, a long face with high cheekbones, olive skin, black hair under an ochre-tan wool head covering, a deep wine-brown wool dress, a faint purple grape stain on her fingers, a warm, wry look; (5) Nathanael of Cana in Galilee, about 30, a thoughtful, honest man with a frank gaze, olive skin, very dark brown almost black hair and a full dark beard, a stone-brown wool tunic and a muted plum-violet wool mantle, a sincere, slightly sceptical look; (6) Dosa, an elder of Bethsaida, about 75, frail but dignified, white hair and a long white beard, a brownish wool tunic and a dark umber wool mantle draped over his head and shoulders, a grave, kind look.
- rivka holds a pale stone (a net-weight); yose carries a reed bundle; batya holds grapes with stained fingers.
- batya has a face close to shelomit (sheet 3); the women in this series still drift toward one face despite asking for a different one.
Sheet 5: _variants/portraits_sheet_5.png (ChatGPT, same conversation)
Keys: matthan, yehudit, ithamar, abba, nittai, collector. All six kept.
Very good. Next sheet, the same in every way (style, lighting, three-quarter turn to the viewer's left, framing with a little space above each head, dark brown vignette background, landscape 1536x1024, 3 columns by 2 rows = 6 self-contained square portraits filling their cells, no gutters, no borders, no text). Every face clearly different from all earlier ones (different face shape, nose and brow). 1st-century Galilean dress only; on men's mantles at most one small knotted tassel at a single corner, never a row along the edge; women wear a wool head covering over head and shoulders; no trousers, no aprons with neck straps. Row 1: (1) Matthan, master of the fish-salting works at Magdala, about 50, heavy-set and prosperous, olive skin, dark grey-brown greying hair and a trimmed greying beard, a tan wool tunic and a dark teal-blue wool mantle, a few grains of white salt on his sleeve, a businesslike, appraising look; (2) Yehudit, a fish seller of Capernaum, a woman of about 30, a round cheerful face with a small nose, olive skin, black hair under a honey-ochre wool head covering, a muted dusky-purple wool dress, a lively, quick-witted look; (3) Ithamar, the attendant of the synagogue at Capernaum, about 55, slight and neat, olive skin, greying brown hair and a neat greying beard, a cream linen tunic and a slate-blue wool mantle, a careful, devout, gentle look. Row 2: (4) Abba, an orchard keeper, about 65, round-shouldered, sun-browned, grey hair and a full grey beard, an olive-brown tunic and an olive-green wool mantle, a placid, fatherly look; (5) Nittai, a goatherd of the cliffs of Arbel, about 70, gaunt and hardy, leathery dark skin, grey-white hair and a scraggly grey-white beard, a brown wool tunic and a coarse near-black goat-hair mantle, a fierce, independent look; (6) the collector of the half-shekel temple tax at Capernaum, about 45, a lean, officious man, olive skin, dark brown hair and a trimmed dark beard, a light fawn linen tunic and a dark olive wool mantle, a small leather money pouch on a cord at his chest, a polite but insistent look.
- Props added by the model: Matthan a basket of salt, Yehudit a basket of sardines, Ithamar a small scroll, Abba an olive branch and stick, Nittai a crook, the collector a leather pouch and one silver coin.
- matthan reuses the heavy-set greying face of gedalyah (sheet 4). The next prompt asks not to reuse it.
Sheet 6: _variants/portraits_sheet_6.png (ChatGPT, same conversation)
Keys: thomas, matthias, joseph_barsabbas, water_carrier, master_of_the_house, martha. All six kept.
Excellent. Next sheet, the same in every way (style, lighting, three-quarter turn to the viewer's left, framing with a little space above each head, dark brown vignette background, landscape 1536x1024, 3 columns by 2 rows = 6 self-contained square portraits filling their cells, no gutters, no borders, no text). Every face clearly different from all earlier ones: vary the face shape (long, square, round, narrow), the nose and the brow, and do not reuse the same heavy-set greying man. These are people in and around Jerusalem in AD 30. 1st-century Judean dress only; on men's mantles at most one small knotted tassel at a single corner; women wear a wool head covering over head and shoulders; no trousers. Row 1: (1) Thomas, called Didymus (the Twin), a Galilean disciple of about 32, a narrow, angular face with a strong straight nose, olive skin, very dark brown hair and a full dark beard, a stone-brown wool tunic and a grey-green wool mantle, an intent, questioning, serious look; (2) Matthias, a follower of about 35, a square, open face, olive skin, dark brown hair and a short dark beard, a brown wool tunic and a slate blue-grey wool mantle, a steady, humble look; (3) Joseph called Barsabbas, surnamed Justus, about 40, a long, upright, earnest face with deep-set eyes, olive skin, brown hair and a full brown beard, a dull brown tunic and a warm brown wool mantle, a principled, quiet look. Row 2: (4) a servant of a Jerusalem household, about 30, lean, olive skin, black hair and a short black beard, a plain fawn wool tunic and a brown mantle, carrying a big clay water pitcher on his shoulder, his face turned aside and preoccupied; (5) the master of a large Jerusalem house, about 55, well-fed and dignified, fair olive skin, grey hair and a full grey beard, a fine cream linen tunic and a russet-brown wool mantle with one small corner tassel, a courteous, gracious look; (6) Martha of Bethany, a woman of about 35, a brisk, practical housekeeper with a heart-shaped face and a slightly upturned nose, olive skin, dark hair under a soft tan wool head covering, a brown wool dress with her sleeves pushed up, a little flour on her forearm, an energetic, warm but slightly harried look.
- water_carrier (Mark 14:13) shoulders a big clay pitcher; martha has floury forearms over a kneading bowl; master_of_the_house has one gold corner tassel and a woven border on the tunic.
- master_of_the_house again uses the heavy-set greying face (as gedalyah and matthan), despite the prompt. martha is close to the shared women's face (batya, shelomit).
- thomas and joseph_barsabbas have shoulder-length wavy dark hair and beards, but plain coloured mantles and no halo; they do not read as traditional Jesus iconography.
Sheet 7: _variants/portraits_sheet_7.png (ChatGPT, same conversation)
Keys: doorkeeper, servant_girl, malchus_relative, money_changer, temple_levite, zakkai. All six kept. The two servant girls are unnamed in Scripture (John 18:17; Mark 14:66) and stay unnamed.
Good. Next sheet, the same in every way (style, lighting, three-quarter turn to the viewer's left, framing with a little space above each head, dark brown vignette background, landscape 1536x1024, 3 columns by 2 rows = 6 self-contained square portraits filling their cells, no gutters, no borders, no text). IMPORTANT: every face clearly different from all earlier ones. The women especially must NOT share the same face as the earlier women: give each a distinctly different face shape, nose, mouth and eye shape. Jerusalem, AD 30. 1st-century Judean dress only; on men's mantles at most one small knotted tassel at a single corner; women wear a wool head covering over head and shoulders; no trousers. Row 1: (1) the doorkeeper of the high priest's courtyard, a servant girl of about 17, slim, a narrow oval face with a long straight nose and thin arched brows, olive skin, black hair under a plain tan-brown wool head covering, a plain brown wool dress, a sharp, suspicious, sidelong look; (2) another servant girl of the high priest's household, about 20, a wide, round face with a short broad nose, full lips and heavy-lidded eyes, darker olive skin, black hair under a dusky slate-violet wool head covering, a grey-brown wool dress, a curious, gossiping look; (3) a male servant of the high priest, a kinsman of Malchus, about 35, a heavy jaw and a scar through one eyebrow, olive skin, black hair and a short black beard, a dull brown tunic and a near-black wool mantle, a hard, accusing stare. Row 2: (4) a money changer of the Royal Stoa on the Temple Mount, about 45, a sharp, clever face with a hooked nose, olive skin, dark brown hair and a trimmed dark beard, a brown wool tunic and a dark reddish-brown mantle, a small bronze balance scale in his hand, a calculating look; (5) a Levite at the gate of the Temple courts, about 35, a calm, composed face, fair olive skin, dark brown hair and a neat dark beard, a plain white linen tunic and a pale undyed linen mantle (no turban, no breastplate, no jewels), a solemn, dutiful look; (6) Zakkai, a blind beggar on the Temple steps, about 60, thin and weathered, grey hair and an unkempt grey beard, his eyes pale and clouded with blindness, his head tilted as if listening, a worn fawn tunic and a ragged brown mantle, a patient, dignified look (respectful, not grotesque).
- Describing each woman's face shape, nose, mouth and eyes explicitly ("narrow oval face with a long straight nose", "wide, round face with a short broad nose, full lips") finally broke the shared women's face.
- zakkai: fully white clouded eyes, looking upward with a stick; reads as blind and dignified, though the white eyes are stark at full size.
- temple_levite: plain white linen, short curly hair, no turban; does not read as a priest or as Jesus.
Sheet 8: _variants/portraits_sheet_8.png (ChatGPT, same conversation)
Keys: hanina_of_cyrene, yose_of_rome, mattai_of_babylon, baruch, elisheva, shelamzion. All six kept.
Very good, the women look properly different now. Next sheet, the same in every way (style, lighting, three-quarter turn to the viewer's left, framing with a little space above each head, dark brown vignette background, landscape 1536x1024, 3 columns by 2 rows = 6 self-contained square portraits filling their cells, no gutters, no borders, no text). Every face clearly different from all earlier ones (vary face shape, nose, mouth and eyes; no heavy-set greying man). Jerusalem at the feast of Pentecost, AD 30, with Jewish pilgrims from abroad. 1st-century dress only; on men's mantles at most one small knotted tassel at a single corner; women wear a wool head covering over head and shoulders; no trousers. Row 1: (1) Hanina, a Jewish pilgrim from Cyrene in North Africa, about 40, deep brown skin, a broad nose, black tightly curled hair and a black beard, a pale linen tunic and a rust-brown wool mantle, a warm, travel-worn, friendly look; (2) Yose, a Jewish pilgrim from Rome, about 35, lighter olive skin, dark brown hair cropped short in the Roman manner and a short neatly trimmed beard, a cream linen tunic and a slate-blue wool mantle, an urbane, slightly reserved look; (3) Mattai, a Jewish pilgrim from Babylonia, about 55, a long face with a high-bridged nose, olive skin, greying brown hair under a soft wrapped cloth cap, a long greying beard, a brown long-sleeved wool tunic and a dusky mauve-plum mantle, a grave, learned look. Row 2: (4) Baruch, a baker of the Lower City, about 40, round-faced and cheerful with ruddy cheeks, olive skin, dark brown hair and a short dark beard, an oatmeal linen tunic and a brown wool mantle, flour dusted on his forearms and beard, a jovial look; (5) Elisheva, a pilgrim from Capernaum, a woman of about 60, small and wiry, a narrow lined face with a pointed chin, olive skin, grey hair under a brown wool head covering, a slate-grey wool dress, a devout, alert, motherly look; (6) Shelamzion, a householder of the Lower City, a woman of about 45, a strong square jaw, a long straight nose and steady wide-set eyes, olive skin, dark hair under a slate teal-blue wool head covering, a brown wool dress, a firm, capable, hospitable look.
- mattai_of_babylon: a short fringe shows along the lower edge of his plum mantle; minor at dialogue size. Later prompts add "mantles have plain edges with NO fringe along the edge".
Sheet 9: _variants/portraits_sheet_9.png (ChatGPT, same conversation)
Keys: pinhas, hilkiah, tryphon, tamar, bani, abiel. All six kept.
Excellent. Next sheet, the same in every way (style, lighting, three-quarter turn to the viewer's left, framing with a little space above each head, dark brown vignette background, landscape 1536x1024, 3 columns by 2 rows = 6 self-contained square portraits filling their cells, no gutters, no borders, no text). Every face clearly different from all earlier ones (vary face shape, nose, mouth and eyes; no heavy-set greying man). Jerusalem, AD 30. 1st-century Judean dress only; mantles have plain edges with NO fringe along the edge (on men's mantles at most one small knotted tassel at a single corner); women wear a wool head covering over head and shoulders; no trousers, no aprons with neck straps. Row 1: (1) Pinhas, a potter by the Pool of Siloam, about 45, a thin, long-jawed face with a bony nose, olive skin, brown hair tied back and a scruffy brown beard, a tan-brown wool tunic and a brown mantle, dried reddish clay on his hands and forearms, a dry, wry look; (2) Hilkiah, steward of a wealthy priestly house, about 50, a smooth, fleshy, well-groomed face with a small mouth and heavy eyelids, fair olive skin, greying hair and a neatly combed greying beard, a fine cream linen tunic and a dark slate-blue wool mantle, a polished, faintly superior look; (3) Tryphon, a dove seller in the Temple market, about 35, a lively, fox-like face with a pointed chin and quick eyes, olive skin, dark brown hair and a short dark beard, a fawn tunic and a grey-green mantle, a grey turtledove held gently in one hand, a talkative, salesman's look. Row 2: (4) Tamar, a young mother from Emmaus, about 22, a soft round face with dimples and a small snub nose, olive skin, black hair under a pale oatmeal wool head covering, a dusty rose-brown wool dress, a sleeping swaddled baby against her shoulder, a tender, tired look; (5) Bani, master mason of the Temple building works, about 55, very tall and rawboned, a long craggy face with a big square nose and deep-set eyes, weathered olive skin, grey hair cropped short and a short grey beard, an oatmeal wool tunic and a dun-brown mantle, pale stone dust on his shoulders, a proud, exacting look; (6) Abiel, gardener of the King's Garden below the city, about 40, a gentle, earthy face with a wide mouth, sun-browned skin, dark brown hair and a dark beard, an olive-khaki wool tunic and a dark olive mantle, a sprig of green leaves tucked behind his ear, a calm, contented look.
- tamar: a young mother in a pale head covering cradling a sleeping swaddled baby. It is not a depiction of Jesus, but the composition is close to Madonna-and-child iconography. If that could confuse players, redo her without the baby.
- pinhas (potter, here in Jerusalem) is a different person from the Capernaum tanner
pinchas; his hands are covered in wet red clay and he holds a jug.
Sheet 10: _variants/portraits_sheet_10.png (ChatGPT, same conversation)
Keys: eliab, samaritan_woman, sychar_elder, shillem, simon_the_tanner, widow_of_joppa. All six kept. The Samaritan woman (John 4) and the widow of Joppa (Acts 9:39) are unnamed in Scripture and stay unnamed.
Very good. Next sheet, the same in every way (style, lighting, three-quarter turn to the viewer's left, framing with a little space above each head, dark brown vignette background, landscape 1536x1024, 3 columns by 2 rows = 6 self-contained square portraits filling their cells, no gutters, no borders, no text). Every face clearly different from all earlier ones (vary face shape, nose, mouth and eyes; no heavy-set greying man). 1st-century dress only; mantles have plain edges with NO fringe along the edge (on men's mantles at most one small knotted tassel at a single corner); women wear a wool head covering over head and shoulders; no trousers, no aprons with neck straps. Row 1: (1) Eliab, a young shepherd on the slopes east of Jerusalem, about 28, a lean, hawk-nosed face, sun-dark skin, black hair and a short black beard, a fawn wool tunic and a dark brown wool mantle, a wary, quiet look; (2) a Samaritan woman of the town of Sychar, about 35, a striking, intelligent face with a strong nose, arched brows and a determined mouth, olive skin, dark hair under a warm tan wool head covering, a rust-brown wool dress, a guarded but curious, questioning look (modest and dignified, not glamorous); (3) an elder of Sychar, a Samaritan man of about 60, a broad forehead and a hooked nose, olive skin, grey hair and a full grey beard, a pale linen tunic and a brown wool mantle, a measured, hospitable look. Row 2: (4) Shillem, a baker of Sychar, about 40, a long, mournful face with a drooping moustache and a dark beard, olive skin, dark hair, a fawn tunic and a grey-olive mantle, a little flour on his cheek, a dry, kindly look; (5) Simon the tanner of Joppa, about 50, a rough, pock-marked face with a flattened nose, darker sun-browned skin, greying dark-brown hair and a greying beard, a brown wool tunic and a dark brown mantle, his forearms stained brown from the tanning vats, a gruff, generous look; (6) a widow of Joppa, one of the believers there, about 65, a gentle lined face with a long nose and sorrowful eyes, olive skin, grey hair under a grey-brown wool head covering, a dark slate-grey wool dress, holding a folded, neatly sewn tunic against her chest, a grieving but steadfast look.
- sychar_elder and shillem wear wrapped head cloths (the elder's with a red band); eliab holds a crook; shillem has loaves in front of him.
- simon_the_tanner: a dark leather apron shows on his chest despite "no aprons with neck straps"; acceptable for a tanner.
- samaritan_woman is close to the shared women's face again (as shelomit and batya).
Sheet 11: _variants/portraits_sheet_11.png (ChatGPT, same conversation)
Keys: nathan_of_lydda, yonah_of_joppa, shimei, aulus, mariamne, theodotos. All six kept. After this sheet every key in the npcs arrays has a portrait except jesus, which is skipped on purpose.
Very good. Next sheet, the same in every way (style, lighting, three-quarter turn to the viewer's left, framing with a little space above each head, dark brown vignette background, landscape 1536x1024, 3 columns by 2 rows = 6 self-contained square portraits filling their cells, no gutters, no borders, no text). Every face clearly different from all earlier ones (vary face shape, nose, mouth and eyes; no heavy-set greying man; the woman must not share the earlier women's face). The Mediterranean coast of Judea (Lydda, Joppa, Caesarea), about AD 37. 1st-century dress only; mantles have plain edges with NO fringe along the edge (on Jewish men's mantles at most one small knotted tassel at a single corner); women wear a wool head covering over head and shoulders; no trousers, no aprons. Row 1: (1) Nathan, an elder of the believers at Lydda, about 65, a tall, thin, ascetic face with a high forehead and a long straight nose, olive skin, grey hair and a long grey beard, a pale linen tunic and a brown wool mantle, a serene, welcoming look; (2) Yonah, a fisherman of Joppa, about 35, a broad, sea-weathered face with squint lines and a scar on his chin, dark sun-browned skin, black hair and a short black beard, a sandy wool tunic and a slate teal-blue mantle, salt spray on his shoulders, a bluff, cheerful look; (3) Shimei, a fish seller of Joppa, about 45, a narrow, sharp face with a long upper lip and sly eyes, olive skin, dark brown hair and a thin dark beard, a grey-brown tunic and a brown mantle, a haggling, sceptical look. Row 2: (4) Aulus, the steward of the household of Cornelius the centurion at Caesarea, an Italian freedman of about 45, clean-shaven, a firm Roman face with a straight nose and close-cropped brown hair, lighter olive skin, a good cream wool tunic and a brown wool cloak pinned at the shoulder with a plain bronze brooch, no tassels, a courteous, efficient look; (5) Mariamne, a fisherman's widow of Joppa, about 40, a long oval face with hollow cheeks, a thin nose and large dark eyes, olive skin, black hair under a grey-brown wool head covering, a dark taupe wool dress, a quiet, resilient look; (6) Theodotos, a Greek-speaking baker of Caesarea, about 35, a round cheerful face with a snub nose and curly dark hair cut short, a short curly dark beard, olive skin, an oatmeal tunic and a warm brown mantle, a dusting of flour on his chest, a friendly look.
- aulus: clean-shaven Roman with a round bronze brooch, no tassels. yonah has a net over his shoulder, shimei a basket of sardines, theodotos loaves.
Sheet 12: _variants/portraits_sheet_12_fixups.png (ChatGPT, same conversation): fix-ups for look-alike faces
Keys: aelius, matthan, master_of_the_house, batya, martha, samaritan_woman. All six kept; the replaced versions are _variants/{key}_v1_similar_face.png.
Excellent, that completes the set. Now a fix-up sheet: six portraits from earlier sheets came out with faces too similar to other characters, so please paint them again as clearly DIFFERENT people, same style in every way (lighting, three-quarter turn to the viewer's left, framing with a little space above each head, dark brown vignette background, landscape 1536x1024, 3 columns by 2 rows = 6 self-contained square portraits filling their cells, no gutters, no borders, no text). Follow each face description closely. Mantles have plain edges with NO fringe along the edge; women wear a wool head covering over head and shoulders; no trousers. Row 1: (1) Aelius, a Roman auxiliary watchman on the Capernaum road, about 26, clean-shaven, a LONG face with a prominent aquiline nose, thin lips, narrow wide-set eyes and STRAIGHT short black hair (not curly), warm olive skin, a plain rounded IRON helmet with cheek guards (no plume, no crest), a brick-red tunic and a brown wool cloak pinned at the shoulder with a bronze brooch, no mail, an easy-going, curious look; (2) Matthan, master of the fish-salting works at Magdala, about 50, LEAN, nearly bald with a high domed forehead and a fringe of grey hair, a long hooked nose and a pointed grey beard, olive skin, a tan wool tunic and a dark teal-blue wool mantle, a few grains of white salt on his sleeve, a businesslike, appraising look; (3) the master of a large Jerusalem house, about 55, TALL and SLENDER, a long refined face with a narrow aquiline nose and high cheekbones, silver-grey hair combed back from the forehead and a long, neatly combed silver beard, fair olive skin, a fine cream linen tunic and a russet-brown wool mantle with one small corner tassel, a courteous, gracious look. Row 2: (4) Batya, a winemaker, a woman of about 40, a WIDE SQUARE face with a broad flat nose, strong straight brows, small deep-set eyes and a wide mouth, darker olive skin, black hair under an ochre-tan wool head covering, a deep wine-brown wool dress, a faint purple grape stain on her fingers, a warm, wry look; (5) Martha of Bethany, a woman of about 35, a SMALL ROUND freckled face with apple cheeks, a short upturned nose, a small pointed chin and bright almond-shaped eyes, light olive skin, dark hair under a soft tan wool head covering, a brown wool dress with sleeves pushed up, flour on her forearm, an energetic, warm, slightly harried look; (6) a Samaritan woman of Sychar, about 35, a LONG ANGULAR face with high sharp cheekbones, a narrow aquiline nose, heavy-lidded dark eyes and a wide mouth, a small dark mole on one cheek, olive skin, dark hair under a warm tan wool head covering, a rust-brown wool dress, a guarded but curious, questioning look (modest and dignified).
- All six now read as different people at dialogue size. Capitalised face-shape words (LONG, LEAN, WIDE SQUARE, SMALL ROUND) plus one distinctive mark (a mole, freckles, baldness) worked best.
- The three women all came back in similar ochre-tan head coverings, because their
lookmantles are close in colour; they are told apart by face and dress.
Notes for the next batch
- One conversation held the portrait style for 12 sheets with no drift. The 3×2 sheet with "self-contained square portraits filling their cells, no gutters" cuts cleanly on the equal grid every time.
- Without explicit face-shape words, ChatGPT reuses two templates: a heavy-set greying man (gedalyah, matthan, master_of_the_house) and one women's face (shelomit, batya, martha, samaritan_woman). Describe each face's shape, nose, mouth and eyes, and add one distinctive mark.
- ChatGPT adds trade props on its own (sheaves, nets, baskets, tools). They help identify the NPC and were kept.
- "Mantles have plain edges with NO fringe along the edge" is needed in every prompt; it slips otherwise (mattai_of_babylon).
Face assets v2 and hair textures (j12-artist, 2026-10-27)
Made in the same ChatGPT conversation as the v1 faces ("Generate Face Textures"), with faces/man_middle.png attached once as the reference. A transparent beard-overlay request (one 1024 image, "beard_full") was started and stopped before it finished, because the user changed the plan to complete faces; nothing from it was saved.
Face assets v2: faces/{key}.png + faces/{key}.webp (512×512)
Files: faces/{key}.png (tile crop, 488–490 px square) and faces/{key}.webp (512×512, cwebp q85, a 4% upscale from the tile). The 18 v1 faces are untouched (their webps stay 256). Sheets are 3×2 at 1536×1024 rather than 3×3, so each tile is about 490 px and the 512 webp needs almost no upscaling (a 3×3 tile is only about 400 px). Not wired into the game code.
Measured placement (landmarks.py: pupils = darkest spots in the eye columns, lips = row of strongest lip redness): bearded and stubbled men have pupils at 20–23% and lips at 68–74%; the women and the girl have pupils at 22–24% and lips at 70–77% (the v1 women measure 77% too). Checked on their own at 256 with guide lines at 22% and 73%, and at 64 px: every face reads as one person, and beards keep their strand texture at 64 px.
Metadata (hair hex = mean colour of a pure-hair patch as painted: the chin for beards, the top corners for the hair; "light" = mean of the brightest quarter, for highlights. Greys and whites are painted with the sheet's warm cast):
| key | sex | age | beard | hair colour hex as painted | notes |
|---|---|---|---|---|---|
| bearded_black_full | m | adult | full | #1e1612 | light #29201a; hair at the top corners #241812; straight strong nose |
| bearded_black_curly | m | adult | curly | #1e1713 | light #29201b; tight black curls in the hair and beard; broad nose, full lips |
| bearded_darkbrown_trimmed | m | adult | trimmed | #382419 | light #513423; hair #2e1d13; narrow face, long nose; long hair at the sides |
| bearded_brown_full | m | adult | full | #422819 | light #583520; untidy; round face, forehead lines |
| bearded_auburn_trimmed | m | young | trimmed | #562916 | light #6c351c; auburn hair at the hairline, freckles |
| bearded_saltpepper_full | m | adult | full | #534239 | light #7e695b (grey strands); about 50, heavy brow, greying hair |
| bearded_grey_long | m | old | long | #635042 | light #8a7363 (warm grey); about 65, grey hair at the sides, deep-set eyes |
| bearded_white_long | m | old | long | #a78c77 | light #c0a792 (warm white); about 85, heavy lids, deep wrinkles, thin white hair |
| bearded_black_young | m | young | trimmed | #271912 | light #382418; sparse, patchy young beard and faint moustache; long black wavy hair at the sides |
| stubble_soldier_a | m | adult | stubble | #3c261a | light #4c2e1e (hair); clean-shaven with short dark stubble; square jaw, cropped hair |
| stubble_soldier_b | m | adult | stubble | #3f2618 | light #4a2d1c (hair); long jaw, crooked nose, scar through the right brow and across the nose |
| bearded_darkbrown_lean | m | adult | full | #352015 | light #482b1b; lean long face, hollow cheeks; long dark-brown hair at the sides |
| bearded_black_broad | m | adult | full | #201813 | light #2d221c; broad heavy jaw, wide flat nose, thick brows |
| bearded_grey_trimmed | m | old | trimmed | #6d5140 | light #8a6a55; about 60, grey hair at the sides, high forehead |
| woman_young_b | f | young | none | #312016 | light #472b1b; oval face, fine arched brows; hair only in the top corners |
| woman_middle_b | f | adult | none | #3e2417 | light #5e341e; square face, strong cheekbones, slightly hooked nose |
| woman_old_b | f | old | none | #664a39 | light #7d604d (warm grey); narrow lined face, grey hair in the top corners |
| girl_b | f | child | none | #4b2918 | light #6e3c22; small round face, big eyes; dark-brown hair in the top corners |
Sheet 1: _variants/faces_v2_sheet_1.png (1536×1024). Keys: bearded_black_full, bearded_black_curly, bearded_darkbrown_trimmed, bearded_brown_full, bearded_auburn_trimmed, bearded_saltpepper_full. All kept.
Change of plan: no transparent overlay. Instead, generate an image: a new sheet of COMPLETE face textures in exactly the same format as the face sheets earlier in this conversation (like the attached man_middle face), but now WITH the beard, moustache, eyebrows and hairline painted in. Landscape 1536x1024: 3 columns by 2 rows = 6 equal SQUARE tiles separated by thin straight flat very dark brown (#1a130d) gutters. In each tile, skin and hair fill the tile to every edge: cropped from the middle of the forehead at the top edge to just under the chin at the bottom edge, and from cheek edge to cheek edge at the left and right edges; no background, no ears, no headwear, no neck, no clothing. Strictly FRONTAL and symmetrical, looking straight at the viewer, the pupils about 22% down from the top of the tile and the mouth about 73% down (the same placement as the earlier faces), even soft flat lighting with almost no cast shadow, neutral calm expression, eyes open, mouth closed, lips visible. The same single medium olive skin tone as the earlier faces in every tile. Style: hand-painted semi-realistic World of Warcraft character texture. HAIR RULES: the hairline may show at the very top as hair fading into the top edge; sideburns may run off the left and right edges; the beard covers the jaw and chin and runs off the bottom edge. Beards and moustaches are REAL, FINE, hand-painted hair: individual strands, clumps and lighter highlight strands, with soft stubble feathering where the beard meets the cheeks; never a solid block, never a flat shape. The moustache sits just above the upper lip and the lips stay clearly visible. Paint hair, beard and eyebrows in their real colour as named for each tile. Every face a clearly different person (different face shape, nose, brow, eyes and mouth). Galilean Jewish men, 1st century. Row 1: (1) a man of about 35, a full natural short-to-medium BLACK beard and moustache, black hair at the hairline, a straight strong nose; (2) a man of about 30, a medium beard of tight BLACK CURLS, black curly hair at the hairline, a broad nose and full lips; (3) a man of about 40, a short neatly TRIMMED DARK BROWN beard close to the jaw, a narrow face and a long straight nose. Row 2: (4) a man of about 45, a full untidy MID-BROWN beard, a round face and a short nose; (5) a man of about 32, a short trimmed AUBURN (reddish-brown) beard and auburn hair at the hairline, light freckles, a slender nose; (6) a man of about 50, a full SALT-AND-PEPPER beard (black streaked with grey), greying hair at the hairline, a heavy brow. No text, no labels, no numbers.
Sheet 2: _variants/faces_v2_sheet_2.png. Keys: bearded_grey_long, bearded_white_long, bearded_black_young, stubble_soldier_a, stubble_soldier_b, bearded_darkbrown_lean. All kept.
Excellent, exactly right: real strands, soft stubble at the cheeks, lips visible. Generate the next sheet in exactly the same format, framing, eye and mouth placement, skin tone, lighting and hair rules (landscape 1536x1024, 3 columns by 2 rows = 6 equal square tiles with thin flat very dark brown #1a130d gutters, skin and hair to every edge, strictly frontal and symmetrical, no ears, no headwear, no background, beards as real fine hand-painted strands, never a solid block, lips visible, hair and beard in their real named colour). Every face a clearly different person from each other and from the previous sheet. Row 1: (1) an old man of about 65, a LONG GREY beard that flows down and runs off the bottom edge of the tile, a grey moustache, grey hair at the hairline, a lined forehead, deep-set eyes; (2) a very old elder of about 85, a LONG WHITE beard running off the bottom edge, a white moustache, thin white hair at the top, heavy drooping eyelids, deep wrinkles, sunken cheeks; (3) a young man of about 19, a SPARSE, patchy young BLACK beard (thin on the cheeks, a little fuller on the chin) and a faint moustache, black hair at the hairline, smooth youthful skin. Row 2: (4) a Roman soldier of about 30, CLEAN-SHAVEN with a few days' dark STUBBLE on the jaw, chin and upper lip (painted as fine short dark dots and strokes, soft, not a grey smudge), short cropped dark hair at the hairline, a hard square jaw and a strong chin; (5) another soldier of about 35, clean-shaven with light STUBBLE, a different face: a long jaw, a crooked broken nose, close-cropped brown hair at the hairline, a small scar on one eyebrow; (6) a lean man of about 40, a LEAN long face with hollow cheeks, a full but neat DARK BROWN beard, dark brown hair at the hairline. No text, no labels, no numbers.
- The "long" beards fill the lower half and run off the bottom edge like the full ones; inside the face crop they differ from full beards mainly in length of strand and colour. The long run-out has to come from the 3D beard mesh.
bearded_darkbrown_lean(long dark hair, full brown beard, lean face) is a generic face, but it sits close to traditional Jesus iconography; avoid it for disciples who stand next to the Jesus figure if that matters.
Sheet 3: _variants/faces_v2_sheet_3.png. Keys: bearded_black_broad, bearded_grey_trimmed kept. The four women from this sheet were framed too low (pupils 27–29%, the girl 38%) and are in _variants/faces_v2_rejected/{key}_low_framing.png.
Very good. Generate the next sheet in exactly the same format, framing, eye and mouth placement, skin tone, lighting and hair rules (landscape 1536x1024, 3 columns by 2 rows = 6 equal square tiles with thin flat very dark brown #1a130d gutters, skin and hair to every edge, strictly frontal and symmetrical, no ears, no headwear, no background, hair as real fine hand-painted strands, lips visible, hair in its real named colour). Every face a clearly different person from each other and from the earlier sheets. Row 1: (1) a man of about 40, a BROAD wide face with a heavy jaw, a wide flat nose and thick brows, a full thick BLACK beard and moustache, black hair at the hairline; (2) a man of about 60, a short neatly TRIMMED GREY beard close to the jaw, a grey moustache, grey hair at the hairline, a high forehead, a thoughtful face; (3) a young WOMAN of about 20, NO beard, smooth skin, an oval face, a straight nose, fine dark arched brows; at the top only her dark hair with a centre parting, smooth and close to the head (where a veil would sit), no hair on the sides of the face. Row 2: (4) a WOMAN of about 40, NO beard, a square face with strong cheekbones and a slightly hooked nose, at the top only her dark brown hair with a centre parting; (5) an old WOMAN of about 70, NO beard, a narrow lined face with fine wrinkles around the eyes and mouth, at the top only her grey hair with a centre parting; (6) a GIRL of about 10, NO beard, a small round childlike face, big eyes, a small nose, at the top visible dark brown hair with a centre parting. No text, no labels, no numbers.
Sheet 4: _variants/faces_v2_sheet_4_women.png (tiles 5 and 6 left as plain skin on purpose). Keys: woman_young_b, woman_middle_b, woman_old_b, girl_b. All four kept.
The two men are perfect. The four women and the girl are framed too LOW: their eyes sit about 28% down (the girl's about 38%), but the game needs the pupils at 22% down and the mouth at about 73% down, exactly like the men. Please redo these four in a new sheet, landscape 1536x1024, 3 columns by 2 rows with thin flat very dark brown #1a130d gutters; fill tiles 1-4 in reading order and leave tiles 5 and 6 as plain flat skin colour. Crop each face TIGHTER, exactly like the men's faces: the top edge of the tile is mid-forehead, so the eyebrows sit about 15% down and the pupils about 22% down; the mouth about 73% down; the bottom edge just under the chin; the left and right edges are the cheek edges. Only a THIN strip of hair may show: a little dark hair in the two top corners and a centre parting at the very top edge, no more than the top 6% of the tile, and no hair down the sides of the face. Same skin tone, flat even light, strictly frontal and symmetrical, neutral calm expression, no ears, no headwear, no background, no beard. Faces as before: (1) a young woman of about 20, an oval face, a straight nose, fine dark arched brows, dark hair; (2) a woman of about 40, a square face with strong cheekbones and a slightly hooked nose, dark brown hair; (3) an old woman of about 70, a narrow lined face with fine wrinkles, grey hair; (4) a girl of about 10, a small round childlike face, big eyes, a small nose, dark brown hair; for the girl too the pupils must be 22% down, so her face fills the tile like the others (it is a texture, not a portrait). No text.
- The centre parting barely shows; the women's hair is only a little dark hair in the top corners. The lower corners show the jaw line against a darker neck tone (still skin).
Face asset template v2 (reusable)
Use it in the "Generate Face Textures" conversation, or in a new one with faces/man_middle.png and faces/bearded_black_full.png attached as references. Six faces per sheet. Keep men and women on separate sheets where possible: with women in the sheet, ChatGPT drops the framing to make room for hair.
Generate an image: a sheet of COMPLETE face textures for the 3D heads of my game, in exactly the same format as the attached face textures. Landscape 1536x1024: 3 columns by 2 rows = 6 equal SQUARE tiles separated by thin straight flat very dark brown (#1a130d) gutters. In each tile, skin and hair fill the tile to every edge: cropped from the middle of the forehead at the top edge (the eyebrows about 15% down) to just under the chin at the bottom edge, and from cheek edge to cheek edge at the left and right edges; no background, no ears, no headwear, no neck, no clothing. Strictly FRONTAL and symmetrical, looking straight at the viewer, the pupils 22% down from the top of the tile and the mouth 73% down, even soft flat lighting with almost no cast shadow, neutral calm expression, eyes open, mouth closed, lips visible. The same single medium olive skin tone as the attached faces in every tile. Style: hand-painted semi-realistic World of Warcraft character texture. HAIR RULES: the hairline may show at the very top as hair fading into the top edge; sideburns may run off the left and right edges; the beard covers the jaw and chin and runs off the bottom edge. Beards and moustaches are REAL, FINE, hand-painted hair: individual strands, clumps and lighter highlight strands, with soft stubble feathering where the beard meets the cheeks; never a solid block, never a flat shape. The moustache sits just above the upper lip and the lips stay clearly visible. Women and children: no beard, only a thin strip of hair at the very top edge (the top corners and a centre parting, no more than the top 6% of the tile), no hair down the sides. Paint hair, beard and eyebrows in their real colour as named for each tile. Every face a clearly different person (different face shape, nose, brow, eyes and mouth). 1st-century Galilean and Judean people. Row 1: (1) a {SEX: man / woman / boy / girl} of about {AGE}, {BEARD: a full natural short-to-medium / a short neatly TRIMMED / a LONG ... running off the bottom edge / a beard of tight CURLS / a SPARSE patchy young / CLEAN-SHAVEN with a few days' STUBBLE (fine short dots and strokes, not a grey smudge) / NO} {HAIR COLOUR in capitals: BLACK / DARK BROWN / MID-BROWN / AUBURN / SALT-AND-PEPPER / GREY / WHITE} beard and moustache, {HAIR COLOUR} hair at the hairline, {DISTINGUISHING FEATURES: face shape (long, broad, round, narrow, square), nose, brows, eyes, mouth, one mark such as a scar, freckles or deep wrinkles}; (2) ...; (3) ... Row 2: (4) ...; (5) ...; (6) .... No text, no labels, no numbers.
Import steps (until the modeler's artisan importer exists): download the sheet; find the tiles from the dark gutters (row and column profiles where more than 85% of pixels are darker than a channel sum of 75), inset each tile by 1% and crop it square; save faces/{key}.png (the crop) and faces/{key}.webp (resized to 512×512 with Lanczos, cwebp -q 85). Then check the pupils at about 22% and the lips at 70–77% (redo any face more than 4 points off), look at each face at 64 px, sample the hair colour from a pure-hair patch for the metadata table, and copy the sheet into _variants/.
Tileable hair textures: hair/{key}.png + hair/{key}.webp (512×512, opaque, seamless)
Sheet: _variants/hair_sheet_1.png (ChatGPT, 1254×1254, 2×2). Keys: hair_straight (1), hair_wavy (2), hair_curly (3), beard_strands (4). All four kept.
Perfect, thank you. Now a different kind of texture for the same 3D characters: tileable HAIR textures that go on the hair and beard meshes so they match these painted faces. Generate a square 1024x1024 sheet, 2 columns by 2 rows = 4 equal square tiles separated by thin straight flat very dark brown #1a130d gutters. Each tile is a SEAMLESS, TILEABLE texture (it repeats without visible seams left-right and top-bottom), completely filled edge to edge with painted hair, no background, no head, no face, no parting, no outline, no vignette, even flat lighting across the whole tile (no darker corners). The hair strands run VERTICALLY from the top edge to the bottom edge: clumps of fine strands with darker gaps between the clumps and lighter highlight strands, hand-painted semi-realistic World of Warcraft style, soft and fine, not plastic, not noisy, not a photo. Paint every tile in ONE neutral mid dark-brown (about #4a3a2c) with lighter brown highlights, so the game can re-tint it. Tiles: (1) straight to slightly wavy shoulder-length hair: long smooth parallel strands with a gentle wave; (2) thick wavy locks: broad S-shaped wavy clumps running downwards; (3) tight curls: small tight spiral curls packed densely, still with an overall downward flow; (4) beard hair: shorter, coarser, wirier, slightly kinked strands running downwards, denser and rougher than head hair. No text.
Processing (scratchpad scripts hairtiles.py and seamless.py): each tile cropped from the gutters with a 2% inset (587 px), low-frequency shading flattened (divided by a Gaussian blur of the luminance at radius tile/8, so there are no bands when tiled), resized to 512, then made seamless: wrap-offset by half on each axis and cross-faded back to the original over a ±12% band around the offset seam (smoothstep). After the fix, the mean colour step across the wrap edges equals the mean step between neighbouring pixels inside the tile (straight 5.2 vs 5.1, wavy 4.4 vs 5.2, curly 6.5 vs 5.7, beard 7.3 vs 7.5). Checked tiled 2×2: no visible seam or band. A faint doubled-strand zone runs down the middle of each tile where the cross-fade sits; it reads as overlapping strands. Webps are cwebp -q 85, 33–55 KB.
hair_straightcame out gently wavy rather than straight;hair_wavyhas stronger S-waves. Mean tone #342318–#3a271a with the brightest tenth at #593f2c–#634733 (a little darker and warmer than the asked #4a3a2c; re-tint by luminance).
Portraits for patrols, herd watchers and pursuers (j12-artist, 2026-10-27)
Files: portraits/{key}.png + portraits/{key}@web.png (both 512×512 cell crops, the same format as the NPC portraits above), 29 keys for people the player can select who are not in the npcs arrays: patrol soldiers and townsfolk (config/game/patrols.php, key patrol_ + lowercase name), herd watchers and generic pursuers (config/game/restitution.php). Same ChatGPT conversation as the NPC portraits ("Generate Character Portrait Sheet"), with portraits/simon.png attached again to the first message of this batch. Each soldier prompt gives a face shape in capitals and one distinctive mark, so the 17 patrol soldiers do not repeat the eight auxiliaries painted earlier.
Sheet 13: _variants/portraits_sheet_13_patrols_a.png
Keys: patrol_gaius, patrol_lucius, patrol_aulus, patrol_maron, patrol_cassius, patrol_flavius. All six kept.
Generate an image. More portraits for the same series: the attached portrait is the style reference again. Same in every way as the earlier sheets in this conversation (semi-realistic painterly oil, warm soft key light from the left, gentle gold rim light, head and shoulders, three-quarter turn to the viewer's left, a little space above each head, plain warm dark brown vignette background; landscape 1536x1024, 3 columns by 2 rows = 6 self-contained square portraits filling their cells, nothing crossing into a neighbouring cell, no gutters, no borders, no text). These are six auxiliary soldiers who patrol the Galilean lakeside towns around AD 28, locally recruited men (Syrians, Greeks, Samaritans of Sebaste, Idumeans, a few Italians): plain wool tunic in dull madder or brick red, a simple plain rounded bronze or iron helmet with cheek guards and a small neck guard (NO plume, NO crest, NO decoration), and either a shirt of iron mail with doubled shoulder pieces or a brown wool cloak pinned with a plain bronze brooch. No lorica segmentata, no banded plate, nothing medieval, no trousers, no weapons drawn, no blood. IMPORTANT: every face must be clearly different from each other AND from the eight soldiers painted earlier in this conversation; follow each face description closely, including the distinctive mark. Row 1: (1) Gaius, about 40, a Syrian: a SQUARE heavy face, a flattened boxer's nose, deep-set dark eyes, a short black beard flecked with grey, a pale old scar along the left jaw line; iron helmet and iron mail; a steady, hard look; (2) Lucius, about 22, a Greek: a slim OVAL face, a long straight nose, wide-set light hazel eyes, freckles across the nose, clean-shaven with light stubble; bronze helmet, red tunic and brown cloak; an eager, nervous look; (3) Aulus, about 33, an Italian: a LONG NARROW face, a hooked nose, thin lips, a cleft chin, dark stubble; iron helmet and mail; a cool, sardonic look. Row 2: (4) Maron, about 28, a Samaritan from Sebaste: a ROUND face with full cheeks, a small mouth, a short curly black beard, a dark mole high on the right cheek; bronze helmet and brown cloak; a good-humoured look; (5) Cassius, about 45, an Idumean: a GAUNT hollow-cheeked face with deep lines, a sharp eagle nose, grey stubble, one slightly drooping eyelid; iron helmet and mail; a weary, suspicious look; (6) Flavius, about 30: a BROAD face with a wide flat nose and a thick neck, a short brown beard, a shiny old burn scar on the left cheek; bronze helmet and iron mail; a blunt, dutiful look.
- Every mark came through (Gaius's jaw scar, Lucius's freckles, Maron's mole, Flavius's burn scar), and none of the six repeats an earlier soldier's face.
Sheet 14: _variants/portraits_sheet_14_patrols_b.png
Keys: patrol_dion, patrol_nicanor, patrol_sextus, patrol_decimus, patrol_valerius, patrol_longinus. All six kept. The first attempt stalled at 99% for six minutes and was stopped; the prompt was resent with the first line changed to "Please generate that same sheet again (the previous attempt stalled)." The original first line was:
Excellent, six clearly different men. Next sheet, the same in every way (style, lighting, three-quarter turn to the viewer's left, a little space above each head, dark brown vignette background, landscape 1536x1024, 3 columns by 2 rows = 6 self-contained square portraits filling their cells, no gutters, no borders, no text). Six more auxiliary soldiers, the same kit rules (dull red tunic, plain rounded bronze or iron helmet with cheek guards, NO plume, NO crest; iron mail with doubled shoulders or a brown cloak with a plain bronze brooch; no plate armour, no trousers, no weapons drawn). Every face clearly different from each other and from all the soldiers so far; follow each description and its mark. Row 1: (1) Dion, about 25, a Greek from the Decapolis: a delicate HEART-SHAPED face, big dark eyes with long lashes, a cleft chin, clean-shaven, light curly brown hair, a small scar splitting his right eyebrow; bronze helmet and brown cloak; a dreamy, distracted look; (2) Nicanor, about 35, a Syrian: a LONG face, heavy-lidded eyes, thick black eyebrows that nearly meet, a short black beard; iron helmet and mail; a patient, unreadable look; (3) Sextus, about 52, a veteran: STOCKY and jowly, a bulbous red nose with broken veins, ruddy cheeks, grey stubble, small pale eyes; iron helmet, mail and a heavy brown cloak over it; a gruff, tired look. Row 2: (4) Decimus, about 27, a Samaritan: a narrow FOX-LIKE face, a pointed chin, a thin black moustache and a short pointed beard, quick dark eyes, a nick across the bridge of his nose; bronze helmet and brown cloak; a sly, alert look; (5) Valerius, about 38, of the prefect's cohort in Jerusalem: a hard SQUARE jaw with a cleft chin, pale grey eyes, clean-shaven with dark stubble, a thin white scar across his upper lip; iron helmet, mail and a brown cloak; a cold, disciplined look; (6) Longinus, about 42, a Syrian: a long WEATHERED face with deep crow's feet, a big hooked nose, a short beard streaked with grey, his left eye slightly narrowed; iron helmet and mail; a quiet, watchful look.
- patrol_longinus is painted as an ordinary auxiliary (tradition attaches the name to the centurion at the cross; nothing in the portrait alludes to that).
- patrol_valerius: his scar came out on the cheek by the mouth rather than across the upper lip.
Sheet 15: _variants/portraits_sheet_15_patrols_c.png
Keys: patrol_julius, patrol_claudius, patrol_philippos, patrol_antonius, pursuer_soldier kept; patrol_diodoros replaced from sheet 17 (this version, too close to patrol_dion, is _variants/patrol_diodoros_v1_like_dion.png).
Very good. Next sheet, the same in every way (style, lighting, three-quarter turn to the viewer's left, a little space above each head, dark brown vignette background, landscape 1536x1024, 3 columns by 2 rows = 6 self-contained square portraits filling their cells, no gutters, no borders, no text). Every face clearly different from each other and from all soldiers so far; follow each description and its mark. Tiles 1-5 are auxiliary soldiers with the same kit rules (dull red tunic, plain rounded bronze or iron helmet with cheek guards, NO plume, NO crest; iron mail with doubled shoulders or a brown cloak with a plain bronze brooch; no plate armour, no trousers, no weapons drawn). Row 1: (1) Diodoros, about 24, a Greek: a ROUND boyish face, a snub nose, a dimpled chin, soft clean-shaven skin with a little fuzz, warm brown eyes; bronze helmet and brown cloak; an innocent, curious look; (2) Julius, about 36, an Idumean: DARK brown skin, a broad nose, a heavy brow, a thick black beard trimmed short, a short scar at the left temple; iron helmet and mail; a stern, unhurried look; (3) Claudius, about 45, from Sebaste in Samaria: a LONG upper lip and thin lips, a narrow face, a short salt-and-pepper beard, a small wart beside the nose; bronze helmet and mail; a sour, officious look. Row 2: (4) Philippos, about 29, a Syrian Greek: an OVAL face with an aquiline nose, light olive skin, a short brown beard, a cluster of freckles on one cheekbone, a dimple when he almost smiles; iron helmet and brown cloak; a friendly, easy look; (5) Antonius, about 33, from Sebaste: a WIDE jaw and flat cheekbones, small deep-set eyes, stubble, a sunburnt peeling nose; iron helmet, mail and brown cloak; a bored, sullen look; (6) NOT a Roman: a soldier of Herod Antipas, the Jewish tetrarch of Galilee, about 35, a Jewish or Idumean man with a full dark beard and olive skin, a heavy-browed square face with a broken nose; he wears a plain brown wool tunic (no red), a simple conical iron helmet of the Hellenistic eastern kind (a plain pointed iron cap with a short brim, NO Roman cheek guards, no plume, no crest) and a coat of small overlapping iron scales over a padded linen jerkin; a hard, pursuing look. No trousers.
- pursuer_soldier (Herod's soldier) reads clearly non-Roman: a pointed iron cap with a brim, iron scale coat, a brown tunic, a full beard and a broken nose.
Sheet 16: _variants/portraits_sheet_16_townsfolk.png
Keys: patrol_nathan, patrol_dinah, patrol_haggai, patrol_tamar, patrol_ezra, patrol_zakkai. All six kept. patrol_tamar (Magdala) is a different woman from tamar of Emmaus and has no baby.
Excellent, and the soldier of Herod is exactly right. Next sheet, the same in every way (style, lighting, three-quarter turn to the viewer's left, a little space above each head, dark brown vignette background, landscape 1536x1024, 3 columns by 2 rows = 6 self-contained square portraits filling their cells, no gutters, no borders, no text). Ordinary townsfolk going about their errands, 1st-century Galilee, Jerusalem and Samaria. 1st-century dress only: wool tunics and mantles with plain edges, NO fringe along the edge (on Jewish men's mantles at most one small knotted tassel at a single corner); women wear a wool head covering over head and shoulders; no trousers, no aprons. Every face clearly different from each other and from everyone painted so far; follow each face description and its mark. Row 1: (1) Nathan, a market porter of Capernaum, about 35, a BROAD sweaty face, a flattened nose, small eyes under bushy brows, a full dark-brown beard, a sack of grain on his shoulder, an olive-taupe brown wool tunic, a cheerful, puffing look; (2) Dinah, a Capernaum woman on errands, about 30, a HEART-SHAPED face with a pointed chin, wide-set eyes and a small dark beauty mark beside her mouth, olive skin, dark hair under an undyed oatmeal wool head covering, a dusky mauve-plum wool dress, a small covered basket on her arm, a busy, friendly look; (3) Haggai, a basket carrier of Bethsaida, about 50, nearly BALD with a fringe of grey-brown hair, round apple cheeks, a grey-brown beard, a big round wicker basket on his back held by a strap, a light taupe wool tunic, a patient, good-natured look. Row 2: (4) Tamar, a market shopper of Magdala, about 28, a broad OVAL face with heavy dark straight brows, a long straight nose, a full lower lip and a small pale scar on her chin, olive skin, dark hair under a soft grey-blue wool head covering, a dusky violet wool dress, holding a small basket of leeks and onions (NO baby, no child), a brisk, haggling look; (5) Ezra, a Jerusalem potter on errands, about 45, a NARROW face with deep-set eyes and a long thin nose, a scraggly brown beard, a smear of dried clay on his cheek, a stack of small clay bowls in his arms, a warm taupe-brown wool tunic and a brown mantle, a distracted, hurried look; (6) Zakkai, a Samaritan trader of Sychar, about 55, a FLESHY face with heavy lids and a hooked nose, a mole on his forehead, a full greying beard, a wrapped off-white linen head cloth, an olive-brown wool robe, a shrewd, welcoming trader's look.
- patrol_nathan wears a cloth wrapped round his head under the sack; patrol_zakkai's head cloth has a brown band.
Sheet 17: _variants/portraits_sheet_17_watchers.png
Keys: watcher_hill_flock, watcher_farm_goats, watcher_field_ox, pursuer_servant, pursuer_watchman, and patrol_diodoros (the redo). All six kept.
Very good. Last sheet for now, the same in every way (style, lighting, three-quarter turn to the viewer's left, a little space above each head, dark brown vignette background, landscape 1536x1024, 3 columns by 2 rows = 6 self-contained square portraits filling their cells, no gutters, no borders, no text). 1st-century Galilean dress only: wool tunics and mantles with plain edges, NO fringe along the edge; no trousers, no aprons. Every face clearly different from each other and from everyone painted so far; follow each face description and its mark. Row 1: (1) Shua's boy, a shepherd boy of about 11 watching a flock on the hills: a THIN sun-browned face, tousled black hair, big ears, a scrape on one cheek, a warm sandy-fawn wool tunic and a small dark brown wool mantle, a little wooden crook over his shoulder, an alert, wary look; (2) Yoezer's servant, a farm servant of about 35 who minds the goats: a LONG lantern-jawed face, a split scar through his left eyebrow, a scruffy brown beard, a dun-brown wool tunic and a grey-green wool mantle, a suspicious look; (3) Menahem's ploughman, about 40: a SQUARE sunburnt face with a heavy brow, a full dark-brown beard, a brown-ochre wool tunic, a long wooden ox-goad over his shoulder, a stolid, stubborn look. Row 2: (4) a household servant giving chase, about 28: a ROUND red-cheeked face, a broken crooked nose, a short black beard, sweat on his brow, a plain undyed wool tunic, sturdy and breathless, a determined look; (5) the village watchman, keeper of the town, about 45: a JOWLY face with bushy greying brows and a scar across the bridge of his nose, a full greying beard, a dark taupe wool tunic and a dark charcoal-brown wool mantle, a thick wooden cudgel held upright in his fist, a stern, officious look; (6) Diodoros, an auxiliary soldier of about 24, a STOCKY Greek with STRAIGHT short black hair (not curly), a wide face with a broad flat nose, a heavy jaw, a dark clean-shaven shadow, a pale birthmark on the side of his neck; a dull red tunic, a plain rounded bronze helmet with cheek guards (no plume, no crest) and iron mail with doubled shoulders; a stolid, blank look.
- patrol_diodoros: straight hair, heavy jaw and mail make him clearly different from patrol_dion and patrol_lucius (the sheet 15 version had the same curly young Greek face as Dion).
- pursuer_servant looks out of breath and alarmed, as asked; pursuer_watchman holds his cudgel upright, not raised.
Notes for the next batch
- With one capitalised face-shape word and one distinctive mark per person, 29 new faces came out distinct from each other and from the 64 earlier portraits; the only repeat was a young curly-haired Greek soldier (Dion/Diodoros), fixed by asking for "STRAIGHT short black hair (not curly)" and a heavier build.
- A generation can stall at 99%; after about five minutes, stop it and resend the prompt rather than waiting.
Jerusalem wilds batch (2026-10-27): rhoda, prison_keeper, yehonatan
Keys: rhoda, prison_keeper, yehonatan. All three kept, centre-cropped square and resized to 512x512 (<key>.png and <key>@web.png identical). Generated one at a time with the image tool in this session; Rhoda was generated first from the established style line, then used as the style reference for the other two ("matching exactly the same painting style, lighting, framing and warm dark-brown vignette background").
- rhoda: "A young Jewish servant girl in Jerusalem around AD 30: late teens, olive skin, dark brown eyes, long near-black hair mostly covered by a plain undyed linen veil, warm brown-grey wool tunic, muted green-grey mantle; alert, kind expression, as if she has just heard a knock at the courtyard gate."
- prison_keeper: "A burly Jewish prison keeper in Jerusalem around AD 30, late fifties, weathered olive skin, short grizzled grey hair, rough grey beard, heavy brows, tired stern eyes, dark grey-brown wool tunic and darker mantle, a ring of heavy iron keys at his shoulder."
- yehonatan: "A Jewish fig-grower and householder of Bethphage around AD 30, forties, sun-browned olive skin, dark brown wavy hair, full dark beard touched with grey, warm hospitable smile, tan undyed wool tunic, olive-green mantle, a small fig leaf sprig behind one ear."
Jerusalem wilds, second batch (2026-10-27): simon_the_leper, azariah
Keys: simon_the_leper, azariah. Same method and style reference (rhoda) as the batch above; centre-cropped square, 512x512, <key>.png and <key>@web.png identical.
- simon_the_leper: "Simon, a Jewish householder of Bethany in his early sixties, once a leper and long since read clean, faint pale patches on one cheek, grey-streaked hair, neat grey-brown beard, dignified calm expression, clean undyed cream wool robe, warm brown mantle."
- azariah: "Azariah, a Jewish vinedresser of the Mount of Olives, lean late thirties, deeply sun-browned, black wavy hair, close dark beard, purple grape-juice stains on hands and forearms, dusty tan tunic, olive-green mantle, a pruning hook on his shoulder."
Jesus: portrait and face (2026-10-27)
The person approved a face-forward Jesus for this batch: a 1st-century Galilean Jewish man, explicitly not the European church image. Made in the "Generate Character Portrait Sheet" ChatGPT conversation, so the earlier portraits carry the style. The rule in openspec/ART.md now names these files as his one approved face.
Portrait: portraits/jesus.png (1254×1254) and portraits/[email protected] (512×512)
Generate an image. Now ONE single portrait, square 1024x1024, in exactly the same painterly style, warm lighting and dark brown vignette background as the portraits in this conversation (head and shoulders, a little space above the head, no border, no text). This is the most important character of the game: Jesus of Nazareth, painted as a real 1st-century Galilean Jewish man, historically grounded, NOT the traditional European church image. A Middle Eastern Semitic man of about 30: warm deep olive-brown sun-tanned skin, dark brown eyes, a strong straight Semitic nose, dark brows, SHORT-to-medium thick dark brown-black wavy curly hair (not long, not straight, not parted in the middle, not falling past the neck), a short full natural dark beard, the weathered hands-and-face look of a working builder who walks the roads of Galilee. Turned three-quarters to the viewer's left like the others, but his eyes meet the viewer: a calm, warm, kind and compassionate gaze, a gentle hint of a smile at the eyes, deep peace and quiet authority; noble and beautiful in a natural human way, not glamorous. Clothing: a plain undyed cream wool tunic and a faded indigo-blue wool mantle over one shoulder, plain edges, one small blue-and-white corner tassel just visible. Soft golden late-afternoon light from the upper left, a soft warm rim light. Strictly NO halo, NO glow, NO light rays, NO sacred heart, no crown, no red robe, no pale skin, no blue or light eyes, no long flowing hair. Reverent, dignified, hand-painted World of Warcraft-style character portrait quality.
Then two follow-ups. The person asked for longer hair, and the expression came out slightly wry, so the kept version (v3) used:
Generate an image. Same man, same face, beard, skin, eyes, clothing, indigo mantle, tassel, lighting, style and square 1024x1024 framing. Make his HAIR clearly LONGER: thick dark brown-black wavy-curly Semitic hair falling to the SHOULDERS, resting on the mantle behind and over the shoulders, natural and a little untamed, no centre parting, not straight, not silky. Face turned a little more toward the viewer. Expression: gentle, tender compassion and peace, eyes soft and kind looking at the viewer, mouth relaxed and closed, NO smirk, no raised eyebrow, nothing wry or roguish. Still no halo, no glow, no rays.
- v1 (short curls) and v2 (jaw-length hair) are in
_variants/jesus/. v3 is kept: shoulder-length dark curly hair, olive-brown skin, dark eyes, cream tunic, indigo mantle with a blue-and-white tassel (Matthew 9:20), no halo. It matches his in-game look (robe #ece6d6, mantle #3d5a80). - He faces the viewer's right, unlike most portraits; that is fine in the target frame and dialogue.
Face: faces/jesus.png (1154×1154) and faces/jesus.webp (512×512)
Same conversation, straight after the portrait:
Generate an image. Perfect, this is the final portrait. Now I need a FACE TEXTURE of exactly this same man for his low-poly 3D head in the game: painted flat onto the front of the head, so it is an unwrapped face texture, not a portrait. One square 1024x1024 image. SKIN AND HAIR FILL THE WHOLE IMAGE TO EVERY EDGE, no background, no vignette, no clothing, no neck, no ears. Strictly FRONTAL and symmetrical, looking straight at the viewer, cropped tightly: the top edge cuts through the middle of the forehead with his dark hairline coming in at the top corners, his dark wavy hair runs down off the left and right edges at the sides, and his short full dark beard and moustache cover the jaw and run off the bottom edge. The pupils sit about 22% down from the top, the mouth about 73% down. Even, soft, flat frontal lighting, almost no cast shadows (the game lights the head itself). Calm, gentle, kind expression, eyes open, mouth closed. Same face as the portrait: warm olive-brown skin, dark brown eyes, dark brows, straight Semitic nose, the same beard. Hand-painted stylized World of Warcraft character texture, clean painted shapes that still read small on screen. No text, no frame, no halo, no glow.
- The 1254 output had the pupils at about 27% and the mouth at 67%, so it was cropped to 1154 from (50, 63) to bring the pupils to about 24% (like
bearded_black_curly), then sliced withphp artisan game:faces:import --keys=jesus. - Registered in
config/game/faces.phpas man / middle / full beard, hair#2e1d12(mean of the chin beard),pool => false; worn only through hislook.faceinconfig/game/world.php. The original is_variants/jesus/face_v1.png.
Rock forms concept (j12-artist, 2026-10-27)
-
concepts/rocks.png (sculpting reference for the boulder geometry; ChatGPT, the same conversation as textures batch 2, so it matches
public/textures/boulder_*; the full-resolution 1536×1024 original, not a viewport capture)Excellent. Now a concept sheet, not a texture: generate a landscape 3:2 image, game concept art in the same hand-painted World of Warcraft style, of six separate Galilean boulders and stones for a 3D modeler to sculpt from, arranged in two rows of three with clear empty space between them, all on a plain flat light grey background, three-quarter view from slightly above, soft top-left light, small soft contact shadow under each. (1) a big rounded weathered pale limestone boulder with chiselled flat facets and soft cracks, (2) a cluster of two or three smaller rounded limestone stones with pitted solution hollows and a little grey-green lichen, (3) a long low flat limestone slab with bevelled edges, (4) a tall upright standing stone of limestone, slightly leaning, with a few broad facets, (5) a dark charcoal vesicular basalt boulder with blocky fractured faces and pitted surface, (6) a smaller dark basalt boulder with angular split faces and a little rusty weathering. Chunky exaggerated forms with bevelled softened edges and clearly readable big planes, painted texture with warm highlights on top edges and soft ambient occlusion in the cracks. Not a plain low-poly look, not photographic. No ground scenery, no grass, no people, no text, no labels, no numbers.
Notes: the first variant was kept. Layout: top row is the big faceted limestone boulder, the cluster of three pitted stones, and the long low slab broken into stepped blocks. Bottom row is the tall standing stone (with two small stones at its foot), the big blocky basalt boulder, and the small angular basalt boulder. The limestone is painted warmer and more ochre-orange than the pale
boulder_limestonetexture (#b8a990), so take forms from the sheet and colour from the texture. Read the forms as about 8–14 large bevelled planes per boulder, with smaller chips on the edges.
Animal reference sheets (2026-10-27)
References for the generated animal meshes in public/models/animals/generated (each animal's three-quarter view is cut out and turned into a mesh with TRELLIS, then rigged in wildlife/rigged.js). ChatGPT, one conversation ("Generate Animal Reference Sheet"), 1536×1024 originals.
-
concepts/animals_hen_boar.png
Generate an image: a 3D-modeling reference sheet of two farm animals from 1st-century Galilee, painted in a realistic but softly hand-painted game-art style (like a high-end fantasy MMO, not cartoon, not low-poly, no blocky shapes). Top row: a Levantine village hen (small landrace chicken, cream and buff feathers with brown speckles, small red single comb and wattles, yellow legs) shown in exact left side view, front view, and three-quarter view. Bottom row: a Syrian wild boar (dark grey-brown coarse bristly coat, ridge of longer mane bristles along the spine, long wedge-shaped snout, small curved tusks, thin legs, tufted tail) in exact left side view, front view, and three-quarter view. Plain flat light-grey background, even neutral studio lighting, no shadows on the ground, no text, no labels.
-
concepts/animals_sheep_goat.png
Now a new reference sheet image in exactly the same style and layout as the hen and boar sheet (realistic but softly hand-painted game art, plain flat light-grey background, even neutral light, no text, no labels). Top row: an Awassi fat-tailed sheep of 1st-century Galilee (cream-white dense wool body, brown or tan head and legs with short hair, long drooping ears, no horns, broad fat tail hanging behind) in exact left side view, front view and three-quarter view. Bottom row: a black Syrian Mamber goat (long shaggy black coat, long pendulous floppy ears, backward-curving horns, small beard, slender legs) in exact left side view, front view and three-quarter view.
-
concepts/animals_six.png (2026-10-28; the camel, hyrax, quail, partridge and rock dove meshes; the sitting hare was replaced by
animals_hare_walk.png, and the dove stays code-built for flight)Generate an image: a reference sheet for 3D reconstruction, in exactly the same realistic, softly hand-painted style as the hen and boar sheet, plain flat light-grey background, even neutral studio light, no ground shadows, no text, no labels. Six separate animals of 1st-century Galilee in two rows of three, each one complete, centred in its own cell with clear empty space around it, every animal in the SAME three-quarter view facing left (we see the left side and a bit of the front), standing naturally on all legs with the legs clearly separated and visible, nothing cropped. Top row: (1) a dromedary camel (one hump, sandy tan coat, long curved neck, no saddle, no load); (2) a rock hyrax (stout brown rodent-like body, short legs, small round ears); (3) a brown hare (long black-tipped ears, long hind legs, sitting upright alert). Bottom row: (4) a common quail (small round brown streaked bird, short tail); (5) a chukar partridge (grey-buff body, black eye-stripe and necklace, barred flanks, red beak and legs); (6) a rock dove (blue-grey pigeon, two black wing bars, green-purple neck sheen, pink feet), wings folded.
Notes: the cells are not on an exact 512 px grid (the camel's tail crosses into the next one), so the animals are cut out by connected regions (
split.pyin the 3D tools folder), not by fixed squares. -
concepts/animals_hare_walk.png (2026-10-28; the hare mesh: a sitting hare can't walk on the leg rig)
Generate an image: the same brown hare, in exactly the same painted style, same plain flat light-grey background and even neutral light, no text, but now as a single animal in the middle of the image, in the same three-quarter view facing left, standing on all four legs mid-walk the way a hare moves slowly when it lopes: body stretched forward and low, back arched, front legs straight down, long hind legs and big hind feet on the ground behind, ears up. All four legs clearly separated and visible from the body, nothing cropped.
-
concepts/animals_canids_donkeys.png (2026-10-28; ChatGPT, conversation "Generate animal reference sheet"; the wolf, jackal, fox, dog, donkey and wild ass meshes, each carrying the matching Quaternius skeleton and clips)
Generate an image: a 3D-modeling reference sheet of six animals of 1st-century Galilee and Judea, painted in a realistic but softly hand-painted game-art style (like a high-end fantasy MMO, not cartoon, not low-poly, no blocky shapes), in exactly the style of a naturalist plate. Layout: 3 columns x 2 rows, one animal per cell, each fully inside its cell with clear empty space between them. Every animal stands still in a neutral standing pose, head level and looking forward, seen from its left side turned about 20 degrees toward the viewer, all four legs straight, clearly separated from each other and fully visible down to the paws or hooves, tail hanging free. Top row: a Syrian grey wolf (lean, grizzled grey-buff coat, pale chest and legs); a golden jackal (smaller, golden-tan coat with darker saddle, black-tipped bushy tail); a red fox (russet coat, white chest and throat, black legs, bushy white-tipped tail). Bottom row: a Canaan dog, the native pariah dog (sandy cream short coat, pricked ears, curled bushy tail); a grey-brown working donkey (pale belly and muzzle, dark shoulder cross, long ears, no saddle or load); a Syrian wild ass (onager: pale sandy-fawn coat, white belly and legs, dark dorsal stripe, short upright mane, no tack). Plain flat light-grey background, even neutral studio lighting, no shadows on the ground, no text, no labels.
-
concepts/animals_deer_ox.png (2026-10-28; same conversation; the gazelle, ibex, roe deer and ox meshes)
Now a second reference sheet in exactly the same style, pose rules, background and lighting, but with 2 columns x 2 rows (one animal per cell, each fully inside its cell with clear space between). Every animal stands still, head level looking forward, seen from its left side turned about 20 degrees toward the viewer, all four legs straight, separated and fully visible down to the hooves. Top row: a mountain gazelle (slender, warm fawn-brown back, white belly with a dark flank stripe, short ridged horns curving gently back, not curled); a Nubian ibex male (sandy buff coat, dark chest and leg stripes, small beard, long heavy ridged horns sweeping back in a curve). Bottom row: a roe deer buck (reddish-brown summer coat, white rump patch, short three-tined antlers); a 1st-century Galilean working ox (medium-sized, warm reddish-brown hide, light muzzle, short forward-curving horns, small hump and dewlap, long tail with a tuft, no yoke or harness). No text, no labels.
Notes: the heads came out turned toward the viewer, which TRELLIS keeps; the skeleton fit follows it. Ask for whiskers to be left out next time: TRELLIS turns them into flat fins (the hare's had to be cut off with
clean.py). -
concepts/animals_horse.png (2026-10-28; same conversation, 1536×1024 original; the horse mount mesh, carrying the Quaternius horse skeleton and clips)
Generate an image: a 3D-modeling reference of ONE horse of 1st-century Galilee and Judea, in exactly the same realistic, softly hand-painted game-art style as the sheets above (like a high-end fantasy MMO, not cartoon, not low-poly, no blocky shapes, naturalist plate). A single lean, fine-boned Arabian-type horse about 1.5 m at the withers: small refined head with a slightly dished face, large eyes, small alert ears, arched neck, short straight back, high-set tail. Bay coat: warm reddish-brown body, black mane, black tail and black lower legs, no white markings. Exact side view, left profile (the horse faces to the left of the image), full body centred with clear empty space around it, standing square and still, head level looking forward, all four legs straight, clearly separated from each other and fully visible down to the hooves, tail hanging straight down behind and not touching the legs. No saddle, no bridle, no halter, no blanket, no tack of any kind. Even, flat neutral studio lighting with no strong shadows painted on the coat (the coat should read as a clean even colour, with only soft natural muscle shading). Plain flat light-grey background, no ground shadow, no text, no labels.
Notes: the first image was kept (a small white star on the forehead slipped in). A pure side view reconstructed well: TRELLIS gave a full-width body. The long tail hangs to the hocks, so the rig needed the tail chain laid along it and the tail kept out of the hind-leg search (
build_skinned.shextra querylegZMin,tailPath,tailOwn).
Peter, full-body reference for a generated mesh (2026-10-28)
-
concepts/peter_apose.png (1024×1536; ChatGPT, new conversation "Generate Character Image", with
portraits/[email protected]attached for the likeness)Generate an image: a full-body 3D character-modelling reference of the man in the attached portrait (same face, same curly dark hair with a little grey, same full dark beard greying at the chin, sun-weathered olive skin). He is Simon Peter, a 1st-century Galilean fisherman in his thirties, broad-shouldered and strong from hauling nets. Clothing, historically accurate: a plain undyed brown wool tunic with elbow-length sleeves falling to mid-shin, a woven cloth sash tied at the waist, a dark brown wool mantle draped over his left shoulder and hanging down his back and front, with a small tassel at each corner (white threads with one blue cord), simple leather sandals with straps, bare shins between the hem and the sandals. No trousers, no boots, no belt buckle, no armour, no jewellery, no bag. Pose: standing straight, exact front view facing the viewer, arms held away from the body in a relaxed A-pose (about 30 degrees out), hands open with fingers together, feet a little apart, so every limb is clearly separated from the body and from the cloth. Whole figure from the top of the head to the sandals, nothing cropped, centred, plain flat light-grey background, even neutral studio lighting, no cast shadow, no text, no labels. Realistic but softly hand-painted game-art style like a high-end MMO character, not cartoon, not low-poly.
Notes: the hem came out at the upper shin rather than mid-shin. TRELLIS made a good body from it but a flattened face (the face gets too little of the mesh and texture at full-body scale), and the clothes are fused into one mesh, so it is not used in the game: people are moving to a base body with separate clothing pieces and a separately generated head.
Item icons, batch 6 (j12-artist, 2026-10-28): raw meat, new fish and cooked dishes
Files: items/{key}.png (slice original, 393–706 px square) and items/{key}.webp (256×256, cwebp q85, 8–17 KB), 26 icons. Same ChatGPT conversation ("Generate inventory icon sheet"), same flat-sheet workflow as batch 5: 3×3 sheets at 1254×1254 on the flat dark sheet colour (measured RGB about 31/18/6), sliced by connected blobs (not an equal grid), each crop a padded square (7%) keyed onto the warm radial vignette (centre RGB 56/41/27, corners about 21/15/10, centred slightly up-left, light low-frequency noise). The vignette was refitted from the median of all existing items/*.png, since the batch 5 scripts were gone; the scripts (fit_bg2.py, slice.py, finish.sh, check.py, contact.py) live in the scratchpad, not the repo. Every icon was checked at 40×40: each raw one must read as RAW (pale or red flesh, nothing browned, no skewer) and each cooked one as COOKED. This batch fixes kills that used to drop already-roasted birds: the old cooked icons are now roast_partridge, roast_quail, roast_pigeon and dried_venison, and venison, partridge, quail and pigeon are raw.
Sheet S: _variants/items_sheet_s.png (ChatGPT, 1254×1254, 3×3): raw
Keys: venison, partridge, quail, pigeon, dressed_hen, redbelly_tilapia, himri, sea_bass, red_mullet (pigeon replaced from sheet V, sea bass from sheet W).
Great, all four fix-ups are right. New batch: food from the hunt and the lake. Next sheet in exactly the same hand-painted World of Warcraft inventory icon style, lighting and background as the earlier item sheets (stylized, chunky, slightly exaggerated readable shapes that read at 40 px, bold painted highlights, visible brush strokes, smooth painted surfaces with no mosaic or tiled texture, warm upper-left key light, soft rim light, like a Blizzard game icon, not a photograph). Match the raw goat haunch, raw ox rib and the fresh tilapia from the earlier sheets. A square 1024x1024 sheet, a precise grid of 3 columns by 3 rows = 9 square icons, each object alone and centred in its own equal cell, filling about 80% of the cell, with wide clear empty gutters so nothing crosses into a neighbouring cell, all on the same plain flat very dark warm brown background (#1a130d), no grid lines, no borders, no frames, no text, no labels, no hands. Everything here is RAW and FRESH, UNCOOKED: pink or red flesh, pale raw skin, natural wet fish colours; nothing browned, nothing roasted, no grill marks, no skewers, no blood pooling. Row 1: (1) raw venison: two thick slabs of lean, deep dark-red raw deer meat with a fine grain and a thin pale membrane edge, lying on three fresh green leaves (fresh meat, not jerky, not cooked), (2) a raw plucked partridge: a small whole dressed bird lying on its back, smooth pale pink-beige raw skin with tiny feather pores, head and feet removed, the legs pointing up, and two or three speckled grey and russet partridge feathers lying beside it, (3) two very small plump raw plucked quail, pale pink, side by side and tied together with a strand of tan twine, clearly smaller and rounder than the partridge. Row 2: (4) a raw plucked pigeon (squab): compact and round, a darker reddish-pink breast, pale pink skin, with one grey-blue pigeon feather beside it, (5) a raw plucked whole hen, bigger than the partridge, pale creamy-yellow raw skin, the legs tied together with twine, lying on its back, (6) a fresh whole redbelly tilapia from the Sea of Galilee: a deep-bodied, tall oval cichlid, olive-green back with five or six dark vertical bars across the side, a strong bright RED-PINK belly and throat, a long spiny dorsal fin, wet and glistening, lying on the diagonal. Row 3: (7) a fresh Jordan himri barbel: a carp-like fish, golden-bronze colour, LARGE, clearly outlined round scales like a carp, a small mouth with two short whiskers, a forked tail, lying on the diagonal, (8) a fresh whole sea bass: long and streamlined, bright silver sides, a dark grey-blue back, a small dark spot on the gill cover, TWO separate dorsal fins (a spiny front one and a soft rear one), lying on the diagonal, (9) two small fresh red mullet side by side: bright ROSE-RED to pink bodies with a yellowish stripe along the side, a steep blunt rounded head, two little white chin barbels hanging under the mouth.
- Raw birds: partridge (pink-beige, speckled feathers beside it), quail (two small birds tied with twine), dressed_hen (bigger, creamy-yellow, legs tied). All pale and unbrowned at 40 px; the feathers and twine tell them apart.
- himri: drawn very much like a common carp (large outlined scales, two whiskers), which fits "carp-like barbel".
- red_mullet: rose-red with a bold yellow stripe and long white chin barbels; the most distinctive fish in the set.
- Rejected: the pigeon had a large skinless red patch on the breast that looked like exposed muscle.
Sheet T: _variants/items_sheet_t.png (ChatGPT, 1254×1254, 3×3): cooked fish
Keys: fried_sardines, salted_sardines, grilled_tilapia, himri_with_cumin, grilled_mullet, mullet_stew, grilled_bream, roast_sea_bass, fried_red_mullet (himri and bream replaced from sheet V).
Very good, the raw sheet is right. Next sheet in exactly the same hand-painted World of Warcraft inventory icon style, lighting and background (stylized, chunky, bold painted highlights, visible brush strokes, smooth painted surfaces with no mosaic or tiled texture, warm upper-left key light, soft rim light, like a Blizzard game icon, not a photograph). A square 1024x1024 sheet, a precise grid of 3 columns by 3 rows = 9 square icons, each dish alone and centred in its own equal cell, filling about 80% of the cell, with wide clear empty gutters so nothing crosses into a neighbouring cell, all on the same plain flat very dark warm brown background (#1a130d), no grid lines, no borders, no frames, no text, no labels, no hands. Everything here is COOKED fish from the Sea of Galilee and the coast, 1st-century Galilee (AD 28): browned, crisp, grilled or stewed and appetising, golden-brown and charred colours, with plain unglazed terracotta clay dishes, flat stones, glowing coals and wooden or reed skewers only; no metal pans, no forks, no plates with patterns, no lemons, no tomatoes, no chillies. Row 1: (1) fried sardines: a little heap of small sardines fried golden-brown and crisp in olive oil, in a shallow round terracotta dish with a glossy sheen of oil, (2) salted sardines: a small round woven wicker basket packed with flat silver-grey sardines lying in rows, crusted with coarse white salt crystals, (3) a whole grilled redbelly tilapia lying on a flat grey stone: a deep tall oval cichlid body, skin charred dark with grill marks, the dark vertical bars still faintly visible and the RED-PINK belly and throat still clearly showing under the browning. Row 2: (4) a whole golden carp-like barbel baked until golden-brown with crisp large scales, scattered with brown cumin seeds, on a shallow round terracotta plate, (5) a long grey mullet grilled whole, threaded lengthwise on a pale reed skewer, the skin scored with diagonal cuts and striped with dark char marks, lying above a small heap of glowing orange coals, (6) a round-bellied terracotta cooking pot full of thick orange-red lentil stew with chunks of white flaky fish showing on top, a wisp of steam. Row 3: (7) a whole gilt-head sea bream grilled on coals: a deep oval silver body browned and charred at the edges, glistening with olive oil, the GOLD band between the eyes still visible, a sprig of green herb on top, lying on a few glowing coals, (8) a whole long streamlined sea bass roasted, silver skin blistered and golden-brown, sprigs of grey-green hyssop tucked along it, lying on a flat dark stone, (9) three small red mullet fried crisp, red-gold and glossy, side by side in a shallow dark-brown terracotta dish with oil.
- grilled_tilapia vs grilled_musht: both lie on a flat stone, but the tilapia keeps its red-pink belly and darker char; they differ at 40 px.
- fried_red_mullet: the dish came out light terracotta, not dark brown; the barbels still show.
- Rejected: the bream had catfish-like barbels and no gold band; the himri's cumin seeds were barely visible.
Sheet U: _variants/items_sheet_u.png (ChatGPT, 1254×1254, 3×3): cooked meat, plus a bream re-roll
Keys: savory_venison, roast_hen, roast_mutton, mutton_stew, roast_goat, goat_stew, ox_stew, roast_ox, grilled_bream (cell 9, better than sheet T's but superseded by sheet V's).
Excellent, eight of those are right. Next sheet in exactly the same hand-painted World of Warcraft inventory icon style, lighting and background (stylized, chunky, bold painted highlights, visible brush strokes, smooth painted surfaces with no mosaic or tiled texture, warm upper-left key light, soft rim light, like a Blizzard game icon, not a photograph). A square 1024x1024 sheet, a precise grid of 3 columns by 3 rows = 9 square icons, each dish alone and centred in its own equal cell, filling about 80% of the cell, with wide clear empty gutters so nothing crosses into a neighbouring cell, all on the same plain flat very dark warm brown background (#1a130d), no grid lines, no borders, no frames, no text, no labels, no hands. COOKED meat dishes of 1st-century Galilee (AD 28): browned, roasted or stewed and appetising, with plain terracotta clay pots and bowls, round flatbread, wooden boards, wooden spits and olive-wood ladles only; no metal pans, no forks, no knives, no tomatoes, no potatoes, no chillies, no pork. Each stew must look different from the others. Row 1: (1) a rich special dish of dark-brown braised venison: glossy chunks of meat in a thick shiny spiced sauce flecked with cumin seeds, in a fine red-slipped clay bowl with a simple incised band around the rim, a torn piece of round flatbread leaning against the bowl, (2) a whole roast hen, golden-brown crisp skin, legs tied, sitting on a rectangular wooden board (no skewer), (3) a thick roast leg of mutton on a wooden spit through it lengthwise, a thick cap of crisp golden-brown crackled fat on top, a white bone end sticking out. Row 2: (4) a deep round terracotta pot of brown lentil stew with chunks of mutton showing, and a round flatbread resting over the rim of the pot, (5) a roasted leg of young goat, browned and glistening, lying on a large round flatbread, (6) a two-handled terracotta pot of boiled goat meat in a clear golden broth, pale chunks of meat, a long olive-wood ladle leaning in the pot. Row 3: (7) a large wide-mouthed dark-fired clay cooking pot of very thick, dark brown beef stew with lentils, chunks of beef, (8) a big feast roast: a glistening roasted rib joint of ox with several rib bones, dark caramel-brown crust, on a wide oval wooden platter with two round flatbreads and a few green herb sprigs, the grandest and biggest dish of all, (9) a whole gilt-head sea bream grilled over a few coals: a deep oval body, silver skin browned and lightly charred, glistening with olive oil, a bright GOLD band across the forehead between the eyes, a spiny dorsal fin, a sprig of green herb on it; a plain bream mouth with NO whiskers, NO barbels.
- Stews told apart by vessel and colour: savory_venison is a red-slipped bowl with an incised band and flatbread leaning on it; mutton_stew is a terracotta pot of brown lentils with flatbread over the rim; goat_stew is a two-handled pot of clear golden broth with an olive-wood ladle; ox_stew is a dark-fired, near-black pot of very dark stew; mullet_stew (sheet T) is orange-red lentils with white fish.
- Roasts: roast_hen sits on a board (roast_partridge is on a skewer, roast_pigeon in a dish); roast_mutton is a leg on a wooden spit with a bone end; roast_goat is a leg on a round flatbread; roast_ox is the biggest, a rack of ribs on a platter with flatbread and herbs.
Sheet V: _variants/items_sheet_v_fixups.png (ChatGPT, 1254×1254, 2×2): fix-ups
Keys: pigeon (cell 2, lying on its side), grilled_bream (cell 3), himri_with_cumin (cell 4). Cell 1 (a second pigeon, on its back) was not used.
Wonderful, all nine work. Last, a small fix-up sheet. Same hand-painted style, same flat #1a130d background, smooth painted surfaces (no mosaic or tiled texture), no text, no frames, no hands: a square 1024x1024 sheet, 2 columns by 2 rows = 4 icons, each alone and centred in its own cell, filling about 80% of the cell, with wide clear gutters. Row 1: (1) a RAW plucked pigeon (squab), uncooked: a small compact round bird lying on its back, smooth intact pale pink skin all over with a deeper rosy-red tint on the plump breast (the skin is whole, no skinless patch, no exposed meat, no blood), head and feet removed, wings tucked, with one grey-blue pigeon feather lying beside it, (2) the same raw plucked pigeon seen from a slightly different angle, lying on its side, intact rosy-pink skin, one grey-blue feather beside it. Row 2: (3) a whole gilt-head sea bream grilled over a few glowing coals: a deep oval body, silver skin browned and lightly charred, glistening with olive oil, and a bright shining GOLDEN-YELLOW stripe across the forehead from eye to eye that is clearly visible, a plain bream mouth with no whiskers, a sprig of green herb on it, (4) a whole golden carp-like barbel baked golden-brown, with large crisp scales and two short whiskers, on a shallow round terracotta plate, generously and clearly sprinkled all over with many small, elongated brown cumin seeds that stand out against the golden skin.
- pigeon: rosier and darker than the partridge, with intact skin and a grey-blue feather.
- grilled_bream: the gold brow band now shows, and the mouth has no barbels.
- himri_with_cumin: the cumin seeds are visible all over the fish.
Sheet W: _variants/items_sheet_w_sea_bass.png (ChatGPT, 1254×1254, 2×2): sea bass
Keys: sea_bass (cell 3, which has the darkest back). The other three cells are near-identical variants.
Thank you, those fixed it. One more: the raw sea bass looks too much like the silver grey mullet from earlier. Same hand-painted style, same flat #1a130d background, smooth painted surfaces, no text, no frames, no hands: a square 1024x1024 sheet, 2 columns by 2 rows = 4 icons, each alone and centred in its own cell, filling about 80% of the cell, with wide clear gutters. All four cells: a fresh RAW whole European sea bass (uncooked, wet and glistening), lying on the diagonal, in four slight variations of pose. Make it clearly a sea bass and NOT a mullet: a strong dark SLATE-BLUE to charcoal back that fades sharply into bright white-silver sides and a white belly, NO stripes along the side, a big head with a LARGE wide mouth and a jutting lower jaw, a bold black spot on the rear edge of the gill cover, two clearly separate dorsal fins (a tall spiny front fin with sharp spines and a soft rear fin), a slightly forked tail.
- sea_bass vs grey_mullet vs sea_bream: the bass now has a big jutting jaw, a black gill spot and a stockier body against the slender, striped mullet and the deep oval, gold-browed bream. The back came out only a little darker, not slate-blue, so all three are still silver fish; at 40 px they differ by silhouette rather than colour.
Notes for the next batch
- The conversation held the style for 23 sheets with no return of the sheet Q mosaic texture; "smooth painted surfaces with no mosaic or tiled texture" stays in every prompt.
- For raw meat say "RAW and FRESH, UNCOOKED ... nothing browned, no skewers"; for a raw plucked bird add "the skin is whole, no skinless patch, no exposed meat".
- ChatGPT gives bream and other cooked fish catfish barbels unless told "plain mouth, NO whiskers, NO barbels".
- Distinguish same-colour fish by silhouette (jaw, body depth, stripes) rather than by colour; asking for a darker back changed little.
- In the ChatGPT page, older images are virtualised out of the DOM, so detect a new image by its
srcchanging, not by counting images.
City districts batch (2026-10-27): meshullam, yedidyah, shoshana
Keys: meshullam, yedidyah, shoshana. Same method and style reference (rhoda) as the batches above; centre-cropped square, 512x512, <key>.png and <key>@web.png identical.
- meshullam: "Meshullam, a Jewish fuller west of Jerusalem, forties, sturdy, forearms wet and sleeves rolled, dark hair and beard, pale undyed tunic darkened with water at the hem, brown mantle, good-humoured."
- yedidyah: "Yedidyah, a Jewish quarryman of Jerusalem, broad-shouldered late thirties, covered in pale limestone dust, black hair and beard greyed white with dust, grey-tan tunic, wedge hammer on his shoulder."
- shoshana: "Shoshana, a Jewish washerwoman of En-Rogel, thirties, dark hair under a plain linen veil pushed back for work, strong forearms, rust-red tunic, muted green mantle, sleeves wet to the elbow, wry smile."
Item icons, batch 7 (j12-artist, 2026-10-28): salt, vegetables and cold meals
Files: items/{key}.png (slice original, 422–713 px square) and items/{key}.webp (256×256, cwebp q85, 7–15 KB), 9 icons. Same ChatGPT conversation ("Generate inventory icon sheet"), same workflow, vignette and scripts as batch 6. All cold food, nothing steaming. Each combined dish uses a flat round flatbread as its base, so it stays distinct from the single items (figs in a basket, honeycomb on a stone, the pale split salted_fish). Every icon was checked at 40×40.
Sheet X: _variants/items_sheet_x.png (ChatGPT, 1254×1254, 3×3)
Keys: salt, onions, garlic, leeks, oil_and_hyssop_bread, bread_and_figs, bread_and_honeycomb, travellers_bundle, salted_fish_and_bread (leeks replaced from sheet Y).
That sea bass works, thank you. Next sheet in exactly the same hand-painted World of Warcraft inventory icon style, lighting and background as the earlier item sheets (stylized, chunky, slightly exaggerated readable shapes that read at 40 px, bold painted highlights, visible brush strokes, smooth painted surfaces with no mosaic or tiled texture, warm upper-left key light, soft rim light, like a Blizzard game icon, not a photograph). Match the flat barley loaf, the fig basket, the honeycomb and the salted fish from the earlier sheets. A square 1024x1024 sheet, a precise grid of 3 columns by 3 rows = 9 square icons, each object alone and centred in its own equal cell, filling about 80% of the cell, with wide clear empty gutters so nothing crosses into a neighbouring cell, all on the same plain flat very dark warm brown background (#1a130d), no grid lines, no borders, no frames, no text, no labels, no hands. Everyday COLD food of 1st-century Galilee (AD 28), nothing steaming, no metal, no plates with patterns, no tomatoes, no potatoes, no chillies. Every flatbread is a thin round flat barley flatbread like a disc, browned and lightly charred, not a domed loaf. Row 1: (1) salt: a small open undyed cloth bag, its neck folded down, heaped with coarse chunky grey-white salt crystals, a few loose crystals spilling in front, (2) onions: three small round onions with dry, papery golden-brown skins and dry twisted tops, one of them cut in half showing white concentric rings, (3) garlic: two whole plump bulbs of garlic with papery white skin streaked with purple, and one loose clove beside them. Row 2: (4) leeks: a bundle of three long leeks tied in the middle with a twist of golden straw, dark green fanned leaf tops, long white stems and a tuft of pale roots, lying corner to corner on the diagonal, chunky, (5) a round flatbread drizzled with shiny green-gold olive oil and scattered with crumbled dried green hyssop (za'atar) herbs, with a small shallow clay dish of olive oil beside it, (6) a round flatbread with three ripe purple figs resting on it, one fig split open to show the bright red-pink inside with seeds (no basket). Row 3: (7) a torn piece of round flatbread with a thick slab of golden wax honeycomb lying on top, amber honey dripping over the edge of the bread (no stone), (8) a traveller's food bundle: a square of coarse undyed linen cloth gathered up and knotted at the top, partly open at the front, showing a folded flatbread, a few brown dates and some thin dark-red strips of dried meat inside, (9) a split, flattened salted fish, silver-grey and crusted with coarse white salt, lying on a round flatbread, with half a raw onion beside it showing its white rings.
- salt: the crystals came out bright white rather than grey-white, in a burlap-textured bag; it reads as salt at 40 px.
- onions: two whole onions and one halved (three in all).
- Rejected: the leeks were short and upright, like spring onions.
Sheet Y: _variants/items_sheet_y_leeks.png (ChatGPT, 1254×1254, 2×2): leeks
Keys: leeks (cell 2, which has the clearest leaf fan). The other three cells are near-identical variants.
Lovely, eight of those are right. Only the leeks came out short like spring onions. Same hand-painted style, same flat #1a130d background, smooth painted surfaces, no text, no frames, no hands: a square 1024x1024 sheet, 2 columns by 2 rows = 4 icons, each alone and centred in its own cell, filling about 80% of the cell, with wide clear gutters. All four cells: a bundle of three LONG, THICK leeks lying flat, corner to corner on the diagonal from the lower left to the upper right, tied in the middle with a twist of golden straw: a tuft of pale stringy roots at the lower left end, long thick straight white stems shading into pale green, and broad flat dark blue-green leaves fanning out at the upper right end. The leeks are about five times as long as they are wide, thick and chunky so they read at 40 px. Four slight variations.
- leeks: long white shafts, broad blue-green leaf fans and a straw tie; no longer confusable with spring onions.
World Map restyle (j12-artist, 2026-10-28): parchment tile and compass rose
Both from one ChatGPT image conversation ("Generate Parchment Texture"), in this order. Originals were 1254x1254 PNG; raw downloads kept as _variants/map_parchment_raw.png and _variants/map_compass_raw.png. Processed with Pillow (venv in ~/Sites/_tools/j12-3d) and cwebp. For the canvas World Map (parchment multiplied over painted terrain, compass drawn on top).
images/ui/map-parchment.webp (master maps/map_parchment.png)
-
Tool: ChatGPT, 2026-10-28. Kept: the only variant. The raw image was already nearly seamless with even edges (seam score h 1.72, v 1.47; 1.0 = seamless). Seams healed with
tile.py(min-cut overlap 8%, feather 24, flatten 0.3 at size/4), giving h 0.94, v 0.99; a 2x2 contact sheet shows no visible seams. Regraded from an orange (223, 191, 134) mean to #d9c49a (217, 195, 154), keeping luminance detail and half of the local colour variation. Luminance std 5.2, p1–p99 174–199 (low contrast, no dark spots). 1024x1024, WebP q85 (72 KB); master PNG 1024x1024 (1.4 MB). -
Prompt:
Generate an image: a seamless, tileable aged parchment / vellum paper texture for the background of a hand-painted World of Warcraft style fantasy RPG world map. Square 1024x1024, flat straight-on top-down view, perfectly even lighting across the whole tile. Warm cream-to-honey tone with a midtone around #d9c49a, soft painterly paper fibres, faint gentle mottling, a few very soft pale tea stains, slight fine grain. LOW contrast overall: no strong dark spots, no dark vignette, no darkened or burnt edges, no folds, creases or tears, no frame, no border, no text, no drawings, no symbols. The texture must wrap seamlessly on all four sides so it can be repeated as a tile and multiplied over painted terrain.
images/ui/map-compass.webp (master maps/map_compass.png)
-
Tool: ChatGPT, same conversation. Kept: the only variant. ChatGPT gave real alpha. The opaque body came out at alpha 250–254, so alpha ≥ 240 was clamped to 255 and faint background noise (< 10) to 0. No white fringe: the anti-aliased edge pixels are dark ink brown. Cropped to the content bbox, centred on a square with a 4% margin (master 1231x1231 RGBA, 1.0 MB), then 512x512 WebP q85 with lossless alpha (52 KB). Only "N" as text. The star's centre boss sits slightly below the image centre (about 50% x, 57% y) because the N and fleur-de-lis extend above it, so rotate around that point, not the image centre.
-
Prompt:
Lovely, thank you. Now a second image for the same map: an ornate antique compass rose, square 1024x1024, perfectly centred, straight front view, on a fully TRANSPARENT background (PNG with real alpha). An eight-point star: four long cardinal points and four shorter diagonal points, each point split lengthwise into a light half and a dark half, drawn in sepia and dark-brown ink with muted antique gold and faded oxblood-red watercolour fills. Behind the star, two or three thin concentric rings with fine evenly spaced tick marks. The north point ends in an elegant fleur-de-lis style finial, with a single capital letter N in a classical serif above it. That N is the ONLY text: no E, S or W, no numbers, no other letters or words. Hand-inked lines with soft watercolour washes, as on a 16th-century hand-drawn chart, in the hand-painted World of Warcraft map style. No modern instruments, no needle, no magic or astrological symbols, no faces, no background paper, no shadow, no frame.
maps/galilee_zone_map.webp (master maps/galilee_zone_map.png): the painted Galilee zone map
-
Tool: ChatGPT, 2026-10-28, conversation "Generate Fantasy Map Image", with the game's own top-down terrain attached as the layout to trace (
_variants/galilee_layout_reference.png, 1024x1536, exported from the minimap's painted background with a 23.3 m paper margin each side so it is exactly 2:3). Kept: the first variant (1024x1536). The World Map draws it over x −583.33…723.33, z −560…1400 m (ZONE_ARTinresources/js/game/minimap.js); names, markers and exits are drawn on top in code. -
Alignment: ChatGPT's lake came out about 3% larger (lake IoU 0.938 against the reference). A scale and offset fitted to the lake outline (sx 1.0328, sy 1.0347, tx +5.0, ty −4.9 px about (512, 870)) brings it to IoU 0.983, with the shore within 2.5 px (about 3 m) on average and 10 px at worst. The outer 30–80 px keep the original torn border. The unaligned original is
_variants/galilee_zone_map_unaligned.png. Capernaum, Bethsaida, Magdala and Tiberias sit on their marks. -
Prompt:
Generate an image: repaint the attached top-down terrain map as a hand-painted fantasy-RPG zone map in the World of Warcraft style, on aged parchment. Portrait 2:3, 1024x1536, top-down, north up. CRITICAL: keep the EXACT same composition and geography as the attached image, traced faithfully like a tracing over it. The lake outline (the big shield-shaped Sea of Galilee), the river course (the Jordan entering from the top a little right of centre and leaving at the bottom centre), the shoreline, the hills, and the positions of the towns and roads must stay exactly where they are in the reference, pixel for pixel, because game markers are placed on top at exact coordinates. Do not move, resize, rotate or reshape the lake; do not add or remove land. Style: painterly, saturated-but-warm watercolour and gouache. Olive and ochre hills with soft painted relief lit from the north-west, small painted trees and olive groves on the terraced slopes. A turquoise lake with a soft depth gradient (lighter shallows at the shore, deeper teal in the middle) and fine ink ripple lines along the shore. Replace the small dark marks with tiny painted village clusters of black basalt houses with flat mud-and-reed roofs, exactly where the marks are: Capernaum on the north shore (centre top of the lake) with a slightly larger basalt synagogue; Bethsaida just east of where the Jordan enters the lake; Magdala, the walled compound on the far west edge level with the upper lake; Tiberias, the gridded town on the west shore lower down, as a small walled town. Thin dirt roads painted along the same lines as the thin brown lines in the reference, including the road up the valley to the east. Papyrus and reeds at the Jordan mouth. Three or four tiny wooden fishing boats with a single mast on the lake. The outer edges of the painting fade into the parchment with a slightly burnt, torn paper border. 1st-century Galilee: no castles, no towers, no fantasy buildings, no magic, no creatures. Absolutely NO TEXT anywhere: no labels, no letters, no numbers, no compass rose, no legend, no scale bar, no frame ornaments, no cartouches.
Rome street and Forum concept — 2026-10-28
concepts/rome_street_forum.png (built-in GPT image generation, 1774×887). First variant kept. Chrome automation was disabled, so this image was not generated through the ChatGPT or Gemini websites. Reference for Roman roofs, painted façades, balconies, awnings, paved courts and the two-level basilica; implemented as batched 3D geometry rather than a scene backdrop.
Create ONE large horizontal art-direction reference image for a browser 3D historical RPG, early Imperial Rome around AD 30. This must be an achievable stylized mid-poly hand-painted 3D game environment, World of Warcraft environmental readability but historically Roman and absolutely NO fantasy/magic. A coherent continuous scene, NOT a multi-panel sheet. Slightly elevated third-person view looking along a lived-in urban street opening onto the Roman Forum: foreground ochre and cream lime-plastered 3-storey insulae, lower walls Pompeian muted red, visible stone quoins, deep dark recessed shops, faded rust and natural linen sloped cloth awnings on timber poles, projecting timber balconies and shutters, terracotta jars and produce crates clustered against buildings; tiled terracotta gabled roofs with thick eaves, ridge caps and rhythmic subtle roof seams. Broad grey warm basalt paving and narrow pale travertine pavements; no grassy lawns between dense urban houses. Midground Forum framed by a two-level arched basilica with an upper clerestory, thick entablatures, columned precinct, civic benches, square honorific plinths and cypresses. Background low Palatine terraces with umbrella pines, farther off a green-teal Tiber and warm red-roofed warehouse silhouettes. Warm late-morning Mediterranean light, cream limestone, dusty ochre, sage green, oxidized terracotta, shadowed timber. Rich architectural silhouettes and human scale, clear open navigable street center. A few small ordinary 1st century citizens in tunics for scale, no closeup portraits. No Colosseum, no Titus Arch, no domed Pantheon, no medieval houses, no modern objects, no readable text, no UI, no labels. Prioritize geometry and material decisions that can be recreated using shared textured boxes, cylinders, extruded pitched roofs and arch geometry. Premium coherent game art, painterly texture, strong silhouette, not photorealistic.
City districts addendum (2026-10-28): theodotus
Key: theodotus. Same method and style reference (rhoda) as the batches above; centre-cropped square, 512x512, <key>.png and <key>@web.png identical.
- theodotus: "Theodotus, a Jewish priest and synagogue ruler in Jerusalem, dignified sixties, full grey beard and grey hair, thoughtful learned expression, clean cream wool robe, deep blue-grey mantle, the edge of a scroll at his shoulder."
Tiberias asset kit concepts (j12-modeler, 2026-10-28)
References for the procedural Tiberias kit in resources/js/game/props/tiberias/ (img2threejs reconstructions; placed by regions/tiberias/). ChatGPT in Chrome, one conversation ("Generate Game Concept Art"), so they share one look. Saved as zoomed viewport captures of the generated image (about 1250–1356 px wide), not the full-resolution originals. All first variants.
- concepts/tiberias/gate.png (the south gate,
gate.js)Generate an image: game concept art for a 3D modeler, landscape 3:2. One single isolated structure on a plain flat light-grey background, three-quarter view from slightly above, the whole structure in frame, no ground scenery, no people, no text, no labels. The southern city gate of Tiberias in Galilee, built by Herod Antipas about AD 20 in Roman style: two chunky ROUND towers of pale cream dressed limestone ashlar (big rectangular blocks with drafted margins) flanking one tall arched gateway passage between them; a wide semicircular arch of wedge-shaped voussoir stones with a plain moulded impost; a parapet walkway with square merlons over the arch and around the tower tops; a few small slit windows in the towers; a short stretch of thick city wall running off each side with merlons; heavy dark wooden double gate doors with iron studs standing open inside the passage; a dark basalt plinth course at the foot of everything. No statues, no carvings of people or animals, no banners, no eagles, no inscriptions. Hand-painted World of Warcraft stylized look: chunky exaggerated forms, slightly wonky softened edges, big readable shapes, painted texture with soft top-down light, warm highlights on top edges, darker crevices, warm Mediterranean palette of cream limestone, warm charcoal basalt and dark brown wood.
- concepts/tiberias/colonnade.png (the cardo module,
colonnade.js)Great. Same style, lighting and plain flat light-grey background, new landscape image: one MODULE of the colonnaded main street (cardo) of a 1st-century Roman-style city in Galilee, three bays long, three-quarter view from slightly above, the whole module in frame. In front, a row of four plain smooth pale limestone columns with simple Tuscan bases and capitals on a low stepped stylobate, carrying a plain limestone architrave beam; above it a lean-to roof of red-orange Roman terracotta tiles (flat tegulae with rounded imbrex cover rows) sloping down toward the street. Behind the covered walkway, three small shops (tabernae) in a white lime-plastered wall with limestone door frames: wide openings with wooden shutters folded open, a masonry counter at the front of each shop, coloured linen awnings, and goods on display: stacked amphorae and jars, baskets of grain and lentils, folded dyed cloth, hanging bunches of onions, a copper pot. No people, no text, no statues, no carvings of people or animals. Hand-painted World of Warcraft stylized look, chunky exaggerated forms, slightly wonky softened edges, painted textures with soft top-down light.
- concepts/tiberias/market.png (
market.js,createStoa): cistern head, amphora rack, weighing table, stall, stoa sectionExcellent. Same style, lighting and plain flat light-grey background, new landscape image: a prop sheet for the market square (agora) of the same 1st-century Galilean Roman-style lakeside city, five separate objects in two rows with clear empty space between them, all at the same scale, three-quarter view from slightly above, none overlapping: (1) a public cistern well-head: a square pale limestone curb on a low step with a stone water trough beside it, a simple wooden frame with a pulley, a rope and a wooden bucket; (2) a wooden amphora rack: a sturdy timber frame holding six pointed terracotta amphorae leaning in a row, with two more standing in straw beside it; (3) a merchant's weighing table: a plank table with a bronze balance scale hanging from a small wooden stand, a set of stone weights, a little heap of coins, a sack of grain; (4) a market stall with a striped saffron-and-cream linen awning on four poles over a plank counter with baskets of fish, figs and dates; (5) a short open stoa section: three plain limestone columns with a beam and a tiled lean-to roof, a stone bench along the back wall. No people, no text, no labels, no animals, no statues. Hand-painted World of Warcraft stylized look, chunky exaggerated forms, slightly wonky softened edges, painted textures with soft top-down light.
- concepts/tiberias/townhouses.png →
townhouse_a.png…townhouse_d.png(2×2 cells,townhouse.js)Wonderful. Same style, lighting and plain flat light-grey background, new landscape image: a reference sheet of FOUR different two-storey townhouses of the same 1st-century Roman-style city in Galilee, standing separately in a 2x2 grid with clear space between them, all at the same scale, three-quarter view from slightly above, each house complete and uncropped. Walls of white or cream lime plaster over stone with dressed limestone corner quoins, a limestone base course, low-pitched roofs of red-orange Roman terracotta tiles (tegulae and imbrices). (1) a compact block house with a stone outside staircase running up the side wall to an upper door, a small wooden balcony, two upper windows with wooden lattice grilles; (2) an L-shaped house wrapped round a small courtyard behind a wall with a wooden gate, a date palm and water jars in the courtyard, a tiled lean-to over part of the court; (3) a shop-house: a wide shop opening with folding wooden shutters and a stone counter at street level, a long wooden balcony across the upper floor with a railing, ochre plaster; (4) a taller narrow house with a gable end to the street, a heavy door with a big limestone lintel, small barred windows, a roof terrace with a wooden pergola, pale rose plaster. Doors and shutters painted in muted blue-green, oxblood and natural brown. No people, no text, no labels, no statues, no images of people or animals. Hand-painted World of Warcraft stylized look, chunky exaggerated forms, slightly wonky softened edges, painted textures with soft top-down light.
- concepts/tiberias/synagogue.png (
synagogue.js)Beautiful. Same style, lighting and plain flat light-grey background, new landscape image: the synagogue of the same 1st-century Galilean lakeside city, one single isolated building, three-quarter view from slightly above showing the main facade and one long side, whole building in frame. A basilica-plan rectangular prayer hall about 20 by 15 metres, walls of pale dressed limestone ashlar with drafted margins on a dark basalt foundation course, a low-pitched red-orange Roman terracotta tile gable roof, the main facade on the short side with three doorways (a tall central door and two smaller side doors) with heavy limestone lintels and plain moulded frames, reached by three broad steps across the front, a simple gable with a small round window, plain pilasters at the corners; along the long side a row of tall narrow windows high up through which the columns of the interior hall can just be glimpsed; a low stone bench along the outside wall and two large water jars by the door. Plain and dignified, no images of people or animals anywhere, no statues, no symbols, no text. Hand-painted World of Warcraft stylized look, chunky exaggerated forms, slightly wonky softened edges, painted textures with soft top-down light.
- concepts/tiberias/palace.png (
palace.js)Excellent. Same style, lighting and plain flat light-grey background, new landscape image: the palace of Herod Antipas at the same city, seen from outside, one single isolated building complex, three-quarter view from slightly above, whole complex in frame. A grand long two-storey block of white lime plaster over limestone with dressed ashlar quoins and a heavy cornice, a hipped low-pitched red-orange Roman tile roof with a few gilded ridge tiles, a deep ground-floor portico of plain limestone columns along the whole front with a tiled lean-to roof, a central projecting entrance bay with a pediment-free tall doorway and a wide flight of steps, rows of tall upper windows with wooden shutters, a small balcony loggia in the middle of the upper floor. In front a walled formal garden terrace: low limestone parapet walls, gravel paths, a rectangular stone water basin with a fountain spout, clipped shrubs, potted flowers, a few cypress trees and date palms. No statues, no images of people or animals anywhere, no text. Hand-painted World of Warcraft stylized look, chunky exaggerated forms, slightly wonky softened edges, painted textures with soft top-down light.
Not generated: the harbour, bathhouse, street-dressing and stadium sheets. Chrome stopped responding (machine load average around 30) after the roof-tile texture, so harbour.js, civic.js and dressing.js were modelled from the written brief and the market and household sheets, without their own reference.
Portrait repair batch (2026-10-28): patrol companions, Tiberias and Sychar
Generated with the built-in image tool, one portrait at a time, attaching an existing portrait as the style reference (patrol_aulus or the newly made patrol_publius for soldiers, patrol_haggai for working men, patrol_dinah for women). Every prompt used the same frame: "Create a square 1:1 character portrait for a historical RPG set in 1st-century [place] (about AD 28/30), matching exactly the same painting style, lighting, framing and plain warm dark-brown vignette background as the reference portrait: painterly stylized oil look with visible brushwork, warm key light from the left with gentle gold rim light, bust portrait head and shoulders, figure turned three-quarters to the viewer's left, centred, no text, no border, no halo, historically accurate clothing only. Subject is a DIFFERENT [man/woman] than the reference: …". Raw outputs were 1920x1280 JPEG in generated_images/; each was centre-cropped square and resized to 512x512 PNG with sips, <key>.png and <key>@web.png identical. All first variants kept.
Why: named patrol companions had been sharing the generic pursuer_watchman / pursuer_soldier faces (Publius, a Roman auxiliary, wore an older Jewish watchman's face), the Tiberias watch had no own portraits, and eight Sychar townsfolk and two Tiberias market NPCs had none at all.
- patrol_publius: "Publius, a young Roman auxiliary soldier aged about 25 serving in Galilee, clean-shaven with short dark-brown hair under an iron infantry helmet with cheek guards pushed up slightly, earnest youthful face, light stubble on the chin, wearing a mail shirt over a rust-red wool tunic with leather shoulder straps."
- patrol_terentius: "Terentius, a Roman auxiliary soldier aged about 27 at Bethsaida, curly black hair at the sides, neat short dark beard, alert good-natured expression, bronze infantry helmet with cheek guards, scale armour over an undyed wool tunic."
- patrol_silvanus: "Silvanus, a broad Roman auxiliary soldier aged about 29 at Bethsaida, reddish-brown hair, close-trimmed reddish beard, strong jaw and calm expression, weathered iron helmet with neck guard, mail shirt over a brown-red tunic."
- patrol_demetrios: "Demetrios, a Greek-speaking Roman auxiliary soldier aged about 26 at Magdala, wavy dark hair, clean-shaven cheeks with fine stubble, keen intelligent expression, bronze helmet with cheek guards, hardened leather-and-scale cuirass over a grey-green tunic."
- patrol_rutilus: "Rutilus, a lean Roman auxiliary soldier aged about 28 on caravan-road patrol east of Capernaum, sun-browned narrow face, short straight dark hair, light beard along the jaw, dust-tired expression, iron helmet with a broad neck guard, mail shirt over a faded rust-red tunic."
- patrol_zenon: "Zenon, a young soldier aged about 24 in the service of Herod Antipas at Tiberias, olive skin, black wavy hair, youthful clean-shaven face with serious eyes, bronze Greek-style infantry helmet, scale armour over a deep blue-grey tunic."
- patrol_aemilius: "Aemilius, a Roman auxiliary soldier aged about 26 on Jerusalem gate patrol, square jaw, short dark hair, closely shaven with a small scar on one cheek, watchful expression, polished iron helmet with cheek guards, mail shirt over a dark red tunic."
- patrol_menandros: "Menandros, a Greek-speaking Roman auxiliary soldier aged about 27 in Jerusalem's upper city, dark curly hair, short well-kept beard, thoughtful slightly amused expression, bronze helmet with cheek guards, scale armour over a muted green tunic."
- patrol_lysias: "Lysias, a Roman auxiliary soldier aged about 31 in Jerusalem's upper city, composed veteran face, short black hair greying slightly at the temples, clean-shaven, iron helmet with reinforced brow guard and cheek guards, mail shirt over a deep red tunic."
- patrol_stephanos: "Stephanos, a young Roman auxiliary soldier aged about 25 on the Sychar boundary road, dark brown hair, boyish clean-shaven face with light stubble, earnest expression, iron helmet with cheek guards slightly too large for him, mail shirt over a plain brown tunic."
- patrol_antipatros: "Antipatros, a soldier aged about 35 of Herod Antipas guarding the palace gate at Tiberias, strong Levantine face, short black beard flecked with grey, disciplined expression, bronze helmet with cheek guards, scale armour over a dark blue-grey tunic."
- patrol_kostobar: "Kostobar, a sturdy soldier aged about 38 of Herod Antipas on market watch in Tiberias, broad face, dark curly hair, full short beard, shrewd expression, iron helmet with cheek guards, mail shirt over an ochre tunic."
- patrol_tirtzah: "Tirtzah, a Jewish fish seller aged about 30 at Tiberias harbour, sun-browned capable face, dark hair covered by a plain brown head veil, direct good-humoured expression, coarse earth-brown wool robe with a darker mantle." (Kept with her fish basket at the lower edge.)
- patrol_avner: "Avner, a Jewish warehouse porter aged about 34 in Tiberias, strong neck and shoulders from carrying loads, dark beard, patient tired expression, simple tan wool tunic with a worn leather shoulder pad for sacks."
- patrol_ptolemaios: "Ptolemaios, a prosperous Greek trader aged about 48 in Tiberias, neat grey-flecked beard, intelligent calculating expression, finer cream wool tunic and a slate-blue mantle over one shoulder."
- tiberias_grocer: "Menandros, a Greek grocer aged about 45 in Tiberias market, round-cheeked shrewd face, thinning dark hair, short beard, measuring-man's careful expression, plain olive-brown tunic with a linen apron."
- tiberias_cloth_seller: "Damaris, a cloth seller aged about 37 in Tiberias market, composed shrewd expression, dark hair beneath a deep blue-grey head veil, fine but plain wool robe with a strip of dyed blue cloth over one shoulder to show her trade, no jewellery."
- sychar_potter: "Hoshaiah, a Samaritan potter aged about 44 in Sychar, clay-dusted work apron over a coarse undyed tunic, full dark beard, steady craftsman's expression."
- sychar_weaver: "Keziah, a Samaritan weaver aged about 29 in Sychar's west lane, thoughtful listening expression, dark hair under a muted rust-red head veil, plain woven wool robe with a finely woven patterned band at the neckline made by her own loom."
- sychar_grocer: "Jemuel, a Samaritan produce seller aged about 46 in Sychar square, broad friendly merchant's face, salt-and-pepper beard, quick weighing eyes, plain brown tunic with a market apron, no props in hands."
- sychar_shepherd: "Hoshaiah the shepherd, a Samaritan aged about 31 below Mount Ebal, wind-tanned younger face, dark wavy hair and short beard, calm watchful expression, rough undyed shepherd's cloak over a coarse tunic."
- sychar_miller: "Neriah, keeper of the hand mills in Sychar, aged about 40, flour dust in his dark beard and on his plain tunic, sturdy forearms implied by rolled sleeves, practical expression."
- sychar_host: "Mahlah, keeper of the guest house in Sychar, aged about 43, welcoming capable expression, dark hair greying at the temples under a warm ochre head veil, clean plain wool robe befitting a hostess."
- sychar_stonemason: "Azrikam, a Samaritan stonemason aged about 48 who mends terrace walls above Sychar, strong weathered face, greying beard, stone dust on his coarse tunic, patient exact expression."
- sychar_oil_seller: "Adah, an oil seller aged about 38 in Sychar, assured merchant's expression, dark hair under an olive-green head veil, plain robe with a small clay oil flask on a shoulder strap."
Note: while this batch was being made, the Sychar work renamed its tradesfolk keys to personal keys (sychar_abidan, sychar_keziah, sychar_jemuel, sychar_shelemiah, sychar_neriah, sychar_mahlah, sychar_azrikam, sychar_market_potter) with portraits of its own. The seven duplicate old-key files from this batch (sychar_potter, sychar_weaver, sychar_grocer, sychar_shepherd, sychar_miller, sychar_host, sychar_stonemason, each with @web) were removed as superseded; sychar_oil_seller from this batch remains in use.
Children of the towns portraits (2026-10-28)
Eighteen child NPC portraits, one per named child added across the cities. Tool: Muse image generation with portraits/simon.png attached as the style reference, one sitting per child, first variant kept each time. Each generation came back 1920x1280; the kept file is the centre square crop (sips), portraits/<key>.png at 1254x1254 and portraits/<key>@web.png at 512x512. Shared prompt frame, only the subject sentence varied (quoted after each key):
Use the attached portrait only as a painting-style reference. Create a NEW square 1:1 character portrait, a completely different person, matching exactly the same style: semi-realistic painterly oil look, [place and era], warm soft key light from the left, gentle gold rim light, plain warm dark-brown vignette background, head and shoulders, three-quarter turn to the viewer's left, centred, no props, no text. Subject: [below]. Historically accurate modest clothing, no halo.
- yonatan: "Yonatan, a Galilean boy of about nine years, sun-browned olive skin, dark curly hair, bright eager expression, wearing a coarse sand-brown wool tunic with a darker brown sash" (1st-century Galilee AD 28)
- noa: "Noa, a Galilean girl of about eight years, olive skin, long dark hair partly covered by a simple dusty-rose wool headcloth, thoughtful expression, wearing a pale ochre wool dress"
- ilai: "Ilai, a Galilean boy of about ten years, olive skin, straight dark-brown hair, earnest determined expression, wearing a muted olive-grey wool tunic"
- avital: "Avital, a Galilean girl of about ten years from a fishing town, olive skin, dark wavy hair under a simple sage-green wool headcloth, calm proud expression, rust-brown wool dress"
- peretz: "Peretz, a Galilean boy of about nine years who works by fish-salting vats, sun-browned olive skin, short dark hair, cheerful gap-toothed expression, pale olive-green wool tunic"
- myrto: "Myrto, a Greek girl of about nine years from the city of Tiberias, lighter olive skin, dark-brown hair in a braid with a plain blue-grey headband, quick clever expression, warm sand-coloured dress with a blue-grey mantle edge"
- hillel: "Hillel, a Jerusalem boy of about ten years, olive skin, dark wavy hair, friendly talkative expression, warm tan wool tunic with a muted purple-grey mantle edge" (1st-century Jerusalem AD 30)
- salome: "Salome, a Jerusalem girl of about nine years, olive skin, black hair under a simple deep-rose wool headcloth, lively smiling expression, golden-tan wool dress"
- yehuda: "Yehuda, a Jerusalem boy of about eleven years who helps at a synagogue, olive skin, neat dark hair, serious studious expression, grey-olive wool tunic with a dark green-grey mantle"
- tirzah: "Tirzah, a girl of about nine years from the village of Bethany, olive skin, dark hair under a simple muted-violet wool headcloth, gentle watchful expression, warm khaki wool dress" (1st-century Judea AD 30)
- gershom: "Gershom, a Samaritan boy of about ten years, sun-browned olive skin, tousled dark hair, curious bold expression, sand-brown wool tunic with an olive-green sash" (1st-century Samaria AD 28)
- tziporah: "Tziporah, a Samaritan girl of about nine years, olive skin, black hair under a simple slate-blue wool headcloth, warm shy smile, golden-tan wool dress"
- ruth_of_joppa: "Ruth, a girl of about nine years from the port of Joppa, olive skin, dark hair under a simple grey-blue wool headcloth, dreamy sea-watching expression, warm tan wool dress" (1st-century Judean coast AD 30s)
- boaz_of_lydda: "Boaz, a boy of about ten years from Lydda who helps at harvest, sun-browned olive skin, short dark hair, sturdy cheerful expression, dusty sand wool tunic" (1st-century Judean plain AD 30s)
- timon_of_caesarea: "Timon, a Greek boy of about nine years from Caesarea, lighter olive skin, dark-brown wavy hair cut short in Greek fashion, bright curious expression, pale sand tunic with a slate-blue mantle edge" (1st-century Caesarea AD 30s)
- rome_subura_boy: "Felix, a Roman boy of about nine years from a crowded tenement street, olive skin, short dark hair in Roman cut, quick streetwise grin, plain undyed brown wool tunic" (1st-century Rome)
- rome_transtiberim_girl: "Aemilia, a Roman girl of about nine years, olive skin, dark hair parted in the middle and tied back simply, quiet gentle expression, warm sand dress with a dusty-rose mantle edge" (1st-century Rome across the Tiber)
- rome_ostia_girl: "Claudia, a Roman girl of about ten years from the Ostia quay, sun-browned olive skin, dark-brown hair under a simple slate-blue headcloth, bright harbour-watching expression, golden-tan dress" (1st-century Ostia)
Samaria neighbours — 2026-10-28
Built-in image generation. Seven distinct portraits; originals kept beside 512px web copies under portraits/.
- portraits/sychar_abidan.png and [email protected]
Create a single square 1:1 premium hand-painted historical RPG NPC portrait for J12. Abidan, a Samaritan male potter about 48, broad face, short curly black hair greying at temples, close full beard, clay-dusted ochre tunic, holding a small undecorated earthenware bowl at the lower edge. Bust portrait, head fully within frame with generous space above hair, shoulders and upper chest, face fills upper middle, three-quarter view slightly to viewer's left, direct warm human presence. First-century Samaria around AD 28, authentic eastern Mediterranean features and clothing. Rich painterly illustrated game art, convincingly modelled anatomy, warm amber side light, subtle rim light, dark umber softly painted background, earthy linen/olive/clay palette, detailed textile brushwork, matching an established World of Warcraft inspired grounded historical portrait library. No text, no border, no lettering, no modern objects, no armour, no magic, no halo. This is a fictional ordinary villager, not a biblical protagonist.
- portraits/sychar_keziah.png and [email protected]
Create a single square 1:1 premium hand-painted historical RPG NPC portrait for J12. Keziah, a Samaritan woman about 40, angular face, thoughtful dark eyes, dark brown hair under a loosely draped muted woad-blue linen head covering, warm grey tunic, holding a wooden spindle and a fold of undyed linen at the lower edge. Bust portrait, head fully within frame with generous space above hair, shoulders and upper chest, face fills upper middle, three-quarter view slightly to viewer's left, direct warm human presence. First-century Samaria around AD 28, authentic eastern Mediterranean features and clothing. Rich painterly illustrated game art, convincingly modelled anatomy, warm amber side light, subtle rim light, dark umber softly painted background, earthy linen/olive/clay palette, detailed textile brushwork, matching an established World of Warcraft inspired grounded historical portrait library. No text, no border, no lettering, no modern objects, no armour, no magic, no halo. This is a fictional ordinary villager, not a biblical protagonist.
- portraits/sychar_jemuel.png and [email protected]
Create a single square 1:1 premium hand-painted historical RPG NPC portrait for J12. Jemuel, a Samaritan man about 32, round friendly face, short curly dark hair, short neat dark beard, olive green tunic and russet mantle, a small basket with figs and dates at the lower edge. Bust portrait, head fully within frame with generous space above hair, shoulders and upper chest, face fills upper middle, three-quarter view slightly to viewer's left, direct warm human presence. First-century Samaria around AD 28, authentic eastern Mediterranean features and clothing. Rich painterly illustrated game art, convincingly modelled anatomy, warm amber side light, subtle rim light, dark umber softly painted background, earthy linen/olive/clay palette, detailed textile brushwork, matching an established World of Warcraft inspired grounded historical portrait library. No text, no border, no lettering, no modern objects, no armour, no magic, no halo. This is a fictional ordinary villager, not a biblical protagonist.
- portraits/sychar_shelemiah.png and [email protected]
Create a single square 1:1 premium hand-painted historical RPG NPC portrait for J12. Hoshaiah, a weathered Samaritan shepherd about 58, deep sun lines, salt-and-pepper curly hair and full beard, coarse undyed wool mantle, a simple wooden shepherd staff visible beside his shoulder. Bust portrait, head fully within frame with generous space above hair, shoulders and upper chest, face fills upper middle, three-quarter view slightly to viewer's left, direct warm human presence. First-century Samaria around AD 28, authentic eastern Mediterranean features and clothing. Rich painterly illustrated game art, convincingly modelled anatomy, warm amber side light, subtle rim light, dark umber softly painted background, earthy linen/olive/clay palette, detailed textile brushwork, matching an established World of Warcraft inspired grounded historical portrait library. No text, no border, no lettering, no modern objects, no armour, no magic, no halo. This is a fictional ordinary villager, not a biblical protagonist.
- portraits/sychar_neriah.png and [email protected]
Create a single square 1:1 premium hand-painted historical RPG NPC portrait for J12. Neriah, a Samaritan male miller about 28, lean young face, short black hair and stubble, dusty tan tunic and dark brown shoulder cloth, flour on his hands, holding a little linen grain sack at the lower edge. Bust portrait, head fully within frame with generous space above hair, shoulders and upper chest, face fills upper middle, three-quarter view slightly to viewer's left, direct warm human presence. First-century Samaria around AD 28, authentic eastern Mediterranean features and clothing. Rich painterly illustrated game art, convincingly modelled anatomy, warm amber side light, subtle rim light, dark umber softly painted background, earthy linen/olive/clay palette, detailed textile brushwork, matching an established World of Warcraft inspired grounded historical portrait library. No text, no border, no lettering, no modern objects, no armour, no magic, no halo. This is a fictional ordinary villager, not a biblical protagonist.
- portraits/sychar_mahlah.png and [email protected]
Create a single square 1:1 premium hand-painted historical RPG NPC portrait for J12. Mahlah, a Samaritan woman about 52, warm capable expression, olive-brown skin, dark hair streaked grey under an ochre headcloth, muted madder-brown tunic, holding a folded clean linen cloth at the lower edge. Bust portrait, head fully within frame with generous space above hair, shoulders and upper chest, face fills upper middle, three-quarter view slightly to viewer's left, direct warm human presence. First-century Samaria around AD 28, authentic eastern Mediterranean features and clothing. Rich painterly illustrated game art, convincingly modelled anatomy, warm amber side light, subtle rim light, dark umber softly painted background, earthy linen/olive/clay palette, detailed textile brushwork, matching an established World of Warcraft inspired grounded historical portrait library. No text, no border, no lettering, no modern objects, no armour, no magic, no halo. This is a fictional ordinary villager, not a biblical protagonist.
- portraits/sychar_azrikam.png and [email protected]
Create a single square 1:1 premium hand-painted historical RPG NPC portrait for J12. Azrikam, a Samaritan male stoneworker about 44, square face, dark curly hair, heavy trimmed beard, dusty grey-olive tunic, holding a small plain iron chisel and wooden mallet at the lower edge. Bust portrait, head fully within frame with generous space above hair, shoulders and upper chest, face fills upper middle, three-quarter view slightly to viewer's left, direct warm human presence. First-century Samaria around AD 28, authentic eastern Mediterranean features and clothing. Rich painterly illustrated game art, convincingly modelled anatomy, warm amber side light, subtle rim light, dark umber softly painted background, earthy linen/olive/clay palette, detailed textile brushwork, matching an established World of Warcraft inspired grounded historical portrait library. No text, no border, no lettering, no modern objects, no armour, no magic, no halo. This is a fictional ordinary villager, not a biblical protagonist.
images/ui/icons/coin_{denarius,assarion}.webp (money coins, 128 px, transparent)
-
Tool: ChatGPT in Chrome, new conversation "Create Coin Icon Sheet", 2026-10-28. Kept: the first and only variant (sheet saved as
_variants/coins_sheet_1.png). Each coin was cut out along its own irregular rim (colour distance from the background, 1.5 px soft edge), squared to its bbox, 128x128, WebP q86 with lossless alpha (8–9 KB); the bronze lifted with gamma 0.78 so it reads on the dark frames. Shown by<x-coins>and the hunt loot row. Legends checked: TI CAESAR DIVI AVG F AVGVSTVS (Tiberius, RIC I 26–30) and ΗΡΩΔΟΥ ΤΕΤΡΑΡΧΟΥ around the reed (Herod Antipas, Tiberias mint, no portrait). -
Prompt:
Create an image: a game icon sheet, landscape 1536x1024, two coins side by side, each perfectly round, seen exactly face-on (flat, no perspective, no tilt, no edge thickness showing), each filling about 80% of its half, centred, with a wide empty gap between them, on one plain flat very dark warm brown background (#1a130d). No shadows on the background, no frames, no borders, no labels, no hands, nothing else in the picture. Style: hand-painted World of Warcraft inventory icon, chunky bold readable relief, strong warm upper-left light with a bright highlight on the raised parts, must read clearly at 24 pixels. Both are real coins of Galilee around AD 28, drawn accurately. LEFT: a silver Roman denarius of the emperor Tiberius, the "tribute penny" minted at Lugdunum: a slightly irregular round flan of bright polished silver, a ring of small raised dots (a beaded border) just inside the rim, in the middle the laureate head of Tiberius facing RIGHT in profile (a clean-shaven man in his sixties with a prominent nose, short combed-forward Julio-Claudian hair, a laurel wreath with ribbon ties at the back of the neck), and around the edge the Latin legend TI CAESAR DIVI AVG F AVGVSTVS in small raised capital letters, a little worn. RIGHT: a bronze coin of Herod Antipas, tetrarch of Galilee, struck at Tiberias on the Sea of Galilee: a thick, slightly irregular round flan of warm reddish-brown bronze with a few small patches of green patina, NO portrait or face of any kind (Jewish coins showed no images of people), in the middle one tall upright reed (a straight stalk with long narrow leaves curving out on both sides and a small plume at the top), and the Greek legend HRWDOU TETRARXOU in small raised Greek capitals (ΗΡΩΔΟΥ ΤΕΤΡΑΡΧΟΥ) curving around the reed, a little worn. Both coins have a soft rounded raised rim. Not shiny like modern coins: real ancient struck metal, a little worn.
Item icons, batch 8 (2026-10-28): every item still without an icon
Files: items/{key}.png (slice original, 406–740 px square) and items/{key}.webp (256×256, cwebp q85, 5–17 KB), 44 icons. After this batch every key in config/game/items.php has a painted icon. Picked up by App\Game\Art with no config change. Same ChatGPT conversation ("Generate inventory icon sheet"), same flat-sheet workflow, vignette and scripts as batches 6 and 7 (slice.py with the fitted bgparams.npy, finish.sh, check.py, contact.py, copied into the scratchpad). All sheets came back at 1254×1254 with a sheet colour of about RGB (30–34, 19–22, 6–8). Every icon was checked at 40×40. Downloaded by fetching the image blob in the page and clicking an <a download>.
Each prompt began with the standard style block used since batch 6 ("Next sheet in exactly the same hand-painted World of Warcraft inventory icon style ... smooth painted surfaces with no mosaic or tiled texture ... A square 1024x1024 sheet, a precise grid of 3 columns by 3 rows = 9 square icons ... plain flat very dark warm brown background (#1a130d), no grid lines, no borders, no frames, no text, no labels, no hands"), followed by the cells below.
Sheet Z1: _variants/items_sheet_z1.png (3×3): hill harvest and parts from the hunt
Keys: grapes, almonds, mint, cumin, ibex_horn, ibex_hide, fox_pelt, camel_hair, raisins.
(1) one big heavy cluster of dark purple-black grapes with a soft dusty bloom, on a short woody stem with one broad green vine leaf and a curling tendril, (2) a small heap of fresh almonds in their soft fuzzy pale-green hulls, one hull split open showing the pale tan pitted almond shell inside, (3) a fresh bunch of bright green mint sprigs with crinkled, serrated, oval leaves, the stems tied together with a thin strand of twine. (4) a small shallow terracotta dish heaped with many tiny elongated ridged tan-brown cumin seeds, a dry cumin stalk with feathery seed heads lying beside it, (5) one single very long Nubian ibex horn, much bigger and heavier than a gazelle horn, dark grey-brown, sweeping back in a wide scimitar arc, with thick raised pale knobbed ridges across its whole front edge, lying horizontally in a big C shape, (6) a coarse short-haired hide spread out flat with its four leg flaps, pale sandy-beige, with a bold dark brown-black stripe running down the edge of each front leg flap and a darker line along the spine. (7) a whole red fox pelt, bright russet-orange fur with a cream belly, draped in an S-curve, with a long bushy tail ending in a clear pure WHITE tip, (8) a fluffy loose heap of coarse tawny caramel-brown camel hair, partly spun into a thick yarn wound on a simple wooden drop spindle that lies across the heap, (9) a handful of wrinkled dark amber-brown raisins heaped on a small round woven reed mat, a few still on a dry twig stem.
- ibex_horn vs gazelle_horn: heavier, with big knobbed ridges, lying as a wide C.
- ibex_hide vs gazelle_hide / roe_hide: spread flat with leg flaps and dark leg stripes (the other two are rolled or draped).
- fox_pelt: drawn with the head on; russet with a white tail tip, unlike the golden jackal pelt.
- camel_hair vs goat_hair: tawny heap on a drop spindle against the black tied hank.
Sheet Z2: _variants/items_sheet_z2.png (3×3): Sychar household and craft materials
Keys: sychar_clay, sychar_linen, sychar_flour, sychar_guest_blanket, sychar_travelling_mantle, linen_thread, wool_yarn, leather_strips, clay_cup (clay replaced from sheet Z5, cup from sheet Z6).
(1) wadi clay: a smooth rounded kneaded lump of fine PALE cream-grey clay (not red), with finger impressions pressed into it, sitting on a flat stone, a small wooden scraper leaning against it, (2) a narrow length of undyed cream linen rolled up tightly into a fat roll like a bandage roll, the loose end hanging down in a short tail, (3) a small round bundle of coarse cream barley flour wrapped in an undyed cloth, gathered and tied at the top with a cord, a little flour spilled in front. (4) a mended guest blanket: a thick folded wool blanket in broad brown and cream bands, along one edge a fresh bright white linen binding newly stitched on with visible stitches, a needle with a thread still hanging from it, (5) a Samaritan travelling mantle: a folded sturdy plain grey-brown wool mantle with a pale linen-reinforced edge and a prominent knotted tassel hanging from each visible corner, (6) a small wooden spool wound with fine white linen thread, a loose end trailing, a slim bronze needle stuck through the thread. (7) two plump twisted skeins of cream and light brown spun wool yarn, one of them looped in a figure-eight, (8) a bundle of supple tan-brown leather strips and thongs coiled loosely and tied in the middle, one long strip curling away free, (9) a small fired red-clay drinking cup with a flared lip and no handle, simple and plain, a little water inside.
- Rejected: the clay read as a rock on a stone (
_variants/sychar_clay_v1_rock.png); the cup came out tall like a vase (_variants/clay_cup_v1_tall.png).
Sheet Z3: _variants/items_sheet_z3.png (3×3): work goods of the Roman docks
Keys: rome_cargo_tally, rome_grain_sack, rome_flour_sack, rome_cloth_bundle, rome_sail_panel, rome_sealed_letter, rome_road_reply, rome_blanket, rome_bakery_loaves.
Work goods from the river docks and workshops of 1st-century Rome (AD 60): plain and humble, no gold, no ornament, no modern objects. Each must look clearly different from the others. (1) a flat rectangular stick of pale wood with rows of deep notches cut along both edges and a few scratched tally strokes on its face, a cord loop through a hole at one end, lying on the diagonal, (2) a squat fat sack of coarse brown burlap tied tight at the neck with cord, a round red clay seal stamp pressed over the knot, a few golden wheat grains spilled in front, (3) a tall open sack of pale undyed cloth, its top rolled down to show a heap of fine pure WHITE flour inside, a small wooden scoop stuck in the flour. (4) a neat square stack of folded plain off-white linen cloth tied with a cross of thin cord, (5) a folded square of weathered ochre-tan sail canvas, a new pale cream linen patch sewn onto it with big visible dark stitches, a bronze ring sewn into one corner with a short rope, (6) a pair of thin wooden writing leaves (a Roman tablet) closed flat and bound with a cord wrapped round several times, the cord fixed under a blob of red wax with a seal impression. (7) a rolled papyrus scroll (no seal) wrapped in a strip of dark leather tied with a thong, the pale papyrus ends showing at both sides, (8) a thick blanket of warm red-brown wool rolled up tightly into a bedroll and tied with two leather straps, the fringed end showing, (9) three round domed Roman loaves, each scored deeply across the top into eight wedges like a wheel, golden-brown crust, stacked in a shallow wicker basket.
- Told apart from their Sychar twins: the grain sack is sealed burlap, the flour sack is open and white, the cloth is a tied square stack (Sychar linen is a roll), the blanket is a red bedroll (the Sychar blanket is folded with a new binding).
Sheet Z4: _variants/items_sheet_z4.png (3×3): cold road food and the entrusted flax
Keys: sesame_flatbread, olive_flatbread, barley_rusks, goat_cheese, fresh_curds, brined_olives, honey_portion, diluted_wine, rome_flax_bundle.
Match the flat barley loaf, the honeycomb and the basket of olives from the earlier sheets, but make each of these clearly different from them. ... Everyday COLD road food of 1st-century Galilee (AD 28), nothing steaming, no metal, no plates with patterns, no tomatoes, no chillies. (1) a thin round flat barley flatbread like a disc, lightly charred, densely scattered all over with pale cream sesame seeds, (2) a round flatbread folded in half into a half-moon, glistening with olive oil, chopped dark purple and green olives showing in the fold, (3) a small pile of hard, dry, twice-baked rectangular chunks of dark brown barley bread, crisp, cracked and craggy like hard biscuits. (4) a small round of white goat cheese crusted with coarse salt, a wedge cut out of it, sitting on a broad green fig leaf, (5) a small shallow plain clay dish full of soft, wet, glistening white fresh curds in loose lumps, (6) a small round-bellied clay pot with no lid, full to the brim of glossy wet dark-green and brown olives in clear brine, two olives and a sprig of grey-green olive leaves beside it. (7) a broad green leaf folded around a chunk of golden honeycomb, thick amber honey oozing out of the fold and dripping, (8) a small squat two-handled clay jug next to a small shallow clay bowl filled with PALE rose-pink watered wine (much lighter than dark red wine), (9) a big bundle of dried golden-tan flax stalks with no flowers, tied tightly in two places with linen cord, a small round clay tag with a seal impression hanging from one of the ties.
Sheet Z5: _variants/items_sheet_z5.png (3×3): tools and plain clothing, and the clay again
Keys: writing_reed, hand_drill, pruning_knife, reed_creel, plain_tunic, wool_cap, reinforced_sandals, undyed_mantle, sychar_clay (drill and sandals replaced from sheet Z6).
Tools and plain clothing of 1st-century Galilee (AD 28): undyed wool and linen, leather, wood and dark iron only; no trousers, no buttons, no zips, no knitting, no modern shapes. (1) a long slim trimmed reed pen with a slanted cut nib, lying on the diagonal beside a small round cake of black ink in a little clay dish, (2) a carpenter's bow drill: a straight wooden drill shaft with a small dark iron point at the bottom and a round wooden hand-cap on top, a short curved wooden bow whose leather thong is wrapped once around the shaft, (3) a SHORT compact knife with a small dark iron blade curving like a little hook only at its tip and a short round olive-wood handle, much smaller than a sickle, a fresh green vine shoot with two leaves lying beside it. (4) a close-woven tan reed basket with a fitted lid and a leather shoulder strap, a silver fish tail sticking out from under the lid, (5) a simple T-shaped knee-length undyed cream linen tunic laid out flat, short sleeves, a round neck opening, a firmly stitched hem, no belt, (6) a small round close-fitting skullcap of thick felted undyed grey-brown wool, seen from the side at three-quarters, plain with a rolled brim. (7) a pair of sturdy sandals with very thick soles of three stacked leather layers clearly visible along the edge and stitched together, broad crossing leather straps, darker and chunkier than ordinary sandals, (8) a large plain off-white undyed wool wrap with NO stripes, hanging loosely over a short wooden wall peg, its two lower corners knotted, (9) a soft, wet, smooth rounded mound of fine PALE grey-cream potter's clay, glistening with moisture, with clear deep finger grooves and a thumbprint pressed into it and a slice cut off showing the smooth dense inside, sitting in a shallow wooden trough, clearly soft clay and not a stone.
- sychar_clay: pale clay in a wooden trough, distinct from the red
potters_clayin a cloth. - undyed_mantle vs wool_mantle: plain, no stripes, hanging on a peg with knotted corners.
- Rejected: the bow drill crossed its shaft in a T and read as a crossbow (
_variants/hand_drill_v1_crossbow.png); the sandals had modern metal buckles and moulded soles (_variants/reinforced_sandals_v1_buckles.png).
Sheet Z6: _variants/items_sheet_z6_fixups.png (2×2): fix-ups
Keys: hand_drill (cell 2), reinforced_sandals (cell 3), clay_cup (cell 4). Cell 1 (a shaft with a bow lying beside it) was not used: at 40 px it reads as a bow and arrow.
Last, a small fix-up sheet. Same hand-painted style, same flat #1a130d background, smooth painted surfaces (no mosaic or tiled texture), no text, no frames, no hands: a square 1024x1024 sheet, 2 columns by 2 rows = 4 icons, each alone and centred in its own cell, filling about 80% of the cell, with wide clear gutters. Row 1: (1) a carpenter's hand drill, NOT a crossbow: a single long straight round wooden shaft lying on the diagonal from lower left to upper right, a small sharp dark iron bit at the lower end, a round wooden hand-cap knob at the upper end, and a separate short curved wooden bow with a leather thong lying flat BESIDE it, parallel to the shaft (the bow does not cross the shaft), (2) the same carpenter's drill without any bow: one long straight wooden drill shaft with a small dark iron point and a round smooth stone palm-cap on top, lying on the diagonal across a small plank of pale wood that has two neatly drilled round holes and a wooden peg standing in one of them. Row 2: (3) reinforced sandals of 1st-century Galilee: a pair of simple flat sandals with very thick soles of three stacked tan leather layers clearly visible along the edge and stitched together, held on by broad plain leather straps that cross over the foot and are TIED with leather thongs (no buckles, no metal, no rivets, no moulded modern soles), (4) a small clay drinking cup: a SHORT, WIDE, low fired red-clay cup, wider than it is tall like a small bowl on a little foot, with a flared lip and no handle, a little water inside, small and humble.
Notes for the next batch
- A drill shaft with a bow next to or across it reads as a crossbow or as a bow and arrow; show the drill in use on a plank with holes and a peg.
- Say "TIED with leather thongs, no buckles, no metal" for sandals, or ChatGPT draws modern buckled sandals.
- A plain lump of pale clay on a stone reads as a rock; put it in a wooden trough, wet, with finger grooves and a cut face.
Mouse cursors (2026-10-28)
Files: generated/cursors/sheet.png (the original, 1536x1024 RGBA with real transparency) and ui/cursors/{point,hand,talk,attack,loot,unavailable}.png (32 px) plus @2x.png (64 px). Each cell was cropped to the bounding box of its alpha (2% padding) and resized with Lanczos. Every cursor points up-left, so the hotspot is 1 1. They're used in j12-ui.css (Cursors).
-
Tool: ChatGPT, new conversation "Generate Cursor Image Set". The first result was kept.
-
Prompt:
Generate an image: a set of mouse cursors for a World of Warcraft style RPG set in 1st-century Galilee (Roman-era Judea, AD 28). Landscape 1536x1024, a precise grid of 3 columns by 2 rows = 6 square cells, one cursor per cell, each filling about 70% of its cell, with wide empty gutters between cells. TRANSPARENT background (PNG with alpha), no grid lines, no frames, no text, no labels, no shadows on the background. Every cursor points to the UPPER-LEFT: its sharp tip or fingertip sits at the top-left of the object, like a classic mouse arrow. Hand-painted Blizzard / WoW cursor style, like the WoW gauntlet cursor: chunky bold silhouette that reads at 32 px, a thick dark brown outline around the whole shape, bold painted highlights and visible brush strokes, warm key light from the upper left, soft rim light, palette of aged bronze, warm gold, olive wood, linen and leather. Not vector, not flat, not photographic. Row 1: (1) the default pointer: a classic arrow-cursor shape made of carved, worn bronze with gold edges and a small engraved olive-leaf motif, tip at top-left; (2) a hand cursor: a sun-browned man's hand (no glove, no armour) with the index finger pointing straight up-left, the other fingers curled, a cuff of rough brown wool sleeve at the wrist; (3) a talk cursor: a parchment speech bubble with a bronze rim, its tail pointing to the top-left corner, three dark ink dots inside. Row 2: (4) an attack cursor: a short iron hunting knife held diagonally, blade tip at the top-left, bronze crossguard, olive-wood handle wrapped in leather; (5) a loot cursor: a small leather drawstring coin pouch with a gold coin peeking out, with a small bronze arrow tip pointing up-left at its top-left corner; (6) the same bronze arrow pointer as (1) but dull, greyed and darkened, for "unavailable".
-
Notes: Asking for a transparent background worked on the first try, so nothing had to be keyed out. The coin on the pouch shows a Roman emperor's head, which fits a denarius. At 32 px the knife and the pouch are small but still readable.
Donkey mounts: dealer portraits and mount icons (j12-artist, 2026-10-28)
Seven portraits for the donkey and mule dealers and four item icons for the mounts, for the donkey-mount feature. ChatGPT in Chrome only. Not wired into the game code (the feature agent puts the keys in config).
Portraits: portraits/{key}.png (1254×1254) and portraits/{key}@web.png (512×512, sips)
One new ChatGPT conversation ("Generate Yakim Portrait"), one portrait per message, portraits/simon.png attached to the first message as the style reference. First variant kept for all except Hanoch (second). Each later message repeated the frame: "Next portrait, the same in every way (style, lighting, three-quarter turn to the viewer's left, framing with a little space above the head, plain dark-brown vignette background, square 1:1, no props, no hands, no text, no halo, plain mantle edges with no fringe). A clearly different face from the earlier ones. Subject: …". Every subject names a face shape, nose, eyes and one distinguishing mark, per the batch 4 notes.
First message (Yakim):
Generate an image. Use the attached portrait only as a painting-style reference for a series of character portraits for my game J12, a World of Warcraft style RPG set in 1st-century Galilee (about AD 28). Create a NEW square 1:1 character portrait, a completely different person, matching exactly the same style: semi-realistic painterly oil look with visible brushwork, warm soft key light from the left, gentle warm gold rim light, plain warm dark-brown vignette background, bust portrait (head and shoulders) with a little space above the head, figure turned three-quarters to the viewer's left, centred. No props, no hands, no text, no border, no halo. Historically accurate 1st-century clothing only: wool and linen tunics, wool mantles with plain edges (NO fringe along the edge), head cloths; never trousers, nothing medieval or modern. Subject: Yakim, the donkey keeper of Capernaum, a Galilean Jew aged about 46. A broad, square, weathered face with a wide slightly flattened nose, deep laughter creases at the corners of warm brown eyes, sun-browned olive skin, dark brown hair greying at the temples, a full dark-brown beard with grey threads at the chin, a good-humoured half-smile. He wears a plain brown wool tunic (#7a6448) and an olive-green wool mantle (#4e5a3c) over one shoulder, a little road dust on the mantle.
Subjects of the later messages:
- halafta: "Halafta, a donkey trader of Magdala, a Galilean Jew aged about 38. A narrow, long oval face with high cheekbones, a long straight nose, quick dark eyes under arched brows, olive skin, thick black curly hair and a full glossy black beard, a shrewd but friendly trader's smile with one corner of the mouth higher. He wears a sand-brown wool tunic (#8a7354) and a rust-red wool mantle (#6b3a2a) over one shoulder."
- ariston (prompted as "Tryphon"; renamed by the coordinator because
tryphonis the Jerusalem dove seller andzenona patrol soldier; the name is not visible in the image): "Tryphon, a mule dealer of Tiberias, a Greek-named Jew of Herod Antipas's new lakeside city, aged about 52. A rounder, fuller, well-fed face with a short straight nose, heavy-lidded appraising grey-brown eyes, a high forehead, olive skin, short grey hair combed forward neatly and a short, neatly trimmed grey beard, a composed, slightly prosperous and city-polished look, a faint courteous smile. He wears a pale undyed linen tunic (#b8a888) and a blue-grey wool mantle (#3e4a5a) draped neatly over one shoulder, finer cloth than a villager's but no jewellery." - hoshaya: "Hoshaya, a donkey dealer of Bethphage on the Mount of Olives, a Judean Jew aged about 63. A long, thin, deeply lined face with hollow cheeks, a slightly hooked nose, kind, patient, deep-set dark eyes with heavy crow's feet, weathered olive skin, thinning white hair and a long flowing white beard reaching the chest, a gentle, kindly look. He wears an oatmeal-coloured wool tunic (#9a8462) and a dark brown wool mantle (#5f4e3a) over his shoulders."
- abisha: "Abisha, a Samaritan donkey breeder of Sychar (1st-century Samaria, about AD 28), aged about 41. A strong, rectangular face with a broad, flat brow, a straight heavy nose, calm steady dark eyes under level straight brows, olive skin, straight (not curly) dark hair to the ears under a simple undyed off-white linen head cloth tied back behind the head, and a full dark beard trimmed square, a calm, dignified, reserved look. He wears a brown wool tunic (#7c6a50) and an undyed grey-beige wool mantle (#a49b84) over his shoulders."
- hanoch_of_lydda (second variant kept): the first try ("A lean, youthful heart-shaped face with a pointed chin, a small slightly upturned nose, bright eager wide-open dark eyes and raised brows, olive skin, short wavy dark-brown hair, a short close-cropped dark beard, an energetic, eager open-mouthed grin as if about to make an offer. He wears a dark brown wool tunic (#6e5a44) and an ochre wool mantle (#8a6a3a) thrown over one shoulder.") came out as Halafta's twin and is in
_variants/hanoch_of_lydda_v1_like_halafta.png. Redo: "One redo: Hanoch came out looking too much like Halafta (same curly hair and face). … Hanoch, a young donkey dealer of Lydda in the Judean coastal plain, aged about 34. A slim, boyish face with a narrow pointed chin, big ears that stick out a little, a small upturned nose, bright eager wide-open eyes and high raised brows, olive skin with a light sprinkle of freckles across the nose, STRAIGHT (not curly) dark-brown hair cut short with a short fringe on the forehead, a thin, short, close-cropped dark beard along the jaw, an energetic, eager open-mouthed grin. He wears a dark brown wool tunic (#6e5a44) and a clearly ochre-yellow wool mantle (#8a6a3a) thrown over one shoulder." - rome_muleteer: "Septimus, a Roman muleteer on the Appian Way in 1st-century Italy, aged about 44. CLEAN-SHAVEN (no beard, no moustache, only a little stubble), as Roman men of the time were. A square, blunt, weather-beaten face with a broad jaw, a nose broken once and slightly crooked, narrowed grey-green eyes with deep squint lines, a wry, tough half-smile on thin lips, deeply tanned fair-olive skin, short cropped brown hair. He wears a plain brown wool tunica (#8a7a5e) with a hooded brown wool travelling cloak (a Roman paenula, #5a4636) over the shoulders, the hood lying down behind his neck. No armour, no jewellery, nothing medieval."
Notes: the mantle colours came out close to the hex values. Yakim still shares Simon's curly-haired build a little (the reference pulls toward it); his grey-shot beard, wide smile and green mantle set him apart. With "no props, no hands" ChatGPT added no trade props this time.
Item icons: items/{key}.png (slice original, 641–812 px square) and items/{key}.webp (256×256, cwebp q85, 5–8 KB)
Keys: old_donkey, galilean_donkey, white_donkey, riding_mule. Same ChatGPT conversation ("Generate inventory icon sheet") and the same flat-sheet workflow as batch 8: slice.py with the fitted bgparams.npy, finish.sh, check.py and contact.py, copied into the scratchpad. Both sheets came back 1254×1254 with a sheet colour of about RGB (33, 20, 7). Each icon was checked at 40×40 beside existing icons.
Sheet M1: _variants/items_sheet_mounts_a.png (2×2)
Kept: galilean_donkey (cell 2) and riding_mule (cell 4). Cell 1 (old donkey) did not look old enough. Cell 3 (white donkey) had a flowing horse mane and tail (_variants/white_donkey_v1_horselike.png).
Thank you, those fixed it. New batch: mounts. Next sheet in exactly the same hand-painted World of Warcraft inventory icon style, lighting and background as the earlier item sheets (stylized, chunky, slightly exaggerated readable shapes that read at 40 px, bold painted highlights, visible brush strokes, smooth painted surfaces with no mosaic or tiled texture, warm upper-left key light, soft rim light, like a Blizzard game icon, not a photograph). A square 1024x1024 sheet, a precise grid of 2 columns by 2 rows = 4 square icons, each animal alone and centred in its own equal cell, filling about 80% of the cell, with wide clear empty gutters so nothing crosses into a neighbouring cell, all on the same plain flat very dark warm brown background (#1a130d), no grid lines, no borders, no frames, no text, no labels, no hands, no people. Each cell is ONE WHOLE animal of 1st-century Galilee (AD 28), standing on all four legs, seen from the side or at three-quarters, the whole body from ears to hooves and tail inside the cell, wearing a simple period halter of rope or plain leather and a folded saddle cloth across its back, NO rider, no modern tack, no metal buckles, no stirrups, no horse saddle. Each animal must look clearly different from the others in size, colour and silhouette. Row 1: (1) an OLD donkey: small and thin, dusty grey-brown coat, a greying white muzzle and grey around the eyes, a slightly sagging sway back, head a little low, tired gentle eyes, a worn faded brown saddle cloth and a frayed rope halter, (2) a sturdy grey Syrian donkey in its prime: compact and strong, mouse-grey coat, a pale cream muzzle and pale rings around the eyes, a pale belly, a clear dark stripe down the spine crossed by a dark stripe over the shoulders, long upright ears, a plain undyed folded wool saddle cloth and a rope halter. Row 2: (3) a tall, elegant WHITE riding donkey, a fine noble animal, pure white coat, head held high, long ears, a dark eye and dark hooves, a folded saddle cloth woven in red and cream bands with a short fringe along its lower edge, a plain leather halter, (4) a tall riding MULE, clearly bigger than the donkeys and more horse-like in body, with a short mane, a long tail with a full switch, and LONG donkey ears, a glossy dark bay-brown coat with black legs and a black mane, a finer folded saddle cloth woven in deep blue and ochre with a simple border, a plain leather halter.
Sheet M2: _variants/items_sheet_mounts_b_fixups.png (2×2): fix-ups
Kept: white_donkey (cell 1, facing left) and old_donkey (cell 3, face visible). Cells 2 and 4 are mirrored near-duplicates.
Very good, the grey donkey and the mule are right. A small fix-up sheet. Same hand-painted style, same flat #1a130d background, smooth painted surfaces (no mosaic or tiled texture), no text, no frames, no hands, no people, no rider: a square 1024x1024 sheet, 2 columns by 2 rows = 4 icons, each one whole standing animal alone and centred in its own cell, the whole body from ears to hooves and tail inside the cell, filling about 80% of the cell, with wide clear gutters, seen from the side or at three-quarters. Row 1, cells (1) and (2), two slight variations of pose: a tall, elegant WHITE riding DONKEY, clearly a donkey and NOT a horse or a mule: very LONG upright donkey ears, a large donkey head with a pale grey muzzle and dark eyes, a SHORT stiff upright mane like a brush, a thin DONKEY tail that is bare and ends in a small dark tuft (not a flowing horse tail), slim legs with small neat dark hooves, a pure white coat, head held proudly high, wearing a plain leather halter and a folded saddle cloth woven in red and cream bands with a short fringe along its lower edge. Row 2, cells (3) and (4), two slight variations: a clearly OLD, small, thin donkey: dusty grey-brown coat with a rough, patchy look, a clearly WHITE-grey muzzle and white-grey rings around the eyes, grey hairs on the face, a visibly SAGGING sway back and a bony hip, head hanging low, long ears drooping sideways, a thin donkey tail with a small tuft, a worn faded brown saddle cloth and a frayed rope halter, patient tired eyes.
Notes for the next batch
- Check that a key is not already used before saving:
tryphon(the Jerusalem dove seller) was overwritten for a moment and restored from git, and the mule dealer is saved asariston. - Whole-animal icons are wide, so the padded square crops leave empty space above and below. They still read at 40 px by colour and silhouette: small brown with a low head, grey with a pale cloth, white with a red cloth, big bay with a blue cloth.
- ChatGPT draws a "white riding donkey" as a white horse or mule unless told "very long ears, short brush mane, thin tail ending in a tuft, not a flowing horse tail".
Remaining animal portraits (2026-10-28)
The ten species in config/game/animals.php that had no painted portrait. Tool: ChatGPT image generation in Chrome, one conversation ("Generate animal portrait sheet"), with _variants/animals_sheet_b.png attached as the style reference. Same style as the earlier animal sets: head-and-shoulders (head-and-neck for birds), three-quarter view facing slightly left, dark warm-brown background. Files: animals/{key}.png (512×512 crop) and animals/{key}.webp (512×512, q85).
Sheet D: _variants/animals_sheet_d.png (1536×1024, 3×2)
Keys: rock_dove, turtledove, gull (row 1); ibex (cropped from y=470 to keep the horns), hyrax, fox (from y=482). The top edges of hyrax (60 px) and fox (40 px) were faded to dark to hide the ibex horn tips and stray tips from the row above.
Generate an image. The attached sheet is the style reference for animal portraits in my game J12 (a World of Warcraft style RPG set in 1st-century Galilee and Judea): match its painterly hand-painted brushwork, warm Mediterranean key light, soft rim light, earthy palette, dark background and layout exactly. Make a NEW sheet in that same style: landscape 1536x1024, a precise grid of 3 columns by 2 rows = 6 square portraits, each centred in its own equal square cell with clear empty gutters between them and a little empty space above heads, ears and horns so nothing touches the cell edge. All on one plain flat very dark warm brown background (#1a130d), no grid lines, no borders, no frames, no text, no labels. Each portrait is a head-and-shoulders (head-and-neck for birds) study of one real, naturalistic Levantine animal, three-quarter view facing slightly left, filling about 80% of its cell, the lower body fading softly into the dark background at the bottom. Calm and dignified, never monstrous: natural eyes (no glow), mouths closed or relaxed, no snarling, no blood. Row 1: (1) a rock dove, blue-grey plumage, iridescent green and purple neck sheen, two dark wing bars, orange eye, (2) a European turtledove, small and slender, rust-brown back feathers scaled with black centres, pinkish-grey breast, a black-and-white striped patch on the side of the neck, (3) a slender-billed gull of the Sea of Galilee, white head and breast, pale grey back, thin red-orange bill, pale eye. Row 2: (4) a Nubian ibex male, sandy-brown coat, dark beard, long heavy ridged horns sweeping back in a wide curve, (5) a rock hyrax, small stout furry rodent-like body, rounded short ears, grey-brown fur, blunt muzzle, sitting on a sunlit rock, (6) a red fox, russet-orange coat, white throat and chest, black-backed ears, amber eyes, alert, mouth closed.
Sheet E: _variants/animals_sheet_e.png (1254×1254, 2×2)
Keys: hen, camel (row 1); dog (from y=600), wild_ass (from y=590). Cells are 627 px, resized to 512. The top 30 px of dog and wild_ass and the bottom 40 px of camel were faded to dark.
Beautiful, exactly right. Now one more sheet in exactly the same style, lighting and dark background, but square 1024x1024: a precise grid of 2 columns by 2 rows = 4 square portraits, each centred in its own equal square cell with clear empty gutters, a little empty space above heads and ears so nothing touches the cell edge, three-quarter view facing slightly left, lower body fading into the dark background, no text, no frames. Calm and dignified, natural eyes. Row 1: (1) a Levantine yard hen, plain red-brown and buff village chicken with a small red comb and wattles, a fluffy yellow chick peeking out from under her wing, (2) a one-humped dromedary caravan camel, sandy tan coat, long curved neck, heavy-lidded eyes with long lashes, a simple rope halter of plain undyed cord. Row 2: (3) a lean Canaan-type pariah street dog, short sandy-cream coat, upright pointed ears, wary watchful eyes, mouth closed, thin but healthy, (4) a Syrian wild ass (onager), pale sandy-fawn coat, white muzzle and belly, short upright dark mane, dark stripe down the back, long ears, wild and alert.
Rome workers portraits (2026-10-28)
The fourteen Rome NPCs without a portrait. Tool: ChatGPT image generation in Chrome, one conversation ("Generate Roman Baker Portrait"), with portraits/rome_porter.png and portraits/rome_shipmaster.png attached as style references. One portrait per generation, first variant kept each time. Each came back 1254×1254: portraits/<key>.png is the original and portraits/<key>@web.png is 512×512.
The first message set the frame; each later message began "Next portrait: a new image, same square format, style, light, background and framing, a completely different person" (some also said "who looks clearly unlike the previous men"), followed by the subject.
Generate an image. The two attached portraits are the style reference for NPC portraits in my game J12 (a grounded historical RPG; this part is set in the city of Rome in the 1st century AD, about AD 60). Use them only as a painting-style reference: create a NEW square 1:1 character portrait of a completely different person, matching exactly the same style: semi-realistic painterly oil look, warm amber key light from the left, gentle gold rim light, plain warm dark-brown softly painted vignette background, bust portrait (head fully in frame with space above the hair, shoulders and upper chest), three-quarter turn to the viewer's left, centred, no props unless I name one, no text, no border. Ordinary working people of Rome with authentic Mediterranean features and historically accurate modest Roman working clothes (short-sleeved wool tunics, simple cloaks, women in long tunics with a palla or headscarf), never trousers, armour, jewellery or modern objects, no halo, no magic. Subject: [below]
- rome_baker: "Lucius, a baker of the Subura tenement quarter, about 45, broad friendly face, short dark hair receding at the temples, close-trimmed dark beard flecked with grey, flour dust on his forearms and his undyed beige tunic, a plain brown cloak pushed back off one shoulder, practical good-humoured expression."
- rome_copyist: "a copyist who writes letters and petitions by the Roman Forum, about 58, lean scholarly face, high forehead, short neat grey hair, short trimmed grey beard, a few ink stains on his fingers, clean pale grey-green wool tunic with a dark brown cloak, thoughtful dry-witted expression."
- rome_farmer: "Aelia, a farm woman whose fields lie along the Appian Way outside Rome, about 40, sun-browned weathered skin, strong capable hands, dark hair with a few grey strands under a muted slate-violet wool headscarf, a plain long brown tunic and a coarse brown palla over her shoulders, frank warm no-nonsense expression."
- rome_mason: "a stonemason who mends the aqueduct arches outside Rome, about 50, heavy-set and broad-shouldered, weathered sun-darkened face with deep squint lines, short-cropped greying black hair, short rough greying beard, pale stone dust in his beard and on his coarse undyed tunic, a leather strap across one shoulder, appraising patient expression."
- rome_quay_worker: "a young quay worker who unloads grain boats at the Emporium on the Tiber, about 26, lean and muscular, sweat on his brow, short thick black curly hair, dark stubble rather than a full beard, a folded sacking pad on one shoulder for carrying loads, coarse sleeveless tan tunic, tired but cheerful expression."
- rome_grain_measurer: "Titus, a grain measurer who checks sacks at the river port, about 48, narrow careful face, sharp attentive dark eyes, neatly trimmed short dark beard and short dark hair combed forward in Roman fashion, a stylus tucked behind one ear, clean reddish-brown wool tunic with a plain darker brown cloak, exacting but fair expression."
- rome_water_keeper: "Sextus, the old keeper of the aqueduct water channels and settling basins, about 65, thin long face with a hooked nose and hollow cheeks, almost bald with a fringe of white hair, short white beard, pale grey-blue eyes, damp rolled-up sleeves, faded brown tunic and a dark grey-brown cloak, calm wise patient expression."
- rome_weaver: "Livia, a weaver of the Transtiberim quarter, about 34, oval face, calm focused dark eyes, a few loose strands of dark hair escaping a muted grey-teal wool headscarf, a long plain grey-teal tunic and a simple brown palla, a few threads of wool caught on her sleeve, quietly steady expression."
- rome_bakery_helper: "Dama, a young worker at a Roman mill and bakery, about 20, slim and wiry, lighter olive skin, light brown short hair, a thin youthful beard just growing in, flour dust in his hair and all over his plain undyed tunic, a little tired but steady and honest expression."
- rome_lodger: "Rufus, a traveller newly arrived in Rome looking for work, about 32, reddish-brown wavy hair and a short reddish-brown beard, freckled sun-reddened skin, a dusty travel-worn hooded brown wool cloak (hood down) over a plain oatmeal tunic, a leather bag strap across his chest, hopeful earnest expression."
- rome_potter: "Sabina, a potter of the Subura, about 50, round strong face with laugh lines, greying dark hair tied back under a muted grey-teal headscarf, dried grey clay smudged on her forearms and on her plain long grey-teal tunic, a brown work apron, shrewd humorous expression."
- rome_road_foreman: "Decimus, foreman of a road crew on the Appian Way, about 44, square heavy jaw, broken nose, clean-shaven with dark stubble, very short cropped black hair, thick neck, a weathered reddish-brown tunic with a broad leather belt and a heavy dark brown cloak pinned at the shoulder with a plain bronze pin, firm authoritative but fair expression."
- rome_sailmaker: "an old sailmaker who mends sails at the river landing of Rome, about 62, small and wiry, deeply tanned leathery skin, kind crinkled eyes, curly grey hair, short curly white-and-grey beard, a coil of linen thread hanging around his neck, faded blue-grey sailor's tunic with a patched shoulder, gentle welcoming expression."
- rome_road_keeper: "the keeper of a roadside halt in the countryside outside Rome, about 58, plump round hospitable face with ruddy cheeks, bald crown with a fringe of grey hair, full rounded grey beard, warm brown eyes, a plain brown tunic with a rough undyed cloak over his shoulders, a broad welcoming smile."
Chapter 6 (Acts) NPC portraits (2026-10-28)
Files: portraits/{key}.png + portraits/{key}@web.png (both 512×512 cell crops with the same pixels, the format of the batch 4 sheets), 16 keys from config/game/{jerusalem,coast,sychar}.php. Tool: ChatGPT image generation in Chrome, one new conversation ("Generate Character Portraits"), with _variants/portraits_sheet_10.png attached to the first message as the style reference. Sheets 18 and 19 are 3×2 at 1536×1024, cut on the equal grid into 512 px cells. Sheet 20 is 2×2 and came back 1254×1254; its 627 px cells were resized to 512 (Lanczos). First variant kept for every sheet; all 16 portraits kept. Colours follow each NPC's look (robe, mantle, skin, hair, beard, veil). People Scripture leaves unnamed stay unnamed in the prompts.
Sheet 18: _variants/portraits_sheet_18_acts_a.png
Keys: lame_man, temple_captain, devout_pilgrim (row 1); gamaliel, barnabas, stephen (row 2).
Generate an image. The attached sheet is the style reference for a series of character portraits for my game J12, a World of Warcraft style RPG set in 1st-century Judea and Galilee. Match it exactly: the same semi-realistic painterly oil rendering and visible brushwork, warm soft key light from the left with a gentle warm gold rim light, bust framing (head and shoulders) with a little space above each head, each figure turned three-quarters to the viewer's left, plain warm dark brown background with a soft vignette. Do not copy the people in the reference; make new people, each with a clearly different face. Make a landscape 1536x1024 sheet: a precise grid of 3 columns by 2 rows = 6 square portraits, each a complete, self-contained square portrait filling its own equal cell edge to edge with its own dark brown vignette background, nothing crossing into a neighbouring cell, no gutters, no borders, no frames, no text, no labels. No halo, no glow, no light around any head, nothing magical. Jerusalem, about AD 30-35, in the first years of the apostles' preaching. 1st-century Judean dress only: wool and linen tunics, wool mantles with plain edges and NO fringe along the edge (on men's mantles at most one small knotted tassel at a single corner), sandals; no trousers, nothing medieval or modern, no jewellery. Every face clearly different from the others (vary face shape, nose, mouth and eyes; follow each description and its distinctive mark). Row 1: (1) a beggar lame from birth who sits at the Temple gate, about 41, a LONG GAUNT face with hollow cheeks and prominent cheekbones, large dark pleading eyes looking up, sun-darkened olive skin, matted unkempt dark-brown hair and a scraggly untrimmed dark-brown beard, a cracked lower lip, a threadbare patched dusty grey-brown wool tunic and a worn brown mantle round his shoulders, thin shoulders, a small wooden begging bowl held near his chest, a hopeful, humble look; (2) the Captain of the Temple, a senior priest over the Temple guard, about 50, a SQUARE heavy-jawed stern face, a strong straight nose, hard dark eyes under heavy brows with a deep vertical frown line between them, olive skin, a thick, neatly trimmed dark-brown beard greying at the chin, a plain white linen head wrap, a white linen tunic and a muted violet-grey wool mantle over his shoulders, no armour, an authoritative, suspicious look; (3) a devout Jewish pilgrim from beyond the Tigris, come up for the feast of Weeks, about 35, an OVAL face with deep-set earnest eyes and a slightly hooked nose, warm darker brown skin, curly black hair and a short black beard, a small gap between his front teeth, road dust on his shoulders, a cream linen tunic and a warm brown wool mantle, a moved, searching look as if asking a question. Row 2: (4) Gamaliel, an old and honoured Pharisee and teacher of the Law, about 62, a TALL NARROW dignified face with a high forehead, a long thin nose, wise deep-set grey-brown eyes under bushy white brows, fair olive skin, white hair and a long, full, well-combed white beard, a white linen tunic and a slate-blue wool mantle drawn up over the back of his head, a calm, measured, thoughtful look; (5) Barnabas, a Levite from Cyprus, about 34, a BROAD warm open face with a rounded nose, wide-set kind brown eyes and deep laugh lines, a big generous smile, olive skin, thick wavy dark-brown hair and a full dark-brown beard, a strong large build, a sand-coloured linen tunic and a deep teal wool mantle, a warm, encouraging look; (6) Stephen, a Greek-speaking Jewish believer, about 30, a YOUNG slender face with fine features, a straight narrow nose, clear steady dark eyes, olive skin, short near-black hair and a short neat black beard, a small mole on his left cheekbone, a cream linen tunic and a rust-brown wool mantle, a calm, steadfast, gentle look.
- lame_man holds a wooden begging bowl in both hands; temple_captain wears a white linen head wrap; gamaliel has his slate-blue mantle drawn over his head.
- devout_pilgrim, barnabas and stephen all came back with curly dark hair; they are told apart by skin tone, build, smile and Stephen's mole. The next sheet asked for "STRAIGHT" hair on several men.
Sheet 19: _variants/portraits_sheet_19_acts_b.png
Keys: hellenist_widow, saul, circumcision_believer (row 1); mary_mother_of_mark, philip_the_evangelist, joppa_messenger (row 2).
Excellent, all six are right. Next sheet, the same in every way (style, lighting, three-quarter turn to the viewer's left, a little space above each head, dark brown vignette background, landscape 1536x1024, 3 columns by 2 rows = 6 self-contained square portraits filling their cells, no gutters, no borders, no text, no halo, no glow). Every face clearly different from each other and from the six on the last sheet (vary face shape, nose, mouth and eyes; not every man with curly hair; follow each description and its distinctive mark). Jerusalem and the Judean coast, about AD 33-40. 1st-century dress only: wool and linen tunics, mantles with plain edges and NO fringe along the edge (on Jewish men's mantles at most one small knotted tassel at a single corner); women wear a wool veil over head and shoulders; no trousers, no jewellery, no aprons. Row 1: (1) a Greek-speaking Jewish widow from Alexandria living in Jerusalem, about 64, a SMALL THIN sharp-featured face with a narrow pointed chin, thin lips and large tired dark eyes, deep lines, a small brown age spot on her temple, olive skin, grey hair just showing under a taupe-brown wool veil, a dark slate-grey wool dress, a patient, dignified but worried look; (2) Saul of Tarsus, about 31, a SMALL, wiry, lean man with a narrow intense face, a high forehead with the dark hair already receding at the temples, a prominent hooked nose, thick dark eyebrows that nearly meet, piercing dark eyes, a short black beard, olive skin, a cream linen tunic and a dark brown wool mantle, an intense, earnest, searching look; (3) a strict Jewish believer of Jerusalem, about 46, a LEAN ANGULAR face with a long jaw and sharp cheekbones, thin pursed lips, narrowed questioning grey-brown eyes, a deep crease between the brows, STRAIGHT grey-brown hair cropped short and a long grey-brown beard, a cream linen tunic and an olive-green wool mantle with one small knotted tassel at its corner, a stern, doubting but honest look. Row 2: (4) Mary, a householder of Jerusalem and mother of a young man named John Mark, about 50, a ROUND full face with soft cheeks, a short straight nose, wide warm hazel eyes with crow's feet and a small dimple in her chin, olive skin, greying dark hair under a deep indigo-blue wool veil, a muted mauve-grey wool dress of good plain cloth, a calm, hospitable, prayerful look; (5) Philip the evangelist, one of the seven deacons (not the apostle), about 33, a LEAN sun-browned, travel-worn face with a long straight nose, bright eager eyes, STRAIGHT dark-brown hair to the ears and a short dark-brown beard, a small scar through his right eyebrow, road dust on his shoulders, a cream linen tunic and an olive-green wool mantle, an eager, joyful look; (6) a young believer of Joppa sent on an urgent errand, about 29, a SQUARE young face with a broad nose and big earnest worried eyes, flushed cheeks and a little sweat on his brow from hurrying, short STRAIGHT black hair and a short black beard, olive skin, an ochre-tan wool tunic and a slate-blue wool mantle, an urgent, anxious look.
- saul came out small-faced and intense with a receding hairline, hooked nose and near-meeting brows. circumcision_believer has the single corner tassel on his olive mantle.
- philip_the_evangelist (Philip of the seven) is a different face from the apostle
philip.
Sheet 20: _variants/portraits_sheet_20_acts_c.png (1254×1254, 2×2)
Keys: herods_soldier, devout_soldier (row 1); cornelius, tabitha (row 2).
Very good, all six kept. Last sheet: the same style in every way (lighting, three-quarter turn to the viewer's left, a little space above each head and helmet so nothing touches the top edge, dark brown vignette background, no text, no borders, no halo, no glow), but SQUARE 1024x1024: a precise grid of 2 columns by 2 rows = 4 self-contained square portraits filling their cells, no gutters. Every face clearly different from each other and from everyone so far; follow each description and its mark. Soldiers wear historically accurate 1st-century kit: a wool tunic, a leather military belt, a plain rounded helmet with cheek guards and a neck guard; no lorica segmentata (no banded plate armour), nothing medieval, no fantasy armour, no trousers, no weapons drawn, no blood. Row 1: (1) a soldier of King Herod Agrippa's guard in Jerusalem, about 28, a Jewish or Idumean man with a full short black beard, a NARROW face with a long straight nose, close-set dark eyes and a thin scar across his chin, olive skin, a plain rounded IRON helmet with cheek guards (no plume, no crest), a coat of small overlapping iron scales over a dark madder-red wool tunic, a dark red-brown wool cloak on one shoulder, a watchful, dutiful look; (2) a devout Roman auxiliary soldier of the Italian cohort at Caesarea, about 30, CLEAN-SHAVEN, a BROAD open face with high cheekbones, a short blunt nose, honest light-brown eyes and a sprinkle of freckles across the nose, fair olive skin, short brown hair, a plain BRONZE helmet with cheek guards (no plume, no crest), a brick-red wool tunic with a leather belt and a dark red wool cloak pinned at the shoulder with a plain bronze brooch, no mail, a quiet, earnest, respectful look. Row 2: (3) Cornelius, a Roman CENTURION of the Italian cohort at Caesarea, about 48, CLEAN-SHAVEN, a lean, weathered, dignified Roman face with a strong aquiline nose, deep lines around kind grey eyes, close-cropped grey hair at the temples, light olive skin, an iron helmet with a TRANSVERSE crest of dark red horsehair running from side to side across the top (the centurion's mark), a shirt of iron mail with doubled shoulder pieces over a brick-red tunic, an undyed cream wool cloak over the shoulders, a grave, humble, generous look; (4) Tabitha (Dorcas), a seamstress of Joppa, a woman of about 50, a LONG oval face with a high forehead, a gentle wide mouth, a slightly crooked nose and soft brown eyes with laugh lines, olive skin, grey-streaked hair under a light sand-gold wool veil, a dark brown wool dress, a needle and a folded length of undyed cloth held near her chest, a kind, busy, warm look.
- herods_soldier wears an iron scale coat and a bearded face, so he reads as non-Roman beside the auxiliaries; his helmet has Roman-style cheek guards (unlike the pointed cap of
pursuer_soldier, Antipas's man). - cornelius: the red horsehair crest reads as running front to back rather than strictly transverse, and its top just touches the cell edge. Redo with "the crest seen edge-on as a fan across the helmet from ear to ear" if the transverse crest matters.
- tabitha holds a needle and a folded length of cloth.
- After this batch
PortraitCoverageTestpasses: every selectable person has a portrait.
Item icons, batch 9 (j12-artist, 2026-10-29): clothing
Files: items/{key}.png (slice original, 422–656 px square) and items/{key}.webp (256×256, cwebp q85, 6–14 KB), 13 icons: wound_headcloth, bordered_headcloth, goat_hair_cap, short_work_tunic, leather_apron, sheepskin_coat, madder_tunic, goat_hair_cloak, road_cloak, bordered_mantle, festival_mantle, laced_sandals, palm_fibre_sandals. App\Game\Art picks them up with no config change. Same ChatGPT conversation ("Generate inventory icon sheet"), same flat-sheet workflow and scripts as batch 8 and the mounts (slice.py with the fitted bgparams.npy, finish.sh, check.py, contact.py), copied from an earlier scratchpad into this one. All four sheets came back 1254×1254 with a sheet colour of about RGB (31–34, 20–22, 7–8). Every icon was checked at 256 and at 40 px beside the existing clothing icons (wool_mantle, undyed_mantle, woad_mantle, sychar_travelling_mantle, fishers_coat, plain_tunic, linen_headcloth, wool_cap, leather_sandals, reinforced_sandals). Downloaded by fetching the image blob in the page and clicking an <a download>.
Kept silhouettes, so the pairs don't read as one icon: the wound_headcloth is a turban coil and the bordered_headcloth a folded triangle with a cord (linen_headcloth is a folded square with a ring cord). The goat_hair_cloak is spread flat as a wide dark half-circle and the road_cloak is a brown cone tied at the neck. The bordered_mantle is cream laid flat with dark brown end bands and four tassels, and the festival_mantle is white draped over a rod with blue bands and blue-corded tassels. The madder_tunic is folded red and the short_work_tunic is laid out brown with a belt and patch (plain_tunic is laid out cream). The laced_sandals have one sandal standing with its thongs spiralling up, and the palm_fibre_sandals are plaited straw.
Colour update from the 3D side, applied in sheet C: the bordered_mantle bands are dark brown #3a2c22 (red on white read as blood), the bordered_headcloth edge stripe is indigo-blue #3d4d6b, and the goat_hair_cap is dark brown-grey #4a4036. The sheepskin_coat fleece target became #c9b994; the sheet A fleece already reads as a warm, darker cream at 256 px, so it was not redone.
Sheet clothing A: _variants/items_sheet_clothing_a.png (3×3)
Kept: wound_headcloth (1), leather_apron (5), sheepskin_coat (6). Replaced: bordered headcloth (red stripe, colour changed), goat-hair cap (read as a hairy ball), short work tunic (flared like a dress), madder tunic (read as a knitted sweater), laced sandals (same tan as leather_sandals), palm-fibre sandals (toe post, read as flip-flops).
Thank you, the donkeys are right. New batch: clothing. Next sheet in exactly the same hand-painted World of Warcraft inventory icon style, lighting and background as the earlier item sheets (stylized, chunky, slightly exaggerated readable shapes that read at 40 px, bold painted highlights, visible brush strokes, smooth painted surfaces with no mosaic or tiled texture, warm upper-left key light, soft rim light, like a Blizzard game icon, not a photograph). Match the folded cream wool mantle with brown stripes, the plain cream linen tunic laid flat, the folded linen headcloth with its dark cord, the grey felt wool cap and the leather sandals from the earlier sheets, but make each new garment clearly different from them in shape and colour. A square 1024x1024 sheet, a precise grid of 3 columns by 3 rows = 9 square icons, each object alone and centred in its own equal cell, filling about 80% of the cell, with wide clear empty gutters so nothing crosses into a neighbouring cell, all on the same plain flat very dark warm brown background (#1a130d), no grid lines, no borders, no frames, no text, no labels, no hands, no people, no mannequins, no heads. Clothing of 1st-century Galilee (AD 28): wool, linen, leather and plant fibre only; no trousers, no buttons, no zips, no buckles, no metal, no knitting, no fantasy armour, no modern shapes. Each garment is shown as an object, folded or laid out. Row 1: (1) a wound headcloth: a long strip of off-white linen (#e2d8c0) wound round and round into a firm round turban-like coil, the spiral of the wraps clearly visible, the loose end tucked in and a short tail hanging down, seen at three-quarters from above, (2) a bordered headcloth: a square of pale sand-coloured linen (#d8c9a3) folded once into a big TRIANGLE and laid flat, a bold madder-red stripe (#7a3a2e) woven along all its edges, a twisted dark brown-black cord lying across it in a loose S-curve (not a ring), (3) a goat-hair cap: a small close-fitting round dome cap of rough, shaggy felted BLACK goat hair (#3b332c), no brim, coarse bristly texture with stray hairs at the edge, clearly darker and rougher than a grey wool cap. Row 2: (4) a short work tunic: a plain knee-length T-shaped tunic of brownish undyed wool (#9c8a66) with very short sleeves, laid flat on the diagonal, coarse weave, a darned patch on one side and a slightly frayed hem, a plain narrow leather belt lying across its waist, (5) a leather work apron: a heavy stiff apron of tanned brown ox hide (#6b4a30) hanging straight down, roughly rectangular and slightly flared at the bottom, a leather strap loop at the top for the neck and two long leather ties at the waist hanging loose, dark scorch marks and scuffs on its front, (6) a sheepskin coat: a SLEEVELESS open coat made of sheepskins, laid out flat and open at the front, the outside smooth tanned leather, thick curly cream fleece (#d9cdb5) showing all round the edges, at the armholes and inside the open front. Row 3: (7) a good wool tunic dyed warm madder red-brown (#8a4a3a), neatly folded into a square with the round neck opening on top, two narrow darker red-brown stripes running down from the shoulder over the fold, a fine even weave, no belt and no rope, (8) laced travelling sandals: a pair of sandals with THICK dark leather soles (#4a3322) and VERY LONG thin leather thongs meant to wind up round the ankle and calf, the long thongs trailing in big loose loops and spirals around the pair, tied, no buckles, no metal, (9) palm-fibre sandals: a pair of light flat sandals PLAITED from straw-coloured dried date-palm fibre (#b8a070), the braided plait pattern clearly visible on the soles and the simple plaited toe strap, pale and light, no leather.
Sheet clothing B: _variants/items_sheet_clothing_b.png (3×3): cloaks, mantles and fix-ups
Kept: road_cloak (2), festival_mantle (4), goat_hair_cloak (8, the flat half-circle). Not used: cell 1 (on the crossbar the cloak grew a hood), cell 3 (bordered mantle, red bands, colour changed afterwards), cells 5–7 (madder tunic still sweater-like, work tunic still flared, cap too warm a brown), cell 9 (the rolled road cloak reads like rome_blanket).
Very good, most of these work. Next sheet in exactly the same hand-painted World of Warcraft inventory icon style, lighting and background (stylized, chunky, readable at 40 px, bold painted highlights, visible brush strokes, smooth painted surfaces with no mosaic or tiled texture, warm upper-left key light, soft rim light, like a Blizzard game icon, not a photograph). A square 1024x1024 sheet, a precise grid of 3 columns by 3 rows = 9 square icons, each object alone and centred in its own equal cell, filling about 80% of the cell, with wide clear empty gutters so nothing crosses into a neighbouring cell, all on the same plain flat very dark warm brown background (#1a130d), no grid lines, no borders, no frames, no text, no labels, no hands, no people, no mannequins, no heads. 1st-century Galilee (AD 28): woven wool and linen only, no buttons, no zips, no buckles, no brooches, no metal, no knitting, no hoods, no fantasy capes. Each must have a clearly different silhouette from the others. Row 1: (1) a goat-hair cloak: a dark charcoal-black cloak of coarse woven goat hair (#3a332c), draped over a plain wooden crossbar on a short post so it hangs as if over both shoulders, front view, falling into a broad bell shape, closed at the throat with a knotted dark cord, coarse rough weave with faint narrow lighter grey stripes like goat-hair tent cloth, (2) a road cloak: a long brown wool travelling cloak (#6e5a42) spread out flat seen from above as a long trapezoid, narrow at the neck and wide at the hem, the neck gathered and tied with a simple cord in a bow with two hanging ends, the lower hem dusty and worn, (3) a bordered mantle: a large rectangle of undyed cream wool (#d8ccb0) laid flat on the diagonal with its far end folded back once, two dark madder-red bands (#7a3a2e) running across near each short end, a knotted wool tassel hanging from each corner. Row 2: (4) a fine white festival mantle: a bright fine white wool mantle (#ece6d6) draped symmetrically over a smooth horizontal wooden rod, both ends hanging down evenly, two deep blue bands (#2f4f8a) across each hanging end near the edge, at each of the two lower corners a long white tassel with one bright blue cord wound into it, (5) a good wool tunic dyed warm madder red-brown (#8a4a3a), made of smooth flat WOVEN wool cloth, NOT knitted, NOT a sweater, no ribbing, folded neatly into a square with a round neck opening and a short slit on top, two narrow darker red-brown stripes running down from the shoulder over the fold, (6) a short work tunic of brownish undyed wool (#9c8a66) laid flat on the diagonal: a simple straight T-shape with STRAIGHT sides, NOT flared, NOT a dress, knee-length, very short sleeves, coarse weave, a darned patch on one side, a frayed hem, a narrow leather belt lying across its waist. Row 3: (7) a goat-hair cap: a close-fitting skullcap of felted black goat hair (#3b332c), a low shallow rounded dome, charcoal-black with grey-brown highlights, rough matted felt with a few stray coarse hairs, tilted toward the viewer so its smooth rounded lower edge and its hollow dark inside are clearly visible, clearly a cap and not a ball, (8) the same goat-hair cloak as cell 1 but laid out flat, spread wide like a big half-circle, the knotted throat cord at the top, (9) the same brown road cloak as cell 2 but rolled up tightly into a long travel roll, tied with its own cord, the worn hem showing at one end.
Sheet clothing C: _variants/items_sheet_clothing_c.png (3×3): colour changes and fix-ups
Kept: bordered_mantle (1), bordered_headcloth (2), goat_hair_cap (3), madder_tunic (4), short_work_tunic (5). Cells 7 and 8 are near-duplicates of 1 and 2. Cell 6 (the folded work tunic) didn't read as a tunic at 40 px. Cell 9 (the madder tunic laid open) came too close to plain_tunic in shape.
Thank you, the white mantle on the rod, the brown cloak and the flat dark cloak are right. A fix-up sheet with some colour changes. Same hand-painted World of Warcraft inventory icon style, lighting and background (stylized, chunky, readable at 40 px, bold painted highlights, visible brush strokes, smooth painted surfaces with no mosaic or tiled texture, warm upper-left key light, soft rim light, like a Blizzard game icon, not a photograph). A square 1024x1024 sheet, a precise grid of 3 columns by 3 rows = 9 square icons, each object alone and centred in its own equal cell, filling about 80% of the cell, with wide clear empty gutters, all on the same plain flat very dark warm brown background (#1a130d), no grid lines, no borders, no frames, no text, no labels, no hands, no people, no mannequins. 1st-century Galilee, woven wool and linen only, no buttons, no zips, no buckles, no metal, no knitting. Row 1: (1) the same bordered mantle as before (a large rectangle of undyed cream wool #d8ccb0 laid flat on the diagonal, far end folded back once, a knotted cream wool tassel hanging from each corner) but its two bands across each end are now DARK BROWN (#3a2c22), with NO red anywhere, (2) the same bordered headcloth as before (a square of pale sand-coloured linen #d8c9a3 folded once into a big triangle and laid flat, a twisted dark brown cord lying across it in a loose S-curve) but the stripe woven along its edges is now DARK INDIGO-BLUE (#3d4d6b), with NO red anywhere, (3) a goat-hair cap: a close-fitting skullcap of matted felt in a DARK BROWN-GREY (#4a4036), clearly greyer and lighter than black and not chocolate brown, a low rounded dome with a few stray coarse hairs, tilted toward the viewer so its rounded lower edge and its hollow inside are visible. Row 2: (4) a good tunic of FINE, THIN, smooth woven wool dyed warm madder red-brown (#8a4a3a), folded neatly in thirds into a flat rectangle, thin soft cloth with gentle fabric folds and a fine smooth surface like the plain linen tunic from the earlier sheet, NOT chunky, NOT knitted, NOT a sweater, no ribbed collar, no thick texture, a small round neck opening at the top edge, two narrow darker stripes running down over the fold, (5) a short work tunic laid flat, front view: ONE simple rectangle of coarse brownish undyed wool (#9c8a66) with short rectangular sleeve stubs at the top corners like a letter T, the body exactly as wide at the hem as at the chest, NO waist, NO flare, NO skirt, a man's labourer's tunic and NOT a dress, a square darned patch, a frayed hem, a narrow leather belt lying across it, (6) the same short work tunic, straight-sided like a T, folded once lengthwise and lying on the diagonal, the narrow leather belt coiled on top of it. Row 3: (7) the bordered mantle of cell 1 again, cream with dark brown bands and corner tassels, seen from a slightly different angle, (8) the bordered headcloth of cell 2 again, pale linen with an indigo-blue edge stripe and a dark cord, seen from a slightly different angle, (9) the fine madder red-brown tunic of cell 4 again, laid flat and fully open as a simple T-shape instead of folded, thin smooth woven cloth, not a sweater.
Sheet clothing D: _variants/items_sheet_clothing_d.png (2×2): sandals
Kept: laced_sandals (1) and palm_fibre_sandals (3). Cell 2 had metal buckle rings, and cell 4 is a near-duplicate of 3.
Very good, those colours are right. Last, a small fix-up sheet for the sandals. Same hand-painted style, same flat #1a130d background, smooth painted surfaces (no mosaic or tiled texture), no text, no frames, no hands, no feet, no people: a square 1024x1024 sheet, 2 columns by 2 rows = 4 icons, each alone and centred in its own cell, filling about 80% of the cell, with wide clear gutters. Row 1, cells (1) and (2), two slight variations: laced travelling sandals of 1st-century Galilee, made of VERY DARK brown leather (#4a3322), much darker than ordinary tan sandals, almost black-brown with warm highlights: a pair of sandals with thick dark stitched leather soles, one sandal lying flat and the other standing upright with its very long thin dark leather thongs wound upward in a tall open spiral as if round an ankle and calf (but with no foot inside), the loose thong ends knotted at the top, no buckles, no metal. Row 2, cells (3) and (4), two slight variations: palm-fibre sandals: a pair of light flat sandals PLAITED from straw-coloured dried date-palm fibre (#b8a070), with slightly pointed, gently upturned toes, the braided plait pattern clearly visible on the soles, held on by ONE broad plaited strap across the instep and a thin plaited loop at the heel, NO toe post, NOT flip-flops, nothing modern.
Notes for the next batch
- ChatGPT draws a red tunic in thick wool as a knitted sweater; say "FINE, THIN, smooth woven ... NOT knitted, NOT a sweater, no ribbed collar". The kept madder tunic still has a chunky basket weave, but no ribbing.
- A knee-length tunic laid flat comes out flared like a girl's dress unless told "ONE simple rectangle ... as wide at the hem as at the chest, NO waist, NO flare".
- A cloak "draped over a crossbar" grows a hood; spread it flat instead.
- Sandals with long thongs still get buckles in about half the variants; "no buckles, no metal" must be in every cell's text. Palm-fibre sandals get a toe post (flip-flop look) unless told "ONE broad strap across the instep, NO toe post".
- A rolled cloak reads as a bedroll (
rome_blanket); avoid rolls for clothing. - The laced sandals are dark by design (
#4a3322) and sit low in value at 40 px; their tall spiral carries the silhouette.
Nazareth map and loading illustration — 2026-10-29
- Tool: built-in
image_gen, not the CLI/API fallback. Original outputs copied into the project; WebP delivery copies made withcwebp(quality 85 loading, 88 map). - Kept assets:
art/loading-lower_galilee.png/.webpandmaps/lower_galilee_zone_map.png/.webp. - Layout reference:
_variants/nazareth-layout-guide.png, rendered from the zone's actuallayout.jsroutes, house footprints, cistern, courtyard, store, orchard and threshing floor. The first loose map study served only as a style reference. The final edit used the guide as its authoritative first image and the study as its second image. - Limits: artistic AD 28–30 reconstructions, not archaeological surveys. No Jesus household identification. No later churches, monumental city streets, fortress, modern objects or fantasy imagery. Map text/markers are drawn by the game in EN/LV; the raster has no lettering. The generated map shifted its composition vertically, so the delivered rectangle is calibrated to x -140…140, z -100…180; individual painted footprints remain approximate. See
openspec/changes/add-region-nazareth/design.md.
Loading illustration prompt
Use case: historical-scene. Asset type: finished WIDE landscape loading-screen illustration for the historical RPG J12. ONE landscape image, ideally 1792x1024 or 1536x1024. Subject: entering the modest Jewish village of Nazareth in Lower Galilee around AD 28–30. Beautiful hand-painted cinematic historical game environment art: tactile brush strokes, sculpted limestone, natural wool and linen, warm earth and muted olive green, very high craft, rich believable details, grounded World of Warcraft environment-art clarity without fantasy objects. Eye-level view walking a dusty narrow lane uphill from the fields into a little cluster of 8–12 single-storey pale limestone houses on stepped dry-stone terraces, backed by close limestone hills. Main visual anchor midframe: small cistern square shaded by a broad old fig tree; a woman in undyed linen carries a clay water jar, a carpenter's shaded timber-and-reed lean-to has a grounded wooden workbench with joined legs, shavings, pegs and baskets. Courtyard oven and jars glimpse through open gate. Golden barley and an olive orchard frame the approach; low stone retaining walls, irregular rock outcrops, a small rock-cut store in the slope. Soft morning light catches walls, atmospheric hill layers and clear sky in upper third to receive game loading text. Camera feels intimate and lived-in with an enticing path through village, strong depth and meaningful silhouette; do not make an empty plain. Authentic modest Galilean clothing, no medieval or modern elements. Not an excavated-plan claim, not Jesus's identified household. NO text, lettering, labels, map, parchment, UI, logos, watermark, halos, fantasy magic, minarets, basilicas, churches, towers, city fortifications, monumental Roman streets, cypress-lined Italian town, lake or boats. The scene must be a hillside farming/craft village; people are ordinary fictional residents.
Final map edit prompt
Use case: style-transfer. Asset type: precise north-up illustrated game navigation map, square. Image 1 is the AUTHORITATIVE COORDINATE GUIDE. Transform Image 1 into a beautifully hand-painted parchment map using Image 2 ONLY as a brushwork, material and palette reference, NEVER its layout. Preserve the exact pixel positions, size, orientation and connectivity of EVERY rectangular building, courtyard, path, field and round landmark from image 1. Do not copy any landmark position from image 2. Exact spatial registration matters more than ornate detail. Each thin outlined cream rectangle in image 1 becomes a tiny flat limestone roof with subtly drawn beams/courtyard details, but its footprint and centre stay fixed. The court in image 1 at pixel centre (596,395) has adjacent rooms immediately NORTH of it. The round cistern MUST stay precisely at pixel (512,527). The workshop canopy stays at (417,391), the hillside rock-store at (249,329). The golden field remains precisely the rectangle from (677,541) to (845,673), with barley rows and low retaining courses, not spread across the right half. The circular threshing floor remains precisely at (753,739), diameter 52 pixels. The hill lookout remains at (197,176). The main road enters at bottom x512, runs north to the junction at (512,666), skirts cistern via x527 then goes north through centre to (512,190); preserve the northwestern road LOOP and every branch exactly as drawn in Image 1. Keep ALL pale tan route strokes centred on exactly the original pixels while making their texture irregular and dusty. Green discs become olive/fig canopies at their original positions. Surround with subtle terraced limestone hills predominantly upper left/northwest and golden green rural terrain with dry-stone courses and Mediterranean scrub. No extra roads, no extra settlements, no invented rooms, no relocation of footprints, no shrinking or zooming, no framing border. The outer image still exactly covers x=-140..140 and z=-120..160. Rich sepia linework, warm cream parchment, muted olive washes and tactile gold barley, graceful high craft. Strictly ORTHOGRAPHIC TOP DOWN, no perspective. NO letters, text, labels, compass, symbols, UI or watermark. AD 28–30 historical village reconstruction, no churches, towers, monumental city, modern objects or lake. Output ONE square image as the finished map.
Horse and camel mount icons, and the Sepphoris donkey dealer (j12-artist, 2026-10-29)
Six item icons for the add-horse-mounts items and one portrait for the Sepphoris dealer. Tool: ChatGPT (chatgpt.com) image generation in Chrome only. Not wired into the game code: App\Game\Art picks the icons up, and the portrait is keyed by the NPC id.
Item icons: items/{key}.png (slice original, 448–478 px square) and items/{key}.webp (256×256, cwebp q85, 6–9 KB)
Keys: riding_camel, chestnut_horse, bay_horse, grey_horse, black_horse, white_horse. Same ChatGPT conversation ("Generate inventory icon sheet") and the same flat-sheet workflow as the donkey mounts and batch 9: slice.py with the fitted bgparams.npy, finish.sh, check.py and contact.py, copied from an earlier scratchpad into this one. One 3×3 sheet, 1254×1254, sheet colour about RGB (33, 20, 6). Downloaded by fetching the image blob in the page and clicking an <a download> (named j12mounts-sheet-a.png so it doesn't collide with other agents' downloads). Every icon was checked at 256 and at 40 px beside the four donkey and mule icons.
slice.py change: the bay horse (cell 3) and the white mare below it (cell 6) touched after the 4 px dilation and came out as one blob. The script now takes CUT=1, which clears a 3 px line in the mask at the emptiest row and column within ±90 px of each grid line before labelling (cuts at y 417/820, x 418/821 on this sheet).
Sheet H1: _variants/items_sheet_mounts_horses_a.png (3×3)
Kept: riding_camel (cell 1, side view, the crossed wooden saddle frame over the hump shows clearly), chestnut_horse (2), bay_horse (3, head up), grey_horse (4), black_horse (5), white_horse (9, faces left, slimmer and more graceful than cell 6). Not used: cell 6 (white mare facing right, heavier legs), cell 7 (camel at three-quarters, a near-duplicate of 1 with the frame less legible), cell 8 (bay with its head lowered looks heavier and more like the mule).
Very good, those sandals are right. New batch: more mounts, to sit beside the four donkey and mule icons you made earlier in this conversation (the old donkey, the grey donkey, the white donkey with the red and cream cloth, the bay mule with the blue cloth). Next sheet in exactly the same hand-painted World of Warcraft inventory icon style, lighting and background as those mount icons (stylized, chunky, slightly exaggerated readable shapes that read at 40 px, bold painted highlights, visible brush strokes, smooth painted surfaces with no mosaic or tiled texture, warm upper-left key light, soft rim light, like a Blizzard game icon, not a photograph). A square 1024x1024 sheet, a precise grid of 3 columns by 3 rows = 9 square icons, each animal alone and centred in its own equal cell, filling about 80% of the cell, with wide clear empty gutters so nothing crosses into a neighbouring cell, all on the same plain flat very dark warm brown background (#1a130d), no grid lines, no borders, no frames, no text, no labels, no hands, no people, NO rider. Each cell is ONE WHOLE animal of the 1st-century Roman East (AD 28), standing on all four legs, seen from the side or at three-quarters, the whole body from ears to hooves and tail inside the cell. Period tack only: a rope or plain leather bridle or halter, a folded woven saddle cloth, at most a low Roman four-horned leather saddle; NO stirrups, NO Western or cowboy saddle, NO medieval tack or caparison, no horseshoes, no metal buckles. Horses are lean, fine-legged eastern horses, not heavy draught horses. Every horse must look clearly different from the others at 40 px by coat colour and by the colour of its cloth. Row 1: (1) a one-humped riding CAMEL (dromedary) of an Arab caravan, sandy tan coat, long curved neck, a haughty face with heavy-lidded eyes, a wooden SADDLE FRAME over the single hump (two crossed wooden arches fore and aft of the hump, tied over a folded striped wool blanket in red, black and cream), a rope halter with a few wool tassels, (2) a CHESTNUT horse: bright copper-red coat with a matching copper mane and tail, a clear white blaze down the face, a lively head-up pose, a plain leather bridle and a folded ochre-yellow saddle cloth with a dark brown border, (3) a BAY horse: red-brown body with BLACK mane, BLACK tail and BLACK lower legs, lean and elegant, a plain leather bridle and a folded dark olive-green saddle cloth with a thin red border. Row 2: (4) a DAPPLE GREY mare: pale silver-grey coat covered in darker grey dapple rings, a darker grey face and legs, a pale grey mane and tail, a plain leather bridle and a folded lake-teal (blue-green) saddle cloth with a cream border, (5) a tall glossy BLACK Roman cavalry horse: jet-black coat with blue-grey highlights, black mane and tail, a leather bridle with small round bronze discs, a low brown leather Roman four-horned saddle (four short upright horns at the corners) over a folded madder-red saddle cloth, (6) a pure WHITE mare, noble and graceful, head high, a long flowing white mane and tail, dark eyes and dark hooves, a leather bridle with small bronze discs and a folded deep crimson-purple saddle cloth with an ochre-gold border. Row 3, variants: (7) the same riding camel at a three-quarter angle, (8) the same bay horse with its head lowered a little, (9) the same white mare seen from the other side.
Notes:
- Each mount reads by coat and cloth colour at 40 px: tan camel with a red-black-cream striped blanket, copper chestnut with a white blaze and a yellow cloth, bay with black legs and a green cloth, dappled grey with a teal cloth, black with a saddle and a red cloth, white with a crimson-purple cloth.
- The black horse's saddle is drawn in side view as a low leather seat with two symmetrical upright horns, front and back, which reads as the Roman horned saddle. No stirrups anywhere on the sheet.
- At 40 px, the bay horse is close to
riding_mule(both red-brown with black legs). The horse has short ears and a green cloth where the mule has long ears and a blue cloth.white_horseandwhite_donkeyboth carry a reddish cloth, but they differ in silhouette (ears, flowing mane and tail).
Portrait: portraits/lower_galilee_sepphoris_donkeys.png (1254×1254) and portraits/[email protected] (512×512, sips)
Tryphon, Donkey Dealer of Sepphoris. Same ChatGPT conversation as the other donkey dealers ("Generate Yakim Portrait", with portraits/simon.png attached to its first message as the style reference), one message, first variant kept. It is a different person from portraits/tryphon.png (the Jerusalem dove seller): the key is the NPC id, so the files don't collide. PortraitCoverageTest passes.
Next portrait, the same in every way (style, lighting, three-quarter turn to the viewer's left, framing with a little space above the head, plain dark-brown vignette background, square 1:1, no props, no hands, no text, no halo, plain mantle edges with no fringe). A clearly different face from ALL the earlier ones in this conversation (not curly-haired like Yakim or Halafta, not round like the Tiberias dealer, not white-bearded like Hoshaya). Subject: Tryphon, the donkey and horse dealer of Sepphoris, a Greek-named Jew of Herod Antipas's rebuilt capital in Lower Galilee (about AD 28), aged about 55, a weathered, shrewd, good-humoured man who has spent his life buying and selling animals in the market. A long, lean, angular face with high bony cheekbones, a strong, prominent aquiline (hooked, bony-bridged) nose with a thin white scar across the bridge from an old kick, narrow, crafty amber-brown eyes in a knowing squint with deep crow's feet, one brow raised a little higher than the other, leathery sun-darkened tan skin (#a87650), STRAIGHT very dark brown-black hair (#2a2018) cut short, receding at the temples and greying slightly there, a short, close-trimmed dark beard with two grey streaks at the corners of the mouth, a sly, good-humoured lopsided grin showing a little of the teeth, as if he has just named his price and expects you to haggle. He wears a dusty tan-brown wool tunic (#9c8562) and a dark brown wool mantle (#5e4a3a) thrown over one shoulder, a few stray animal hairs and a little road dust on the mantle. No trousers, no jewellery, nothing medieval or modern.
Notes: the scar on the nose, the grey at the temple and in the beard, and the lopsided grin all came through. The tunic and mantle came out close to the hex values. Of the existing dealers he sits nearest to Hanoch (short straight dark hair), but he is clearly older, leaner and greyer.
Loading screens for seven new regions (j12-artist, 2026-10-29)
- Tool: ChatGPT (chatgpt.com) image generation in the user's Chrome, one conversation ("Generate Historical Illustration"), one message per zone. Downloaded by fetching the generated image blob in page JavaScript (named
loading-<zone>.png), moved out of ~/Downloads into the project. - Files:
art/loading-<zone>.png(ChatGPT original, untouched) andart/loading-<zone>.webp(cwebp -q 85, same pixel size, no resize or crop needed). ChatGPT returned 1672×941 for Chorazin and 1659×948 for the others, the same sizes as the existing loading screens. - Template: the Nazareth loading prompt above (wide landscape, hand-painted WoW environment-art clarity, calm sky in the upper third, a "NO" list of later and fantasy elements). Each prompt follows
openspec/changes/add-region-<zone>/design.md(source and phase matrix, excluded later monuments). - Zones 2 to 7 were sent as follow-ups in the same conversation, each starting with "Next image, same style and format, a new separate image." so the look stays consistent.
Chorazin — art/loading-chorazin.png / .webp (1672×941)
Please generate an image. Use case: historical-scene. Asset type: finished WIDE landscape loading-screen illustration for the historical RPG J12. ONE landscape image, wide 16:9 (1792x1024 or 1536x1024). Subject: arriving at the small hill village of Chorazin in the black basalt hills above the north shore of the Sea of Galilee, around AD 28-30. Beautiful hand-painted cinematic historical game environment art: tactile brush strokes, very high craft, rich believable details, grounded World of Warcraft environment-art clarity without fantasy objects. Eye-level view walking up a rough dirt farm track between stepped wheat terraces held by black basalt dry-stone walls, toward a modest cluster of 8-12 single-storey houses of rough warm-charcoal basalt fieldstone with flat mud-and-reed roofs on wooden beams, outside stone stairs to the roofs, a walled domestic courtyard with a clay bread oven, baskets and big storage jars, and a common workyard with a plastered cistern mouth and a few gnarled twisted olive trees. Thin golden wheat growing between scattered rounded black basalt boulders; a bearded wheat grower in an undyed wool tunic and head cloth reaping with an iron sickle beside sheaves, a woman in a long tunic and mantle carrying a clay water jar. Warm late-afternoon light glancing across the dark stone, basalt as warm charcoal never pure black, sage, ochre and dry-grass tones, a thin curl of cooking smoke. Behind the village, soft atmospheric layers of rolling basalt uplands; a clear calm pale-blue sky with a few soft clouds filling the upper third to receive game loading text. Strong depth, an enticing path into the village, meaningful silhouette; not an empty plain. Authentic modest 1st-century Jewish Galilean clothing, no trousers. NO text, lettering, labels, map, parchment, UI, logos, watermark, halos, glowing magic, fantasy objects. NO decorated synagogue, carved columns, Moses' seat, arches, Roman temple, white limestone buildings, towers, city walls, churches, minarets, ruins or excavation park, medieval or modern elements. People are ordinary fictional villagers.
Kept: the only variant. Notes: basalt terraces, reaper with sheaves, woman with jar, courtyard oven, outside stairs and cistern all came through; the lake shows at the right edge below the hills, which fits Chorazin's position above the north shore. No synagogue or later monuments.
Hippos — art/loading-hippos.png / .webp (1659×948)
Next image, same style and format, a new separate image. Use case: historical-scene. Asset type: finished WIDE landscape loading-screen illustration for the historical RPG J12. ONE landscape image, wide 16:9 (1792x1024 or 1536x1024). Subject: arriving at the landing below Hippos (Sussita), a Greek-speaking Decapolis city on its flat-topped hill above the eastern shore of the Sea of Galilee, around AD 28-30. Beautiful hand-painted cinematic historical game environment art: tactile brush strokes, very high craft, rich believable details, grounded World of Warcraft environment-art clarity without fantasy objects. Viewpoint: standing on the lakeshore landing looking east and up. Foreground: a pebbly basalt shore with a modest rough-stone landing, two wooden single-masted fishing boats drawn up, a net worker mending a brown fishing net on a wooden bench, baskets, rope, a bearded porter in a short wool tunic carrying a load on his back. Midground: a dusty graded switchback path climbing a steep grassy slope past a small grove of twisted olive trees and a plastered cistern. Above, dominating the composition: the steep isolated flat-topped hill crowned by Hippos - a plain early city wall of dark basalt and pale stone, a compact town of flat-roofed basalt houses, one paved east-west main street, and a single modest Augustan-era temple precinct seen only as a restrained columned exterior on its podium (no statues, no worshippers, no ritual). Behind, the rising tawny slopes of the Golan plateau. Clear teal-green lake water at the bottom edge, warm late-afternoon light from the west lighting the hill face, soft rim light, warm charcoal basalt never pure black, olive and sage greens, ochre dry grass. Clear calm pale-blue sky with a few soft clouds filling the upper third to receive game loading text. Strong depth, meaningful silhouette. Authentic 1st-century clothing (wool and linen tunics, mantles, head cloths, sandals, beards), no trousers. NO text, lettering, labels, map, parchment, UI, logos, watermark, halos, glowing magic, fantasy objects. NO churches, crosses, odeion, theatre, bathhouse, huge colonnaded avenues, white marble megacity, castles, towers like medieval keeps, minarets, ruins or excavation park, medieval or modern elements. People are ordinary fictional residents.
Kept: the only variant. Notes: landing, boats, net mender, porter and the climb read well; the cliff-girt flat summit with its wall and temple exterior is a strong silhouette. Compromises: the town on the summit is painted in pale stone rather than mostly basalt, and the temple reads as a classical peripteral temple; the shore-to-summit distance is compressed (the real landing is about 2 km away), matching the zone's own compression.
Jericho — art/loading-jericho.png / .webp (1659×948)
Next image, same style and format, a new separate image. Use case: historical-scene. Asset type: finished WIDE landscape loading-screen illustration for the historical RPG J12. ONE landscape image, wide 16:9 (1792x1024 or 1536x1024). Subject: arriving at the oasis of Jericho in the Jordan valley around AD 28-30, coming down the dry road from Jerusalem. Beautiful hand-painted cinematic historical game environment art: tactile brush strokes, very high craft, rich believable details, grounded World of Warcraft environment-art clarity without fantasy objects. Viewpoint: on the last bend of a dusty road at the foot of the bare tawny Judean hills, looking east over the oasis. Foreground: the road edge with a few travellers and a laden donkey, a low stone-lined irrigation channel of clear water with a small wooden sluice, a gardener in a linen tunic, tall date palms heavy with orange-red date clusters, a ladder against a palm. Midground: a lush, deep-green oasis of dense date-palm groves and orderly balsam gardens laced with stone water channels; a modest town of flat-roofed mud-brick and plastered fieldstone houses with courtyards, ovens and a small market of awnings and jars. To one side, beside a dry rocky wadi crossed by a broad footbridge, Herod's winter palace complex: low elegant white-plastered buildings with colonnaded courtyards, a sunken garden and a large rectangular pool, clearly grander than the ordinary houses but not a castle. Background: the hazy flat Jordan valley, a thin green line of the Jordan, the faint glint of the Dead Sea to the right and the long violet-blue mountains of Moab across the valley. Warm golden morning light, desert heat haze, contrast between parched ochre hills and saturated green palms. Clear calm pale sky filling the upper third to receive game loading text. Strong depth, an enticing road into the oasis. Authentic 1st-century Jewish clothing (wool and linen tunics, mantles, head cloths, sandals, beards), no trousers. NO text, lettering, labels, map, parchment, UI, logos, watermark, halos, glowing magic, fantasy objects. NO Bronze Age ruined walls or tell as the town, no monastery on the cliff, no churches, crosses, mosques, minarets, castles, domes, medieval or modern elements, no ruins or excavation park. People are ordinary fictional residents.
Kept: the only variant. Notes: the strongest of the batch. Date palms with fruit, the ladder climber, the sluice channel, the market, and the palace with its pool and an arched bridge over the wadi, with the Dead Sea and Moab behind. A few cypresses stand in the palace garden.
Sebaste — art/loading-sebaste.png / .webp (1659×948)
Next image, same style and format, a new separate image. Use case: historical-scene. Asset type: finished WIDE landscape loading-screen illustration for the historical RPG J12. ONE landscape image, wide 16:9 (1792x1024 or 1536x1024). Subject: arriving at Sebaste, King Herod's rebuilt city on the old hill of Samaria, around AD 28-30. Beautiful hand-painted cinematic historical game environment art: tactile brush strokes, very high craft, rich believable details, grounded World of Warcraft environment-art clarity without fantasy objects. Viewpoint: on a winding graded road in the valley below, looking up at the city on its rounded, steep-sided hill. Foreground: terraced old olive orchards with gnarled twisted trunks and low dry-stone walls, an olive grower with baskets of olives, a simple stone olive press with a crushing basin and a wooden beam, a heavy wooden ox cart on the road, travellers on foot. Midground: the road winds up past a modest market street of plain pale limestone shops and flat-roofed courtyard houses with ordinary frontage (no long colonnade), and a plain city wall of pale limestone with two round towers of the western gate. Crowning the summit: the Herodian Augusteum, a tall pale limestone temple on a high podium reached by a broad monumental staircase, seen only as a calm restrained exterior landmark (no statues, no worshippers, no altar fire, no ritual). Behind, the green and ochre hills of Samaria fading into atmospheric haze, the far west hinted with a pale coastal plain. Warm late-afternoon light raking the hill, olive and sage greens, honey limestone, terracotta accents. Clear calm pale-blue sky with a few soft clouds filling the upper third to receive game loading text. Strong depth, meaningful hilltop silhouette, an enticing road. Authentic 1st-century clothing (wool and linen tunics, mantles, head cloths, sandals, beards), no trousers. NO text, lettering, labels, map, parchment, UI, logos, watermark, halos, glowing magic, fantasy objects. NO theatre, no long colonnaded avenue, no church, cross, mosque, minaret, dome, crusader or medieval buildings, no castle keep, no ruins or excavation park, no modern elements. People are ordinary fictional residents.
Kept: the only variant. Notes: the olive press, ox cart, terraced orchards, the gate with two round towers and the summit temple all came through, with no colonnade and no theatre. Compromises: the walls carry crenellations (attested on Hellenistic and Herodian walls, but they read slightly medieval); the town has some red tile roofs (plausible for a Herodian Greco-Roman city); and the Augusteum reads as a peripteral temple without its forecourt staircase visible. Regenerate with "no battlements" if this looks too castle-like in game.
Bethlehem and Herodium — art/loading-bethlehem_herodium.png / .webp (1659×948)
First prompt (variant 1, rejected):
Next image, same style and format, a new separate image. Use case: historical-scene. Asset type: finished WIDE landscape loading-screen illustration for the historical RPG J12. ONE landscape image, wide 16:9 (1792x1024 or 1536x1024). Subject: arriving at the modest village of Bethlehem in the Judean hills around AD 28-30, with King Herod's palace-fortress of Herodium on the horizon to the south-east. Beautiful hand-painted cinematic historical game environment art: tactile brush strokes, very high craft, rich believable details, grounded World of Warcraft environment-art clarity without fantasy objects. Viewpoint: on a dusty road entering the village on its limestone ridge, looking south-east. Foreground and left: a small cluster of single-storey pale limestone houses with flat earthen roofs, a walled courtyard with a clay bread oven and storage jars, a cistern mouth where a woman draws water with a rope and jar, a man carrying a bundle of pruned vine canes, a donkey. Midground: the ridge falls away in stepped dry-stone terraces of low gnarled grapevines and grey-green olive trees, with shepherds' paths and a small flock of sheep. Background focal point: the unmistakable artificial cone-shaped hill of Herodium standing alone, a truncated cone with smooth sloping earthen sides, its summit crowned by a circular double-walled palace-fortress with one tall round tower and three smaller semicircular towers; at its foot a lower palace precinct with a large rectangular pool and garden pavilion, and a separate pale funerary monument on the slope. Beyond, the tawny, wrinkled, treeless hills of the Judean desert fading to a pale haze. Warm late-afternoon golden light, long soft shadows, honey limestone, olive and sage greens, ochre desert. Clear calm pale-blue sky with a few soft clouds filling the upper third to receive game loading text. Strong depth, meaningful silhouette. Authentic 1st-century Jewish clothing (wool and linen tunics, mantles, head cloths and veils, sandals, beards), no trousers. NO text, lettering, labels, map, parchment, UI, logos, watermark, halos, glowing magic, star of Bethlehem, nativity scene, manger, angels, holy family. NO basilica, church, cross, mosque, minaret, dome, monastery, medieval or modern buildings, no ruins or excavation trenches, no theatre. People are ordinary fictional villagers.
Follow-up (variant 2, kept):
Regenerate the Bethlehem and Herodium image as a new image, keeping the same composition, village, terraces, light and people, but fix Herodium: it must NOT look like a rectangular medieval castle with crenellations. Herodium is a large, perfectly round, man-made truncated cone hill with smooth, steep, even earthen slopes like a volcano with its top cut off flat, standing alone and prominent in the distance. On its flat summit only the top of a circular ring wall shows above the rim, with one tall plain round tower on the east side and three low half-round towers, all smooth plastered pale stone without battlements. At the northern foot of the cone, the lower palace precinct with its large rectangular pool, a garden with a round pavilion and long low buildings, and on the slope a separate pale funerary monument with a conical roof. Make the cone larger and clearer in the composition as the main background landmark. Keep the clear calm sky in the upper third, no text, no castles, no battlements, no churches or crosses, no star, no nativity.
Kept: variant 2. Variant 1 showed Herodium as a crenellated rectangular Crusader-style castle on a lumpy hill and was rejected (not kept in the project). Notes: variant 2 has the clean truncated cone with a round summit wall and the tall eastern tower, the pool precinct of Lower Herodium, and the tomb as a separate pale monument with a conical roof. Compromise: a few small merlons remain on the summit ring.
Antipatris — art/loading-antipatris.png / .webp (1659×948)
Next image, same style and format, a new separate image. Use case: historical-scene. Asset type: finished WIDE landscape loading-screen illustration for the historical RPG J12. ONE landscape image, wide 16:9 (1792x1024 or 1536x1024). Subject: arriving at Antipatris, a modest early Roman-period Jewish/Herodian town at the springs of the Yarkon river on the inland coastal plain, beside the main north-south road between Caesarea and Jerusalem, around AD 30-40. Beautiful hand-painted cinematic historical game environment art: tactile brush strokes, very high craft, rich believable details, grounded World of Warcraft environment-art clarity without fantasy objects. Viewpoint: on the dusty road approaching from the south, looking north. Foreground: the road with a donkey caravan and a two-wheeled cart, a stall with bread, jars and oil under a reed awning, a woman with a water jar. Left midground: the clear, lush Yarkon springs welling up into a broad cool pool and a slow reedy stream, edged by tall reeds, willows, tamarisks and wild fig, a water tender filling a jar on flat stepping stones, and a simple dry stone ford with a plank footbridge where the road crosses the stream. Right midground: a modest town on a low mound of plain mud-brick and fieldstone houses with flat earthen roofs, courtyards, ovens, a few two-storey buildings and a plain low town wall, no grand monuments. Around it, flat fields of dark rich soil with ripening wheat, a reaper with sickle and sheaves, a small grove of olive trees. Background: the low green and tan foothills of Samaria rising to the east under a soft haze. Warm morning light, lush teal-green water and reeds against golden wheat and ochre earth. Clear calm pale-blue sky with a few soft clouds filling the upper third to receive game loading text. Strong depth, an enticing road into the town. Authentic 1st-century clothing (wool and linen tunics, mantles, head cloths and veils, sandals, beards), no trousers. NO text, lettering, labels, map, parchment, UI, logos, watermark, halos, glowing magic, fantasy objects. NO square stone fortress or castle with corner towers, no Ottoman or Crusader fort, no battlements, no colonnaded streets, no churches, crosses, mosques, minarets, domes, medieval or modern elements, no ruins or excavation park. People are ordinary fictional residents.
Kept: the only variant. Notes: the design date for Antipatris is AD 37–41, so the prompt says AD 30–40. The springs, the reedy stream, the footbridge ford, the roadside stall, the cart, the reaper and the town on its low mound all came through. The Ottoman fort on today's Tel Aphek is kept out. The springs pour over small rock steps into the pool (painterly licence).
Caesarea Philippi — art/loading-caesarea_philippi.png / .webp (1659×948)
Next image, same style and format, a new separate image. Use case: historical-scene. Asset type: finished WIDE landscape loading-screen illustration for the historical RPG J12. ONE landscape image, wide 16:9 (1792x1024 or 1536x1024). Subject: arriving at Caesarea Philippi (Paneas, Banias), the town of Philip the tetrarch at the springs of the Jordan beneath Mount Hermon, around AD 28-30. Beautiful hand-painted cinematic historical game environment art: tactile brush strokes, very high craft, rich believable details, grounded World of Warcraft environment-art clarity without fantasy objects. Viewpoint: on the road entering from the south, looking north toward the cliff. Background focal point: a tall sheer reddish-ochre limestone cliff face with one large dark natural cave mouth at its base, plain natural rock with no carvings, no niches, no statues, no temple or shrine in front of it; from the rocks at the foot of the cliff the clear cold Banias spring wells up into a deep turquoise pool and a fast, clear, rushing stream. Above and behind the cliff, the broad massive slopes of Mount Hermon with snow on its summit, wooded lower slopes of oak and terebinth. Midground: the stream runs between huge oriental plane trees, willows, fig trees and green meadow, crossed by a simple stone ford and wooden footbridge; beside it a modest civilian quarter of plain houses built of dark basalt and pale limestone fieldstone with flat earthen roofs, courtyards, a workyard with a woodworker at a bench with cedar and olive wood, a food stall with bread and jars. Foreground: the stony road with a traveller and a donkey, a water keeper filling a clay jar at the stream's edge, ferns and moss on wet rocks. Cool fresh atmosphere, dappled morning light, lush deep greens and turquoise water against warm ochre rock and the pale snow peak. Clear calm pale-blue sky filling the upper third to receive game loading text. Strong depth, meaningful silhouette of cliff and mountain. Authentic 1st-century clothing (wool and linen tunics, mantles, head cloths, sandals, beards), no trousers. NO text, lettering, labels, map, parchment, UI, logos, watermark, halos, glowing magic, fantasy objects, idols, statues of gods, altars or worship scenes. NO temples, columns, churches, crosses, mosques, minarets, domes, castles, crusader fortress on the hilltop, medieval or modern elements, no ruins or excavation park, no large waterfall. People are ordinary fictional residents.
Kept: the only variant. Notes: following the design's IAA 2025 decision, there is no cave-front temple, no niches and no statues. The plain cave mouth, the turquoise spring pool, the stream with its footbridge, the civilian quarter, the stall and the water keeper carry the scene. Compromise: Hermon is painted as a jagged alpine snow peak, where the real mountain is a broad rounded massif; the stream has small cascades but no big waterfall.
Loading screens for En Gedi and Antioch (j12-artist, 2026-10-31)
- Tool: ChatGPT (chatgpt.com) image generation in the user's Chrome, continuing the same conversation as the seven-region batch ("Generate Historical Illustration"), one message per image, each new zone starting with "Next image, same style and format, a new separate image." Downloaded by fetching the generated image blob in page JavaScript, moved out of ~/Downloads into the project.
- Files:
art/loading-<zone>.png(ChatGPT original, untouched) andart/loading-<zone>.webp(cwebp -q 85, same pixel size). Both came back 1659×948, the same size as the earlier batch. Rejected tries are kept in_variants/for comparison. - Sources: the header comments of
config/game/ein_gedi.phpandconfig/game/antioch.php. With these two, all 15 zones inconfig/game/zones.phphave a loading screen.
En Gedi — art/loading-ein_gedi.png / .webp (1659×948, PNG 3.0 MB, WebP 415 KB)
First prompt (variant 1, rejected, kept as _variants/loading-ein_gedi_v1_tall_cliffs.png):
Next image, same style and format, a new separate image. Use case: historical-scene. Asset type: finished WIDE landscape loading-screen illustration for the historical RPG J12. ONE landscape image, wide 16:9 (1792x1024 or 1536x1024). Subject: arriving at En Gedi, the spring oasis under the cliffs on the western shore of the Dead Sea (the Salt Sea) in Judea, around AD 30. Beautiful hand-painted cinematic historical game environment art: tactile brush strokes, very high craft, rich believable details, grounded World of Warcraft environment-art clarity without fantasy objects. Viewpoint: on the dusty shore road coming from the north, looking south along the oasis, with the cliffs on the right and the sea on the left. Right side: the towering tawny-ochre and rose limestone escarpment of the Judean desert, layered and sheer, cut by two deep narrow gorges; in the nearer gorge a slender waterfall drops between green ferns, maidenhair and reeds into a small clear pool under the rock. Foreground right: a few wild Nubian ibex with long curved ridged horns standing on the rocks above the road, a bearded goatherd in a dark wool tunic and mantle leaning on his staff with a few black goats. Midground: on a terrace under the cliff, the spring of En Gedi with a stone-lined channel; below it, stepped irrigated terraces of low balsam shrubs in tidy rows, flowering henna bushes, and groves of tall date palms heavy with orange date clusters, laced with small stone water channels; a balsam keeper in a linen tunic tending the shrubs. Beside the shore road, a small Jewish village of modest flat-roofed houses of fieldstone and mud brick with courtyards, ovens, storage jars and a few palm-trunk beams, a woman in a long tunic and veil carrying a water jar. Left side: the still, milky turquoise Dead Sea with a crust of white salt crystals along the pebbly shore, a woman scraping salt with a wooden scraper into a basket, and across the water the long hazy violet-blue mountains of Moab. Warm golden morning light, desert heat haze, a vivid contrast between the parched ochre cliffs and the saturated green oasis. Clear calm pale sky filling the upper third to receive game loading text. Strong depth, an enticing road leading into the oasis, meaningful silhouette of cliff and gorge. Authentic 1st-century Jewish clothing (wool and linen tunics, mantles, head cloths and veils, sandals, beards), no trousers. NO text, lettering, labels, map, parchment, UI, logos, watermark, halos, glowing magic, fantasy objects. NO synagogue, no mosaic, no Masada, no fortress, castle, towers or city walls, no mesa-top palace, no churches, crosses, mosques, minarets, domes, monastery, medieval or modern elements, no ruins or excavation park, no swimmers or bathers, no boats with sails. People are ordinary fictional residents.
Follow-up (variant 2, kept):
Good. Now make a second variant of the En Gedi image as a new image, same style, place, people and light, with one change to the composition: pull the camera back and a little higher so the clear calm pale-blue sky with a few soft clouds fills the whole upper third across the full width, like the Jericho image. The cliffs stay on the right but sit lower in the frame and farther back, their tops well below the top edge; the gorge with its slender waterfall and pool stays visible. Keep the white salt shore and the still turquoise Dead Sea on the left with the long hazy mountains of Moab across it, the spring terrace, the balsam and henna rows, the date palms, the small flat-roofed village by the shore road, the ibex on the rocks, the goatherd and the salt gatherer. Strong depth with the road leading into the oasis. Same NO-list: no text, labels, logos, watermark, halos, glowing magic, no synagogue, mosaic, Masada, fortress, castle, towers, churches, crosses, domes, ruins, swimmers or sailing boats, no trousers.
Kept: variant 2. Variant 1 was a good painting with a richer oasis, but the cliff filled the top of the frame from the centre to the right, leaving sky only in the top-left corner, unlike the other loading screens. Notes: variant 2 has sky across the whole upper third, the escarpment with the gorge waterfall and pool on the right, ibex on the rocks, the goatherd with black goats, a donkey on the road, the balsam rows and palms on the spring terraces, the flat-roofed village, the salt gatherer on the white crust, and Moab across the water. No text, fortress or synagogue. Compromise: the Dead Sea is a saturated tropical turquoise, more vivid than the real water.
Antioch — art/loading-antioch.png / .webp (1659×948, PNG 3.3 MB, WebP 532 KB)
First prompt (variant 1, rejected, kept as _variants/loading-antioch_v1_crenellated_wall.png):
Next image, same style and format, a new separate image. Use case: historical-scene. Asset type: finished WIDE landscape loading-screen illustration for the historical RPG J12. ONE landscape image, wide 16:9 (1792x1024 or 1536x1024). Subject: arriving at Antioch on the Orontes, the great Greek-Roman capital of the province of Syria, around AD 48-50. Beautiful hand-painted cinematic historical game environment art: tactile brush strokes, very high craft, rich believable details, grounded World of Warcraft environment-art clarity without fantasy objects. Viewpoint: standing at the road landing on the west bank of the river, looking east across the water at the city. Foreground: the dusty paved end of the road where it meets the river bank, travellers arriving on foot with bundles and a laden donkey, a two-wheeled cart, a porter carrying an amphora on his shoulder, a woman in a long tunic and veil with a basket, reeds and a few plane trees and willows at the bank. Midground: the broad, slow, green-brown Orontes river; a long low stone bridge on several arches crossing it to a plain stone river gate in the city's ochre stone wall; along the far bank a busy stone quay where flat-bottomed river barges and small single-masted cargo boats from the port of Seleucia are tied up, dockers unloading sacks, jars and amphorae, stacked crates and coiled rope. Beyond the wall, a large, dense, busy city spreading across the plain: crowded multi-storey tenement blocks of plastered rubble and brick in warm ochre, cream and faded pink with small windows, wooden balconies and drying cloth, terracotta tiled roofs in their hundreds, courtyard houses, and a long straight paved street running across the city lined on both sides with continuous roofed stone colonnades and shops, full of tiny figures, carts and awnings, with a smaller cross street; thin smoke from ovens and workshops. Background: the steep, rugged, olive-and-ochre slopes of Mount Silpius rising directly behind the city to the east, with the plain city wall climbing its ridge, and the hazy mountains beyond. Warm late-afternoon light from behind the viewer lighting the city facades and the mountain, soft rim light, olive and sage greens, ochre and terracotta, teal-green river water. Clear calm pale-blue sky with a few soft clouds filling the upper third to receive game loading text. Strong depth, an enticing route over the bridge into the city, a big, busy, lived-in real city, not a pristine fantasy capital. Authentic 1st-century clothing (wool and linen tunics, mantles, head cloths and veils, sandals; Jews and Syrians bearded, some Greeks clean-shaven), no trousers. NO text, lettering, inscriptions, labels, map, parchment, UI, logos, watermark, halos, glowing magic, fantasy objects. NO churches, crosses, minarets, mosques, domes, bell towers, Byzantine or medieval walls with crenellated towers, castles, no gleaming white marble megacity, no giant statues, no temples in the foreground, no worship or ritual scenes, no idols, no ruins or excavation park, no modern elements. People are ordinary fictional residents.
Follow-up (variant 2, kept):
Regenerate the Antioch image as a new image, keeping the same viewpoint, light, style, foreground travellers, donkey, cart, reeds, river, arched bridge, quay and barges, but fix these points. 1) The city wall along the river must NOT look medieval: no crenellations, no merlons, no battlements, no castle towers. Make it a plain, smooth, ochre ashlar quay wall and riverside city wall with a flat top, and the river gate a simple tall stone archway between two plain square piers. 2) Remove almost all the tall dark cypress trees, so it does not look Tuscan or Italian; use broad plane trees, a few date palms and grey-green olive trees instead. 3) Make the city clearly much bigger, denser and more urban, a crowded metropolis of half a million people that fills the whole plain from the river to the foot of the mountain and continues out of frame left and right: tightly packed 3 to 5 storey tenement blocks with small windows, wooden balconies and drying cloth, terracotta roofs, narrow lanes, workshops with smoke. 4) The great paved colonnaded street runs LEFT TO RIGHT across the city, parallel to the river, about halfway between the river and the mountain: a very long straight avenue lined on both sides with continuous roofed colonnades and shops, busy with tiny people and carts, receding into the haze in both directions. 5) Mount Silpius rises steep and rugged directly behind the city, with a plain city wall following its ridge. Keep the clear calm pale-blue sky in the upper third. Same NO-list: no text, inscriptions, labels, logos, watermark, halos, glowing magic, no churches, crosses, minarets, domes, castles, no gleaming white marble, no giant statues, no worship or ritual, no ruins, no modern elements, no trousers.
Kept: variant 2. Variant 1 was rejected because the river wall and gate had crenellations like a medieval castle, the many dark cypresses made it look like a Tuscan hill town, and the city read as a large town rather than a metropolis. Notes: variant 2 has a flat-topped ochre river wall with a plain arched gate, the arched bridge, the quay with barges unloading jars and sacks, a dense city of 3 to 5 storey tenements with terracotta roofs and cooking smoke filling the plain, the colonnaded street running across the city parallel to the river (as in Antioch, where it ran north to south), and Mount Silpius behind with a wall along its ridge. Plane trees and palms instead of cypresses. No text, churches, domes or statues. Compromise: the colonnade reads more like a long two-storey stoa than an open avenue at this distance, and the ridge wall has a few small square towers.
UI concepts: Hebrew-style divider and frame band (j12-artist, 2026-10-29) — CONCEPTS ONLY
Concepts to replace the Roman-looking meander frame (ui/window-frame.webp) and the bronze rod divider with its garnet lozenge (ui/divider-*.webp) with non-figurative Second Temple Jewish motifs. Nothing installed in public/images/ui, no CSS touched. Tool: ChatGPT (chatgpt.com) image generation in Chrome, the existing conversation "Generate game divider image" (the one that made the current divider), so the gold and aged-bronze metal matches. Both sheets came back 1536×1024 on a flat dark sheet. Downloaded by fetching the image blob in the page.
_variants/ui_divider_hebrew_concepts.png (1536×1024, 4 dividers stacked)
- A: a compass-drawn six-petal rosette in a round bevelled gold medallion, small leaf flanks, a thin bevelled rod with collars, and rosette-disc finials.
- B: a pair of red pomegranates facing each other at the centre, with a grapevine scroll (leaves, tendrils, red grape clusters) between two thin rails, and grape-cluster end caps. It reads best at 24 px because of the red.
- C: a twisted gold cord band with an almond-blossom centre (a five-petal flower between two buds) and knotted cord-loop end caps.
- D: a date palm with two hanging date clusters in a lobed cartouche (after Herod Antipas's coins), palm-frond leaflet bands, and lily (shoshan) finials.
Checked at 24–32 px tall: all four keep their silhouettes. A's medallion has small leaf flanks that drift slightly toward acanthus. B's vine band repeats but isn't strictly uniform, so cutting it into pieces would need a repeat tile, not a plain stretch.
Generate an image. New direction: this divider and our window frame look too Roman (Greek-key meander, laurel-like olive leaves, garnet lozenge). I need CONCEPTS for replacement dividers in a 1st-century HEBREW style: the decorative art of Second Temple Jerusalem and Galilee (Herodian-period ossuaries, the Magdala stone, Temple-era stone lintels, coins of Herod Antipas), which is strictly non-figurative. Keep the same quality and RPG feel as the divider above: hand-painted World of Warcraft UI art, warm gold and aged-bronze metal, bevelled edges with bright top highlights and dark lower bevels, crisp clean silhouettes, chunky enough to read when shown only 24 px tall. Landscape 1536x1024 concept sheet on a plain flat very dark warm brown background (#1a130d), with FOUR different horizontal dividers stacked as four rows, evenly spaced with wide empty gaps between the rows, each divider perfectly symmetrical left to right, straight front view, no perspective, spanning about 90% of the width. Each divider has: a centre medallion, a plain band running out to both sides (uniform along its length so it can be stretched), and a small end cap at each far end. Row 1 (A): a compass-drawn SIX-PETAL ROSETTE (the circle-and-arcs rosette carved on ossuaries) in a round gold medallion with a bevelled rim, a thin bevelled gold rod either side, and small six-petal rosette finials as the end caps. Row 2 (B): a PAIR of POMEGRANATES with their crowned calyx tips, facing each other in the centre, from which a flowing GRAPEVINE scroll band with small leaves, curling tendrils and tiny grape clusters runs out to both sides inside two thin gold rails, ending in a small single grape-cluster cap at each end. Row 3 (C): a band of PLAITED, BRAIDED gold cord (a three-strand twist), with an ALMOND BLOSSOM centre (a five-petal almond flower with a bud on each side, like the almond-flower cups of the Temple lampstand), and knotted cord tassel-loops as end caps. Row 4 (D): a Judean DATE PALM motif as on Herod Antipas's coins: a small upright palm tree with two hanging date clusters inside a lobed gold cartouche at the centre, flanked by bands of overlapping palm-frond leaflets running out to both sides, ending in a small lily-blossom (shoshan) finial at each end. Gold and bronze with only small touches of deep red (pomegranate) and dark green patina in the recesses. NO people, NO animals, NO menorah, NO Star of David, NO Hebrew or any letters or text, NO labels, NO Greek key or meander, NO laurel, nothing Roman, no glow or magic effects, no drop shadow.
_variants/ui_frame_band_hebrew_concepts.png (1536×1024, 4 repeating frame-edge bands)
- A: a frieze of six-petal rosettes in circles alternating with round bosses, on a green-patina recess between bevelled gold rails. The closest replacement for the meander band.
- B: a continuous grapevine scroll with vine leaves and red grape clusters.
- C: a tight plaited three-strand gold braid.
- D: palm sprays alternating with red pomegranates. The palm sprays came out as fan-shaped palmettes, which look a little like the Greek anthemion; a redo should ask for "single upright palm branches with a central rib and paired leaflets, not fans".
All four repeat evenly and could be cut into a tile, but none was checked for a seamless wrap.
Excellent, these are exactly the right direction. Now a second concept sheet in exactly the same metal, style, lighting and flat very dark warm brown background (#1a130d): FOUR straight horizontal FRAME-EDGE BANDS for a game window border, stacked as four rows with wide empty gaps between them, each spanning the full width, straight front view, no perspective. Each band is about 90 px tall and is built like the border of our old window frame: a bevelled gold outer rail along the top and the bottom, and between the rails a recessed strip with dark green patina in the hollows, carrying a low-relief motif that REPEATS evenly along the whole length (a seamless repeating pattern, so a short piece can be tiled; no centrepiece, no end caps). Row 1 (A): a frieze of compass-drawn SIX-PETAL ROSETTES, each in its own small circle, alternating with small round bosses, as on Herodian ossuaries. Row 2 (B): a continuous undulating GRAPEVINE scroll with alternating vine leaves and small grape clusters, as on the Temple gate vine. Row 3 (C): a tight PLAITED, BRAIDED cord of two or three interlaced gold strands running the full length. Row 4 (D): small upright PALM FRONDS alternating with small POMEGRANATES. Gold and aged bronze, deep red only on the pomegranates and grapes. NO people, NO animals, NO menorah, NO Star of David, NO letters or text, NO labels, NO Greek key or meander, NO laurel, no corners, no glow, no drop shadow.
Next step once the user picks: generate the chosen divider alone on a transparent background (as for the current divider), cut it into divider-{end-l,bar,centre,end-r}, and remake window-frame.webp with the chosen band and matching corner bosses (for example rosette bosses with pomegranate or almond sprigs in place of the olive leaves).
Skill icons and UI window icons (j12-artist, 2026-10-29)
Files: skills/{key}.png (slice original, 314–385 px square) + skills/{key}.webp (256×256, cwebp q85, 6–16 KB) for the 12 skills in config/game/skills.php; images/ui/icons/{key}.png (slice original, 306–424 px square) + images/ui/icons/{key}.webp (128×128, cwebp q86, opaque, 2–5 KB) for 14 window-title, tab and settings icons. Not wired into the game code; another agent wires them and falls back to Tabler for any missing file.
Style: the action and attack icons v2 rules (ONE central subject at about 70–75%, bold chunky silhouette with a thick dark outline, 2–3 main colours, no scenery, no particles, no people or faces, a hand only where noted, readable at 40 px). No magic, glow, halos or text.
Pipeline: one new ChatGPT conversation ("Generate Skill Icons") with _variants/actions_sheet_2.png attached to the first message as the style reference. Three 4×3 sheets at 1536×1024 on flat #1a130d, downloaded by fetching the image blob in the page (<a download>), sliced with slice3.py (7% padding). Skill icons went through finish.py (keyed onto the warm radial vignette, like the action and item icons). UI icons were finished with finish.py --keepbg, so they keep the flat dark sheet colour like the existing ui/icons/{bag,character,...}.webp (finish.py now takes --q for the WebP quality). Every sheet was checked downscaled to 40×40 next to ui/icons/{character,skills,talents,journal,bag,controls,menu}.webp and abilities/gesture_kneel.webp. Scripts stay in the scratchpad.
Sheet SA: _variants/icons_sheet_skills_a.png (ChatGPT, 1536×1024, 4×3): skill icons
Keys (in skills/): fishing, carpentry, scripture, cooking, teaching, compassion, prayer, endurance, seamanship, husbandry, hunting, blade (endurance replaced from sheet SC; this version is _variants/skills_alt/endurance_v1_dark_sheet_a.png).
Generate an image. The attached sheet shows ability icons from my game J12 (a World of Warcraft style RPG set in 1st-century Galilee, AD 28). Now I need SKILL icons in exactly the same simple icon style, shown tiny, at about 40 px. Style: like a classic World of Warcraft profession icon, at the SIMPLE end: ONE simple central subject per icon (one object, or at most two big shapes crossed or side by side), a bold chunky silhouette with a thick dark outline, strong value contrast, only 2 or 3 main colours per icon, big flat painted shapes with a few bold highlights, visible brushwork, warm key light from the upper left, soft rim light, earthy palette. Each subject is centred and fills about 70-75% of its cell. STRICT RULES: no scenery or landscape (no sky, hills, sea surface, rooms or backgrounds behind the subject); at most one simple accent; no people and no faces; a hand only where stated (then one hand and wrist with warm olive-brown skin and a plain undyed linen sleeve cuff, simple shapes); no small particles (no sparks, droplets, splashes, shavings, grains, embers flying, dust); no fine detail; no text, no letters, no symbols, no frames, no borders. No magic, no glow effects, no halos, no light rays. Landscape 1536x1024, a precise grid of 4 columns by 3 rows = 12 icons, each subject alone in its own equal cell with wide empty gutters so no two subjects touch, all on one plain flat very dark warm brown background (#1a130d). 1st-century Judean objects only, nothing medieval or modern. Row 1: (1) FISHING: one plump silver-green Galilee tilapia (musht) with a big tail, caught in a loose loop of brown knotted net; (2) CARPENTRY: an iron adze crossed with a chunky wooden mallet in an X, lying over a short pale olive-wood plank; (3) SCRIPTURE: a parchment scroll lying open horizontally between two dark wooden rollers, the open sheet showing only a few abstract dark ink lines in columns, no letters; (4) COOKING: two whole fish lying side by side on a small heap of glowing orange coals in a ring of stones, no flames shooting up, no sparks. Row 2: (5) TEACHING: one raised open right hand from the wrist, palm forward, the index finger lifted higher as if making a point while speaking, plain linen cuff; (6) COMPASSION: one hand from the upper left placing a round brown loaf of bread into a second open, cupped hand below it (two hands only, no arms beyond the cuffs); (7) PRAYER: a small square pale limestone incense altar with four small horns at its top corners, one single soft curl of grey-blue smoke rising from it (smoke only, no glow, no rays); (8) ENDURANCE: a pair of worn brown leather sandals with long straps, a plain wooden walking staff leaning diagonally behind them. Row 3: (9) SEAMANSHIP: a long wooden steering oar crossed in an X with a short wooden yard carrying a furled cream linen sail tied with cord; (10) HUSBANDRY: a tied sheaf of golden barley with an iron sickle crossed over it; (11) HUNTING: a short wooden hunting bow, strung, crossed with one arrow with grey feather fletching; (12) BLADE: a short straight iron sword (Roman-era short machaira with a plain wooden grip) lying diagonally, crossed with a flat grey whetstone. It must read at 40 px.
- prayer:
ui/icons/talents.webpis already a lit clay oil lamp, so the lamp idea would have clashed at 40 px. Prayer is a small horned limestone incense altar with one curl of grey-blue smoke (Psalm 141:2, Luke 1:10). The lamp-on-a-rock-at-dawn version is in_variants/skills_alt/prayer_v2_lamp_on_rock.pngif the person prefers it. - carpentry: adze and mallet crossed over a plank; the mallet and plank make it differ from
ui/icons/skills.webp(adze and net needle). - teaching: index finger raised; differs from
actions/teach(open palm with voice arcs). - husbandry: sheaf and sickle as specified. It is close to
actions/reap(mirror image of the same idea); a distinct ard plough is in_variants/skills_alt/husbandry_v2_ard_plough.png. - cooking: two fish on coals in a ring of stones (John 21:9); no flames or sparks.
Sheet UB: _variants/icons_sheet_ui_b.png (ChatGPT, 1536×1024, 4×3): UI icons
Keys (in images/ui/icons/): standing, deeds, story, pastimes, map, video, audio, gameplay, input, game, guidance_easy, guidance_medium (struck keys replaced from sheet SC; these versions are in _variants/ui_icons_alt/).
Excellent, this is exactly the style, all twelve work. Next sheet with exactly the same simple icon style, rules and layout (landscape 1536x1024, 4x3 = 12 icons, one simple central subject per cell filling about 70-75%, bold chunky silhouette with a thick dark outline, 2 or 3 main colours, no scenery or background, no people or faces, hands only where stated, no small particles, wide empty gutters so no two subjects touch, flat #1a130d background, no text, no letters, no numbers, no symbols, no frames, no glow, no halos; it must read at 40 px). These are menu and settings icons for the game interface, all 1st-century Roman-era Galilee objects, nothing medieval or modern, no gears, no codex books. Row 1: (1) two forearms clasping each other in a firm greeting handshake, hand gripping forearm, seen from the side, one in a plain cream linen sleeve and one in a brown wool sleeve, warm olive-brown skin; (2) a round olive wreath of silver-green olive leaves, tied at the bottom with a red ribbon bow with two hanging ends; (3) a small rectangular carved stone relief tablet in pale limestone, showing in low relief a single fishing boat with one mast riding on simple stylised waves; (4) four bone knucklebones (sheep astragali, knobbly cream-white bones) lying beside a small square wooden game board with a scratched grid. Row 2: (5) a rolled leather map, partly unrolled, the open part showing a simple painted blue lake shape and one red dotted route line, no lettering, no compass; (6) a polished round bronze hand mirror with a short handle, its disc catching a bright warm highlight (a reflection highlight, not a glow); (7) a wooden lyre (kinnor): a wooden frame with two curved arms, a crossbar and a few strings, simple chunky shape; (8) a bronze balance scale: a beam hanging from a central hook with two round shallow pans on cords, level. Row 3: (9) one large old bronze Roman key with a ring handle and a toothed bit, on the diagonal; (10) a wooden plank door in a dark stone doorframe standing slightly ajar, warm yellow lamplight showing in the narrow gap (no rays); (11) a short upright stone milestone with a clear bold red ochre arrow painted on its face pointing right; (12) a small torn scrap of parchment with a bold red ochre circle drawn around one spot, a few faint abstract lines, no lettering.
- Rejected: standing (the clasped fist was a lumpy knot,
standing_v1_forearm_grip.png); video (the bronze mirror read as a magnifying glass,video_v1_magnifier_look.png); story (pale limestone relief, the boat faded out at 40 px,story_v1_limestone.png); pastimes (bones looked like dog bones,pastimes_v1.png).
Sheet SC: _variants/icons_sheet_c_fixups.png (ChatGPT, 1536×1024, 4×3): the last two UI icons, fix-ups and alternatives
Kept: merchant (1, red and cream awning), guidance_hard (2, bigger footprints), video (3, solid upright bronze disc), standing (4, handshake), skills/endurance (6, tan sandals and thick staff), pastimes (8, squarer knucklebones), story (11, dark basalt relief, which reads at 40 px and suits Capernaum). Alternatives kept in _variants/: skills_alt/prayer_v2_lamp_on_rock.png (5), skills_alt/husbandry_v2_ard_plough.png (7), ui_icons_alt/guidance_hard_v2_trail.png (9), ui_icons_alt/video_v3_on_cloth.png (10), ui_icons_alt/merchant_v2_blue.png (12).
Very good. The wreath, lyre, scale, key, door, milestone, circled parchment and map are perfect. Next sheet with exactly the same simple icon style, rules and layout (landscape 1536x1024, 4x3 = 12 icons, one simple central subject per cell filling about 70-75%, bold chunky silhouette with a thick dark outline, 2 or 3 main colours, no scenery or background, no people or faces, hands only where stated, no small particles, wide empty gutters so no two subjects touch, flat #1a130d background, no text, no letters, no numbers, no symbols, no frames, no glow, no halos; it must read at 40 px). Row 1: (1) a small market stall seen at three-quarter view: a wooden counter under a short awning of broad red and cream striped cloth on two poles, one big round pottery jar standing on the counter; (2) a square patch of bare pale sand seen from above with three or four clear bare-foot footprints walking across it, nothing else; (3) a polished round BRONZE HAND MIRROR standing upright, a big SOLID opaque metal disc (NOT glass, NOT a lens, NOT a magnifying glass) with a thick raised rim, its flat face polished to a soft warm gold sheen with a pale blurred reflection, a short straight cast-bronze handle with a leaf-shaped join under the disc, handle pointing straight down; (4) two right hands clasped in a firm handshake, seen from the side, wrists and plain sleeve cuffs at both edges, one cuff cream linen and one cuff brown wool, warm olive-brown skin, clear simple finger shapes. Row 2: (5) a small lit clay oil lamp sitting on a flat grey rock with a small sprig of silver-green olive leaves beside it, behind them a pale soft band of dawn sky as a simple horizontal stripe of pale peach (only this one accent); (6) a pair of worn LIGHT TAN leather sandals with long straps, crossed by a THICK wooden walking staff with a knob, chunky, high contrast against the dark background; (7) a simple wooden ard plough with a curved wooden beam, a handle and a small iron share tip, chunky; (8) four sheep knucklebones (astragali: small knobbly squarish cream-white ankle bones, each like a little lumpy die, NOT dog-bone shaped) in front of a small square wooden game board with a scratched grid. Row 3: (9) a square patch of pale sand with a short winding line of footprints fading out toward the top, nothing else; (10) a polished round bronze hand mirror lying on a folded cream linen cloth, the solid bronze disc catching one soft highlight, NOT a magnifying glass; (11) a small carved rectangular relief tablet in DARK grey-black basalt with a bold pale chiselled outline of a single fishing boat with one mast on two wave lines, deep shadows so the boat shape stands out strongly; (12) a market stall alternative: a low wooden trestle table with a blue and cream striped cloth canopy above it and two pottery jars and a small basket of fruit on it.
Notes for the next batch
- Check every new icon against the micro-menu icons:
talentsis an oil lamp andjournala rolled scroll with a red seal, so avoid lamps and rolled scrolls for new subjects. - A bronze hand mirror tends to come out as a magnifying glass. "SOLID opaque metal disc (NOT glass, NOT a lens), handle straight down" fixed it.
- Ask for dark basalt for reliefs; pale limestone reliefs lose the carved shape at 40 px.
- Flat sand subjects (
guidance_hard) are a beige square at 40 px; the footprints only just read.
UI: Hebrew window frames and divider (j12-artist, 2026-10-29) — INSTALLED
Final assets after the user picked the Hebrew frame bands (concepts above): four 9-slice window frames, one per kind of window, and a new divider in the old rod shape. Tool: ChatGPT (chatgpt.com) image generation in Chrome, the same conversation as the concepts ("Generate game divider image"), so the metal matches. All five came back as real RGBA PNGs: the frames at 1254×1254, the divider at 2172×724. No CSS or Blade changed. window-frame.webp is untouched.
Frames: ui/frame-{rosette,pomegranate,vine,braid}.webp (300×300, slice 75, WebP q90 / alpha 100, 24–27 KB)
They drop into the current rule unchanged: border-image: url(...) 75 / 36px round. The geometry is the same as window-frame.webp: the band runs from 5 to 42 px on every side (37 px, outer rail to inner rail), and the corner blocks reach 48–52 px, inside the 75 px slice. Raw originals: _variants/ui_frame_{rosette,pomegranate,vine,braid}_raw.png.
Post-processing (frame_build.py in the scratchpad, Pillow and numpy, not in the repo). ChatGPT frames are never exactly symmetrical (the bottom band of the pomegranate, vine and braid frames sits about 20 px higher than the top), so each frame is rebuilt at 4× (1200 px) and downsampled:
- Edges: each side is processed in its own orientation (the raw image is rotated so that side is on top; lossless). The band rows are the median over many columns. The repeat period comes from autocorrelation of the band. One period is cut and cross-faded at the wrap (smoothstep over a fifth of a period), and scaled so the band is 148 px thick. Then K whole periods are resampled to exactly the 600 px edge segment between the slices, with phase 0 at the slice line. K is shared by all four sides of a frame: rosette 4, pomegranate 2, vine 2, braid 7.
- Corners: each raw corner block is scaled by the same factor and pasted over the band ends, aligned on its two bands' outer edges.
- Output: downsampled 1200 to 300 in premultiplied alpha (LANCZOS).
- Tiling check: each 150 px edge segment was tiled 4× and viewed. The colour step across the wrap (2.2–7.7) is about the same as between neighbouring columns inside the tile (4.3–7.8), so
roundshows no seam.
Prompts (in this order, one image per message, first variant kept for each):
- frame-rosette:
The user loves the frame bands. Now the final assets, one image per message, all four from the same family (identical metal, identical rail thickness, identical corner layout, only the motif changes). First: a game UI WINDOW FRAME using band A (six-petal rosettes in circles alternating with round studs). Square 1024x1024, perfectly symmetrical, straight front view, no perspective. A rectangular frame border running around all four edges, about 120 px thick, touching the canvas edges: the same bevelled gold outer rail along the outer edge and a bevelled gold inner rail along the inner edge, and between them the recessed strip with dark green patina carrying the repeating rosette-and-stud band exactly as on the band sheet, the same along all four sides. At each of the four corners a compact square corner block, about 230 px square and no bigger, sitting over the meeting of the bands: a bevelled gold square plate with a large round domed gold BOSS carved with a compass-drawn six-petal rosette. Nothing sticks out from the corner blocks along the edges (no leaves, no flourishes running along the band). The whole centre inside the border is fully TRANSPARENT and the background outside is transparent too (PNG with alpha). Hand-painted World of Warcraft UI style, soft top-down light, warm highlights on the edges, no text, no letters, no logo, no drop shadow, no Greek key, no laurel.
- frame-pomegranate (band D redone, no palms):
Perfect. Second frame, IDENTICAL in every way (same 1024x1024 square, same 120 px border touching the canvas edges, same bevelled gold outer and inner rails, same green-patina recess, same compact 230 px square corner blocks with a large round domed boss, transparent centre and outside, PNG with alpha), only the motif changes: the recessed band carries small red POMEGRANATES with crowned calyx tips, lying along the band, alternating with small gold five-petal ALMOND BLOSSOMS, evenly spaced and repeating the same along all four sides. NO palm fronds, NO fans, NO palmettes. Each corner boss carries a single red pomegranate in low relief on the gold dome. Nothing sticks out from the corner blocks along the edges. Hand-painted World of Warcraft UI style, soft top-down light, no text, no letters, no drop shadow.
- frame-vine:
Lovely. Third frame, IDENTICAL in every way (same 1024x1024 square, same 120 px border touching the canvas edges, same bevelled gold outer and inner rails, same green-patina recess, same compact 230 px square corner blocks with a large round domed boss, transparent centre and outside, PNG with alpha), only the motif changes: the recessed band carries a continuous undulating GRAPEVINE scroll in gold with alternating vine leaves and small deep-red grape clusters, the same rhythm repeating evenly along all four sides. Each corner boss carries a small red grape cluster with a single gold vine leaf in low relief on the gold dome. Nothing sticks out from the corner blocks along the edges. Hand-painted World of Warcraft UI style, soft top-down light, no text, no letters, no drop shadow.
- frame-braid:
Beautiful. Fourth and last frame, IDENTICAL in every way (same 1024x1024 square, same 120 px border touching the canvas edges, same bevelled gold outer and inner rails, same green-patina recess, same compact 230 px square corner blocks with a large round domed boss, transparent centre and outside, PNG with alpha), only the motif changes: the recessed band carries a tight three-strand PLAITED, BRAIDED gold cord running the full length of all four sides, with an even, regular twist. Each corner boss is a round KNOT of the same braided gold cord (a neat coiled cord knot) on the gold dome. Nothing sticks out from the corner blocks along the edges. Hand-painted World of Warcraft UI style, soft top-down light, no text, no letters, no drop shadow.
Divider: ui/divider-{centre,end-l,end-r,bar}.webp (replaced; the old four are in _variants/old_divider/)
A six-petal rosette medallion flanked by two small red pomegranates and gold studs, a plain bevelled gold rod, and almond-bud end caps with collars. Raw original: _variants/ui_divider_hebrew_raw.png (2172×724).
The pieces are cut by divider_cut.py (scratchpad) from one band of 222 rows around the rod (rows 225–447), scaled to 96 px tall:
divider-centre: 264×96, 11 KB.divider-end-landdivider-end-r: 64×96 each, 2 KB. Wider than the old 35 px caps, but above the CSS cap width (0.36 × height). The caps are drawn over the bar, so the overlap is hidden.divider-bar: 54×96, under 1 KB. Made from the median column of the plain rod, repeated, so it stretches with no variation at all.
The rod sits on rows 41–54 in every piece (centre line 47.5, the same as the old pieces). That makes it a little thicker than the old rod (rows 43–52), but it's the generated proportion. The centrepiece fills rows 5–93, as the old one did (rows 1–92).
Wonderful, all four frames are right. Last asset: a NEW ornamental horizontal DIVIDER to go with these frames, keeping the SHAPE of the very first divider in this conversation (a thin rod with a centrepiece and two end caps), but in the new Hebrew style and the same gold metal as the frames. Landscape 1536x1024, perfectly symmetrical left to right, straight front view, no perspective. A single long horizontal bar laid across the exact vertical middle of the canvas, spanning about 92% of the width. In the centre: a compact centrepiece about 130 px tall and 320 px wide: a round domed gold medallion carved with a compass-drawn six-petal rosette (like the frame bosses), flanked on each side by one small red pomegranate with its crowned calyx tip pointing outward, lying along the rod, and a small gold stud between each pomegranate and the medallion. From the centrepiece, two thin straight rods run out left and right: bevelled gold, about 12 px thick, with a bright top highlight and a dark lower bevel, PERFECTLY UNIFORM along their whole length (no beads, no rings, no decoration on the rods). At each far end a small end cap about 50 px tall: a gold almond bud (a pointed, oval bud with two small sepals) pointing outward, attached to the rod by a small collar. Everything outside the divider is fully TRANSPARENT (PNG with alpha). Hand-painted World of Warcraft UI style, soft top-down light, crisp clean silhouette, no text, no letters, no drop shadow, no background, no leaves, no laurel, no acanthus.
Contact: _variants/ui_hebrew_frames_contact.png (1440×1220)
Each frame is drawn as the CSS does it (.j12-window::before: inset −15 px, border 36 px, 75 / 36px round, emulated in contact_frames.py) around a dark 640×500 panel, with a title, the new divider at 30 px under it, and a short 300 px divider lower down.
Notes for later:
- At 36 px the band is about 18 px on screen, like the meander. The rosette and braid read the most calmly. The pomegranate frame is the most colourful because of the red. The vine is the busiest.
- The
j12-ui.csscomments still describe "a Roman meander band and olive-leaf corner rosettes" and "a garnet lozenge and olive leaves", and so doescomponents/divider.blade.php. They are for the coordinator to update when wiring.
Horse mount, second mesh: concepts/animals_horse_white.png (2026-10-29)
The 3D reference for the new horse mesh (public/models/animals/generated/horse.glb): a white horse, so its painted shading recolours into every coat (horse_coats/, baked in code from the white texture). Tool: ChatGPT (chatgpt.com) image generation in Chrome, a new conversation ("Create horse reference image") with the white horse icon items/white_horse.png attached as the style reference. 1254×1254. The first answer (_variants/animals_horse_white_v1_mane_on_chest.png) had the mane hanging over the chest and the tail touching the hind legs, both bad for rigging, so it was asked again.
- First prompt:
Create an image: the same white horse as in the attached picture, as a reference for 3D reconstruction. Exact side profile (camera perfectly level, at the height of the horse's belly), the horse facing LEFT, standing square and calm with all four legs clearly visible and slightly separated (near legs a little apart from the far legs), head raised naturally, ears up. A strong, handsome, well-muscled Arabian-Iberian type horse with a deep chest and an arched neck. The coat is clean bright white (not grey, not dirty), softly shaded with cool grey-lavender shadows and warm highlights, in the same painterly, hand-painted, slightly stylized realistic style as the attached picture. A long, thick, flowing white mane that falls down the near side of the neck in heavy locks, a full forelock, and a long, full white tail that hangs down to the hocks. Dark eyes, dark grey-pink muzzle and nostrils, dark slate-grey hooves, unshod. NO saddle, NO saddle cloth, NO bridle, NO halter, NO straps or tack of any kind: just the bare horse. Full body in frame with a margin all around, plain flat uniform medium-grey background (#9a9a9a), even soft lighting, no cast shadow, no ground, no text.
- Kept (second answer):
Very good. Make it again with the same horse, style, lighting and background, with these changes for 3D reconstruction: the tail hangs straight down BEHIND the hind legs with a clear gap of background between the tail and the hind legs all the way down (the tail must not touch or overlap any leg), ending just below the hocks; the mane stays on the neck (heavy locks along the crest falling down the side of the neck, ending at the withers and the shoulder), with no hair hanging down in front of the chest or between the front legs; a clear gap of background between the front legs and between the hind legs; the whole horse a little smaller in the frame with a wider margin.
Notes: TRELLIS still turns the mane into a fin whose loose lower ends stand off the shoulders; they were melted in with masked Laplacian smoothing before rigging. The head comes out turned a few degrees to the horse's left, so the bridle and blaze follow the head's own centre line, not the body's.
Follow-up (2026-10-29): the user tried the four frames in the game and preferred the original Greek-key window-frame.webp, which the coordinator put back. The frame-*.webp files stay in public/images/ui/, unused. The new small divider stays as the everyday divider.
UI: special divider for the loading screen and banners (j12-artist, 2026-10-29) — INSTALLED
ui/divider-special-{centre,end-l,end-r,bar}.webp, a grander divider in the same family as the everyday one, for the loading screen and the big centre-screen banners (zone names, chapter titles), where it sits freely on a painting. It has a larger six-petal rosette medallion in a double rim, a red pomegranate on each side backed by a compact gold vine scroll with leaves, a tendril and a red grape cluster, a plain bevelled gold rod, and closed grape-cluster finials with a gold vine leaf and collar. Tool: ChatGPT (chatgpt.com) image generation in Chrome, the same conversation ("Generate game divider image"). The only variant was kept: 1536×1024 RGBA, saved as _variants/ui_divider_special_raw.png. No CSS or Blade changed, and the everyday divider-*.webp files are untouched.
Cut by divider_cut.py (scratchpad) with T=128: one band of 222 rows around the rod (rod rows 488–518 raw, centre line 503), scaled to 128 px tall, so it stays crisp at 48 px on 2× screens. The rod sits on the same rows in every piece. divider-special-bar is the median column of the plain rod repeated (one clean stretchable column).
| File | px | bytes |
|---|---|---|
ui/divider-special-centre.webp |
371×128 | 24828 |
ui/divider-special-end-l.webp |
88×128 | 4640 |
ui/divider-special-end-r.webp |
88×128 | 4466 |
ui/divider-special-bar.webp |
72×128 | 376 |
At the CSS cap width (0.36 × height), each cap image is wider than the cap slot (88/128 = 0.69 × height). Each cap's own rod stub covers the bar where they overlap, and the caps' outer columns are fully transparent (alpha ≤ 3).
Preview: _variants/ui_divider_special_preview.png (1200×760), drawn on the Antipatris loading painting (darkened) at 44×480 (30rem), 40×360 and 48×720, with the everyday divider at 30 px below for comparison.
The small rosette-and-pomegranate divider is perfect and stays as the everyday divider. Now a SPECIAL, grander divider in the same family and the same gold metal, for the loading screen and big centre-screen banners (zone names, chapter titles), where it sits freely on top of a painting. Same SHAPE idea as the small one: one horizontal rod with a centrepiece and two end caps. Landscape 1536x1024, perfectly symmetrical left to right, straight front view, no perspective, laid across the exact vertical middle of the canvas, spanning about 92% of the width. CENTREPIECE, about 200 px tall and 520 px wide, richer and grander: a larger round domed gold medallion carved with a compass-drawn six-petal rosette inside a bevelled double rim, flanked on each side by a red pomegranate with its crowned calyx tip pointing outward, and behind each pomegranate a short gold GRAPEVINE scroll with two vine leaves, a curling tendril and a small deep-red grape cluster, all kept compact and contained within the centrepiece. RODS: from the centrepiece two straight rods run out left and right: bevelled gold, about 14 px thick, with a bright top highlight and a dark lower bevel, PERFECTLY PLAIN AND UNIFORM along their whole length (no vine, no beads, no rings, nothing on the rods). END CAPS: at each far end a clean, CLOSED finial about 70 px tall: a small hanging grape cluster of round gold-and-red grapes topped by one small gold vine leaf, attached to the rod by a neat gold collar, a compact solid shape with no loose tendrils or thin bits sticking out. Everything outside the divider is fully TRANSPARENT (PNG with alpha). Hand-painted World of Warcraft UI style, soft top-down light, crisp clean silhouette that reads at 44 px tall, no text, no letters, no drop shadow, no background, no laurel, no acanthus.
Talent icons, household crests and empty slot tiles (j12-artist, 2026-10-29)
Same ChatGPT conversation as the skill and UI icons above ("Generate Skill Icons"), so the style carries over without a new reference upload. Same flat-sheet pipeline: 4×3 (or 4×2) sheets at 1536×1024 on flat #1a130d, downloaded by fetching the image blob in the page, slice3.py, then finish.py (warm radial vignette) for talents and crests. Not wired into the game code.
Talent icons: talents/{key}.png (slice original, 323–402 px square) + talents/{key}.webp (256×256, cwebp q85, 7–14 KB)
The four tree emblems plus the 20 talents in config/game/talents.php. Each sheet column is one tree (fisherman, shepherd, servant, teacher), so neighbours within a tree could be compared directly. Every icon was checked at 40×40 in colour and in greyscale (unlearned talents are drawn greyscale), tree by tree.
Sheet T1: _variants/talents_sheet_1.png: tree emblems and tier 1
Keys: fisherman, shepherd, servant, teacher, strong_back, hardy, willing_hands, diligent_study, weather_eye, keen_eyes, tireless, clear_voice. All kept.
Excellent work, all of these are in use now. Next: TALENT icons for the same game, in exactly the same simple icon style, rules and layout (landscape 1536x1024, 4x3 = 12 icons, one simple central subject per cell filling about 70-75%, bold chunky silhouette with a thick dark outline, 2 or 3 main colours, no scenery or background, no people or faces, hands only where stated (one hand and wrist, warm olive-brown skin, plain linen cuff), no small particles, wide empty gutters so no two subjects touch, flat #1a130d background, no text, no letters, no symbols, no frames, no glow, no halos, no light rays; it must read at 40 px). Unlearned talents are shown in GREYSCALE, so each icon must be recognisable from its SHAPE alone, with a distinctive outline. 1st-century Galilee only. Each column is one talent tree, so the three icons in a column must have clearly different silhouettes. Row 1 (the four tree emblems): (1) FISHERMAN: an ancient stone anchor (a flat, roughly triangular grey stone pierced with one round hole near the top) with a thick coil of rope tied through the hole; (2) SHEPHERD: a tall wooden shepherd's crook with a curled hook on top, a creamy sheep fleece draped over it; (3) SERVANT: a wide shallow clay washing basin with a tall clay water jug standing in it and a white linen towel folded over the basin rim (John 13:5); (4) TEACHER: a carved black basalt stone seat with a solid back and arm-rests, a carved rosette on the back (the seat of Moses). Row 2: (5) a bulging brown net sack crammed with silver fish, hanging heavy from a thick knotted rope that rises to the top of the cell; (6) a small campfire of crossed sticks with one bold orange flame, sitting on a flat grey rock, a single cold pale-blue horizontal stripe behind it; (7) two hands tilting a big round clay water jar, pouring out one smooth thick stream of water (a smooth stream, no droplets); (8) a parchment scroll unrolled flat across a small square wooden board, a small clay oil lamp with a flame at its far corner, seen from a low angle. Row 3: (9) a white gull with wide spread wings, flying in front of one dark grey storm cloud; (10) a lean golden-brown jackal standing alert on a rock, side view, ears up; (11) a bulging goatskin waterskin (the legs tied off) hanging from the top of a short wooden walking staff; (12) a low three-step stone platform with three bold pale curved arcs rising from its top like ripples of sound (painted brush curves, not glowing).
Sheet T2: _variants/talents_sheet_2.png: tiers 2 and 3
Keys: mender_of_nets, thick_cloak, bear_burdens, memorised_psalms, sea_legs, watchful, steady_rest, quiet_mind, master_of_the_boat, defender_of_the_fold, servant_of_all, ready_with_an_answer. The struck two were redone in cells 11–12 of the crest sheet below; the originals are _variants/talents_alt/master_of_the_boat_v1_curled_prow.png (the spiral prow looked like a Viking ship) and _variants/talents_alt/thick_cloak_v1_folded.png (a folded brown blob at 40 px).
Very good, all twelve work. Next talent sheet with exactly the same simple icon style, rules and layout (landscape 1536x1024, 4x3 = 12 icons, one simple central subject per cell filling about 70-75%, bold chunky silhouette with a thick dark outline, 2 or 3 main colours, no scenery or background, no people or faces, hands only where stated, no small particles, wide empty gutters so no two subjects touch (keep every subject inside its own cell, nothing running to the cell edge), flat #1a130d background, no text, no letters, no frames, no glow, no halos, no light rays; recognisable from its SHAPE alone in greyscale; it must read at 40 px). Each column is again one talent tree (fisherman, shepherd, servant, teacher), so the icons in a column must have clearly different silhouettes. Row 1: (1) a big wooden netting needle threaded with brown twine, pushed diagonally through a square patch of knotted net mesh; (2) a thick shaggy brown felted-wool shepherd's cloak, folded into a chunky stack, with a big bronze pin through it; (3) one heavy tied sack hanging from the middle of a long horizontal wooden carrying pole, both ends of the pole free (for two bearers); (4) a small wooden lyre with a rolled scroll bound to one of its arms with a red cord. Row 2: (5) a small wooden fishing boat heeling steeply on its side over one big curling teal wave crest, its single mast leaning; (6) a thin crescent moon above one cream sheep lying curled up asleep; (7) a rolled reed sleeping mat tied with two cords, a smooth round stone pillow beside it; (8) one long soft white dove's feather lying on a smooth round grey stone. Row 3: (9) the tall curved wooden prow post of a fishing boat rising like a swan's neck, a coil of rope hanging on it and a small red pennant flying from a short pole above it; (10) a thick knobbed wooden shepherd's club held upright in front of a closed wooden sheepfold gate in a low stone wall; (11) one hand lifted high carrying a round serving tray with a clay cup and a round loaf on it (a servant serving at table); (12) one hand holding up a small lit clay oil lamp, the hand and lamp filling the cell, the flame steady (no rays).
Changes from the coordinator's suggestions, for 40 px and greyscale reading and to avoid clashes:
- fisherman: the pierced stone anchor with rope (the boat prow went to
master_of_the_boat, andzebedee_crewis a prow too). - strong_back: a net sack full of fish hanging from a rope, not a yoke (a yoke with a bundle would have repeated
bear_burdens). - sea_legs: a boat heeling over a wave crest; bare feet on planks would not read at 40 px.
- master_of_the_boat: a plain straight boat stem post with a coiled rope and a red pennant.
- keen_eyes: the jackal on a rock (an eye in a hood would read as a face or something sinister).
- watchful: crescent moon over a curled, sleeping sheep. A sheepfold wall was used for
defender_of_the_fold, so the two differ. - defender_of_the_fold: a knobbed shepherd's club upright before a closed fold gate.
- thick_cloak: a shaggy felted cloak hanging from a peg with a bronze pin (reads as a garment; v1 folded stack did not).
- willing_hands: two hands pouring a smooth stream from a tilted jar.
- tireless: a goatskin waterskin hung on a short staff. A milestone and sandal prints would have repeated
ui/icons/guidance_easyandguidance_hard, and sandals repeatskills/endurance. - steady_rest: a rolled reed mat with a stone pillow; no lamp (
ui/icons/talentsis a lamp, and the teacher tree already has two). - servant_of_all: a hand lifting a serving tray with a cup and a loaf (Luke 22:27), since the basin is the servant tree emblem.
- clear_voice: a three-step stone platform with three pale painted sound arcs (no mouth, no shofar).
- memorised_psalms: a small lyre with a rolled scroll bound to its arm with red cord.
- diligent_study: a scroll unrolled across a wooden board, the lamp small at the far corner.
- ready_with_an_answer: a hand holding up a small lit lamp (1 Peter 3:15).
Household crests: standing/{key}.png (slice original, 357–448 px) + standing/{key}.webp (256×256, cwebp q85, 8–13 KB)
Keys: the nine factions in config/game/standing.php. Sliced with --pad 0.13 instead of 0.07 so each subject fits inside the round frame's circle crop; checked at 40 px and 120 px through a circular mask.
Sheet H: _variants/standing_sheet_crests.png (cells 1–10 crests, 11–12 talent fix-ups)
Kept: zebedee_crew (1), synagogue (2), market (3, counter with loaves and jar, unlike the ui/icons/gameplay scale), farms (4), sychar_households (5), saints_of_joppa (6), house_of_cornelius (7), assembly (8), rome_neighbours = the quay mooring ring (10), chosen because the market, the assembly and the loaf version would have made three bread crests; the loaf, bread stamp and amphora (9) is _variants/standing_alt/rome_neighbours_v2_loaf_and_stamp.png. Cells 11 and 12 are talents/master_of_the_boat and talents/thick_cloak.
Very good, the talent icons all work. Next, a different set in exactly the same simple icon style and on the same flat #1a130d background: household CRESTS for a reputation window. Each one will be shown inside a ROUND gold-rimmed frame and cropped to a circle, so each subject must be compact and centred, fitting inside an imagined circle that fills about 75% of its cell, with nothing important near the corners. Same rules: one central emblem (one object or a small tight group), bold chunky silhouette with a thick dark outline, 2 or 3 main colours, no scenery or background, no people or faces, no small particles, wide empty gutters, no text, no letters, no symbols, no frames, no circles drawn around them, no glow, no halos, no light rays; it must read at 40 px. Landscape 1536x1024, 4 columns x 3 rows = 12 crests. Row 1: (1) the curved wooden prow of a Galilean fishing boat with a furled cream sail on its mast and a brown net hanging over the side; (2) the front of a small black basalt synagogue: a squat stone facade with one big round-arched doorway and a low gable, no letters, no star, no menorah; (3) a small market counter of wood with two round brown loaves and one small clay jar standing on it, a short striped cloth valance along its front; (4) a silver-green olive branch crossed with a wooden shepherd's crook, over a short brown ploughed furrow of earth. Row 2: (5) a round stone well-head of fitted pale stones with a red clay water jar standing on its rim (Jacob's well); (6) a neatly folded plain woven wool tunic in soft blue and cream with a bronze sewing needle and a short thread lying on top (Tabitha's garments, Acts 9:39); (7) a bronze Roman centurion's helmet with a tall red transverse crest running side to side, resting on the ground beside a small clay oil lamp, no weapons; (8) a round loaf broken into two halves, held apart above a simple clay cup (Acts 2:42), no glow. Row 3: (9) a round Roman loaf of bread scored into eight wedges, with a small round bronze bread stamp beside it and a small slim amphora behind; (10) a big iron mooring ring set in a squared stone block of a river quay, a short length of rope tied through it; (11) and (12) are two talent icon fix-ups in the normal talent icon framing (filling about 75% of the cell): (11) the raised prow of a Galilean fishing boat seen from the side: a plain, straight, up-sloping wooden stem post with NO curl and NO spiral (not a Viking ship), a coil of rope hanging on it and a small red pennant flying from a short pole above it; (12) a heavy shaggy brown felted-wool shepherd's cloak hanging from a wooden peg, its broad bell-like hanging shape clearly a garment, a big bronze pin at the collar.
- zebedee_crew: the prow still came out with a curled top, slightly Viking-like.
- house_of_cornelius: the red crest runs front to back (the familiar film-Roman look), not side to side as asked (the transverse crest of a centurion).
- synagogue: a gabled basalt façade with one arched doorway and pilasters; it could be read as a small temple.
Empty slot tiles: images/ui/slots/{key}.png (slice original, 346–348 px) + images/ui/slots/{key}.webp (128×128, cwebp q86, 3 KB)
Keys: head, body, mantle, feet, main_hand, ranged, mount, belt. Sliced with --pad 0, inset 0.8% to drop the gutter edge, saturation reduced to 35% (Pillow) so the bronze rim stays only faintly warm, then exported. Checked at 48 px beside the skill icons: each silhouette is readable but clearly dimmer than a real item. Each tile has its own worn bronze-and-stone bevel rim, full-bleed.
Sheet SL: _variants/ui_slots_sheet.png (4×2)
Now a very different kind of icon for the same game: EMPTY EQUIPMENT SLOT backgrounds, like the empty character paperdoll slots in World of Warcraft. Landscape 1536x1024, a precise grid of 4 columns by 2 rows = 8 square tiles, each tile a perfect SQUARE filling about 80% of its cell, separated by wide gutters of the flat very dark warm brown background (#1a130d). Each tile is a dark RECESSED HOLLOW: a square socket sunk into aged dark bronze and dark stone, with a thin worn bevel rim lit softly from the upper left and a deep shadowed inner floor. Pressed into the back wall of each hollow is a faint, low-contrast, EMBOSSED silhouette (a shallow relief, like a mould impression) of the item that belongs there. Strictly MONOCHROME: only dark greys and warm near-black, no colour at all, no gold, no bright highlights; the silhouette is only slightly lighter than the hollow, so the tile reads as "empty, nothing here yet" and is much dimmer than a real item icon, yet the silhouette is still recognisable when shown at 48 px. No text, no letters, no glow. Row 1: (1) a simple profile bust of head and shoulders wearing a draped head covering (no facial features); (2) a plain knee-length tunic laid flat, short sleeves; (3) a folded mantle draped over a wooden peg; (4) a single sandal seen from above. Row 2: (5) a short sword or knife, point up; (6) a short bow with one arrow across it; (7) a donkey's head in profile with long ears; (8) a small drawstring pouch hanging from a belt hook.
- head: the bust has blank, faint facial planes (no features painted), a generic mannequin.
- mount: a donkey's head with a halter; the long ears read at 48 px.
Attack icon: Fists (j12-artist, 2026-10-29)
File: attacks/fists.png (slice original, 551×551) + attacks/fists.webp (256×256, cwebp q85, 9 KB). This is the bare-handed melee attack, used when Simon has nothing in his main hand. App\Game\Weaponry serves it through Art::url(Art::ATTACKS, 'fists'), so no code change is needed.
Pipeline: one new ChatGPT conversation ("Generate Fist Icon Variants"). The first message attached a 4×2 reference strip of abilities/{interact,knife,staff,sling}.webp over attacks/{bow,staff,knife,sling}.webp. It produced one 2×2 sheet at 1254×1254 on flat #1a130d, downloaded by fetching the image blob in the page (<a download>), then cut with slice3.py (7% padding) and finished with finish.py (keyed onto the warm radial vignette, WebP q85), the same as the other attack icons. Each variant was checked at 256 and 40 px beside abilities/interact and attacks/{staff,sling,bow}. The scripts stay in the scratchpad.
Sheet F: _variants/attacks_fists_sheet.png (ChatGPT, 1254×1254, 2×2)
Kept: cell 2 (a punch straight at the viewer). The alternatives are in _variants/actions_alt/fists_v{1,3,4}.png: v1 is a three-quarter punch toward the lower right, v3 is a side view and v4 is a fist raised up and to the right.
Generate an image. The attached sheet shows the action bar ability icons of my game J12 (a World of Warcraft style RPG set in 1st-century Galilee, AD 28): top row are abilities (an open reaching hand with a linen sleeve, a knife, a staff, a sling), bottom row are combat attacks with soft pale painted motion arcs. I need ONE new combat attack icon in exactly the same hand-painted style, lighting and background: FISTS, a bare-handed punch. Style: like a classic World of Warcraft ability icon at the SIMPLE end: one central subject, a bold chunky silhouette with a thick dark outline, strong value contrast, only 2 or 3 main colours, big flat painted shapes with a few bold highlights, visible brushwork, warm key light from the upper left, soft rim light, earthy palette, shown tiny at about 40 px so it must read instantly. Subject: one tightly clenched right fist of a 1st-century Galilean fisherman, thrown forward in a punch toward the lower right, seen in three-quarter view so the knuckles face the viewer and are lit; weathered warm olive-brown tan skin, strong knuckles; the wrist ends in a rough plain undyed linen or wool tunic sleeve cuff, like the sleeve on the open hand in the reference. One single soft curved pale motion arc behind the fist, a painted brush streak like the staff and sling attacks, not glowing energy. STRICT RULES: no gauntlet, no metal, no rings, no wraps, no tape, no bandages, no leather straps on the hand; no blood, no wounds; no face, no body, no arm beyond the sleeve cuff; no impact burst, no sparks, no particles, no magic, no glow, no rays; no scenery; no text, no letters, no frames, no borders. Square 1024x1024 sheet, a precise grid of 2 columns by 2 rows = 4 variants of this same icon, each subject alone and centred in its own equal cell, filling about 70% of the cell, with wide empty gutters so no two subjects touch, all on one plain flat very dark warm brown background (#1a130d). (1) fist punching toward the lower right, knuckles forward, motion arc behind; (2) fist punching straight toward the viewer, knuckles big in the foreground, sleeve behind, short motion streaks around; (3) fist punching to the right in side view, thumb on top, motion arc trailing; (4) fist raised diagonally up-right, knuckles forward, motion arc below.
- fists (cell 2): four big lit knuckles face the viewer, with a rough undyed linen cuff behind and two short pale brush arcs. It is the clearest fist silhouette at 40 px and cannot be mistaken for the open, palm-up
abilities/interacthand. There are no wraps, no metal and no glow. The skin is the same warm olive-tan asinteract. - v1: good as well, but its cuff-left, hand-right layout echoes
interacttoo closely. v3: the side-view forearm is long and thin at 40 px. v4: the raised fist reads as a salute more than a blow.
images/ui/icons/wanted.webp (master ui/icons/wanted.png): the "wanted" mark under the minimap (j12-artist, 2026-10-29)
-
Tool: ChatGPT, same conversation ("Generate Skill Icons"). One 2×2 sheet,
_variants/ui_wanted_sheet.png(1536×1024, flat#1a130d). Sliced withslice3.py --thr 70 --pad 0.03(tighter than usual, because the subjects are wide and the mark is shown at 16–20 px), faint stray marks in the cells painted out with the sheet colour, kept on the flat background like the otherui/icons.wanted.pngis the 594 px slice original;wanted.webpis 128×128, cwebp q86, opaque. -
Kept: variant 3, one cuff above the other on the diagonal with the chain between. It fills the square best, and in a row of five at 16 px it still reads as two linked iron rings. Not used:
_variants/ui_icons_alt/wanted_v1_side_by_side.png(wide and short, small at 16 px),wanted_v2_crossed.png(the overlapping cuffs merge into one blob at 16 px),wanted_v4_figure_eight.png(reads as spectacles). -
Prompt:
Excellent, those slot tiles are exactly right. Last one: a tiny status icon in the normal full-colour icon style (like the talent icons, NOT the dim slot style), on the same flat #1a130d background. It is a "wanted" mark shown at only 16 to 20 px, so it must be extremely simple and bold: ONE chunky subject, a very thick dark outline, big simple shapes, no fine detail, no text, no blood, no glow. Subject: a pair of dark iron manacles (two thick round iron cuffs) joined by a short chain of two or three big links, with a warm rust-red rim light along their edges. Landscape 1536x1024, a precise grid of 2 columns by 2 rows = 4 variants, each centred in its own equal cell filling about 75% of the cell, with wide empty gutters: (1) the two cuffs side by side, open slightly, chain sagging between them, seen from the front; (2) the two cuffs overlapping in an X, closed, chain short and tight; (3) one cuff above the other on the diagonal, chain between, very thick cuffs; (4) the two cuffs closed and side by side like a figure eight, with only one big chain link between them.
ui/world_of_apostles_logo.png: the "World of Apostles" logotype (2026-10-29)
Files: ui/world_of_apostles_logo.png (master, 1611×721 RGBA, cropped from ChatGPT's 1672×941 transparent PNG) and the web copies public/images/ui/logo-400.webp / logo-800.webp (q88, alpha) that <x-wordmark> shows at 1x and 2x.
Type: the lettering is set in two free Google Fonts under the SIL Open Font License, which allows logos and commercial use: Cinzel Black ("WORLD", "OF") and Cinzel Decorative Black ("APOSTLES"), by Natanael Gama. The layout was rendered with Pillow from the fonts' TTFs (google/fonts ofl/cinzel, ofl/cinzeldecorative): WORLD at 120 px, OF at 70 px (Cinzel Bold), APOSTLES at 250 px on a 1536×1024 white canvas. That image was attached to ChatGPT as the exact lettering, so the logo keeps the real letterforms and new titles, banners or a re-render can match it in the same fonts.
Tool: ChatGPT (image generation), conversation "Create Game Logotype", first result kept. It came out with a real alpha channel; the red line along the top of APOSTLES in ChatGPT's preview is only the preview, not in the file.
Create a game logotype for my browser RPG "World of Apostles", in the style of the World of Warcraft logo. Use the attached image as the exact lettering: keep these letterforms (Cinzel Black for WORLD and OF, Cinzel Decorative Black for APOSTLES), their layout and spacing. Don't redraw or change the letters, only render them. Treatment: thick beveled, sculpted 3D letters in polished warm gold and bronze metal with sharp chiselled bevels, a dark bronze outline and a soft drop shadow, like a WoW title. Behind WORLD OF, a small carved bronze crest with two olive branches curving out to the sides under APOSTLES and a tiny fishing boat sail motif at the top. It's set in 1st-century Galilee, so no magic glow, no runes, no halos, no swords, no crosses or later Christian symbols. Fully transparent background (PNG with alpha), nothing else in the image, no extra text, wide landscape format.
The WoA icon (public/favicon.ico 16/32/48, favicon-32.png, apple-touch-icon.png 180, images/ui/icon-512.png) is not generated: it is drawn with Pillow from Cinzel Black ("W", a smaller "O", "A") with a gold gradient face, a dark outline and drop shadow on a basalt tile with a gold rim, like the old "12" icon. Cinzel Decorative's swash W read as an N at 16–32 px, so the icon uses plain Cinzel. Replaced on 2026-10-29 by the painted boat icon (ui/app_icon_boat.png, see the entry below); the WoA lettering icon is no longer in the repo.
Website paintings: art/website-community.png and art/website-support.png (j12-artist, 2026-10-29)
Tool: ChatGPT (image generation), one conversation ("Generate Galilee Scene"). The first message attached art/loading-galilee.webp and art/[email protected] as the style reference. Each image was downloaded by fetching its blob in the page (<a download>) and copied from ~/Downloads. Web copies were made with Pillow (LANCZOS, WebP q82, method 6) from the scratchpad: public/images/website/{community,support}.webp (1600×900) and {community,support}-800.webp (800×450). Both are composed for website text on the left: the left ~40% is calm water and sky, and the subject sits centre-right.
art/website-community.png (1672×941, 2.7 MB): evening fire on the Capernaum shore
Kept: variant 2 (the revision). Variant 1 (not saved to the repo) had larger figures, and a long-haired, bearded man in a pale tunic sitting at the back centre who could be mistaken for Jesus; the revision pulled the camera back and made him an ordinary fisherman.
Prompt 1:
Generate an image. Use the two attached paintings from my game J12 (a World of Warcraft style RPG set in 1st-century Galilee, AD 28) as the exact style reference: the same painterly, stylized WoW key-art look, the same warm Mediterranean light, soft rim light, earthy palette (linen, ochre, olive, black basalt, lake teal, a touch of gold) and gentle visible brush texture. Wide landscape 16:9 (1672x941). Scene: evening on the sandy, pebbly shore of the Sea of Galilee at Capernaum, just after sunset. A small crowd of ordinary Galilean villagers, about ten people, sits and stands around a small driftwood fire on the sand, sharing grilled fish on sticks and round flat bread, talking and laughing together: bearded fishermen in short undyed wool tunics with rope belts, women in long dresses with linen veils over their heads, one white-bearded elder with a wooden staff, two small children. Everyone wears 1st-century clothing: tunics, mantles, head coverings, sandals or bare feet; no trousers, no boots, no armour, no hats. Seen from mid-distance, the people small in the frame, faces small and simple. Behind them two wooden single-mast fishing boats are drawn up on the sand with their sails furled and nets hanging over the sides. In the distance, a low village of black basalt houses with flat mud-and-reed roofs, and olive trees on the hills. The lake at dusk under a deep blue sky, with the last orange light glowing over the far hills. Strong contrast of warm orange firelight on the people against the cool blue dusk. Composition: the gathering and the fire sit centre-right; keep the LEFT 40% of the image calm and simple (open darkening water, sky and a little sand, no people and no objects there) because website text will be placed over it. Rules: no Jesus or any central religious figure, no halos, no glowing magic, no light rays from people, no text, no letters, no logos, no frame or border, no modern objects, no medieval or European elements.
Prompt 2 (revision, kept):
Lovely, the light, palette and composition are right. Please make one revised version of this same scene, same size (1672x941), with these changes: (1) pull the camera further back so the whole group is seen from mid-distance: the people should be noticeably smaller, about a third of the image height at most, faces small, with more sand in the foreground and more of the boats and village visible; (2) the man sitting at the back centre facing us (long hair, pale tunic) must not look like a central religious figure: give him a plain brown head cloth and a darker striped wool tunic, short hair, and make him just one of the fishermen, turned to talk to his neighbour; nobody should sit in the centre in a pale robe; (3) keep the left 40% calm and empty (water, sky, a little sand) exactly as now; (4) keep everything else: two children, women with veils, the white-bearded elder with his staff, fish and flat bread, driftwood fire, two single-mast boats, black basalt houses. Same rules: no Jesus, no halos, no glow on people, no text, no frame, no trousers, nothing modern.
- Composition: the left ~50% is the lake at dusk under an orange and blue sky, with a dark pebbly beach along the bottom and no figures. Eleven people sit around the fire on the right (x 54–98 %, y 50–75 %), with two beached single-mast boats behind them, the lit basalt village on the upper right and a palm in the top-right corner.
- Notes: the clothing is all tunics, veils and mantles, and there is no glow apart from the fire and the village lamps. The village has a few cypresses and palms (plausible for the lake shore).
art/website-support.png (1672×941, 3.0 MB): the boatyard in the morning
Kept: the first result; it needed no revision.
Perfect, that version is the one. Now a second, separate painting for the same website, in exactly the same style as the two reference paintings and the shore scene you just made (painterly stylized WoW key-art look, warm Mediterranean light, soft rim light, earthy palette of linen, ochre, olive, black basalt, lake teal and a touch of gold, gentle brush texture), same wide landscape size 1672x941. Scene: a bright sunny morning in a small boatyard on the same sandy shore of the Sea of Galilee at Capernaum. Two or three bearded Galilean men are building a wooden fishing boat on the sand: the long keel is laid on wooden blocks, the curved wooden ribs (frames) stand up along it like a skeleton, and only the lower half of one side is planked with fresh pale wood planks, the rest of the ribs still bare, so it is clearly an unfinished work in progress. One man shapes a plank with a hand adze, one bores a hole with a bow drill, one carries a long plank on his shoulder. Around them: a stack of planks, a small clay pot of black pitch over a little fire with thin smoke, coils of rope, wooden mallets and a basket of wooden pegs, curly wood shavings on the sand, and a fishing net hung to dry on a simple wooden rack nearby. Clothing: short undyed wool and linen work tunics with rope belts, some with a cloth tied on the head, sandals or bare feet; no trousers, no boots, no aprons, no metal tools beyond an adze blade, no saws with modern handles. Seen from mid-distance, the men small in the frame (about a third of the image height at most), faces small. Background: the calm blue-teal lake with one finished single-mast fishing boat moored offshore, black basalt houses with flat mud-and-reed roofs and olive trees on the hills, a clear morning sky with soft clouds. Composition: the boat under construction and the men sit centre-right; keep the LEFT 40% of the image calm and simple (open bright water, sky and a little smooth sand, no people and no objects there) because website text will be placed over it. Rules: no Jesus or any central religious figure, no halos, no glowing magic, no light rays, no text, no letters, no logos, no frame or border, nothing modern, no medieval or European elements.
- Composition: the left ~42% is bright teal water under a blue sky with soft clouds, with dark basalt rocks and sand along the bottom. A half-planked hull with bare ribs sits centre-right (x 54–90 %, y 35–68 %). One man works a plank with an adze on a trestle (x ~43–50 %, the left edge of the subject), one uses a bow drill at the hull, and one carries a plank on the right. The pitch pot smokes in the bottom-right corner, with rope and a basket of pegs in the lower centre, a moored boat offshore at x ~45–53 %, and the basalt village with olives and palms in the upper right.
- Notes: the adze reads a little like a short axe. Everything else fits the period: tunics, head cloths, sandals, a bow drill, wooden mallets.
The remaining apostle portraits (j12-artist, 2026-10-29)
Files: portraits/{bartholomew,james_alphaeus,thaddaeus,simon_zealot}.png + @web.png (both 512×512 cell crops with the same pixels, as in the Chapter 6 sheets). Sheet: _variants/portraits_sheet_21_apostles.png (1536×1024, 3×2, cut on the equal 512 px grid; the seams sit exactly at x 512/1024 and y 512). Tool: ChatGPT image generation in Chrome, one new conversation ("Generate Apostle Portrait Sheet"), with portraits/[email protected] and portraits/[email protected] attached as the style reference. First and only variant kept. Used in config/game/disciples.php (portrait) for the roster on the website and character creation.
Judas Iscariot (2026-10-29), portraits/judas.png (1254x1254) + [email protected] (512x512): the same conversation, one single square portrait, first and only variant kept. Shown only on the website, last in the Twelve strip in the iron ring; he is not in disciples.php (Matthias takes his place, Acts 1:26). Painted as an ordinary Judean man, deliberately without the old antisemitic stereotypes (red hair, hooked nose, money bag).
Generate an image. Thank you, these are excellent. Now ONE more portrait in exactly the same style as the two attached references and the six above: the same semi-realistic painterly oil rendering and visible brushwork, warm soft key light from the left with a gentle warm gold rim light, bust framing (head and shoulders) with a little space above the head, turned three-quarters to the viewer's left, plain warm dark brown background with a soft vignette. A single square 1024x1024 portrait, no border, no frame, no text. No halo, no glow, nothing magical. He is Judas Iscariot, the twelfth apostle, from Kerioth in Judea, about 30. Paint him as an ordinary, dignified Judean man like the other apostles, NOT a caricature and NOT a villain stereotype: no red hair, no exaggerated or hooked nose, no money bag, no coins, no sneer, nothing grotesque or sinister-looking. A clearly different face from all the others: a lean, composed face with high cheekbones, a straight medium nose, well-shaped dark brows, watchful dark-brown eyes that look slightly away from the viewer, olive skin, neatly kept short black hair and a short, carefully trimmed black beard. A plain dark grey-brown wool tunic and a muted dark plum-brown wool mantle with plain edges and no fringe; no jewellery, no weapons, no props. A reserved, thoughtful, slightly troubled and guarded look, as if keeping something to himself; the light falls a little less warmly on him, with a touch more shadow on the far side of his face.
- thomas and matthias already had in-game NPC portraits (sheet 6), so
disciples.phppoints at those (portraits/[email protected],portraits/[email protected]) and they were not overwritten: one face per person everywhere. The new sheet's Thomas and Matthias are kept as alternates in_variants/thomas_apostle_sheet21.pngand_variants/matthias_apostle_sheet21.png. - bartholomew is painted as his own man (about 40). Tradition often identifies him with Nathanael (
portraits/[email protected], a younger man inpeople.php); if the game ever merges the two, reuse one face.
Generate an image. The two attached portraits are the style reference for a series of character portraits for my game J12, a World of Warcraft style RPG set in 1st-century Galilee (about AD 28). Match them exactly: the same semi-realistic painterly oil rendering and visible brushwork, warm soft key light from the left with a gentle warm gold rim light, bust framing (head and shoulders) with a little space above each head, each figure turned three-quarters to the viewer's left, plain warm dark brown background with a soft vignette. Do not copy the two men in the reference; make six new men, each with a clearly different face. Make a landscape 1536x1024 sheet: a precise grid of 3 columns by 2 rows = 6 square portraits, each a complete, self-contained square portrait filling its own equal cell edge to edge with its own dark brown vignette background, nothing crossing into a neighbouring cell, no gutters, no borders, no frames, no text, no labels, no symbols. No halo, no glow, no light around any head, nothing magical. These are six of the twelve apostles. 1st-century Galilean and Judean dress only: plain earthy wool and linen tunics, wool mantles with plain edges and NO fringe along the edge (at most one small knotted tassel at a single corner); no trousers, no jewellery, no weapons, nothing medieval or modern, no props. Every face clearly different from the others: vary age, face shape, nose, brow, hair, beard and build, and not every man with curly hair. Row 1: (1) Bartholomew, about 40, a LONG oval face with a high forehead and a long straight nose, deep-set thoughtful brown eyes under level brows, olive skin, STRAIGHT dark-brown hair greying at the temples, combed back, and a full, well-kept dark-brown beard with grey threads at the chin, an undyed oatmeal wool tunic and a deep indigo-blue wool mantle, a calm, reflective, thoughtful look; (2) Thomas, about 30, a NARROW angular face with sharp cheekbones and a strong straight nose, intent dark eyes and a deep vertical crease between the brows, olive skin, short very dark-brown hair and a full dark beard, a stone-brown wool tunic and a grey-green wool mantle, a serious, questioning look; (3) James, son of Alphaeus, about 35, a SLIGHT, slender man with a small, fine-boned, heart-shaped face, a small straight nose, gentle downcast hazel-brown eyes, fair olive skin, short STRAIGHT light-brown hair and a short, thin light-brown beard, narrow shoulders, a pale sand-coloured linen tunic and a muted ochre-yellow wool mantle, a quiet, modest, reserved look. Row 2: (4) Thaddaeus, a young man of about 24, a ROUND youthful face with full cheeks, a short broad nose and bright open dark eyes, warm olive skin, thick wavy black hair to the ears and a SHORT, sparse young black beard, a rust-ochre wool tunic and a dark olive-green wool mantle, an eager, warm, open look; (5) Simon the Zealot, about 40, a LEAN, hard, weathered face with hollow cheeks, a hooked nose, a thin scar on his left cheekbone, fierce dark eyes under heavy brows, deep sun lines, dark sun-darkened skin, cropped grizzled black hair and a short rough black-and-grey beard, a lean wiry build, a dark charcoal-brown wool tunic and a faded madder-red wool mantle, no weapons, an intense, burning, watchful look; (6) Matthias, about 34, a SQUARE, open face with a broad brow, a straight nose, kind steady brown eyes with small laugh lines, olive skin, short dark-brown hair and a short neat dark-brown beard, a brown wool tunic and a slate blue-grey wool mantle, a kind, steady, humble look.
- bartholomew: long face, swept-back greying hair, grey-shot beard, indigo mantle; reads as the eldest and calmest.
- james_alphaeus: slight, fine-boned, downcast eyes, ochre-yellow mantle. His hair came back softly wavy rather than straight; still clearly unlike the others.
- thaddaeus: youngest, round face, short young beard, warm smile, rust tunic and olive mantle.
- simon_zealot: lean, weathered, scar on the cheekbone, grizzled beard, madder-red mantle, no weapons.
- Downloaded by fetching the image blob in the page and clicking an
<a download>.
images/ui/icons/control-{walk,look,interact,target,touch}: website "Controls" icons (j12-artist, 2026-10-29)
Files: ui/icons/control-{walk,look,interact,target,touch}.png (slice originals, 393–501 px square, kept on the sheet's own flat dark brown, about rgb 26,15,3, like the other ui/icons) + control-{name}.webp (128×128, Pillow LANCZOS then cwebp q86 m6, opaque, 3–4 KB). Sheets: _variants/ui_controls_sheet_1.png and _variants/ui_controls_sheet_2.png (both 1536×1024). Alternates: _variants/control_icons_alt/. Meant for the website's Controls block inside .j12-slot (48–64 px). Not wired into code.
Tool: ChatGPT image generation in Chrome, one new conversation ("Generate Game Icon Sheet"), with ui/icons/input.png, game.png and gameplay.png attached to the first message as the style reference. Downloaded by fetching the image blob in the page (<a download>). Cut with a bbox-in-box slicer (Pillow, scratchpad), 6% padding, centred on a square of the sheet's background. The reticle on sheet 1 crossed the grid line at x 512, so the cells were cut from explicit search boxes rather than the equal grid.
Sheet 1 (3×2). Kept: walk (1), look (2), touch (5). Not kept: interact (3, too wide for a square slot, control_icons_alt/interact_v1_wide.png), target (4, too wide, and the key read "TAB" in capitals, target_v1_wide_caps.png), walk alternative (6, darker sandstone keys, walk_v2_sandstone.png).
Generate an image. The three attached icons are the exact style reference for the painted interface icons of my game J12, a World of Warcraft style RPG set in 1st-century Galilee: the same warm hand-painted WoW icon rendering, chunky simple shapes with a thick dark outline, soft warm top-left light, earthy bronze, gold, aged ivory and linen palette, and the same flat very dark warm brown background (#1a130d) with no frame or border. Make a landscape 1536x1024 sheet: a precise grid of 3 columns by 2 rows = 6 icons, each one chunky subject centred in its own equal cell filling about 70% of the cell, with wide empty gutters so nothing touches or crosses into a neighbouring cell. These are the "controls" icons of the game's website and are shown at only 48 to 64 px, so keep them bold, simple and readable, with no small particles, no scenery, no glow, no magic effects, no light rays, no modern UI and no screens. The letters below must be spelled exactly and be big, crisp, bold, upper-case and centred on the keycaps; no other text anywhere. Row 1: (1) walk: four old carved keycaps arranged like a keyboard's movement keys, one key on top and three in a row below it, each a chunky square keycap with a thick bronze rim and an aged ivory stone face, carved with the letters W (top), then A, S, D (bottom row, left to right), seen slightly from above; (2) look: a computer mouse rendered as a painted, slightly stylised object with a dark polished wood body and bronze trim, two buttons and a little wheel, with two small curved bronze arrows curving around its left and right sides suggesting turning to look; (3) interact: one chunky square carved keycap with a bronze rim and aged ivory face carved with the letter F, and beside it on the right a small open human hand, palm up and offered, warm olive skin, in a plain linen sleeve cuff. Row 2: (4) target: one wide rectangular carved keycap with a bronze rim and aged ivory face carved with the word Tab, and beside it on the right a small bronze ring reticle (a plain circle with four short ticks), no weapons; (5) touch: a single human index fingertip pointing down and tapping, warm olive skin, with two soft concentric ripple rings in pale bronze spreading out flat beneath the fingertip, no device, no phone, no screen; (6) an alternative walk icon: the same four keycaps W over A S D, but in darker bronze keycaps with weathered sandstone faces, keys set closer together and seen straight from the front.
Sheet 2 (2×2, same conversation). Kept: target = cell 3 (Tab key on top, reticle centred below it) and interact = cell 4 (F key centred above the open palm-up hand), the two that read largest at 48 px. Alternates: cell 1 control_icons_alt/target_v2_corner.png (reticle on the key's lower-right corner, key tilted), cell 2 interact_v2_corner.png (hand from the lower right under the key's corner).
Excellent, this is exactly the style, and the walk, look and touch icons are perfect. Two fixes, in a new sheet with exactly the same style, keycap look, colours and flat #1a130d background: landscape 1536x1024, a precise grid of 2 columns by 2 rows = 4 icons, each centred in its own equal cell filling about 75% of the cell, wide empty gutters, nothing crossing into a neighbouring cell, no frames, no glow, no other text. The icons are shown at 48 px inside a SQUARE slot, so each composition must be compact and roughly square, not wide. The keycap word must read exactly "Tab": a capital T followed by lower-case a and b, big, bold and crisp. (1) target: the wide bronze-rimmed ivory keycap with "Tab" in the upper left, and the bronze ring reticle (a plain circle with four short ticks) overlapping its lower-right corner, in front of it, the two together forming a compact square group; (2) interact: the square bronze-rimmed ivory keycap with a big letter F in the upper left, and the open hand, palm up and offered, in a plain linen sleeve cuff, coming in from the lower right just under the keycap's corner, the two together forming a compact square group; (3) target, alternative: the "Tab" keycap on top, and the bronze ring reticle centred just below it, slightly overlapping its bottom edge, a compact square group; (4) interact, alternative: the F keycap in the centre, with the open palm-up hand below it, as if the key rests just above the offered hand, a compact square group.
- Letters: W, A, S, D, F and "Tab" are all spelled correctly and crisp; they stay legible on the 128 px WebP and at 48 px.
- walk: wide group (W over A S D), so it fills the square less in height than in width; still clear at 48 px.
- look: dark wood mouse with bronze rim and wheel; the two arrows curve up and outward at its sides.
- touch: the ripples are two solid warm-orange rings, brighter than the rest of the palette, but painted lines, not a glow.
- interact / target: the hands are warm olive skin in a rolled linen cuff, matching each other and
touch.
ui/app_icon_boat.png: the app icon and favicon, the crest's fishing boat (2026-10-29)
Files: ui/app_icon_boat.png (master, 1254×1254 RGB, the ChatGPT original, 2.1 MB) and the icon set made from it with Pillow in the scratchpad: public/images/ui/icon-512.png (512×512, 79 KB), public/apple-touch-icon.png (180×180, 14 KB), public/favicon-32.png (32×32) and public/favicon.ico (16, 32 and 48). It replaces the Pillow-drawn "WoA" lettering icon (see the logotype entry above).
Tool: ChatGPT (image generation) in Chrome, conversation "Create Game Icon". The first message attached a crop of the logo's crest (bronze roundel with the boat over curling waves) and ui/world_of_apostles_logo.png. Kept: variant 2 (the revision). Variant 1 had the same design with a smaller, darker boat, planking lines and busier waves; at 16 px the hull, waves and ring merged into one bronze smear. Both were downloaded by fetching the image blob in the page and clicking an <a download>.
Prompt 1:
Create an image: a square 1024x1024 game app icon for my browser RPG "World of Apostles". The first attached image is a crop of the crest on my logo (the second attachment is the whole logo); match its metal, colours and drawing exactly. The icon: the same polished warm gold and bronze single-mast Galilean wooden fishing boat with its one square sail, sitting on two or three stylised curling bronze waves, inside a thick round bronze ring, all centred on a rounded-square app-icon tile of dark basalt / dark warm brown (#1a130d to #2a2018) with a subtle thin bronze rim around the tile edge. World of Warcraft style painted, sculpted metal with chiselled bevels and warm highlights. The boat must be big and bold, the ring plus boat filling about 65% of the tile, with simple chunky shapes and a strong dark outline around the boat, sail and ring so it still reads at 16 and 32 pixels. Keep detail minimal: no rigging clutter, no rivets, no texture noise. No text, no letters, no cross, no fish symbol, no glow, no sparkles, no olive branches, no extra ornaments. The corners outside the rounded tile can be plain flat dark.
Prompt 2 (revision, kept):
Very nice, keep the same style, metal, tile and composition. One revision so it reads at 16 and 32 pixels: make the boat larger and bolder so it fills more of the ring, with a brighter gold sail and hull against the dark background and a thicker dark outline around the whole boat silhouette. Leave a clear band of dark background between the hull and the waves and between the boat and the ring, so the parts don't merge when small. Simplify the waves to two big bold curls. Make the mast and the single forestay thicker and drop the thin planking lines and small deck details. Keep the ring a bit thinner than now so the boat dominates. Same square 1:1 format, no text, no glow, no extra ornaments.
Processing:
- The painted tile was cropped to its exact box (x 25–1226, y 26–1215; it is about 1% wider than tall) and resized to a 1200 px square. Outside the tile the corners are made transparent with a supersampled rounded-rectangle mask whose radius (0.19 of the side, about 230 px of 1200) matches the painted bronze rim.
- 512 and 180: the full tile (Lanczos, a light unsharp mask at 180), then quantised to 256 colours (Pillow FASTOCTREE, Floyd–Steinberg) with near-opaque palette alphas snapped to 255. That took the 512 from 463 KB to 79 KB with no visible change at 2× zoom.
- 48, 32, 16 (in
favicon.ico, plusfavicon-32.png): cropped in so the bronze ring fills the square, dropping the outer tile rim and margin (48 crops 10% off the side, 32 and 16 crop 16%), with darker mids (gamma 1.25 / 1.35 / 1.5 with a small black point), contrast ×1.1, a light unsharp mask and their own rounded corners (radius 0.18–0.2). Stepped downsampling (4× then box) was tried for 16 px and rejected because it added greenish speckle. - Readability: at 32 px it reads clearly as a gold sail, mast and hull on two waves inside a ring. At 16 px it reads as a bright gold triangular sail over a gold hull bar in a dark roundel; the waves and ring become texture. At 48 and 180 every part is clear.
- Notes: ChatGPT drew the sail as a curved, lateen-like triangle (as in the logo's crest) rather than a strict square sail; it matches the logo, so it was kept. The bow and stern end in scroll curls, as on the crest.
Paper-doll figure and bag cell: images/ui/paperdoll/figure.* and images/ui/slots/bag.* (j12-artist, 2026-10-29)
Tool: ChatGPT (image generation), one conversation ("Generate relief figure image"). The first message attached ui/slots/{head,body,mantle}.png as the style reference; every later message asked to keep that material. Images were downloaded by fetching their blobs in the page (<a download>) and moved from ~/Downloads. The scripts (cutout2.py, slice_tiles.py, Pillow in a venv) stay in the scratchpad.
ui/paperdoll/figure.png (original, 1024×1536, 1.4 MB) + figure.webp (360×540, q86, 9 KB) + figure-cutout.webp (360×540 RGBA, q86 alpha_q100, 23 KB)
Kept: variant 1 (draped head covering with a head-band, blank face planes, short beard only hinted). It matches the head slot tile and reads clearly at 180×270: head covering, mantle, belt with hanging ends, open hands, sandals. The figure spans y 43–1455 (about 92% of the height). ChatGPT's background is flat (RGB 27,17,9, std 0.6), a hair warmer than #1a130d.
figure.png: the untouched ChatGPT original (flat background RGB 27,17,9).figure-cutout.webp: the background keyed to alpha only at the outer silhouette (colour distance to the background, smoothstep 4–20, edge colour un-mixed); the inside is a filled solid mask (closing radius 4 px, holes filled), so the dark relief shadows stay opaque. Arm-to-body and leg gaps are transparent. Checked over mid grey: no halo, no holes.figure.webp: the cutout composited onto exact#1a130d, so the panel background can be the same token. 360×540 keeps the 2:3 aspect (the brief's "about 360×640" would stretch it).- Alternative:
_variants/paperdoll_figure_v2_bareheaded.png: head uncovered, mantle on the shoulders only. Not kept: the curled hair and more defined eyes and beard read Roman and break the blank-mannequin look of the head tile.
Prompt (variant 1):
Generate an image. The three attached tiles are the empty equipment slot tiles of my game J12 (a World of Warcraft style RPG set in 1st-century Galilee, AD 28): dark recessed bronze and stone, with a faint low-contrast embossed relief of the item pressed into the back wall. I need a new piece in EXACTLY the same material, relief depth, texture and lighting: the PAPER-DOLL FIGURE for the character equipment panel, like the empty character model area in World of Warcraft's character sheet. Subject: a full-body, front-facing standing man (Simon Peter, a 1st-century Galilean fisherman, sturdy broad-shouldered build, short beard) as a shallow EMBOSSED RELIEF in dark stone, like a mould impression, the same as the bust in the head tile. He wears a knee-length tunic with a cloth belt, a mantle over the shoulders, a draped head covering like the head tile, and simple sandals with bare lower legs. No trousers, no boots, no armour, no adventurer gear, no bag straps. Arms hang slightly away from the body, hands open with fingers visible, so the hands read clearly. Facial features minimal or none, blank faint facial planes like the head tile. Strictly MONOCHROME: only dark greys and warm near-black, no colour at all, no gold, no bright highlights, no glow, no text. Soft light from the upper left, the relief only slightly lighter than the background so it reads as an empty mould, dimmer than a real item. Tall portrait image 1024x1536 on a flat, even, very dark warm brown background (#1a130d) with no texture and no vignette. The figure is centred and fills about 85% of the image height, with clean empty space around it. No frame, no border, no plinth, nothing else in the image. The silhouette must stay readable when the whole image is shown at 180x320 px.
Prompt (variant 2, not kept):
Very good, keep everything about the material, lighting, background, scale and pose. Now generate a second variant of the same figure: this time the head is UNCOVERED, with short thick hair and a short full beard shown as simple blank relief shapes (still no detailed facial features), and the mantle rests only over the shoulders and falls down the back and one arm, not over the head. Same knee-length tunic with cloth belt, same sandals, same open hands held slightly away from the body. Same flat #1a130d background, 1024x1536 portrait, figure centred filling about 85% of the height, no frame, no plinth, no text, strictly monochrome.
ui/slots/bag.png (slice original, 331×331) + ui/slots/bag.webp (128×128, cwebp q86, 3 KB)
The inventory bag cell. Sliced like the slot tiles (rim-detected grid, inset 0.8%, saturation reduced to 35%). Kept: sheet BG, tile 1 (top left): a plump drawstring sack sitting on the floor of the hollow, neck tied with a cord and slumped to the right, no hook or ring, so it is clearly different from belt.png (pouch on a hook). Checked at 48 px beside belt, head, body and feet: it reads as a sack and is dimmer and lower in contrast than the equipment silhouettes, as it repeats across the grid.
Sheet BG: _variants/ui_slot_bag_sheet.png (4×2, 1536×1024)
ChatGPT returned two sheets side by side for comparison; this is the quieter one. The other, slightly higher-contrast sheet is _variants/ui_slot_bag_sheet_alt.png.
Good. Now one more sheet in exactly that tile style (same bevel rim, same recessed floor, same lighting, same 4x2 layout, 1536x1024, square tiles about 80% of each cell, wide gutters of flat #1a130d): this time each hollow carries a faint embossed relief of a small DRAWSTRING CLOTH SACK (a traveller's scrip) as the symbol of a bag slot. The sack fills only about 55% of the tile, is a bit smaller and even DIMMER and lower in contrast than the silhouettes on my first three attached tiles, because this cell repeats 40 times in an inventory grid and must stay very quiet. The sack sits on the floor of the hollow, plump at the bottom, its neck gathered and tied with a cord, the tied top slumped over to one side. No hook, no ring, no belt, no strap, nothing hanging. Give the 8 tiles small natural variations (the neck slumped left or right, slightly fuller or flatter sack). Strictly MONOCHROME: only dark greys and warm near-black, no colour, no gold, no bright highlights, no glow, no text, no symbols other than the sack.
Sheet E (superseded): _variants/ui_slot_empty_sheet.png + _variants/ui_slot_empty_plain.png (tile 1, 332×332)
The first brief asked for a plain empty hollow; it was changed to the sack before saving, so the plain tile is kept in _variants/ only.
Thank you. Now a different piece for the same set: an EMPTY BAG CELL, a slot tile exactly like the three tiles I attached in my first message (same worn bronze-and-stone bevel rim lit softly from the upper left, same deep recessed shadowed inner floor, same texture, same lighting, same proportions) but with NO silhouette or relief inside at all, just the empty hollow. Landscape 1536x1024, a precise grid of 4 columns by 2 rows = 8 square tiles, each tile a perfect SQUARE filling about 80% of its cell, separated by wide gutters of the flat very dark warm brown background (#1a130d). All 8 tiles are empty hollows with only very slight natural variation in wear and scratches on the rim. Strictly MONOCHROME: only dark greys and warm near-black, no colour at all, no gold, no bright highlights, no glow, no text, no symbols, nothing inside the hollows.
Bag icons and the bag socket tile (j12-artist, 2026-10-29)
Five item icons for the new bags (containers that add bag spaces) and one empty slot tile for the socket a bag is placed in. Tool: ChatGPT (chatgpt.com) image generation in Chrome only, a new conversation ("Create Bag Icon Sheet"). For style, leather_sandals.png, casting_net.png, palm_basket.png and bordered_mantle.png were attached to the first prompt, and ui/slots/head.png, bag.png and belt.png to the second. Downloaded by fetching the image blob in the page and clicking an <a download> (j12bags-*.png). Not wired into the game code: App\Game\Art picks the item icons up by key.
Item icons: items/{key}.png (slice original, 419–505 px square) and items/{key}.webp (256×256, cwebp q85, 5–13 KB)
Keys, from humble to fine: linen_pouch, knotted_net_bag, goatskin_satchel, shepherds_scrip, travellers_wool_sack. Same flat-sheet workflow and scripts as batch 9 and the mounts (slice.py with the fitted bgparams.npy and CUT=1, finish.sh, check.py), copied into this scratchpad, with two changes to slice.py:
- Each key takes an optional padding factor (
key:1.6), so the size ladder survives the crop. The padded square is the object's bounding box times 1.6 (pouch), 1.4 (net bag), 1.28 (satchel), 1.2 (scrip) and 1.14 (wool sack, the same as every other item icon). The bags fill about 62%, 71%, 78%, 83% and 88% of their icons, so they grow up the ladder. - Small fragments are only joined to the nearest object if they lie inside its bounding box (plus 12 px). Before that, the top knot of the cell 7 net bag landed as a speck under the scrip.
goatskin_satchel was sliced without CUT: the row cut at y 384 clipped the bottom of its strap loop flat, and it touches nothing.
Checked at 256 and at 44 px beside rome_grain_sack, rome_flour_sack, fine_net, palm_basket and leather_sandals. Each bag reads as a container and the five are told apart by colour and silhouette: a small pale pouch, a tan net teardrop with dark figs inside, a dark hairy brown flap satchel, an orange-tan stitched scrip with a fringe and a bone toggle, and a tall cream-and-brown striped sack. The two flap bags (satchel and scrip) differ in value and in the scrip's fringe and pale stitching. The pouch is much smaller and smoother than the burlap rome_grain_sack, and has no seal.
Sheet B1: _variants/items_sheet_bags_a.png (ChatGPT, 1254×1254, 3×3, sheet colour about RGB (34, 24, 14))
Kept: linen_pouch (1), knotted_net_bag (2), goatskin_satchel (3), shepherds_scrip (4, the only scrip with the bone toggle), travellers_wool_sack (5, upright). Not used: cell 6 (wool sack on its side, less clearly a bag), cell 7 (net bag with green and tan contents, close in hue to the net), cell 8 (smoother satchel, loses the goatskin hair), cell 9 (scrip without the bone toggle, a tassel instead).
Create an image. These four attached icons are from my game's inventory (a World of Warcraft style RPG set in 1st-century Galilee). New batch: BAGS, containers the player equips to gain inventory space. Paint a new sheet in exactly the same hand-painted World of Warcraft inventory icon style, lighting and background as the attached icons (stylized, chunky, slightly exaggerated readable shapes that read at 40 px, bold painted highlights, visible brush strokes, smooth painted surfaces with no mosaic or tiled texture, warm upper-left key light, soft rim light, like a Blizzard game icon, not a photograph). A square 1024x1024 sheet, a precise grid of 3 columns by 3 rows = 9 square icons, each object alone and centred in its own equal cell, with wide clear empty gutters so nothing crosses into a neighbouring cell, all on the same plain flat very dark warm brown background (#1a130d), no grid lines, no borders, no frames, no text, no labels, no hands, no people. Every bag must clearly read as a CONTAINER, plump with contents. 1st-century Galilee (AD 28) materials only: linen, flax cord, goatskin, tanned leather, wool, bone and wood; NO metal, no buckles, no zips, no rivets, no clasps, no rings, no buttons, no backpacks, no modern shapes. The five bags are a ladder from humble to fine, each a clearly different silhouette and colour. Row 1: (1) a linen pouch: a SMALL simple drawstring pouch of plain undyed pale linen (#d9ccae), soft and slightly crumpled, its neck gathered by a thin cord with two short ends, sitting upright, the smallest and plainest bag, filling only about 55% of the cell, (2) a knotted net bag: a fisherman's carrying bag of knotted tan flax cord netting (#a88c5e) with large open diamond meshes, bulging and a little lumpy as if holding round things (dark shapes visible through the mesh), a thick twisted cord handle looping over the top, filling about 65% of the cell, (3) a goatskin satchel: a dark brown goatskin satchel (#4e3524), a flat rectangular bag with a rounded closing flap folded over the front and tucked under a leather thong loop, a long leather-thong shoulder strap curling around it, faint hair texture on the skin, filling about 72% of the cell. Row 2: (4) a shepherd's scrip: a sturdy, deep, well-made shepherd's bag of warm tanned leather (#8a5a34), boldly stitched seams with visible pale thread, a big flap closed by a carved bone toggle (a short cream peg) through a leather loop, a broad leather shoulder strap, a fringe of short leather thongs along the bottom edge, filling about 78% of the cell, (5) a traveller's wool sack: the LARGEST and finest, a big tall woven wool sack in natural cream and dark brown horizontal stripes (#e2d6bc and #5a4330) with a thin red-brown accent stripe, fine even weave, its neck gathered and tied with a twisted cord with tasselled ends, a woven wool carrying strap looping from neck to base, standing upright and full, filling about 85% of the cell, (6) another variation of the traveller's wool sack, lying slightly on its side. Row 3: (7) another variation of the knotted net bag, (8) another variation of the goatskin satchel seen from a slightly different angle, (9) another variation of the shepherd's scrip.
Empty slot tile: images/ui/slots/bag_socket.png (slice original, 348×348) + images/ui/slots/bag_socket.webp (128×128, cwebp q86, 3 KB)
The empty socket where a bag is placed. Sliced like the other slot tiles (rim-detected grid, inset 0.8%, saturation reduced to 35%). This sheet's hollows are darker than the earlier ones, so the tiles were found by their difference from the gutter colour instead of by brightness (slice_tiles_bg.py). Kept: sheet BS, tile 1 (top left): a flat satchel with a rounded flap over its upper half and a strap rising from both top corners in a tall arch. It doesn't sit on the floor like bag.png (the tied sack) or hang from a hook like belt.png (the pouch). Checked at 48 px beside head, bag, belt and body: same rim, same dimness, and it reads as a shoulder bag.
Sheet BS: _variants/ui_slot_bag_socket_sheet.png (ChatGPT, 1536×1024, 4×2)
All eight tiles are usable. Tiles 2–7 vary the strap arch and flap, and tile 8 tilts the satchel.
Thank you, these bags are right. Now a very different kind of image for the same game: an EMPTY BAG SOCKET tile, in exactly the style of the three empty equipment slot tiles I attached (same worn dark bronze-and-stone bevel rim lit softly from the upper left, same deep recessed shadowed inner floor, same texture, same lighting, same proportions, same dimness). Landscape 1536x1024, a precise grid of 4 columns by 2 rows = 8 square tiles, each tile a perfect SQUARE filling about 80% of its cell, separated by wide gutters of the flat very dark warm brown background (#1a130d). Each tile is the empty socket where the player places a bag, so pressed into the back wall of each hollow is a faint, low-contrast, EMBOSSED relief (a shallow mould impression) of a SATCHEL: a flat shoulder bag seen from the front, with a rounded closing FLAP folded over its upper half and a long SHOULDER STRAP rising from both top corners and looping in a big arch above the bag. The satchel fills about 60% of the tile, centred, and must look clearly different from my attached bag tile (a small round tied sack sitting on the floor) and belt tile (a pouch hanging from a hook): here there is NO drawstring, NO tied neck, NO hook, NO belt, only the flat satchel shape with its flap and its looped strap. The relief is as faint as the bust on my attached head tile, only slightly lighter than the hollow, so the tile reads as 'empty, nothing here yet', yet the satchel is still recognisable at 48 px. Strictly MONOCHROME: only dark greys and warm near-black, no colour at all, no gold, no bright highlights, no glow, no text, no letters, no symbols other than the satchel. Give the 8 tiles small natural variations (strap arch higher or lower, flap slightly more rounded or squarer).
Notes for the next batch
- The sizes asked for in the prompt ("filling about 55% of the cell") come back roughly right, but the standard 1.14 crop removes them. Use the per-key padding in
slice.pywhenever icons in a set should differ in size. - ChatGPT keeps period materials when the prompt says "NO metal, no buckles, no zips, no rivets, no clasps, no rings, no backpacks". No cell on this sheet had a buckle.
- The bag socket relief is close to a modern handbag in outline. If it reads that way in the HUD, ask for a wider, lower satchel with the strap slung to one side.
portraits/elkanah.png: Elkanah, the bag-maker of Capernaum market (j12-artist, 2026-10-29)
Files: portraits/elkanah.png (1254×1254 PNG, 2.3 MB) + portraits/[email protected] (512×512 PNG, sips -z 512 512, 420 KB). Tool: ChatGPT image generation in Chrome, one new conversation ("Generate Character Portrait"), with portraits/[email protected] and portraits/[email protected] attached as the style reference. First and only variant kept. Downloaded by fetching the image blob in the page and clicking an <a download>. Key elkanah in config/game/world.php and config/game/people.php (craftsman, 52; tunic #8a6f4e, mantle #4f5b3a).
Generate an image. The two attached portraits are the style reference for a series of character portraits for my game J12, a World of Warcraft style RPG set in 1st-century Galilee (about AD 28). Match them exactly: the same semi-realistic painterly oil rendering and visible brushwork, warm soft key light from the left with a gentle warm gold rim light, bust framing (head and shoulders) with a little space above the head, turned three-quarters to the viewer's left, plain warm dark brown background with a soft vignette. Do not copy the men in the references; make a new person with a clearly different face. A single square 1024x1024 portrait, no border, no frame, no text, no labels. No halo, no glow, nothing magical. Subject: Elkanah, the bag-maker of the Capernaum market, a Galilean Jewish craftsman of about 52, a medium build, an oval face with a broad, slightly rounded nose, warm, shrewd, friendly brown eyes with deep laugh lines at the corners, olive sun-browned skin, greying dark-brown hair receding a little at the temples, and a full, neatly kept greying beard (dark brown shot through with silver). A calm, shrewd, friendly expression with a faint closed-mouth smile, like a trader who knows the worth of things and treats people fairly. He wears a plain tunic of warm tan wool and an olive-green wool mantle over one shoulder with a plain edge and NO fringe along the edge (at most one small knotted tassel at a single corner). A coil of thin brown leather thong hangs over his other shoulder, and the strap of a small worn leather satchel crosses his chest. 1st-century Galilean dress only: no trousers, no apron, no buckles, no jewellery, no medieval or modern elements.
- Result: a warm, shrewd smile with crinkled eyes looking off to the viewer's left, dark curly hair greying at the sides, a full grey-streaked beard, a coarse tan wool tunic, an olive-green mantle over his left shoulder (no tassel showed), a coil of brown leather thong over his right shoulder and a worn leather satchel on a strap across his chest. No buckles or metal.
- The hair came back thick and curly rather than receding; he reads as about 50. His face is clearly unlike Simon's and Pinchas's.
portraits/gaddi.png: Gaddi, the lame beggar by the Capernaum synagogue (j12-artist, 2026-10-29)
Files: portraits/gaddi.png (1254×1254 PNG, 2.3 MB) + portraits/[email protected] (512×512 PNG, sips -z 512 512, 421 KB). Tool: ChatGPT image generation in Chrome, one new conversation ("Generate character portrait"), with portraits/[email protected] and portraits/[email protected] attached as the style reference. First and only variant kept. Downloaded by fetching the image blob in the page and clicking an <a download>. Key gaddi in config/game/world.php (robe #8c7e66, mantle #5e5040, skin #a47250, hair #7d756a, beard). Picked up by App\Game\Art from the @web file; the old PORTRAITS list in hud.js no longer exists, so no wiring was needed.
Generate an image. The two attached portraits are the style reference for a series of character portraits for my game J12, a World of Warcraft style RPG set in 1st-century Galilee (about AD 28). Match them exactly: the same semi-realistic painterly oil rendering and visible brushwork, warm soft key light from the left with a gentle warm gold rim light, bust framing (head and shoulders) with a little space above the head, turned three-quarters to the viewer's left, plain warm dark brown background with a soft vignette. Do not copy the men in the references; make a new person with a clearly different face. A single square 1024x1024 portrait, no border, no frame, no text, no labels. No halo, no glow, nothing magical. Subject: Gaddi, a lame beggar who sits on a mat by the door of the black basalt synagogue of Capernaum, a Galilean Jewish man of about 50, lean and a little gaunt from a hard life, a long weathered face with hollow cheeks, deep sun lines across the forehead and around the eyes, a long slightly crooked nose, medium olive-brown sun-darkened skin, greying ash-brown hair, unkempt and a little long, and a full, untrimmed greying beard (grey-brown shot through with silver). Sharp, observant, intelligent dark-brown eyes looking up slightly, with a dry, wry, knowing expression: a faint closed-mouth half-smile, patient and dignified despite his poverty, not pitiful, not grotesque. He wears a coarse undyed grey-brown wool tunic, frayed at the neckline, and an old dark brown wool mantle over his shoulders, worn thin, faded and visibly mended with a couple of darker sewn-on patches, a plain edge with NO fringe along the edge (at most one small knotted tassel at a single corner). 1st-century Galilean dress only: no trousers, no hood, no jewellery, no buckles, no props in his hands, no medieval or modern elements. Clean but poor: no dirt smeared on the face, no wounds, no blood.
- Result: a weathered, lined face with a wry closed-mouth half-smile, eyes turned up and off to the viewer's left, untidy curly hair going grey and a full untrimmed salt-and-pepper beard. A coarse grey-brown tunic with a frayed neckline under a heavy brown wool mantle with two darker square patches sewn on. No tassel showed, no bowl, no props.
- He reads as dignified and shrewd rather than pitiful, which suits his greeting line. The pose and lighting are the same as Pinchas's, but the grey hair and beard and the patched mantle keep him distinct.
portraits/caesarea_shipmaster.png: the shipmaster at Caesarea harbour (j12-artist, 2026-10-30)
Files: portraits/caesarea_shipmaster.png (1254×1254 PNG, 2.2 MB) + portraits/[email protected] (512×512 PNG, sips -z 512 512, 439 KB). Tool: ChatGPT image generation in Chrome, one new conversation ("Generate portrait image"), with portraits/rome_shipmaster.png and portraits/mariamne.png attached as the style reference, the same frame as the fourteen Rome NPCs. First and only variant kept. Downloaded by fetching the image blob in the page and clicking an <a download>. Key caesarea_shipmaster in config/game/coast.php and config/game/people.php (merchant, 48; robe #a89a7e, mantle #4e5a66, skin #b08560, hair #3a2c20, beard). Unnamed, as Acts 27:11 leaves "the master and the owner of the ship" unnamed.
Generate an image. The two attached portraits are the style reference for NPC portraits in my game J12 (a grounded historical RPG set in 1st-century Judea and Galilee; this person stands on the harbour quay of Caesarea on the coast, about AD 30-60). Use them only as a painting-style reference: create a NEW square 1:1 character portrait of a completely different person, matching exactly the same style: semi-realistic painterly oil look, warm amber key light from the left, gentle gold rim light, plain warm dark-brown softly painted vignette background, bust portrait (head fully in frame with space above the hair, shoulders and upper chest), three-quarter turn to the viewer's left, centred, no props, no text, no border. No halo, no glow, nothing magical. Subject: the master of a merchant ship bound west for Puteoli and Ostia, a Greek-speaking Levantine sea captain of about 48, clearly unlike the man in the reference: a LONG, lean, hard-weathered face with a strong straight nose, high cheekbones and hollow cheeks, deep sun-and-salt squint lines around narrowed, shrewd dark eyes looking out as if judging the wind, a thin pale scar across one cheekbone, sun-darkened leathery olive-brown skin, STRAIGHT dark-brown hair (almost black) cut short and swept back, a short, neatly trimmed full dark-brown beard with only a few grey threads at the chin. A calm, appraising, businesslike expression with the mouth closed, a man who sells deck passage and minds his cargo. He wears a plain long tunic of warm greyish-oatmeal linen and a heavy slate blue-grey wool mantle (sailor's cloak) wrapped over both shoulders with a plain edge, no fringe, no brooch. 1st-century dress only: never trousers, armour, jewellery, rings, hats, belts of metal, or anything medieval, pirate-like or modern.
- Result: a lean, long, weathered face with high cheekbones and deep squint lines, narrowed dark eyes looking off to the viewer's left, a thin pale scar across his right cheekbone, a closed, appraising mouth. A heavy coarse dark slate-grey wool mantle wraps both shoulders over an oatmeal linen tunic; no brooch, no fringe, no metal.
- The hair came back thick and wavy, swept back, rather than straight, and the beard is salt-and-pepper at the chin rather than "a few grey threads"; he still reads as about 48. The mantle reads more charcoal-slate than blue-grey.
- Distinct from
rome_shipmaster(Ostia): no curly grey hair, no smile, no brown cloak or round brooch.
Paper doll in colour: images/ui/paperdoll/simon.* and images/ui/paperdoll/worn/* (j12-artist, 2026-10-30)
Retired 2026-10-31. One painting of Simon per garment does not scale (about 140 wearables). The paper doll now shows the 3D player figure in what he wears (
resources/js/game/doll.js), so no wearable needs doll art. The files below were removed frompublic/images/ui/paperdolland_variants/paperdoll(they are in git history, commit f21581a). Do not paint per-item doll layers again.
A painted full-body Simon in place of the grey relief (figure.* stays), with one layer per wearable item, so the clothes on the doll change with what he wears. All images come from ChatGPT image editing. Conversations: "Generate Character Image" (the base, plain tunic, headcloths, caps), "Edit Wool Mantle Image" (mantles, sandals, the magenta masks), then one new conversation per item ("Edit Character Image", "Generate Apron Edit", "Edit Image Cloak", "Edit Road Cloak Image", "Edit tunic image", "Edit Goat Hair Cap", "Edit Image Sandals", "Edit sandals image" and similar). The scripts live in the scratchpad, not the repo: align.py, segbase.py, extract.py, place.py, proc.sh, mantles.sh, rebuild_all.sh, fixmask.py (Python venv with Pillow, NumPy, OpenCV, SciPy).
File contract. simon.webp is 720×1080 RGBA (cwebp q86, alpha_q100); simon.png is the 1024×1536 original. worn/{key}.webp is the same 720×1080 canvas, transparent except for the garment and registered to the base; worn/{key}.png is the same layer at 1024×1536 in the frame of simon.png. Stack them in this order: base, body, feet, mantle, head. The source edits (Simon wearing each item) and the masks are kept as lossless WebP in _variants/paperdoll/{key}_edit.webp / {key}_mask.webp, with the base versions simon_base_v1_sleeved, _v2_curly and _v3_shorthair_edit.
Base (simon.*). Bareheaded and barefoot, in a plain undyed linen undertunic that is SLEEVELESS and ends a hand above the knee, belted with a cord. He stands front-on with his arms a little out and his hands open, painted in the style of the portraits, with warm light from the upper left. The head top is at 3.1% of the height and the soles at 96.9%, centred. Three versions:
- A sleeved, frayed undertunic with a flared skirt, from a new image with
portraits/[email protected]attached. Rejected: the sleeves and fringe poked out from under tunics and mantles. - Edited to sleeveless, hemmed and slightly slimmer, with a straight skirt. Its alpha edge carries a faint orange glow at 1–15% alpha; this is cut in placement (alpha remapped from 0.16–0.92 to 0–1), so no warm fringe shows over dark or grey.
- Every cap and headcloth flattened the big curly hair, so the curls stuck out around the layer. The final base takes the head from a short-cropped-hair edit of version 2 (aligned, then cross-faded into version 2 over rows 255–290 of 1536, under the beard).
Base prompt (version 1, [email protected] attached):
Generate an image. This is the BASE FIGURE for the character equipment screen (paper doll) of my game J12, a World of Warcraft style RPG set in 1st-century Galilee (AD 28). Other clothing will later be painted on top of this exact figure as separate layers, so the figure must be clean, simple and symmetrical. Subject: a full-body painting of the man in the attached portrait (same face, same curly dark hair with a little grey, same full dark beard greying at the chin, sun-weathered olive skin). He is Simon Peter, a Galilean fisherman in his thirties, sturdy and broad-shouldered from hauling nets. He is BAREHEADED and BAREFOOT, with no mantle, wearing only a plain undyed off-white linen UNDERTUNIC that is deliberately small and close-fitting: short cap sleeves covering only the top third of the upper arm, and a straight hem ending a hand's width ABOVE the knee, with a simple thin twisted cloth cord belt at the waist. No trousers, no loincloth showing, no jewellery, no bag, no straps, nothing in his hands. Pose: exact front view facing the viewer, standing straight and relaxed, symmetrical, arms hanging down a little away from the body (about 12 degrees) so there is a clear gap between each arm and the torso, hands relaxed and open with the fingers visible, feet slightly apart and flat on the ground, toes pointing forward. Calm, dignified expression looking at the viewer. Style: hand-painted stylized MMO character art like a World of Warcraft character portrait, painterly brush strokes, the same rendering as the attached portrait, NOT photoreal, NOT a 3D render. Warm key light from the upper left, soft rim light. Tall portrait 1024x1536 with a fully TRANSPARENT background (PNG with alpha), no floor, no cast shadow, no frame, no text. The whole figure from the top of the head to the soles of the feet is visible and centred, the top of the hair at about 3% of the image height and the soles at about 97%.
Version 2 (edit of version 1): "...the undertunic becomes SLEEVELESS ... armholes sit on the shoulders ... all its edges are neatly hemmed and smooth, with NO frayed fringe ... the skirt hangs straight and close to the thighs, not flared, ending a hand's width above the knee ... a little less bulky: a strong, broad-shouldered working fisherman rather than a bodybuilder ... arms and legs stay in the same places." Version 3 (edit of version 2): "...changing ONLY his hair: make it SHORT, close-cropped dark curly hair with a little grey, tight small curls lying close to the scalp, so the outline of the head is only about a finger's width outside the skull ... Same man, same face and same full beard."
Layer pipeline. Each garment is a ChatGPT edit of the attached base ("return the exact same image, pixel for pixel identical in pose, face, ... transparent background. Add ONLY a ... Nothing else changes"), never an edit of an edit.
- Align. Each edit drifts by 0.3–1.3% in scale and up to about 10 px. It is aligned to the base with OpenCV ECC (affine, coarse to fine), anchored on rows the garment does not touch: head and feet for body garments, body for head pieces, legs for sandals.
- Extract. The garment mask is the set of pixels that changed against the base (blurred Lab distance), filtered by a garment-versus-skin colour likelihood, closed, hole-filled and feathered by 1.2 px. The layer keeps the edit's own pixels inside that mask.
- Body: a full-coverage tunic also covers the base undertunic plus 5 px, so no hem or neckline of the base can show. Where something still pokes through, it is painted from the tunic by inpainting.
- Apron and sheepskin coat: both are worn over the undertunic, so there is no forced cover (
nocover). - Feet: the whole edited foot below the top of the sandal, faded in over 30 px.
- Head: any base hair left outside the edited head outline is covered with the nearest cloth colour.
- Masks for mantles and cloaks. Diffing a mantle against the undertunic it partly covers (both cream) left holes, so for each mantle ChatGPT was asked, in the same conversation, for a mask of its own result: "return it exactly as it is, pixel for pixel identical, except that the whole MANTLE, including both tassels, is filled with solid flat pure magenta (#FF00FF) ...". That mask is aligned the same way and used as the garment mask.
- The back of a mantle seen between the legs below the undertunic hem is removed (also on
sheepskin_coat), so nothing hangs between the thighs that is not leg or tunic. - Where the mask edge took in unchanged undertunic (cream rims along the open front), those pixels go back to the base.
- Masks that came back as RGB with a fake checkerboard get the edit's alpha.
- The back of a mantle seen between the legs below the undertunic hem is removed (also on
- Place. One transform for all files: scale 0.6963, head top at 3% and soles at 97% of 1080, centred on the torso. Each layer gets the same glow-fringe cut as the base.
Gate (passed before the batch). Base alone, all four first items, mantle without tunic, and tunic with headcloth, on #1a130d and on mid grey, at full size and at 290 px tall. No halo, no seam at the neck, wrists or shins, no doubled face, no undertunic hem showing. The tunic at the first try left a strange panel between the legs (the base's flared skirt). The sleeveless, straight-skirt base fixed it.
Items (key: what was asked; notes). Every prompt follows the edit template above; the garment sentence is quoted here.
plain_tunic: "a PLAIN LINEN TUNIC ... slightly warmer cream off-white linen, loose and simple, a small slit neck opening, wide short sleeves reaching the ELBOW, and a firmly sewn straight hem falling to just BELOW the knee, hanging as ONE straight skirt over both thighs ... the same thin twisted cord belt." Made from base version 2 (before the hair change); its edge with the hair is irrelevant because the head rows are taken from the base.fishers_coat: "a short, sleeveless outer tunic of coarse, thick, roughly woven undyed grey-tan wool ... hanging straight from the shoulders to just below the knee ... tied at the waist with a thick twisted hemp rope knotted at the front."short_work_tunic: "a knee-length tunic of coarse undyed light-brown wool, short sleeves reaching the middle of the upper arm ... a square patch of slightly different brown wool sewn onto the skirt ... belted with a narrow brown leather strap."leather_apron: "a heavy apron of tanned ox hide, warm reddish-brown with darker scorch marks ... on a leather strap around the neck ... upper chest down to just below the knee ... tied behind the waist with leather thongs." Magenta mask; the undertunic shows at the shoulders and sides, as intended.sheepskin_coat: "a shepherd's sleeveless coat of sheepskins sewn fleece side in ... warm tan-brown suede ... thick cream curly fleece curling out at every edge ... worn open at the front ... to just below the knee." Magenta mask.madder_tunic: "a good wool tunic dyed with madder root to a deep red-brown, with two narrow darker red vertical stripes running down from each shoulder (clavi), wide sleeves reaching the elbow ... hem falling to the middle of the calf." Came out a brighter brick red than the icon's red-brown; it still reads as madder.wool_mantle: "a heavy rectangular mantle of undyed natural oatmeal-cream wool ... two narrow dark brown stripes woven near its ends ... draped over BOTH shoulders like a shawl, its two front edges hanging straight down ... to just below the knee, open in the middle ... At each of the two front lower corners hangs a small tassel of white wool threads with one blue cord." Every mantle uses this drape and these tassels. Magenta mask.woad_mantle: "fine, soft Chorazin wool dyed a deep, even woad blue ... a neatly knotted tassel of white wool threads with one blue cord." Mask.sychar_travelling_mantle: "a plain, sturdy, rather thick wool mantle in a muted grey-brown taupe (about #8f8670), with a reinforced off-white linen band sewn along all its edges ... knotted tassel of cream wool threads with one blue cord." Mask.undyed_mantle: "a plain wrap of undyed natural wool in a warm light grey-beige (clearly darker and greyer than the cream linen undertunic), thinner and plainer ... no stripes ... front lower corners knotted into small tassels ... with one blue cord." Mask.bordered_mantle: "an undyed oatmeal wool mantle ... two dark brown bands woven near its hem and a dark brown band running along its front edges ... tassel of white wool threads with one blue cord." Mask. ChatGPT returned 1024×1535; it was padded.festival_mantle: "fine, soft, bright white wool with two woad-blue bands woven near its hem and a woad-blue band along its front edges ... tassel of white wool threads with one blue cord." Mask.goat_hair_cloak: "a dark cloak of coarse, matte, charcoal-black woven goat hair with faint lighter grey-brown woven lines, worn over both shoulders like a cape and tied at the throat with a short dark cord whose two ends hang with small tassels ... front edges ... to just below the knee." ChatGPT added a folded hood at the neck. It was kept: it is period and does not cover the head. Mask.road_cloak: "a warm mid-brown wool cloak for the road, thick and plain with a slightly rough hem ... tied at the throat with a twisted brown cord ... no hood ... wide enough at the shoulders to cover any sleeve beneath it ... to mid-shin." Mask. Its frayed inner edges reveal a thin strip of base undertunic, which reads as the tunic beneath.linen_headcloth: "a large square of off-white linen laid over the head and held in place by a twisted dark brown wool cord around the crown ... draped LOOSELY OVER THE FULL VOLUME of his big curly hair ... the cloth's outline lying slightly OUTSIDE the outline of the hair everywhere." The first try was tight and showed curls around it; this second try is kept.wool_cap: "a close round cap of thick FELTED undyed grey-brown wool (smooth matted felt with soft fuzz, NOT knitted, no ribbing), its lower edge turned up into a soft rolled band ... BIG and round." The first try looked like a modern knitted beanie and was rejected.wound_headcloth: "a long strip of cream-white linen wound round and round the head and tucked in ... a full, rounded wrap ... one loose end of the strip hangs down behind his left ear onto the shoulder."bordered_headcloth: "a large square of off-white linen with a dark indigo-blue stripe woven down its edges ... held by a twisted dark brown wool cord around the crown ... the blue-striped edges visible running down both sides of the face."goat_hair_cap: "a thick, round, soft cap of dense black felt made from goat hair, matte charcoal-black with a smooth felt surface and a neat turned-up band ... NOT curly, NOT shaggy ... it sits ON TOP of his hair ... LARGER than the hair." Third try kept. The first try was a shaggy curly cap that read as hair; the second was a tight skullcap smaller than the hair.leather_sandals: "worn, flat brown leather soles ... well-knotted brown leather straps: one across the toes, two crossing over the top of the foot, and one around the ankle tied with a small knot."reinforced_sandals: "thick double-layer leather soles (two stacked, stitched layers of tan leather visible at the edge) ... two wide straps crossing in an X over the top of the foot and a heel strap ... knot at the side."laced_sandals: "thick dark-brown leather soles ... a toe strap, and long thin leather thongs that lace criss-cross up the ankle and the lower shin ... tied there with a small knot and short hanging ends." The fade starts higher (row 1250 of 1536) so the knot ends are not faded out.palm_fibre_sandals: "light, thin soles plaited from pale straw-coloured date-palm fibre ... a plaited palm-fibre toe loop and a single plaited strap across the top of the foot, slightly frayed and worn."
Landmarks on the 720×1080 canvas (% of width, % of height): head top 48, 3.1; chin (beard bottom) 50, 17.6; neckline 50, 19; chest centre 50, 30; belt 50, 41; undertunic hem 50, 61; his right hand (viewer's left) centre 24.5, 57 (wrist 25, 52; fingertips 27, 59); his left hand 75.5, 57 (wrist 75.5, 52; fingertips 73, 59); his right foot (viewer's left) centre 35, 93.6 (x 27.5–41); his left foot 66, 93.6 (x 60–73); soles 96.9. The figure spans x 20–80%.
Face assets v3: beard styles, more women and children, hair tiles (j12-artist, 2026-10-30)
ChatGPT, in the existing "Generate Face Textures" conversation (no new reference attached; the conversation already holds the v1/v2 faces). 13 generations: 10 face sheets, 2 fix-up sheets, 1 hair sheet. Not wired into the game code; the modeler registers the keys in config/game/faces.php.
Files: faces/{key}.png (tile crop, 487–488 px, written by php artisan game:faces:import <tile> --grid=1x1 --keys=<key>) and faces/{key}.webp (512×512), 60 new keys. Tiles were cut from the gutters with the v2 import steps (row/column profiles, 1% inset, square), then imported one by one, because the gutters are not on the even 512 grid (row 1 ends at y≈502, so --grid=3x2 --inset=1.5 would keep a 2 px gutter strip). Sheets in _variants/faces_v3_{m1..m5,w1..w5}.png, _variants/faces_v3_fixups.png, _variants/faces_v3_fixups_2.png; replaced or alternative tiles in _variants/faces_v3_alt/.
Measured placement (scratchpad marks2.py: pupils = the catchlights, lips = centre of the red lip band in the middle columns): pupils 19.0–25.7%, lips 69.0–76.8% on all 60 installed faces. Ten faces were outside 22±4 / 73±4 as painted and were brought in by a gentle piecewise-linear VERTICAL remap of the tile (pupil row and lip row moved to 22% and 73%, top and bottom edges fixed, knees smoothed): goatee_black_round, curly_brown_short, full_grey_rounded, full_darkbrown_wavy (bearded mouths at 66–68%), boy_b, boy_c (pupils 26.5–27%), boy_d, woman_middle_e, woman_old_h, woman_old_j (lips 77–78%). The unwarped tiles are _variants/faces_v3_alt/{key}_v1_mouth_high.png / {key}_v1_unwarped.png. All 60 checked at 64 px: each reads as one person, beards keep their strand texture; chinstrap_black reads almost clean-shaven at that size.
Metadata (hex = mean of a pure-hair patch as painted: the chin for full beards and goatees, the moustache for moustaches, the top corners/hairline where the beard is too thin to give a clean patch; greys and whites with the sheet's warm cast):
| key | sex | age | beard | hex | tags | notes |
|---|---|---|---|---|---|---|
| moustache_black_lean | man | middle | moustache | #3f291e | ~35, lean narrow face, long nose; hairline #2a1b14 | |
| moustache_brown_droop | man | middle | moustache | #573320 | ~45, ends hang past the mouth corners, faint stubble | |
| moustache_grey_thick | man | old | moustache | #705c4f | ~65, broad wrinkled face, fleshy nose, grey chin stubble | |
| goatee_black_round | man | young | goatee | #322017 | ~30, round face; warped | |
| goatee_brown_tuft | man | middle | goatee | #512d1c | ~40, square face, separate chin tuft | |
| goatee_grey_pointed | man | old | goatee | #6e5648 | ~60, long lined face, aquiline nose | |
| chinstrap_black | man | young | chinstrap | #261a13 | ~28, heart-shaped face; hex from hairline (thin jaw strip mixes with skin, darkest quarter #2b1c14) | |
| chinstrap_brown_moustache | man | middle | chinstrap | #4b2918 | ~40, wide face, deep-set eyes; jaw strip #673921 | |
| patchy_brown_youth | man | young | patchy | #462918 | ~17, boyish; hairline hex, the fuzz itself is faint | |
| patchy_black_wisp | man | young | patchy | #2d1d13 | ~20, long narrow face; hairline hex, wisps read dark brown | |
| trimmed_black_close | man | middle | trimmed | #442a1c | ~35, from fix-up sheet 1; close crop reads very dark brown, hairline #271b13 | |
| trimmed_lightbrown_neat | man | middle | trimmed | #6a3d23 | ~40, oval face, hazel eyes | |
| trimmed_saltpepper_boxed | man | old | trimmed | #5d4436 | ~55, long face, high forehead | |
| full_black_bushy | man | middle | full | #261b15 | ~40, heavy brows; from fix-up sheet 2 | |
| full_brown_square | man | middle | full | #502e1d | ~45, almond eyes, straight nose | |
| full_darkbrown_wavy | man | middle | full | #3b2418 | ~35, lean face; warped; close to traditional Jesus iconography | |
| full_grey_rounded | man | old | full | #725747 | ~60, round jowly face; warped | |
| full_black_unkempt | man | middle | full | #39271e | ~50, gaunt shepherd, grey-flecked | |
| long_black_flowing | man | middle | long | #281e18 | ~50, long face, heavy lids | |
| long_saltpepper_broad | man | old | long | #55443a | ~60, wide square face | |
| long_white_patriarch | man | old | long | #a78e7d | ~80, bushy white brows, deep wrinkles | |
| curly_brown_short | man | young | curly | #3a2215 | ~30, broad round face, full lips; warped | |
| curly_grey_full | man | old | curly | #6d574a | ~60, hooked nose, drooping lids | |
| curly_black_long | man | middle | curly | #231a14 | ~45, angular face; from fix-up sheet 2 | |
| shaven_greek_young | man | young | none | #2f1d13 | ~22, short curly hairline | |
| shaven_roman_middle | man | middle | stubble | #3e291e | ~40, Roman nose, light stubble | |
| stubble_soldier_c | man | young | stubble | #432b1d | soldier | ~25, lean angular face, cropped hair |
| stubble_soldier_d | man | middle | stubble | #584236 | soldier | ~45, grey stubble, scar on the viewer's left cheek |
| shaven_old_greek | man | old | none | #9d8778 | ~70, thin white hairline | |
| boy_b | man | child | none | #2c1c14 | ~10, round face; warped | |
| woman_young_c | woman | young | none | #261a12 | round face | |
| woman_young_d | woman | young | none | #4c2917 | narrow face, thin lips | |
| woman_young_e | woman | young | none | #4c2a18 | wide-set eyes, freckles | |
| woman_young_f | woman | young | none | #281a13 | strong straight brows | |
| maiden_g | woman | young | none | #342015 | ~15, soft round face | |
| woman_young_h | woman | young | none | #342015 | long nose | |
| woman_middle_c | woman | middle | none | #2e2018 | fine lines | |
| woman_middle_d | woman | middle | none | #231913 | broad face | |
| woman_middle_e | woman | middle | none | #3e2416 | long face; warped | |
| woman_middle_f | woman | middle | none | #281c14 | high cheekbones | |
| woman_middle_g | woman | middle | none | #281c15 | Nabataean look, dark brows | |
| woman_middle_h | woman | middle | none | #3b2315 | tired working woman | |
| woman_old_c | woman | old | none | #42362f | thin face | |
| woman_old_d | woman | old | none | #5c493e | round, jowly | |
| woman_old_e | woman | old | none | #938074 | ~80, white hair | |
| woman_old_f | woman | old | none | #42362f | square jaw | |
| woman_old_g | woman | old | none | #716056 | long face, hooked nose | |
| woman_old_h | woman | old | none | #968377 | ~85, frail; warped | |
| girl_c | woman | child | none | #251a14 | ~7, chubby | |
| girl_d | woman | child | none | #352116 | ~10, pointed chin | |
| girl_e | woman | child | none | #4f2e1a | ~12, freckles | |
| boy_c | man | child | none | #2a1c15 | ~6, chubby (close to girl_c); warped | |
| boy_d | man | child | none | #2e1e15 | ~9, curly hair, ears at the edges; warped | |
| boy_e | man | child | none | #462a19 | ~12, square face | |
| woman_young_i | woman | young | none | #201813 | wide jaw | |
| woman_young_j | woman | young | none | #422718 | triangular face | |
| woman_middle_i | woman | middle | none | #301e14 | plump round face | |
| woman_middle_j | woman | middle | none | #231a15 | lean angular face | |
| woman_old_i | woman | old | none | #5d4f46 | heart-shaped lined face | |
| woman_old_j | woman | old | none | #826d60 | broad weathered face; warped |
Prompts
Shared men's block, referred to below as [MEN FORMAT] (sent verbatim inside each men's prompt after M1):
Exactly the same format, framing, eye and mouth placement, skin tone, lighting and hair rules as this last sheet: landscape 1536x1024, 3 columns by 2 rows = 6 equal square tiles with thin flat very dark brown #1a130d gutters, skin and hair to every edge, the cheeks running off the left and right edges, NO ears, head hair only in the top strip and top corners (no long hair down the sides), strictly frontal and symmetrical, pupils 22% down, mouth 73% down, even flat light, the same single medium olive skin tone, relaxed calm neutral expression with smooth brows, beards and moustaches as REAL fine hand-painted strands with stubble feathering at the edges (never a solid block), lips clearly visible, shaven skin the same colour as the cheeks, hair and beard in their real named colour. No tattoos, no jewellery. Every face a clearly different person from each other and from all earlier sheets (vary face shape, nose, brows, eyes, age lines). 1st-century Galilean, Judean, Samaritan, Syrian and Greek men.
Shared women's block, [WOMEN FORMAT]:
Same format as the men's sheets and the women's sheet earlier in this conversation: landscape 1536x1024, 3 columns by 2 rows = 6 equal square tiles with thin flat very dark brown #1a130d gutters, skin to every edge. Crop each face TIGHT exactly like the men's faces (it is a texture, not a portrait): the top edge of the tile is mid-forehead, the eyebrows about 15% down, the pupils 22% down, the mouth 73% down, the bottom edge just under the chin, the cheeks running off the left and right edges; NO ears. NO beard, smooth skin. Only a THIN strip of hair: a little hair in the two top corners and a centre parting at the very top edge, no more than the top 6% of the tile, and NO hair down the sides of the face (a veil sits there). Strictly frontal and symmetrical, even flat light, the same single medium olive skin tone as all the earlier faces, relaxed calm neutral expression, eyes open, mouth closed, lips visible, eyebrows in the named hair colour. No make-up, no jewellery, no tattoos, no headwear. Style: hand-painted semi-realistic World of Warcraft character texture. Every face a clearly different person from each other and from all earlier faces (vary face shape, nose, brows, eyes, lips). 1st-century Galilean, Judean, Samaritan and Syrian women.
Sheet M1, first try (_variants/faces_v3_m1_v1_ears.png, rejected: ears at the edges, long hair down the sides, frowning):
Generate an image: a new sheet of COMPLETE face textures in exactly the same format as the bearded face sheets earlier in this conversation, but this time with DIFFERENT BEARD STYLES (moustaches and goatees). Landscape 1536x1024: 3 columns by 2 rows = 6 equal SQUARE tiles separated by thin straight flat very dark brown (#1a130d) gutters. In each tile, skin and hair fill the tile to every edge: cropped from the middle of the forehead at the top edge (the eyebrows about 15% down) to just under the chin at the bottom edge, and from cheek edge to cheek edge at the left and right edges; no background, no ears, no headwear, no neck, no clothing. Strictly FRONTAL and symmetrical, looking straight at the viewer, the pupils 22% down from the top of the tile and the mouth 73% down, even soft flat lighting with almost no cast shadow, neutral calm expression, eyes open, mouth closed, lips visible. The same single medium olive skin tone as the earlier faces in every tile. Style: hand-painted semi-realistic World of Warcraft character texture. HAIR RULES: the hairline may show at the very top as hair fading into the top edge; sideburns may run off the left and right edges; a beard covers the jaw and chin and runs off the bottom edge. Beards and moustaches are REAL, FINE, hand-painted hair: individual strands, clumps and lighter highlight strands, with soft stubble feathering where the hair meets shaven skin; never a solid block, never a flat shape. The moustache sits just above the upper lip and the lips stay clearly visible. Where a tile says SHAVEN, that skin is smooth bare skin in exactly the same colour as the cheeks. Paint hair, beard and eyebrows in their real colour as named for each tile. Every face a clearly different person (different face shape, nose, brow, eyes and mouth) and different from all the earlier faces in this conversation. No tattoos, no jewellery, no paint. 1st-century Galilean, Judean, Samaritan, Syrian and Greek men. Row 1: (1) a man of about 35, a LEAN narrow face with a long straight nose, the cheeks and chin SHAVEN smooth, only a thick BLACK MOUSTACHE over the upper lip, black hair at the hairline; (2) a man of about 45, an oval face with a slightly hooked nose and heavy-lidded eyes, a long DROOPING MID-BROWN MOUSTACHE whose ends hang down past the corners of the mouth, the chin and cheeks SHAVEN with a faint brown stubble shadow, brown hair at the hairline; (3) a man of about 65, a broad wrinkled face with a big fleshy nose and bushy grey brows, a thick GREY MOUSTACHE, the chin SHAVEN with short grey stubble, grey hair at the hairline, deep wrinkles. Row 2: (4) a man of about 30, a ROUND face with full cheeks and a small nose, a BLACK GOATEE: a black moustache joined to a short black beard on the chin only, forming a circle around the mouth, the cheeks SHAVEN, black hair at the hairline; (5) a man of about 40, a SQUARE face with a broad nose and straight thick brows, a brown moustache and a separate small TUFT of BROWN beard on the chin under the lower lip, the cheeks and jaw SHAVEN, brown hair at the hairline; (6) a man of about 60, a long lined face with high cheekbones and a thin aquiline nose, a grey moustache and a POINTED GREY chin beard, the cheeks SHAVEN, grey hair at the hairline, lines on the forehead and around the eyes. No text, no labels, no numbers.
Sheet M1 (_variants/faces_v3_m1.png). Keys: moustache_black_lean, moustache_brown_droop, moustache_grey_thick, goatee_black_round, goatee_brown_tuft, goatee_grey_pointed. All kept (goatee_black_round later warped).
The moustaches and goatees are exactly right: real fine strands, lips visible, the placement of eyes and mouth is correct. Please generate this same sheet again with the same six men and the same beards, with three fixes. IMPORTANT FRAMING FIXES: (a) NO EARS at all: crop tighter so the cheeks themselves run off the left and right edges of the tile, exactly like the earlier sheets; (b) NO long hair hanging down the sides of the face: head hair only in the top strip and the two top corners, above the eyebrows; (c) relaxed, calm neutral expression with smooth brows, NOT frowning, no furrow between the brows. Same format otherwise: landscape 1536x1024, 3 columns by 2 rows = 6 equal square tiles with thin flat very dark brown #1a130d gutters, skin and hair to every edge, strictly frontal and symmetrical, pupils 22% down, mouth 73% down, even flat light, the same medium olive skin tone, shaven skin the same colour as the cheeks. Row 1: (1) about 35, lean narrow face, long straight nose, only a thick BLACK MOUSTACHE, shaven cheeks and chin; (2) about 45, oval face, slightly hooked nose, heavy lids, a long DROOPING MID-BROWN MOUSTACHE whose ends hang past the mouth corners, shaven chin with faint stubble; (3) about 65, broad wrinkled face, big fleshy nose, bushy grey brows, a thick GREY MOUSTACHE, shaven chin with short grey stubble. Row 2: (4) about 30, round face, full cheeks, small nose, a BLACK GOATEE (moustache joined to a short chin beard, a circle around the mouth), shaven cheeks; (5) about 40, square face, broad nose, straight thick brows, a brown moustache and a separate small TUFT of BROWN beard under the lower lip, shaven cheeks and jaw; (6) about 60, long lined face, high cheekbones, thin aquiline nose, a grey moustache and a POINTED GREY chin beard, shaven cheeks. No text, no labels, no numbers.
Sheet M2 (_variants/faces_v3_m2.png). Keys: chinstrap_black, chinstrap_brown_moustache, patchy_brown_youth, patchy_black_wisp, trimmed_black_close (replaced from fix-up sheet 1: this version painted the beard reddish brown, #633520; now _variants/faces_v3_alt/trimmed_black_close_v1_brown.png), trimmed_lightbrown_neat.
Perfect, exactly right. Generate the next sheet. [MEN FORMAT] Row 1: (1) a man of about 28, a CHINSTRAP: a narrow strip of BLACK beard running along the jawline and under the chin only, NO moustache, the upper lip and cheeks SHAVEN, a heart-shaped face with a pointed chin and a straight nose, black hair at the hairline; (2) a man of about 40, a narrow BROWN jawline beard (a strip along the jaw) joined to a brown moustache, the cheeks SHAVEN, a wide face with a short nose and deep-set eyes, brown hair at the hairline; (3) a boyish youth of about 17, thin PATCHY light BROWN fuzz on the chin and upper lip only, bare smooth cheeks, a soft young face, big eyes, brown hair at the hairline. Row 2: (4) a young man of about 20, a WISPY SPARSE BLACK beard (thin uneven strands on the chin and jaw, skin showing through) and a thin black moustache, a long narrow face with a long nose, black hair at the hairline; (5) a man of about 35, a very short dense CLOSE-CROPPED BLACK beard over the whole jaw and chin (like a few weeks' growth, fine short strokes) and a short black moustache, a square face with a strong brow and a slightly broken nose, black hair at the hairline; (6) a man of about 40, a neat short LIGHT-BROWN beard trimmed close to the jaw and a light-brown moustache, an oval face, light hazel-brown eyes, a slender nose, light-brown hair at the hairline. No text, no labels, no numbers.
Sheet M3 (_variants/faces_v3_m3.png). Keys: trimmed_saltpepper_boxed, full_black_bushy (replaced from fix-up sheet 2), full_brown_square, full_darkbrown_wavy (warped), full_grey_rounded (warped), full_black_unkempt.
Very good. Generate the next sheet. [MEN FORMAT] Make the six men look MORE different from each other than in the last sheet: different face widths, noses, eye shapes and brow shapes as described. Row 1: (1) a man of about 55, a short SQUARED-OFF SALT-AND-PEPPER beard (black streaked with plenty of grey), a salt-and-pepper moustache, a long rectangular face with a high forehead, a long straight nose and small deep-set eyes, greying hair at the hairline; (2) a man of about 40, a very thick BUSHY WIDE jet-BLACK beard (truly black, not brown) and a big black moustache, a broad heavy face, very heavy thick black brows, a wide nose, black hair at the hairline; (3) a man of about 45, a full MID-BROWN beard with a SQUARED-OFF bottom running off the bottom edge, a brown moustache, an oval face with a straight Greek nose and almond eyes, brown hair at the hairline. Row 2: (4) a man of about 35, a full WAVY DARK-BROWN beard with loose waves, a dark-brown moustache, a narrow face with a hooked nose and arched brows, dark-brown hair at the hairline; (5) a man of about 60, a full ROUNDED GREY beard and grey moustache, a round fleshy face with soft jowls, a short broad nose, kind wrinkled eyes, grey hair at the hairline; (6) a weathered shepherd of about 50, an UNTIDY WILD UNEVEN BLACK beard flecked with grey (stray strands sticking out), a black-and-grey moustache, a gaunt sun-lined face with hollow cheeks and crow's feet, a bony nose, black hair with grey at the hairline. No text, no labels, no numbers.
Sheet M4 (_variants/faces_v3_m4.png). Keys: long_black_flowing, long_saltpepper_broad, long_white_patriarch, curly_brown_short (warped), curly_grey_full, curly_black_long (replaced from fix-up sheet 2).
Excellent. Generate the next sheet. [MEN FORMAT] Row 1: (1) a man of about 50, a LONG straight jet-BLACK beard flowing down and running off the bottom edge, a black moustache, a long face with a prominent straight nose and heavy lids, black hair at the hairline; (2) a man of about 60, a LONG BROAD SALT-AND-PEPPER beard (wide and full, grey mixed through black) running off the bottom edge, a salt-and-pepper moustache, a wide square face with a flat broad nose and thick greying brows, greying hair at the hairline; (3) a patriarch of about 80, a very LONG thick pure WHITE beard running off the bottom edge and a full white moustache, BUSHY WHITE eyebrows, deep wrinkles across the forehead and around the eyes, a narrow aged face with a long thin nose, thin white hair at the hairline. Row 2: (4) a man of about 30, a SHORT beard of TIGHTLY CURLED MID-BROWN hair (small tight curls close to the jaw), a short brown moustache, a broad round face with a wide nose and full lips, short curly brown hair at the hairline; (5) a man of about 60, a FULL CURLY GREY beard (springy grey curls) and grey moustache, a lined oval face with a strong hooked nose and drooping eyelids, curly grey hair at the hairline; (6) a man of about 45, a LONG THICK BLACK CURLY beard (dense black curls) running off the bottom edge and a black moustache, a strong angular face with high cheekbones and a broad nose, curly black hair at the hairline. No text, no labels, no numbers.
Sheet M5 (_variants/faces_v3_m5.png). Keys: shaven_greek_young, shaven_roman_middle, stubble_soldier_c, stubble_soldier_d, shaven_old_greek, boy_b (warped). All kept.
Very good, those tile well. Now back to FACES: the next sheet of men. [MEN FORMAT] These six are mostly CLEAN-SHAVEN (Greeks, Romans and soldiers). Stubble is painted as fine short dots and strokes, soft, never a grey smudge. Row 1: (1) a Greek youth of about 22, CLEAN-SHAVEN smooth skin with no stubble, a fine oval face, a straight Greek nose continuing the line of the forehead, full lips, short CURLY DARK-BROWN hair at the hairline; (2) a Roman civilian of about 40, CLEAN-SHAVEN with a light shadow of dark STUBBLE on the jaw, chin and upper lip, a broad face with a strong Roman nose, a wide thin-lipped mouth, short straight dark hair combed forward at the hairline; (3) a young auxiliary soldier of about 25, short dark STUBBLE, a lean angular face with a narrow nose and alert eyes, CROPPED very short black hair at the hairline. Row 2: (4) a grizzled veteran soldier of about 45, short GREY STUBBLE, a hard weathered face with deep lines, a broad flattened nose, a small pale SCAR on the left cheek, cropped grey hair at the hairline; (5) an old Greek man of about 70, CLEAN-SHAVEN with no stubble, a wrinkled thin face with sagging cheeks and a long nose, thin WHITE hair at the hairline; (6) a BOY of about 10, a round childlike face, smooth skin, big eyes, a small nose, short dark-brown hair at the top edge; the boy's face must fill the tile exactly like the men (pupils 22% down, mouth 73% down). No text, no labels, no numbers.
Sheet W1 (_variants/faces_v3_w1.png). Keys: woman_young_c, woman_young_d, woman_young_e, woman_young_f, maiden_g, woman_young_h. All kept.
Very good. Now a sheet of WOMEN's faces. [WOMEN FORMAT] All six are young women aged 15 to 25. Row 1: (1) about 20, a ROUND face with full cheeks, a short rounded nose, soft dark eyes, black hair; (2) about 22, a NARROW long face with a slender straight nose, thin lips, light-brown hair and light-brown brows; (3) about 19, WIDE-SET eyes, a small chin, a few light freckles across the nose and cheeks, dark auburn-brown hair. Row 2: (4) about 24, STRONG STRAIGHT thick dark brows, a square jaw, a straight nose, full lips, black hair; (5) a girl of about 15, a soft round youthful face, a small button nose, big eyes, dark brown hair; (6) about 23, a LONG NOSE with a gentle hook, an oval face, almond eyes, a slightly darker olive look in the painting but the SAME skin tone, dark brown hair. No text, no labels, no numbers.
Sheet W2 (_variants/faces_v3_w2.png). Keys: woman_middle_c .. woman_middle_h. All kept (woman_middle_e warped).
Perfect framing. Next sheet of WOMEN, the same in every way. [WOMEN FORMAT] All six are women aged 30 to 50, more clearly different from each other than in the last sheet. Row 1: (1) about 45, an oval face with a few FINE LINES at the corners of the eyes and beside the mouth, a straight nose, calm hooded eyes, dark brown hair with one or two grey strands; (2) about 35, a BROAD wide face with wide cheekbones and a wide short nose, a broad mouth, black hair; (3) about 40, a LONG narrow face with a long chin, a long thin nose, thin lips, close-set eyes, mid-brown hair. Row 2: (4) about 32, HIGH sharp CHEEKBONES with slightly hollow cheeks, a narrow pointed chin, a fine aquiline nose, black hair; (5) about 38, a Nabataean-looking woman: DARK thick arched brows, large dark deep-set eyes, a strong nose, full lips, black hair, the SAME skin tone as the others; (6) about 48, a TIRED working woman: faint shadows under the eyes, a slightly heavy jaw, a broad nose, a few lines on the forehead, dark brown hair. No text, no labels, no numbers.
Sheet W3 (_variants/faces_v3_w3.png). Keys: woman_old_c .. woman_old_h. All kept (woman_old_h warped).
Very good. Next sheet of OLD WOMEN, the same in every way. [WOMEN FORMAT] All six are old women aged 60 to 85, with wrinkles at the eyes and around the mouth and softly sagging cheeks; the thin strip of hair in the top corners is GREY or WHITE as named, and the eyebrows are thin and greyish. Row 1: (1) about 62, a THIN narrow face with hollow cheeks, a long thin nose, fine crow's feet, grey hair mixed with dark; (2) about 70, a ROUND full face with soft jowls and plump cheeks, a short wide nose, deep laugh lines, grey hair; (3) about 80, a very wrinkled small face with deep lines everywhere, sunken cheeks, thin lips, a drooping nose tip, WHITE hair. Row 2: (4) about 66, a SQUARE face with a heavy jaw, deep lines from the nose to the mouth, heavy upper eyelids, iron-grey hair; (5) about 75, a LONG face with a long chin, a hooked nose, deep-set tired eyes, thin white-grey hair; (6) about 85, a tiny frail face, papery skin with many fine wrinkles, drooping eyelids, a small mouth with fine lines above the lip, pure WHITE hair. No text, no labels, no numbers.
Sheet W4 (_variants/faces_v3_w4.png). Keys: girl_c, girl_d, girl_e, boy_c (warped), boy_d (warped), boy_e. All kept. ([WOMEN FORMAT] sent with "smooth skin" changed to "smooth young skin".)
Very good. Next sheet: CHILDREN, the same in every way. [WOMEN FORMAT] These are children aged 6 to 12; even for the smallest child the face must FILL the tile exactly like the adults (pupils 22% down, mouth 73% down, cheeks running off the sides): it is a texture, not a portrait. Row 1 (girls, only a thin strip of hair at the top corners and a centre parting): (1) a girl of about 7, a small round face with chubby cheeks, a tiny button nose, big dark eyes, black hair; (2) a girl of about 10, an oval face with a pointed chin, a straight little nose, dark brown hair; (3) a girl of about 12, a heart-shaped face, wide-set eyes, a few light freckles, mid-brown hair. Row 2 (boys, a little short hair may show along the whole top edge): (4) a boy of about 6, a round chubby face, a snub nose, big eyes, short black hair; (5) a boy of about 9, a narrow face with a long nose and thick dark brows, short dark-brown curly hair; (6) a boy of about 12, a square face with a broad nose and a gap-free calm mouth, short brown hair. No text, no labels, no numbers.
Sheet W5 (_variants/faces_v3_w5.png). Keys: woman_young_i, woman_young_j, woman_middle_i, woman_middle_j, woman_old_i, woman_old_j. All kept (woman_old_j warped).
Very good. One more sheet of WOMEN, the same in every way. [WOMEN FORMAT] Six more distinct women of mixed ages, each clearly different from every woman so far. Row 1: (1) a young woman of about 18, a WIDE jaw and a short broad nose, low straight brows, a small mouth with a full upper lip, black hair; (2) a young woman of about 24, a delicate TRIANGULAR face with a narrow chin, large slightly upturned eyes, a small straight nose, mid-brown hair; (3) a woman of about 42, a PLUMP round face with a double softness under the chin, a broad nose, kind crinkled eyes, dark brown hair. Row 2: (4) a woman of about 36, a LEAN angular face with sharp jaw corners, a bump on the bridge of her nose, thin firm lips, black hair; (5) an old woman of about 68, a HEART-shaped lined face, high cheekbones, a small pointed chin, fine wrinkles, grey hair; (6) an old woman of about 78, a BROAD weathered face with deep vertical lines, a heavy broad nose, hooded eyes, white-grey hair. No text, no labels, no numbers.
Fix-up sheet 1 (_variants/faces_v3_fixups.png). Kept: tile 1 as trimmed_black_close. Tile 4 is _variants/faces_v3_alt/trimmed_black_close_alt_b.png; the boys (tiles 2, 3, 5, 6) all came out with ears at the edges and were not used (faces_v3_alt/boy_c_narrow_{a,b}.png, boy_d_ears_{a,b}.png).
Excellent. One last FIX-UP sheet. [MEN FORMAT] Tiles 1 and 4 are two versions of the same man; tiles 2 and 5 two versions of one boy; tiles 3 and 6 two versions of another boy. Row 1: (1) a man of about 35, a very short dense CLOSE-CROPPED beard of JET-BLACK hair (truly black like soot, NOT brown, NOT reddish) over the whole jaw and chin, like a few weeks' growth painted as fine short black strokes, a short jet-black moustache, black eyebrows, a square face with a strong brow and a slightly broken nose, black hair at the hairline; (2) a BOY of about 6, a NARROW small face with a pointed chin and thin cheeks (NOT chubby, NOT round), a small straight nose, big dark eyes, short black hair along the top edge, smooth skin, no beard; (3) a BOY of about 9, a narrow face with a long nose and thick dark brows, short dark-brown curly hair at the top edge, smooth skin, no beard, the cheeks running off the sides so that NO EARS show. Row 2: (4) the same jet-black close-cropped beard man again, a slightly different face (a broader jaw, a flatter nose); (5) the same narrow-faced 6-year-old boy again, a slightly different face; (6) the same 9-year-old boy again, a slightly different face, NO EARS. For the boys too the face must fill the tile exactly like the men: pupils 22% down, mouth 73% down. No text, no labels, no numbers.
Fix-up sheet 2 (_variants/faces_v3_fixups_2.png). Kept: full_black_bushy (tile 4, pupils 24 / lips 73) and curly_black_long (tile 5, 25 / 72.5). Tiles 1–3 moved the whole face down (pupils 28%) and tile 6 grew ears, so goatee_black_round, curly_brown_short, full_grey_rounded and full_darkbrown_wavy were taken from their first sheets and warped instead (the fix-up versions are faces_v3_alt/{key}_fix2_low.png).
Thank you. One more fix-up sheet for six of the bearded men: in these the MOUTH sits too HIGH (about 66% down instead of 73%). Please paint them again with the SAME faces and beards, but with the mouth LOWER: the line between the lips exactly 73% down from the top of the tile, the pupils still 22% down, so the nose and upper lip are a little longer and only a short part of the chin and beard shows below the mouth before the beard runs off the bottom edge. [MEN FORMAT] Row 1: (1) the man of about 30 with a ROUND face, full cheeks, a small nose and a BLACK GOATEE (a black moustache joined to a short black chin beard, a circle around the mouth), shaven cheeks; (2) the man of about 30 with a SHORT beard of TIGHTLY CURLED MID-BROWN hair, a short brown moustache, a broad round face, a wide nose and full lips, short curly brown hair at the hairline; (3) the man of about 60 with a full ROUNDED GREY beard and grey moustache, a round fleshy face with soft jowls, a short broad nose, kind wrinkled eyes, grey hair at the hairline. Row 2: (4) the man of about 40 with a very thick BUSHY WIDE jet-BLACK beard and a big black moustache, a broad heavy face, very heavy thick black brows, a wide nose; (5) the man of about 45 with a LONG THICK BLACK CURLY beard and black moustache, a strong angular face with high cheekbones and a broad nose, curly black hair at the hairline; (6) the man of about 35 with a full WAVY DARK-BROWN beard, a dark-brown moustache, a narrow face with a hooked nose and arched brows. Mouth line 73% down in every tile. No text, no labels, no numbers.
- Small ear lobes still show at the cheek edge (about 35–55% down) on boy_d, boy_e and girl_d, and faintly on a few women (woman_old_c/e/g/h, woman_middle_e/f, woman_young_j) and shaven_greek_young, stubble_soldier_c, trimmed_saltpepper_boxed. ChatGPT paints ears whenever the face is NARROWER than the tile; asking for narrow faces brings them back.
- Bearded mouths drift up to 66–68% (the earlier v2 bearded faces measure about 68% too); asking ChatGPT to lower the mouth moves the whole face down instead. A small vertical remap is the reliable fix.
Tileable hair textures 2: hair/{key}.png + hair/{key}.webp (512×512, opaque, seamless)
Sheet: _variants/hair_sheet_2.png (ChatGPT, 1536×1024, 3×2). Keys: hair_coils (1), hair_coarse (2), hair_fine (3), hair_cropped (4), beard_curly (5), beard_fine (6). All six kept.
Thank you, very good. Now more tileable HAIR textures like the hair sheet earlier in this conversation, for the hair and beard meshes of the same 3D characters. Generate a LANDSCAPE 1536x1024 sheet: 3 columns by 2 rows = 6 equal SQUARE tiles separated by thin straight flat very dark brown #1a130d gutters. Each tile is a SEAMLESS, TILEABLE texture (it repeats without visible seams left-right and top-bottom), completely filled edge to edge with painted hair, no background, no head, no face, no parting, no outline, no vignette, even flat lighting across the whole tile (no darker corners, no gradient). The hair runs VERTICALLY from the top edge to the bottom edge with an overall downward flow, hand-painted semi-realistic World of Warcraft style, soft and fine, not plastic, not noisy, not a photo. Paint every tile in ONE neutral mid dark-brown (about #4a3a2c) with lighter brown highlights, so the game can re-tint it. Row 1: (1) TIGHT SMALL COILS: very small tight spiral coils of hair packed densely together, like tightly coiled hair, with an overall downward flow; (2) COARSE hair: thick, coarse, slightly wiry strands in loose clumps running downwards, rougher than ordinary hair; (3) FINE hair: fine, silky, smooth straight strands, many thin parallel lines running straight down with soft highlights. Row 2: (4) CROPPED hair: very short cropped hair seen close up, like a buzz cut: dense short strokes all pointing down, evenly spread, the darker scalp barely showing between them; (5) CURLY BEARD hair: short, tightly curled beard hair, small kinked curls densely packed, with a downward flow; (6) FINE BEARD hair: softer, finer beard hair with a gentle wave, strands running downwards. No text, no labels, no numbers.
Processing (scratchpad seamless.py): each tile cut from the gutters (1% + 1% inset, about 478 px), low-frequency shading flattened (divided by a wrap-mode Gaussian blur of the luminance at radius tile/8), resized to 512, then made seamless per axis: within 12% of each edge it cross-fades (smoothstep) to the copy rolled by half the tile on that axis, first horizontally and then vertically, so the copy's own seam stays in the middle, away from the edges. The mean colour step across the wrap edges matches the step between neighbouring pixels inside the tile (horizontal / vertical, inside vs wrap: coils 6.1/4.8 and 5.8/6.2, coarse 9.3/10.0 and 3.8/3.3, fine 10.0/10.5 and 1.5/1.8, cropped 11.8/12.9 and 3.9/4.3, beard_curly 7.9/6.4 and 6.3/7.1, beard_fine 10.6/12.2 and 4.5/5.3). Checked tiled 2×2: no visible seam or band. Mean tone #342016–#442c1f (darker and warmer than the asked #4a3a2c, like sheet 1; re-tint by luminance). Webps are cwebp -q 85, 33–58 KB.
Item icons, batch 10 (add-weapon-groups) (j12-artist, 2026-10-30): the weapon library
Files: items/{key}.png (slice original, 349–661 px square) and items/{key}.webp (256×256, cwebp q85, 2–9 KB), 95 icons: 92 weapons and 3 ammunition items for the OpenSpec change add-weapon-groups (keys and looks from the change's icon list). App\Game\Art picks them up by key; no code or config was touched. No existing file in items/ was overwritten (finish.sh refuses to).
Tool: ChatGPT (chatgpt.com) image generation only, in Chrome, one new conversation ("Create Sword Icon Sheet") that began with _variants/items_sheet_h_weapons.png and _variants/items_sheet_i_bows.png attached as the style reference. Ten sheets in total: eight 4×3 sheets for the 95 keys plus two fix-up sheets. Downloaded by fetching each generated image blob in the page and clicking an <a download> (j12weap-*.png), then copied into the scratchpad.
Post-processing (scripts in the scratchpad, not the repo): slice.py, bgparams.npy, finish.sh, check.py and contact.py were copied from the bag batch. The fitted vignette was checked against the per-pixel median of the existing items/*.png and matches within about 1–3 RGB levels at the corners, edges and mid-ring. Objects are found as connected blobs against the flat sheet colour (about RGB 23–30, 13–18, 2–4 on these sheets), cropped to a padded square (bounding box × 1.14; × 1.08 for the long poles on sheets E and F) and keyed onto the vignette. slice.py gained an optional SOLID=k closing step for dark objects; it didn't help the dark Nabataean bow, because that bow was painted in the sheet colour itself. Every icon was checked at 256 px and at 40 px beside composite_bow, fishermans_machaira, boar_spear, robbers_cudgel and the existing slings.
Orientation: blades and knives lie hilt upper right, point lower left (as the existing machairas and knives do); hafted weapons, spears, staffs and javelins have the head at the upper right (as boar_spear does); bows lie lower left to upper right.
Sheet A: _variants/items_sheet_weapons_a.png (1536×1024, 4×3): swords
Keys: pitted_machaira, iron_short_sword, ivory_hilted_machaira, old_kopis, heirloom_xiphos, gladius_hispaniensis, mainz_gladius, pompeii_gladius, veterans_gladius, auxiliary_spatha, sebastene_spatha, thracian_sica. All twelve kept.
Create an image. The two attached sheets are inventory icons from my game (a World of Warcraft style RPG set in 1st-century Galilee, Roman-era AD 28). New batch: SWORDS. Paint a new sheet in exactly the same hand-painted World of Warcraft inventory icon style, lighting and background as the attached sheets: stylized and chunky, slightly exaggerated readable shapes that read at 40 px, bold painted highlights and visible brush strokes, smooth painted surfaces with no mosaic or tiled texture, warm key light from the upper left, soft rim light, earthy palette, like a Blizzard game icon, not a photograph. Layout: landscape 1536x1024, a precise grid of 4 columns by 3 rows = 12 square icons, each object alone and centred in its own equal cell, filling about 75-80% of the cell, with wide clear empty gutters so nothing touches a cell edge or crosses into a neighbouring cell, all on one plain flat very dark warm brown background (#1a130d), no grid lines, no borders, no frames, no text, no labels, no hands, no people, no blood, no gems, no runes, no glow. Every sword is shown whole (blade tip to pommel), unsheathed, lying on the diagonal from lower left (hilt) to upper right (point). Historically accurate 1st-century Roman, Greek and eastern weapons, each clearly different in blade shape. Row 1: (1) a short single-edged iron sword (machaira) with a gently forward-curving blade, dull grey-brown, pitted with orange rust spots, a cracked plain wooden grip, (2) a plain straight double-edged iron short sword, a simple iron bar crossguard, a smooth olive-wood grip with a round wooden pommel, (3) a short single-edged sword with a slightly forward-curving bright iron blade, a cream yellowed ivory grip with three small bronze rivets, a small bronze guard, (4) a Greek kopis: a single-edged iron blade that bends FORWARD and WIDENS toward the tip like a heavy chopper (the cutting edge is on the inside of the forward curve), a hooked bird-head hilt of dark wood. Row 2: (5) a Greek xiphos: a straight double-edged iron blade shaped like a long leaf, widest two-thirds of the way up, a small bronze crossguard, a grip bound with copper wire, a bronze disc pommel, (6) a Roman gladius hispaniensis: a long straight double-edged iron blade that narrows slightly at the middle (waisted) and ends in a long tapering point, a ribbed bone grip, a rounded wooden guard and a round wooden pommel, (7) a Roman Mainz-type gladius: a straight double-edged steel-grey blade with a slight waist and a VERY long sharp triangular point, a ribbed bone grip, a rounded wooden handguard and an egg-shaped wooden pommel, (8) a Roman Pompeii-type gladius: a straight double-edged bright iron blade with perfectly PARALLEL edges and a SHORT triangular point, a ribbed bone grip, a rounded wooden guard with a thin bronze plate, a round pommel. Row 3: (9) a magnificent Roman gladius: a polished double-edged blade with a long point, a carved ivory grip, a silver-plated rounded guard and pommel, faint engraved lines near the hilt, no gems, (10) a Roman cavalry spatha: a LONG, narrow, straight double-edged iron blade with a rounded point, a plain wooden grip, a small rounded guard and a round pommel, clearly longer than the gladii, (11) a long straight Roman cavalry sword with a bright double-edged blade, a bronze guard and bronze pommel, a grip wrapped in dark leather, very long and elegant, (12) a Thracian sica: a short iron sword whose blade curves strongly INWARD like a sickle or a curved fang, sharpened on the inner (concave) edge, a simple bone grip.
- ChatGPT drew every blade hilt upper right, point lower left (the opposite of what was asked). The existing
fishermans_machaira,hunting_knifeandhoned_machairalie the same way, so it was kept and asked for on every later sheet. - The three gladius patterns read apart: Hispaniensis waisted with a long point, Mainz with a very long point and egg pommel, Pompeii with parallel edges and a short point. The sica curves inward with the edge on the inside; the kopis bends forward and widens toward the tip, with a bird-head hilt.
- The spatha and the Sebastene spatha are not visibly longer than the gladii once each is cropped to its own square; their narrower, plainer blades still tell them apart.
Sheet B: _variants/items_sheet_weapons_b.png (1536×1024, 4×3): long swords and daggers
Keys: parthian_long_sword, seric_iron_sword, old_bronze_sword, pugio, inlaid_pugio, sica_dagger, bronze_dagger, iron_dagger, antler_hilted_dagger, parthian_dagger, cubit_dagger, rusty_knife. All twelve kept.
Excellent, all twelve swords are right, and the orientation (hilt upper right, point lower left) is good: keep it. Next sheet: long swords, daggers and a knife, in exactly the same hand-painted World of Warcraft inventory icon style, lighting and background as the previous sheet (stylized, chunky, bold painted highlights, visible brush strokes, smooth painted surfaces with no mosaic texture, warm upper-left key light, soft rim light, like a Blizzard game icon, not a photograph). Same layout: landscape 1536x1024, a precise grid of 4 columns by 3 rows = 12 square icons, each object alone and centred in its own equal cell, filling about 75-80% of the cell, with wide clear empty gutters so nothing touches a cell edge or crosses into a neighbouring cell, all on the same plain flat very dark warm brown background (#1a130d), no grid lines, no borders, no frames, no text, no labels, no hands, no people, no blood, no gems, no runes, no glow. Historically accurate 1st-century Roman-era Judea, Syria and Parthia. Every blade is shown whole on the diagonal, hilt upper right and point lower left like the last sheet; the daggers are stubbier than the swords but still fill the cell. Row 1: (1) a long straight Parthian iron sword with a broad double-edged blade, a wide flat iron crossguard, a grip wrapped in red-dyed leather and a flat round pommel, (2) a fine straight double-edged sword with a dark blue-grey blade showing a subtle wavy watered grain, a simple dark bronze guard, a black leather grip and a round pommel, elegant but plain, (3) an ancient bronze sword with a green-patinated leaf-shaped blade and a short bronze hilt with a rough cord wrapping, old and worn, (4) a Roman pugio dagger: a broad leaf-shaped double-edged iron blade with a strong raised midrib, waisted in the middle, a cross-shaped iron hilt with a round disc swelling in the middle of the grip and rivets. Row 2: (5) a Roman pugio dagger in its iron sheath, the sheath decorated with silver wire inlay and small red enamel rosettes, only the riveted iron hilt with a disc grip showing above the sheath, (6) a small curved iron dagger shaped like a crescent fang, curving INWARD, sharpened on the inner (concave) edge, a short dark horn grip, (7) an ancient small bronze dagger with a green-patinated triangular blade and a bronze tang wrapped in old cord, (8) a plain double-edged iron dagger with a straight tapering blade, a small iron crossguard and a wooden grip. Row 3: (9) a double-edged iron dagger with a grip made from a section of brown roe deer antler, the knobbly burr of the antler forming the pommel, (10) a long Parthian dagger in a dark leather scabbard whose top has four round lobes (like a four-leaf clover), the dagger drawn halfway out showing its straight double-edged blade, a bronze guard and a grip with a mushroom-shaped pommel, (11) a long straight double-edged iron dagger about a forearm long, NO crossguard at all, a plain dark wooden grip bound with a thong, the blade narrow and keen, (12) a small rusty iron kitchen knife with an orange-brown pitted blade and a split wooden handle tied with string.
- parthian_dagger: the four lobes came out as a quatrefoil fitting at the scabbard mouth rather than the scabbard outline itself (real Parthian four-lobed scabbards have the lobes on the scabbard). Kept, because it reads as an eastern sheathed dagger.
- bronze_dagger got a small cast guard as well as the cord-wrapped tang.
Sheet C: _variants/items_sheet_weapons_c.png (1536×1024, 4×3): work knives and axes
Keys: gutting_knife, shepherds_knife, flaying_knife, butchers_cleaver, bone_hilted_knife, curved_skinning_knife, master_hunting_knife, woodsmans_hatchet, old_bronze_axe, broad_axe, cedar_cutters_axe, great_felling_axe. All twelve kept.
Very good, all twelve are right. Next sheet: work knives and axes, in exactly the same hand-painted World of Warcraft inventory icon style, lighting and background as the previous sheet (stylized, chunky, bold painted highlights, visible brush strokes, smooth painted surfaces with no mosaic texture, warm upper-left key light, soft rim light, like a Blizzard game icon, not a photograph). Same layout: landscape 1536x1024, a precise grid of 4 columns by 3 rows = 12 square icons, each object alone and centred in its own equal cell, filling about 75-80% of the cell, with wide clear empty gutters so nothing touches a cell edge or crosses into a neighbouring cell, all on the same plain flat very dark warm brown background (#1a130d), no grid lines, no borders, no frames, no text, no labels, no hands, no people, no blood, no gems, no runes, no glow. Historically accurate 1st-century Roman-era Judea, Syria and Parthia. Knives lie on the diagonal like the last sheet, handle upper right and tip lower left; axes are shown whole, handle running from lower left to upper right with the head at the upper right. Row 1: (1) a short thin fisherman's gutting knife with a narrow worn iron blade and a simple pale wooden handle, a few silver fish scales stuck to the blade, (2) a broad single-edged iron shepherd's knife with a curved back, a wooden handle with a leather cord loop through its end, (3) a tanner's flaying knife with a broad rounded iron blade curving up to a blunt round tip, a stout wooden handle, (4) a heavy iron butcher's cleaver with a broad rectangular blade, a round hole near the back corner, a thick wooden handle. Row 2: (5) a sturdy single-edged iron knife with a polished pale ox-bone grip held with two iron rivets, (6) a hunter's curved skinning knife with a short, deeply upswept iron blade, a horn grip wrapped with a leather thong, (7) a long fine hunting knife with a bright leaf-shaped single-edged iron blade with a polished bevel, a small bronze guard, a ridged pale gazelle-horn grip, (8) a small woodsman's hatchet with a short wooden handle and a compact iron axe head with a slightly flared edge. Row 3: (9) an ancient green-patinated bronze axe head lashed onto a rough wooden handle with cord bindings, (10) a carpenter's broad axe with a wide flat iron blade much longer at the bottom than the top (a bearded axe), a straight ash handle, (11) a long-hafted two-handed felling axe with a heavy narrow iron head and a long straight reddish cedar handle, the handle long and thin, lying corner to corner, (12) a big two-handed iron axe with a large broad curved blade and a long thick oak handle with an iron collar below the head, lying corner to corner.
- gutting_knife: the "few fish scales" became a tiny fish motif on the blade; invisible at icon size.
- Most work knives came out with rusty, hammered blades; it suits worn tools.
Sheet D: _variants/items_sheet_weapons_d.png (1536×1024, 4×3): tool-axes, clubs and maces
Keys: dolabra, sagaris, olive_root_club, knotted_cudgel, oak_mallet, stone_mace, watchmans_club, iron_studded_club, terebinth_club, bronze_mace, parthian_mace, knobbed_throwing_club. All twelve kept.
Very good, all twelve are right. Next sheet: tool-axes, clubs and maces, in exactly the same hand-painted World of Warcraft inventory icon style, lighting and background as the previous sheet (stylized, chunky, bold painted highlights, visible brush strokes, smooth painted surfaces with no mosaic texture, warm upper-left key light, soft rim light, like a Blizzard game icon, not a photograph). Same layout: landscape 1536x1024, a precise grid of 4 columns by 3 rows = 12 square icons, each object alone and centred in its own equal cell, filling about 75-80% of the cell, with wide clear empty gutters so nothing touches a cell edge or crosses into a neighbouring cell, all on the same plain flat very dark warm brown background (#1a130d), no grid lines, no borders, no frames, no text, no labels, no hands, no people, no blood, no gems, no runes, no glow. Historically accurate 1st-century Roman-era Judea, Syria and Parthia. Each is shown whole, the handle running from lower left to the head at the upper right. Row 1: (1) a Roman dolabra: an iron tool head with an axe blade on one side and a long curved pick spike on the other side, on a straight wooden handle (like a pickaxe with one axe end), (2) a slender eastern battle axe (sagaris): a narrow iron blade on one side and a small square hammer head on the other, on a slim haft bound with bronze rings, (3) a short twisted gnarled olive-root club, heavy and knobbly at one end, pale grey-brown wood, (4) a stout oak cudgel with several hard knots standing out on its thick head, a smooth handle with a leather wrist loop. Row 2: (5) a large two-handed carpenter's maul: a big cylindrical oak mallet head bound with two iron bands, on a long straight handle, (6) an ancient mace with a pear-shaped polished grey stone head on a plain wooden handle, (7) a short hardwood watchman's club with an iron cap on its head and a leather-wrapped grip with a wrist thong, (8) a heavy wooden club with many short iron studs driven into its thick head. Row 3: (9) a smooth, dense, reddish-brown terebinth wood club with a rounded swollen head and a finely turned handle, (10) a mace with a bronze head cast with several upright flanges (ridges) on a straight ash wood handle, (11) an eastern iron mace with a round iron head covered in short rounded knobs, on an iron-banded haft with a leather grip, (12) a short throwing club with a slim handle and a heavy round knob at the end, dark polished wood.
- iron_studded_club is close to the existing
robbers_cudgel(iron spikes); the studs are shorter and the wood lighter. - sagaris reads as a slim hatchet with a small hammer back and bronze rings.
Sheet E: _variants/items_sheet_weapons_e.png (1536×1024, 4×3): spears and staffs
Keys: fire_hardened_spear, shepherds_spear, fish_spear, hunting_spear, bronze_spear, syrian_spear, auxiliary_hasta, parthian_contus, almond_walking_stick, shepherds_crook, tamarisk_staff, ox_goad. All twelve kept.
Excellent, all twelve are right. Next sheet: spears and staffs, in exactly the same hand-painted World of Warcraft inventory icon style, lighting and background as the previous sheet (stylized, chunky, bold painted highlights, visible brush strokes, smooth painted surfaces with no mosaic texture, warm upper-left key light, soft rim light, like a Blizzard game icon, not a photograph). Same layout: landscape 1536x1024, a precise grid of 4 columns by 3 rows = 12 square icons, each object alone and centred in its own equal cell, filling about 75-80% of the cell, with wide clear empty gutters so nothing touches a cell edge or crosses into a neighbouring cell, all on the same plain flat very dark warm brown background (#1a130d), no grid lines, no borders, no frames, no text, no labels, no hands, no people, no blood, no gems, no runes, no glow. Historically accurate 1st-century Roman-era Judea, Syria and Parthia. IMPORTANT: every spear and staff is LONG and THIN, drawn the full length of the cell's diagonal from the very lower-left corner to the very upper-right corner (like a long pole, not a short stick), the shaft slim but still clearly readable at 40 px (not a hair-thin line), with the spearhead at the upper right large enough to read clearly at 40 px. Row 1: (1) a simple long wooden spear made from a straight sapling, its point sharpened and blackened by fire, no metal, (2) a light shepherd's spear with a slim wooden shaft and a small leaf-shaped iron head, (3) a two-pronged fishing spear (bident) with two barbed iron prongs on a long wooden shaft, a cord wrapped below the head, (4) a stout hunting spear with an ash shaft and a long narrow leaf-shaped iron head on a socket. Row 2: (5) an ancient spear with a green-patinated bronze leaf-shaped head on a rough wooden shaft, (6) a long spear with a narrow iron head at the upper right and a pointed bronze butt-spike at the lower-left end of the shaft, (7) a Roman hasta: a long leaf-shaped iron spearhead with a midrib, a stout wooden shaft and an iron butt-spike at the other end, (8) a very long two-handed cavalry lance (contus) with a long narrow iron head, a thick shaft bound with leather at the grip and an iron butt cap. Row 3: (9) a straight peeled almond-wood walking stick, pale with a few knots, slightly bent at the top, (10) a long wooden shepherd's crook with a large curved hook at the top, (11) a light springy dark-stained tamarisk wood staff with a slight natural curve and a thickened top, (12) a long ox goad: a straight wooden pole with a small sharp iron point at the upper-right end and a small flat iron scraper blade (like a tiny spade) at the lower-left end.
- After the sheet R note (spears drawn too short), the prompt asked for every pole to run corner to corner, slim but readable at 40 px. All twelve did. They were sliced with a tighter square (bounding box × 1.08 instead of 1.14) to gain a little weight. They are much thinner than the stubby
boar_spear, which is the intended look for long weapons. - ox_goad has both ends: the point at the top and the small spade-like scraper at the butt.
Sheet F: _variants/items_sheet_weapons_f.png (1536×1024, 4×3): staffs and javelins
Keys: ash_quarterstaff, pilgrims_staff, bronze_capped_staff, fire_hardened_javelin, herdsmans_javelin, hunting_javelin, amentum_javelin, verutum, lancea, pilum, weighted_pilum, nabataean_javelin. All twelve kept (crop × 1.08 like sheet E).
Perfect, all twelve are right, exactly the length I wanted. Next sheet: staffs and javelins, in exactly the same hand-painted World of Warcraft inventory icon style, lighting and background as the previous sheet (stylized, chunky, bold painted highlights, visible brush strokes, smooth painted surfaces with no mosaic texture, warm upper-left key light, soft rim light, like a Blizzard game icon, not a photograph). Same layout: landscape 1536x1024, a precise grid of 4 columns by 3 rows = 12 square icons, each object alone and centred in its own equal cell, filling about 75-80% of the cell, with wide clear empty gutters so nothing touches a cell edge or crosses into a neighbouring cell, all on the same plain flat very dark warm brown background (#1a130d), no grid lines, no borders, no frames, no text, no labels, no hands, no people, no blood, no gems, no runes, no glow. Historically accurate 1st-century Roman-era Judea, Syria and Parthia. IMPORTANT: every staff and javelin is LONG and THIN, drawn the full length of the cell's diagonal from the very lower-left corner to the very upper-right corner, the shaft slim but still clearly readable at 40 px (not a hair-thin line), the head at the upper right large enough to read at 40 px. Javelins are lighter and slimmer than spears. Row 1: (1) a long straight seasoned ash quarterstaff, thick and smooth, with darker worn grip areas at each quarter, (2) a pilgrim's walking staff with an iron ferrule at the lower end, a smooth rounded knob at the top and a small leather loop, (3) an elegant staff of dark polished wood with a heavy bronze cap at the top and a bronze ferrule at the bottom, (4) a light wooden throwing javelin with a fire-hardened blackened point, no metal. Row 2: (5) a short light javelin with a small triangular iron point and a slim wooden shaft, (6) a balanced hunting javelin with a long leaf-shaped iron head on a smooth wooden shaft, (7) a javelin with a leaf-shaped iron head and a leather throwing thong wound around the middle of the shaft with a small loop hanging free, (8) a light Roman verutum javelin with a long slender four-sided pyramidal iron point and a thin wooden shaft. Row 3: (9) a Roman lancea light spear with a broad leaf-shaped iron head with a midrib on a short wooden shaft, (10) a Roman pilum: a wooden shaft for the lower half, then a long thin iron shank for the upper half ending in a small pyramidal point, a square wooden block where the iron joins the wood, (11) a heavy Roman pilum like (10) but with a rounded lead weight bulb at the join between the iron shank and the wooden shaft, (12) a light slim javelin with a small barbed iron head and a cord binding below it, a pale wooden shaft.
- pilum: the iron shank is about a third of the length rather than half, with the square wooden block at the join; weighted_pilum has the round bulb (painted steel-grey rather than dull lead).
- verutum has a long thin point but is otherwise close to the herdsman's javelin.
Sheet G: _variants/items_sheet_weapons_g.png (1536×1024, 4×3): bows and arrows
Keys: bent_branch_bow, herdsmans_short_bow, acacia_bow, cretan_bow, ibex_horn_bow, emesene_bow, juniper_bow kept; nabataean_bow, scythian_bow, sagittarius_bow, parthian_bow, trilobate_arrows replaced from sheets I and J.
Very good, all twelve are right. Next sheet: bows, in exactly the same hand-painted World of Warcraft inventory icon style, lighting and background as the previous sheet (stylized, chunky, bold painted highlights, visible brush strokes, smooth painted surfaces with no mosaic texture, warm upper-left key light, soft rim light, like a Blizzard game icon, not a photograph). Same layout: landscape 1536x1024, a precise grid of 4 columns by 3 rows = 12 square icons, each object alone and centred in its own equal cell, filling about 75-80% of the cell, with wide clear empty gutters so nothing touches a cell edge or crosses into a neighbouring cell, all on the same plain flat very dark warm brown background (#1a130d), no grid lines, no borders, no frames, no text, no labels, no hands, no people, no blood, no gems, no runes, no glow. Historically accurate 1st-century Roman-era Judea, Syria and Parthia. IMPORTANT, as on my attached bow sheet: every bow is shown WHOLE, both limbs complete from tip to tip, SYMMETRICAL about the grip, strung, the string running in one STRAIGHT line from one tip to the other, laid on the diagonal from lower left to upper right so the whole bow fits in the cell with a gap at both tips. No arrows on the bows. Row 1: (1) a crude simple bow made from a bent green branch with bark still on, strung with a plain cord, (2) a short plain wooden self bow, compact, with a cord-wrapped grip and a thin sinew string, (3) a long self bow of honey-orange acacia wood with a visible tight grain, a leather grip and a sinew string, (4) a recurved Nabataean bow of dark wood with both tips bent forward, a red-dyed leather grip. Row 2: (5) a compact composite bow with dark horn tips and a pale sinew back, strongly curved, a grip bound in dark thread, (6) a composite bow whose belly is made of ridged grey-brown ibex horn strips, a pale sinew back, recurved tips, (7) a short Scythian bow with the distinctive double-curved Cupid's-bow outline: two rounded humps either side of the grip and tips that hook sharply forward, dark lacquered wood and sinew, (8) a Roman auxiliary composite bow with long, stiff, STRAIGHT bone-plated ear tips (siyahs) angled forward at both ends, a wooden core, horn belly and sinew back. Row 3: (9) a fine composite bow with a cream horn belly, a tan sinew back and slender dark recurved tips, the grip bound in red thread, (10) a large powerful Parthian composite bow, strongly recurved, layered horn and sinew with bone-plated tips, the grip bound with red and gold thread, no gems, (11) a long self bow of reddish juniper wood with a pale sapwood back, a leather grip and a sinew string, (12) three reed arrows lying side by side on the diagonal, each with a small three-bladed (trilobate) golden-bronze arrowhead at the upper-right end and dark feather fletching ONLY at the lower-left tail end.
- Every bow came back whole, symmetrical and with a straight string (the sheet I lesson held). The recurves are again the stylised "game recurve" S-curve.
- Rejected: nabataean_bow (dark wood painted almost exactly in the sheet colour, about RGB 35/22/13 against 30/17/3, so after keying it looked like glass); scythian_bow (no double-hump Cupid's-bow outline); sagittarius_bow (the ears were curved, not stiff straight siyahs); parthian_bow (too close to the emesene bow, both cream with red grips); trilobate_arrows (flat barbed broadheads, not three-bladed).
Sheet H: _variants/items_sheet_weapons_h.png (1536×1024, 4×3): slings, sling bullets and throwing sticks
Keys: frayed_flax_sling (1), wool_sling (2), palm_fibre_sling (3), long_sling (4), rhodian_sling (6), balearic_sling (7), lead_sling_bullets (8), clay_sling_bullets (9), throwing_stick (10), fowlers_throwing_stick (11), benjamite_sling (12). Cell 5 (the first dark braided sling) was not used: cell 12 has more tan in the braid and stands out better.
Thank you. Most bows are right; I will ask for a few fixes later. Next sheet: slings, sling ammunition and throwing sticks, in exactly the same hand-painted World of Warcraft inventory icon style, lighting and background as the previous sheet (stylized, chunky, bold painted highlights, visible brush strokes, smooth painted surfaces with no mosaic texture, warm upper-left key light, soft rim light, like a Blizzard game icon, not a photograph). Same layout: landscape 1536x1024, a precise grid of 4 columns by 3 rows = 12 square icons, each object alone and centred in its own equal cell, filling about 75-80% of the cell, with wide clear empty gutters so nothing touches a cell edge or crosses into a neighbouring cell, all on the same plain flat very dark warm brown background (#1a130d), no grid lines, no borders, no frames, no text, no labels, no hands, no people, no blood, no gems, no runes, no glow. Historically accurate 1st-century Roman-era Judea, Syria and Parthia. A sling is two long cords with a pouch in the middle: show each one laid out in a loose S-curve or loop that fills the cell, the pouch clearly visible near the centre, a finger loop at one cord end. Make the slings clearly different in colour and material. Dark materials must still be clearly lit, with a bright rim light and highlights, so they stand out from the dark background. Row 1: (1) a frayed flax-cord sling with a rough patched sacking pouch, loose threads hanging, (2) a sling plaited from undyed cream wool cords with a small woven wool pouch, (3) a sling with stiff twisted brown date-palm fibre cords and a plaited palm-leaf pouch, (4) a sling with very long braided flax cords coiled loosely in big loops and a leather pouch. Row 2: (5) a fine braided sling of dark brown wool and black goat hair cords in a diamond pattern, a soft tan kid-leather pouch, (6) a professional slinger's sling of tightly braided pale flax with a long, cupped leather pouch and a finger loop, (7) a fine sling of braided black rush cords with a dark grey sealskin pouch, with a second small sling coiled around it, (8) a small heap of almond-shaped dull grey lead sling bullets (about seven), plain, no writing. Row 3: (9) a small heap of round reddish-orange fired clay sling balls (about seven), (10) a flat curved wooden throwing stick shaped like a gently bent boomerang-shaped club, smooth hard brown wood, (11) a curved flat wooden fowling throwing stick painted with red and black bands, (12) another variation of the dark braided sling (5), with a lighter tan pouch.
- The prompt added "dark materials must still be clearly lit, with a bright rim light", which kept the black-rush Balearic sling readable.
- balearic_sling: the "second small sling coiled around it" was left out.
- The cords are thinner than on the existing
braided_slingandgoat_hair_sling. rhodian_sling (pale flax, red-brown cupped pouch) is closest tobraided_sling, but its pouch colour differs.
Sheet I: _variants/items_sheet_weapons_i_fixups.png (1536×1024, 3×2): bow fix-ups
Keys: nabataean_bow (1), scythian_bow (2), parthian_bow (4), trilobate_arrows (5) kept. Cell 3 (sagittarius) rejected; cell 6 (a second Scythian) not used.
The slings are perfect. Now a fix-up sheet for five icons from the bow sheet. Same hand-painted style, same flat #1a130d background, smooth painted surfaces, no text, no frames, no hands, no glow: landscape 1536x1024, a precise grid of 3 columns by 2 rows = 6 square icons, each object alone and centred in its own cell, filling about 80% of the cell, with wide clear gutters so nothing touches a cell edge. Every bow is WHOLE from tip to tip, strung, the string one straight line from tip to tip, laid on the diagonal from lower left to upper right, and every bow must have a clearly DIFFERENT outline from the others. Row 1: (1) a Nabataean recurve bow of warm medium chestnut-brown wood with bright highlights (NOT dark, it must stand out clearly from the dark background), both tips bent forward away from the string, a red-dyed leather grip, (2) a Scythian bow with the famous Cupid's-bow outline: like the top edge of a heart, two big rounded arcs side by side that meet in a deep dip at the grip, then each limb ends in a small tip curling sharply outward; dark red-brown lacquered wood and pale sinew, the string straight across the whole bow, (3) a Roman auxiliary composite bow (Syrian archer's bow) whose short curved working limbs each end in a long, STRAIGHT, rigid stick-like ear of pale cream bone, about a quarter of the bow's length, angled forward like the ends of a coat hanger; the ears are clearly straight, not curved, and the string is tied to the very ends of the straight ears; tan sinew and cream horn body. Row 2: (4) a large powerful Parthian composite bow, the biggest and most imposing bow, strongly recurved, its belly of glossy dark grey-black horn with pale bone plates on both tips, a tan sinew back, the grip bound with crossed red and gold thread, no gems, (5) three reed arrows lying side by side on the diagonal, each with a small compact TRILOBATE arrowhead of golden bronze at the upper-right end: three thin fins around a central point, like a tiny three-sided pyramid with three ridges, NOT a flat broadhead and NO barbs; dark grey feather fletching ONLY at the lower-left tail end, (6) another Scythian bow like (2), seen at a slightly different angle.
- scythian_bow now has the two rounded humps meeting in a dip at the grip; parthian_bow is the biggest bow, with glossy dark grey horn, bone tips and crossed red and gold thread; the trilobate heads are compact golden-bronze three-sided points, clearly different from the grey leaf heads of
iron_tipped_arrows. - Rejected: sagittarius (cell 3) finally had straight bone ears, but its string kinked down to a knob below the grip.
- These bows were drawn larger on the sheet (crops 505–574 px), so they look a little chunkier than sheet G's bows; at 40 px they sit with
composite_bow.
Sheet J: _variants/items_sheet_weapons_j_sagittarius.png (1254×1254, 2×2): sagittarius bow
Keys: sagittarius_bow (cell 1). Cells 2–4 (the same bow in other colours) not used.
Thank you, the Nabataean bow, the Scythian bow (2), the Parthian bow and the arrows are right. One more: the Roman auxiliary bow (3) has the right straight bone ears, but its string bends down to a knob below the grip. Same style, same flat #1a130d background, no text, no hands: a square 1024x1024 sheet, 2 columns by 2 rows = 4 icons, each alone and centred in its own cell, filling about 80% of the cell, with wide clear gutters. All four cells: the same Roman auxiliary composite bow (Syrian archer's bow), whole and symmetrical, laid on the diagonal from lower left to upper right: a short curved body of cream horn and tan sinew with a dark wrapped grip in the middle, and at each end a long, STRAIGHT, rigid ear of pale cream bone angled forward (like the ends of a coat hanger); the string runs in ONE perfectly STRAIGHT line from the very tip of one ear to the very tip of the other, touching nothing in between, with a clear gap between the string and the grip, no knob, no loop on the string. Give the four small natural variations in angle and colour.
- All four had straight bone ears and a straight string. Cell 1 (honey horn, dark wrapped grip) stays apart from the red Scythian and the grey Parthian.
Notes for the next batch
- Twelve-icon 4×3 weapon sheets work well in one conversation: 90 of the 95 keys were kept from the first pass; only five bow-sheet cells needed redoing.
- "Long and thin, corner to corner, slim but readable at 40 px (not a hair-thin line)" fixes the short-spear problem from sheet R.
- Dark woods and black cords on the #1a130d sheet need "medium/bright wood" or "a bright rim light"; otherwise the keyed icon looks transparent.
- Named bow types need their outline spelled out ("two rounded arcs meeting in a dip at the grip"; "straight bone ears like the ends of a coat hanger") and "the string touches nothing between the tips".
- The Chrome tab group was reset once mid-run, taking this tab with it; reopening the conversation URL in a new tab carried on with no loss.
More wildlife: reference sheets for TRELLIS (2026-10-30; ChatGPT, conversation "Generate Animal Reference Sheet")
The meshes in public/models/animals/generated for the Bible's animals (add-more-wildlife). Each sheet is cut into one input per animal by connected regions (split.py, 3D tools folder).
-
concepts/animals_predators.png: lion, Syrian brown bear, leopard, striped hyena, jungle cat, badger.
Generate an image: a 3D-modeling reference sheet of six wild animals of 1st-century Galilee and Judea, painted in a realistic but softly hand-painted game-art style (like a high-end fantasy MMO, not cartoon, not low-poly, no blocky shapes), in the style of a naturalist plate. Layout: 3 columns x 2 rows, one animal per cell … Every animal stands still in a neutral standing pose, head level and looking straight forward along its body (not turned to the viewer), seen from its left side turned about 20 degrees toward the viewer, all four legs straight, clearly separated … Mouths closed, no whiskers. … Plain flat light-grey background, even neutral studio lighting, no shadows on the ground, no text, no labels.
-
concepts/animals_hooves_small.png: fallow deer, Arabian oryx, Levantine pig, Galilean cow, crested porcupine, spur-thighed tortoise. Same rules as the first sheet.
-
concepts/animals_reptiles.png: the scorpion, the desert monitor and the agama ("seen from above at a three-quarter angle, camera about 40 degrees above the ground … legs sprawled out to the sides, long tail lying straight behind"). Its S-curved snakes were replaced by the next sheet.
-
concepts/animals_snakes_straight.png: Palestine viper, desert horned viper, black desert cobra.
… Each snake lies stretched out STRAIGHT along a horizontal line, completely extended, with at most a very slight gentle bend, NOT S-shaped, NOT coiled, the body the same width along the line, head resting flat and level on the ground in line with the body, tail tip straight behind.
Notes: a snake modelled lying in an S cannot be straightened cleanly for the wave rig (its slices are oblique); ask for it straight.
-
concepts/animals_small_crocodile.png: chameleon, marsh frog, desert locust, Egyptian mongoose, Nile crocodile, greylag goose (the view from above, as the reptiles).
-
concepts/animals_ground_birds.png: rooster, ostrich, white stork, common crane, grey heron, great white pelican, standing ("seen from the bird's left side turned about 20 degrees toward the viewer, camera at the bird's height … wings folded against the body, head level, beak closed").
-
concepts/animals_birds_small_raptors.png: raven, house sparrow, little owl, hoopoe, cormorant, griffon vulture, short-toed snake eagle (4 × 2, last cell empty).
-
concepts/animals_flight_large.png and concepts/animals_flight_small.png: the same birds and the Egyptian fruit bat in the air, for the flight meshes.
Now a flight reference sheet for 3D reconstruction … Every bird is in gliding flight with BOTH wings spread fully and flat out to the sides, seen from above and slightly behind at about 50 degrees (we see the whole upper side of both wings, the back and the head), body pointing to the top of the image, tail spread, legs tucked away, beak closed.
Notes: TRELLIS leaves thin tufts (the lion's tail tip, the mongoose's tail, the crane's tail plumes) as flat fins; cut them or accept them at game distance. The crane's had to be cut.
Wearables library icons (2026-10-30)
Files: items/{key}.png (slice original, 326–527 px square) and items/{key}.webp (256×256, cwebp q85, 4–13 KB), 121 icons, one for every key in config/game/wearables.php → items (30 head, 31 body, 30 mantle, 30 feet). App\Game\Art picks them up by key; no code or config was changed. Tool: ChatGPT (chatgpt.com) image generation only, in Chrome, one conversation ("Create headwear icon sheet"). For style, linen_headcloth.png, plain_tunic.png, wool_mantle.png and leather_sandals.png were attached to the first prompt. Each sheet was downloaded by fetching the image blob in the page and clicking an <a download> (j12wear-*.png). All sheets came back 1536×1024 with a flat sheet colour of about RGB (24–30, 14–19, 4–11).
Same flat-sheet workflow as batch 9 and the bags: slice.py (connected components against the flat sheet colour, 1.14 padded square, keyed onto the warm radial vignette with the fitted bgparams.npy), finish.sh (sips 256 + cwebp q85), with two changes: small fragments only join an object when they lie inside its bounding box plus 12 px (stray tassels and hair from the cell above no longer land in a neighbour's icon), and CUT=1 (cut at the emptiest row and column near each grid line) was used for B2 and B3, where neighbours touched. Two specks were painted out by hand (leather_jerkin, from the goatskin hair above it; mail_shirt, a painted fleck under the hem). Every icon was checked at 80 and 44 px beside the existing clothing icons: _variants/items_wearables_contact.png (1340×1728, existing icons underlined in gold).
Style notes: the garments sit in the same warm, chunky, hand-painted look as the batch 9 clothing. Similar items are told apart by presentation as well as dye: tunics are laid open, folded or stacked; mantles are stacked, laid open, folded into a triangle, looped as a shawl, hung on a peg or gathered into a hood peak; every Jewish mantle tassel has one blue cord wound in. The three helmets of the auxiliary pattern differ in rust, trim and crest (red crest across, straw crest front to back). The caligae differ by colour and nails (iron, half missing, bronze-headed).
Sheet H1: _variants/items_sheet_wear_h1.png (ChatGPT, 1536×1024, 4×3: headcloths, turbans, fillets, caps)
Keys per cell: 1 striped_headcloth, 2 woad_headcloth, 3 shepherds_headcloth, 4 sabbath_headcloth, 5 madder_turban, 6 caravan_turban, 7 elders_turban, 8 linen_fillet, 9 woven_fillet, 10 felt_cap, 11 linen_cap, 12 madder_cap. All kept except elders_turban (cell 7 came out as a round ball, too close to wound_headcloth; replaced from fix sheet A).
Create an image. These four attached icons are from my game's inventory (a World of Warcraft style RPG set in 1st-century Galilee). New batch: HEADWEAR. Paint a new sheet in exactly the same hand-painted World of Warcraft inventory icon style, lighting and background as the attached icons (stylized, chunky, slightly exaggerated readable shapes that read at 40 px, bold painted highlights, visible brush strokes, smooth painted surfaces with no mosaic or tiled texture, warm upper-left key light, soft rim light, three-quarter view, like a Blizzard game icon, not a photograph). A LANDSCAPE 1536x1024 sheet, a precise grid of 4 columns by 3 rows = 12 icons, each object alone and centred in its own equal cell, filling about 80% of the cell, with wide clear empty gutters so nothing crosses into a neighbouring cell, all on the same plain flat very dark warm brown background (#1a130d), no grid lines, no borders, no frames, no text, no labels, no hands, no people, no heads, no mannequins, no stands. Every piece is an object on its own (folded, laid out, or standing by itself), never worn. 1st-century Galilee and the Roman East (AD 28): wool, linen, felt, straw, leather, bronze and iron only; no trousers, no buttons, no zips, no buckles, no modern shapes, no medieval armour. Every icon must be clearly different from the others in shape or colour. Row 1: (1) a striped headcloth: a large square of undyed linen (#ddd2b8) laid out flat and slightly rumpled like a big diamond, two bold madder-red stripes (#8a4234) woven down two opposite edges, a thin twisted cord of dark goat hair (#2f2b27) lying on it in a loose double loop, (2) a woad headcloth: a square of thin soft linen dyed a soft greyish woad blue (#5b6f88), folded into a neat flat smaller square with one corner turned back, no cord, (3) a shepherd's headcloth: a big heavy cloth of coarse, thick, dark brown-grey wool (#4a4036) bunched into a shaggy fold, frayed fringed ends, a narrow pale tan stripe (#8a7a60) near its edge, (4) a sabbath headcloth: a LONG narrow cloth of bright bleached white linen (#efeadb) folded lengthwise and laid in a graceful S-curve, a thin blue thread line (#3d4d6b) along both long edges. Row 2: (5) a madder turban: a long strip of madder red-brown linen (#9b5a48) wound into a firm LOW round turban standing upright like a hat, hollow inside, its wraps crossing in an X at the front, (6) a caravan turban: a TALL high-wound turban of ochre cloth (#c2a06a) with a dark brown stripe (#4a3426) along the cloth, seven turns stacked high, a loose tail hanging down one side, (7) an elder's turban: a TALL, very neat, careful wrap of pure white linen (#ece6d6), smooth even diagonal layers, dignified and crisp, (8) a linen fillet: a thick twisted rope-like headband of pale linen (#e2d9c4) tied into a ring with a knot, two long loose ends trailing away from the knot. Row 3: (9) a woven fillet: a NARROW FLAT woven band with a madder red (#8a4234) and cream (#e2d9c4) chevron pattern, lying in a loose open curl with its two tie ends crossed, (10) a felt cap: a round brimless cap of COOL pale grey felt (#7a756b) with a thick rolled rim, tipped over on its side so its hollow inside shows, (11) a linen cap: a close, light, shallow cap of folded off-white linen (#e2d9c4) with soft visible pleats and a rolled edge, like a soft coif, (12) a madder cap: a round smooth felt dome cap dyed deep red (#7a4a38), upright, with a neat seam over the crown.
Sheet H2: _variants/items_sheet_wear_h2.png (ChatGPT, 1536×1024, 4×3: felt hats, sun hats, hoods)
Keys per cell: 1 felt_pilos, 2 sailors_pilos, 3 white_pilos, 4 phrygian_cap, 5 woad_phrygian_cap, 6 travellers_petasos, 7 leather_petasos, 8 straw_sun_hat, 9 palm_leaf_hat, 10 wool_hood, 11 goat_hair_hood, 12 striped_hood. All kept except leather_petasos (pinched crown read as a cowboy hat; replaced from fix sheet A).
Thank you. Next batch: more HEADWEAR, felt hats, sun hats and hoods. Next sheet in exactly the same hand-painted World of Warcraft inventory icon style, lighting and background as the attached icons (stylized, chunky, slightly exaggerated readable shapes that read at 40 px, bold painted highlights, visible brush strokes, smooth painted surfaces with no mosaic or tiled texture, warm upper-left key light, soft rim light, three-quarter view, like a Blizzard game icon, not a photograph). A LANDSCAPE 1536x1024 sheet, a precise grid of 4 columns by 3 rows = 12 icons, each object alone and centred in its own equal cell, filling about 80% of the cell, with wide clear empty gutters so nothing crosses into a neighbouring cell, all on the same plain flat very dark warm brown background (#1a130d), no grid lines, no borders, no frames, no text, no labels, no hands, no people, no heads, no mannequins, no stands. Every piece is an object on its own (folded, laid out, or standing by itself), never worn. 1st-century Galilee and the Roman East (AD 28): wool, linen, felt, straw, leather, bronze and iron only; no trousers, no buttons, no zips, no buckles, no modern shapes, no medieval armour. Every icon must be clearly different from the others in shape or colour. Row 1: (1) a felt pilos: a TALL brimless pointed cone cap of brown felt (#7d6a52), smooth, upright, like an egg-shaped cone, (2) a sailor's pilos: a LOWER, rounder brimless cone cap of very dark charcoal felt (#3e3a36) tilted slightly, its rim stiffened with glossy black pitch in a shiny dark band (#5a4a3a), a few salt-white marks, (3) a white pilos: a smooth brimless cone cap of pale cream lamb's-wool felt (#ddd3bd), smooth and rounded as a pebble, upright, (4) a phrygian cap: a soft madder-red felt cap (#8a4234) whose tall tip curls FORWARD and down, with two ear flaps hanging at the sides, shown from the left. Row 2: (5) a woad phrygian cap: the same soft forward-curling cap shape but in woad blue felt (#4a5a7a) with a pale cream band (#d8cdb4) round its rim, shown from the right, (6) a traveller's petasos: a broad flat-brimmed Greek felt hat in warm brown (#8a7356) with a LOW rounded crown, a darker band round the crown (#6e5a44) and a thin dark chin cord (#3a2c20) hanging below in a loop, (7) a leather petasos: a sun hat of stiff glossy tanned leather (#6b4a30), broad brim turned up a little at the sides, stitched edge, a leather chin thong (#2a1e16), seen more from the side than the felt one, (8) a straw sun hat: plaited golden wheat straw (#d4b878), a VERY WIDE soft DROOPING brim and a low round crown, the plait spirals visible. Row 3: (9) a palm-leaf hat: a POINTED conical peaked hat plaited from strips of date-palm leaf (#b8a070) in a criss-cross weave, with a darker brown woven band (#7a6040) round the crown, (10) a wool hood: a pointed hood with a short round shoulder cape all in one piece, thick warm brown wool (#77654e), standing upright on its own as if stiff, the face opening empty and dark, (11) a goat-hair hood: the same pointed hood-with-cape shape in dark, coarse, hairy goat hair (#3a332c) with faint lighter grey stripes (#6b655c) like tent cloth, laid down on its side, (12) a striped hood: a pointed hood with a short cape of undyed pale wool (#bfb193), a bold woad-blue band (#3d4d6b) round the cape's lower edge, the hood point flopped over.
Sheet H3: _variants/items_sheet_wear_h3.png (ChatGPT, 1536×1024, 4×3: Roman helmets, cells 7–12 variants)
Keys per cell: 1 old_auxiliary_helmet, 2 auxiliary_helmet, 3 bronze_montefortino, 6 plumed_helmet, 10 legionary_helmet, 11 crested_helmet. Cell 4 (legionary) not used: cell 10 has more brass trim and a broader ridged neck guard, so it differs more from auxiliary_helmet. Cell 5 (crested) not used: its crest reads front to back at 44 px; cell 11 is clearly transverse. Cells 7–9 and 12 are unused variants.
Thank you. Next batch: ROMAN HELMETS of the 1st century AD (the Roman army in Judea and Syria), real archaeological types, no fantasy. Next sheet in exactly the same hand-painted World of Warcraft inventory icon style, lighting and background as the attached icons (stylized, chunky, slightly exaggerated readable shapes that read at 40 px, bold painted highlights, visible brush strokes, smooth painted surfaces with no mosaic or tiled texture, warm upper-left key light, soft rim light, three-quarter view, like a Blizzard game icon, not a photograph). A LANDSCAPE 1536x1024 sheet, a precise grid of 4 columns by 3 rows = 12 icons, each object alone and centred in its own equal cell, filling about 80% of the cell, with wide clear empty gutters so nothing crosses into a neighbouring cell, all on the same plain flat very dark warm brown background (#1a130d), no grid lines, no borders, no frames, no text, no labels, no hands, no people, no heads, no mannequins, no stands. Every piece is an object on its own (folded, laid out, or standing by itself), never worn. 1st-century Galilee and the Roman East (AD 28): wool, linen, felt, straw, leather, bronze and iron only; no trousers, no buttons, no zips, no buckles, no modern shapes, no medieval armour. Every icon must be clearly different from the others in shape or colour. Every helmet is shown on its own, empty, sitting or lying at three-quarter view, no head, no stand. Row 1: (1) an OLD auxiliary helmet: a battered iron galea (#6d6a64) with a horizontal brow guard, a short neck guard and hinged cheek pieces, dented, with orange-brown rust spots, worn bronze rivets (#7a5e3a), ONE cheek piece hanging loose and crooked on its broken hinge, (2) an auxiliary helmet: the same type in clean grey iron (#8d8a84): rounded iron bowl, horizontal brow guard, two hinged cheek pieces, a sloping neck guard, bronze rivets and a thin bronze edging (#a7814a), no crest, (3) a bronze Montefortino helmet: a simple round tall BRONZE bowl (#a7814a) with a KNOB on top of the crown, a short lip of a neck guard at the back, plain round cheek pieces, warm golden bronze with darker patina (#8a6a3a), no brow guard, (4) a legionary helmet of the Imperial Gallic type: a DEEP polished iron bowl (#9a9790) with embossed EYEBROW curves on the front, a brass-trimmed brow ridge, a BROAD ribbed neck guard that sweeps out at the back, large cheek pieces with embossed details, brass trim and rivets (#c09a52). Row 2: (5) a centurion's crested helmet: a polished bright iron galea (#b0aea8) with brass trim (#c09a52) and a big fan-shaped crest of RED horsehair (#9c3a2c) set ACROSS the helmet from ear to ear (transverse, side to side), (6) a plumed parade helmet: an iron galea (#8d8a84) with bronze fittings (#a7814a) and a crest of pale straw-gold dyed horsehair (#b8a070) running FRONT TO BACK along the top like a brush, (7) another variation of helmet 1, seen from the other side, the loose cheek piece clearly hanging, (8) another variation of helmet 2, seen from the other side. Row 3: (9) another variation of helmet 3, (10) another variation of helmet 4, (11) another variation of helmet 5, the red crest clearly running side to side, (12) another variation of helmet 6, the pale crest clearly running front to back.
Sheet B1: _variants/items_sheet_wear_b1.png (ChatGPT, 1536×1024, 4×3: tunics)
Keys per cell: 1 woad_tunic, 2 ochre_tunic, 3 undyed_wool_tunic, 4 clavi_tunic, 5 blue_clavi_tunic, 6 mended_tunic, 7 long_linen_tunic, 8 elders_long_tunic, 9 festival_tunic, 10 grey_work_tunic, 11 madder_short_tunic, 12 soldiers_tunic. Replaced from fix sheet A: long_linen_tunic (flared like a dress), soldiers_tunic (folded red, too close to the existing madder_tunic), grey_work_tunic (too brown, close to mended_tunic).
Thank you. Next batch: TUNICS (body garments of 1st-century Galilee). Next sheet in exactly the same hand-painted World of Warcraft inventory icon style, lighting and background as the attached icons (stylized, chunky, slightly exaggerated readable shapes that read at 40 px, bold painted highlights, visible brush strokes, smooth painted surfaces with no mosaic or tiled texture, warm upper-left key light, soft rim light, three-quarter view, like a Blizzard game icon, not a photograph). A LANDSCAPE 1536x1024 sheet, a precise grid of 4 columns by 3 rows = 12 icons, each object alone and centred in its own equal cell, filling about 80% of the cell, with wide clear empty gutters so nothing crosses into a neighbouring cell, all on the same plain flat very dark warm brown background (#1a130d), no grid lines, no borders, no frames, no text, no labels, no hands, no people, no heads, no mannequins, no stands. Every piece is an object on its own (folded, laid out, or standing by itself), never worn. 1st-century Galilee and the Roman East (AD 28): wool, linen, felt, straw, leather, bronze and iron only; no trousers, no buttons, no zips, no buckles, no modern shapes, no medieval armour. Every icon must be clearly different from the others in shape or colour. Every tunic is ONE simple T-shaped garment of FLAT WOVEN cloth with STRAIGHT sides, as wide at the hem as at the chest, NO waist, NO flare, NOT a dress, NOT knitted, NOT a sweater, no ribbed collar, a small round or slit neck opening; vary the presentation (laid flat, folded, on the diagonal) so they do not all look alike. Row 1: (1) a woad tunic: blue wool (#4a5a7a) to the shin with elbow sleeves, laid out flat front view, slightly sun-faded paler patches on the shoulders, (2) an ochre tunic: warm earthy weld-yellow linen (#b08a4e) with elbow sleeves, laid flat on the diagonal, (3) an undyed wool tunic: warm sheep-coloured wool (#bfb193) folded into a neat thick square with the neck opening on top, (4) a clavi tunic: undyed wool (#cbbf9f) laid flat front view, two bold DARK BROWN vertical bands (#4a3426) running from each shoulder straight down to the hem. Row 2: (5) a blue clavi tunic: bleached white linen (#e2d9c4) laid flat slightly on the diagonal, two WOAD-BLUE vertical bands (#3d4d6b) from the shoulders to the hem, fine and neat, (6) a mended tunic: an old brown wool tunic (#86755c) laid flat, with darker and lighter square PATCHES sewn on both elbows, visible darning, and a let-down hem showing two lighter lines near the bottom, (7) a long linen tunic: fine pale linen (#ddd3bd) reaching to the ANKLE with LONG sleeves to the wrist, laid out at full length so it is a tall narrow shape with the sleeves stretched out, (8) an elder's long tunic: ankle-length grey wool (#7a756b) with long sleeves and two NARROW dark clavi lines (#3a332c), laid full length on the diagonal. Row 3: (9) a festival tunic: bright bleached white linen (#efeadb), fine and crisp, folded neatly in a tall stack of flat folds, very clean, (10) a grey work tunic: a knee-length plain grey wool tunic (#6b655c) laid flat, short sleeves, one sleeve rolled, rough weave, (11) a madder short tunic: a knee-length red-brown Roman-style tunic (#8a4234) with two dark red clavi bands (#5a2a22), laid flat front view, (12) a soldier's tunic: a short-sleeved knee-length wool tunic faded from red to RUST (#8a3d2e), uneven fading, laid folded in half on the diagonal.
Sheet B2: _variants/items_sheet_wear_b2.png (ChatGPT, 1536×1024, 4×3: girded tunics, coats, fleeces, aprons, jerkin)
Keys per cell: 1 boatmans_tunic, 3 girded_travel_tunic, 7 black_sheepskin_coat, 8 goatskin_coat, 9 tanners_apron, 10 potters_apron, 11 smiths_apron, 12 leather_jerkin. Rejected, all flared like a girl's dress: cell 2 girded harvest tunic, cell 4 Greek chiton (a sundress), cell 5 dark fisher's coat, cell 6 oiled smock. Replaced from fix sheet A. Sliced with CUT=1 (the goatskin hair touched the jerkin).
Thank you. Next batch: more BODY garments, girded tunics, coats, fleeces, aprons and a leather jerkin. Next sheet in exactly the same hand-painted World of Warcraft inventory icon style, lighting and background as the attached icons (stylized, chunky, slightly exaggerated readable shapes that read at 40 px, bold painted highlights, visible brush strokes, smooth painted surfaces with no mosaic or tiled texture, warm upper-left key light, soft rim light, three-quarter view, like a Blizzard game icon, not a photograph). A LANDSCAPE 1536x1024 sheet, a precise grid of 4 columns by 3 rows = 12 icons, each object alone and centred in its own equal cell, filling about 80% of the cell, with wide clear empty gutters so nothing crosses into a neighbouring cell, all on the same plain flat very dark warm brown background (#1a130d), no grid lines, no borders, no frames, no text, no labels, no hands, no people, no heads, no mannequins, no stands. Every piece is an object on its own (folded, laid out, or standing by itself), never worn. 1st-century Galilee and the Roman East (AD 28): wool, linen, felt, straw, leather, bronze and iron only; no trousers, no buttons, no zips, no buckles, no modern shapes, no medieval armour. Every icon must be clearly different from the others in shape or colour. Tunics are FLAT WOVEN cloth with straight sides, NOT knitted, NOT a dress. Row 1: (1) a boatman's tunic: undyed knee-length wool (#b9ad94), very short sleeves, slightly crumpled and damp as if just pulled off after rowing, laid flat, (2) a girded harvest tunic: a pale straw-coloured tunic (#c7b998) laid flat with a simple rope belt tied at the waist and the skirt PULLED UP through the belt into a puffed pouch over the belt, the knees-length hem raised, (3) a girded travel tunic: a brown wool tunic (#86755c) laid flat with a plain leather belt (tied, no buckle) at the waist and the cloth bloused over it into a pouch with a small round loaf and two coins peeking out of the fold, (4) a Greek chiton: a light, airy, wide SLEEVELESS white chiton (#e8e2d2) with many soft vertical pleats, girded HIGH under the chest with a thin cord, a woad-blue band (#5b6f88) along the neckline, laid flat. Row 2: (5) a dark fisher's coat: a long SLEEVELESS outer coat of dark charcoal wool (#4a4640) laid open flat, a tan rope belt (#9c8460) tied loosely across it, (6) an oiled smock: a long shapeless coarse wool smock with short sleeves, ochre (#a8884f) with a dark glossy oily sheen and darker soaked patches, a brown hem band (#6e5a44), lying crumpled, (7) a black sheepskin coat: a long coat WITH SLEEVES made of dark brown-black sheepskins (#4a3424) laid open, thick dark curly fleece (#3a332c) curling out at the cuffs, collar, hem and open front, (8) a goatskin coat: a sleeveless coat of several sewn brown goatskins (#6e5034), the patchwork seams visible, LONG straight shaggy brown goat hair (#5a4a3a) hanging out at every edge. Row 3: (9) a tanner's apron: a PALE stiff hide apron (#9a7350) in the irregular shape of a whole hide, on a neck strap, splashed with DARK brown-black stains, (10) a potter's apron: a heavy sackcloth apron (#b9a888) with cloth ties, CAKED with cracked grey-white dried clay slip and smears, (11) a smith's apron: a long, very DARK thick ox-hide apron (#3e2c20) hanging straight, scorched with black burn marks and a few small burnt holes, glowing orange highlights only from the rim light, (12) a leather jerkin: a stiff sleeveless jerkin of tanned leather (#7a5232) to the hip standing upright on its own, LACED with a leather thong down one side, stitched edges.
Sheet B3: _variants/items_sheet_wear_b3.png (ChatGPT, 1536×1024, 4×3: armour, cells 8–12 variants)
Keys per cell: 1 studded_jerkin, 2 quilted_subarmalis, 3 officers_subarmalis, 4 rusted_mail_shirt, 5 mail_shirt, 6 bronze_scale_shirt, 7 iron_scale_shirt. Cells 8–12 are unused variants. No segmentata, no plate.
Thank you. Next batch: ARMOUR of the Roman East in the 1st century AD, real archaeological types, no fantasy, no plate armour, no medieval knight armour, no lorica segmentata. Next sheet in exactly the same hand-painted World of Warcraft inventory icon style, lighting and background as the attached icons (stylized, chunky, slightly exaggerated readable shapes that read at 40 px, bold painted highlights, visible brush strokes, smooth painted surfaces with no mosaic or tiled texture, warm upper-left key light, soft rim light, three-quarter view, like a Blizzard game icon, not a photograph). A LANDSCAPE 1536x1024 sheet, a precise grid of 4 columns by 3 rows = 12 icons, each object alone and centred in its own equal cell, filling about 80% of the cell, with wide clear empty gutters so nothing crosses into a neighbouring cell, all on the same plain flat very dark warm brown background (#1a130d), no grid lines, no borders, no frames, no text, no labels, no hands, no people, no heads, no mannequins, no stands. Every piece is an object on its own (folded, laid out, or standing by itself), never worn. 1st-century Galilee and the Roman East (AD 28): wool, linen, felt, straw, leather, bronze and iron only; no trousers, no buttons, no zips, no buckles, no modern shapes, no medieval armour. Every icon must be clearly different from the others in shape or colour. Each piece is shown on its own, laid out or folded, never worn, no mannequin, no stand. Row 1: (1) a studded jerkin: a sleeveless DARK leather jerkin (#4a3424) to the hip covered in neat rows of round BRONZE studs (#a7814a), laid flat, (2) a quilted subarmalis: a padded jacket of cream linen (#d8cdb4) with vertical quilted stitching, short sleeves, and a fringe of hanging brown leather strips (pteruges, #6b4a30) at the shoulders and around the hips, small bronze tips (#a7814a) on the strip ends, laid flat front view, (3) an officer's subarmalis: a fitted doublet of RED-dyed leather (#7a3a2e) with a row of darker red-brown fringed strips (#4a2a1e) hanging at the arms and around the skirt, thin brass trim (#c09a52), laid flat front view, (4) a rusted mail shirt: a lorica hamata of small riveted iron RINGS (#6d655c) to the thigh with short sleeves, spotted with orange RUST (#7a5e3a), a few rows of rings missing and frayed at the hem, lying folded in a heavy heap. Row 2: (5) a mail shirt: a fine lorica hamata of bright grey iron rings (#7f7c75) to the thigh, laid flat front view, with DOUBLED shoulder pieces (a short ring-mail cape over each shoulder, held by a small bronze hook) and a belt of leather set with bronze studs (#a7814a) lying across the waist, the ring texture clearly visible, (6) a bronze scale shirt: a lorica squamata of rows of SMALL rounded BRONZE scales (#b08a4e) overlapping like fish scales, short sleeves, golden and shining, laid flat front view, (7) an iron scale shirt: a lorica squamata of dark grey IRON scales (#7a776f) on a leather backing, plainer and darker, lying folded once on the diagonal, (8) another variation of the studded jerkin, seen from a different angle. Row 3: (9) another variation of the quilted subarmalis, (10) another variation of the officer's red subarmalis, (11) another variation of the rusted mail shirt, (12) another variation of the bronze scale shirt.
Sheet M1: _variants/items_sheet_wear_m1.png (ChatGPT, 1536×1024, 4×3: Jewish mantles and shawls)
Keys per cell: 1 madder_mantle, 2 ochre_mantle, 3 grey_mantle, 4 olive_mantle, 5 light_linen_mantle, 6 patched_mantle, 7 cream_shawl_mantle, 8 woad_shawl_mantle, 9 brown_shawl_mantle, 10 prayer_mantle, 11 mourning_mantle, 12 wool_shoulder_cape. All kept. cream_shawl_mantle and prayer_mantle share cream wool with dark bands; they are told apart by the U-shaped shawl loop and the hooded peak.
Thank you. Next batch: Jewish MANTLES (the large rectangular wool outer garment of 1st-century Galilee). Next sheet in exactly the same hand-painted World of Warcraft inventory icon style, lighting and background as the attached icons (stylized, chunky, slightly exaggerated readable shapes that read at 40 px, bold painted highlights, visible brush strokes, smooth painted surfaces with no mosaic or tiled texture, warm upper-left key light, soft rim light, three-quarter view, like a Blizzard game icon, not a photograph). A LANDSCAPE 1536x1024 sheet, a precise grid of 4 columns by 3 rows = 12 icons, each object alone and centred in its own equal cell, filling about 80% of the cell, with wide clear empty gutters so nothing crosses into a neighbouring cell, all on the same plain flat very dark warm brown background (#1a130d), no grid lines, no borders, no frames, no text, no labels, no hands, no people, no heads, no mannequins, no stands. Every piece is an object on its own (folded, laid out, or standing by itself), never worn. 1st-century Galilee and the Roman East (AD 28): wool, linen, felt, straw, leather, bronze and iron only; no trousers, no buttons, no zips, no buckles, no modern shapes, no medieval armour. Every icon must be clearly different from the others in shape or colour. Each mantle is a big rectangle of FLAT WOVEN cloth (NOT knitted) with a knotted wool TASSEL at each corner, and in EVERY tassel ONE bright BLUE cord (#2f4f8a) is wound in, clearly visible. Vary the presentation so no two look alike (folded stack, laid open, draped over itself, gathered), and avoid a plain folded bundle with a fringe. Row 1: (1) a madder mantle: deep red-brown wool (#7a4a38) folded into a THICK square stack, two corner tassels hanging over the front, each with a blue cord, (2) an ochre mantle: warm yellow-brown wool (#a8884f) laid half open on the diagonal, one dark brown band (#4a3426) across near the hem, four corner tassels with blue cords, (3) a grey mantle: undyed grey wool (#7a756b) loosely folded in a soft heap, TWO black bands (#2f2b27) near the hem, tassels with blue cords, (4) an olive mantle: a rare soft OLIVE GREEN wool (#5f6e46) folded once diagonally into a big triangle, one cream band (#d8cdb4) near the hem, tassels with blue cords. Row 2: (5) a light linen mantle: thin, airy, almost translucent pale linen (#e2d9c4) with a sandy band (#c4b48e), floating in soft light folds, small cream WOOL tassels with blue cords, (6) a patched mantle: thin worn brown wool (#86755c) crumpled, with several darker and lighter sewn PATCHES and darns, its tassels re-knotted, one with a blue cord, (7) a cream shawl mantle: a long cream wool shawl (#ddd3bd) with two dark brown bands (#3a2c22) near each end, laid in a U-shaped loop as if just lifted off both shoulders, both tasselled ends lying side by side in front, (8) a woad shawl mantle: a long woad-blue wool shawl (#3d4d6b) with cream bands (#d8cdb4) near each end, hanging from a short wooden peg so both tasselled ends fall straight down. Row 3: (9) a brown shawl mantle: a plain brown wool shawl (#77654e), no bands, loosely twisted into a long soft S-shaped drape, tassels at its ends, (10) a prayer mantle: a WHITE wool mantle (#ece6d6) with several BLACK bands (#2f2b27), folded with its top edge gathered up into a soft peak like a hood, white tassels with blue cords, (11) a mourning mantle: very dark rough charcoal wool (#3a332c), no bands, heaped with its top edge gathered into a soft hood peak, sombre, dark tassels each with one blue cord, (12) a wool shoulder cape: a SHORT ROUND cape (a circle with a neck hole) of warm tan wool (#9c8464) with a darker brown border (#5a4a3a), tied at the throat with a brown cord (#4a3424), laid flat.
Sheet M2: _variants/items_sheet_wear_m2.png (ChatGPT, 1536×1024, 4×3: cloaks, lacernae, paenulae, capes)
Keys per cell: 1 winter_cloak, 2 caravan_cloak, 3 grey_cloak, 4 madder_cloak, 5 woad_lacerna, 6 ochre_lacerna, 7 travelling_paenula, 8 rain_paenula, 9 leather_paenula, 10 goat_hair_cape, 11 sheepskin_cape, 12 black_fleece_cape. All kept except winter_cloak (a cable-knit blanket; replaced from fix sheet A, variant 2).
Thank you. Next batch: CLOAKS and CAPES of the Roman East. Next sheet in exactly the same hand-painted World of Warcraft inventory icon style, lighting and background as the attached icons (stylized, chunky, slightly exaggerated readable shapes that read at 40 px, bold painted highlights, visible brush strokes, smooth painted surfaces with no mosaic or tiled texture, warm upper-left key light, soft rim light, three-quarter view, like a Blizzard game icon, not a photograph). A LANDSCAPE 1536x1024 sheet, a precise grid of 4 columns by 3 rows = 12 icons, each object alone and centred in its own equal cell, filling about 80% of the cell, with wide clear empty gutters so nothing crosses into a neighbouring cell, all on the same plain flat very dark warm brown background (#1a130d), no grid lines, no borders, no frames, no text, no labels, no hands, no people, no heads, no mannequins, no stands. Every piece is an object on its own (folded, laid out, or standing by itself), never worn. 1st-century Galilee and the Roman East (AD 28): wool, linen, felt, straw, leather, bronze and iron only; no trousers, no buttons, no zips, no buckles, no modern shapes, no medieval armour. Every icon must be clearly different from the others in shape or colour. Flat woven wool or leather only, NO buttons, NO buckles, NO metal clasps on these. Vary the shapes clearly. Row 1: (1) a winter cloak: a very THICK heavy brown wool cloak (#6e5a44) with a deep soft nap, folded into a big plump blanket-like stack, its throat ties hanging loose, (2) a caravan cloak: a long coarse undyed wool cloak (#c7b998) with BROAD dark brown stripes (#5a4330) along its edges, spread out WIDE and flat seen from above, (3) a grey cloak: a plain grey wool cloak (#6b655c) to mid-calf, spread flat as a half-circle, a thin cord tied at the throat, (4) a madder cloak: a madder RED wool cloak (#8a4234) with a dark woven border (#3a2c22) down its front edges and round its hem, spread as a long trapezoid. Row 2: (5) a woad lacerna: a SHORT Roman cloak to the hip in woad blue wool (#4a5a7a), open in front, tied at the throat with a cord, laid flat, clearly small and short, (6) an ochre lacerna: the same short open hip-length cloak in yellow-brown wool (#b08a4e) with a dark brown border (#4a3426), folded over itself once, (7) a travelling paenula: a CLOSED BELL-SHAPED hooded cloak of heavy brown wool (#86755c) standing on its own like a cone, a pointed HOOD on top, a short slit down the front closed with dark leather ties (#4a3424), (8) a rain paenula: the same closed bell shape with hood, in dark, coarse, hairy goat hair (#3a332c) with faint grey stripes (#55504a), drops of rain on it, laid down on its side. Row 3: (9) a leather paenula: a hooded travelling cloak of supple tanned LEATHER (#7a5232) with a darker hood lining (#5a3a24), stitched with leather thongs (#3a2a1c) in a criss-cross seam down the front, standing, (10) a goat-hair cape: a SHORT round shoulder cape of BLACK woven goat hair (#2f2b27) with a grey band (#55504a) at its hem and a leather tie (#4a3424) at the throat, laid flat, (11) a sheepskin cape: a whole cream FLEECE (#d9cdb5) laid over itself with the curly wool OUTSIDE, the shape of a sheep's hide with its leg flaps, tied with a leather thong (#4a3424), (12) a black fleece cape: the thick CURLY fleece of a black ram (#3e3a36), wool outside, shaggy, tied with a leather thong, laid in a heap.
Sheet M3: _variants/items_sheet_wear_m3.png (ChatGPT, 1536×1024, 4×3: sagum and chlamys, cells 7–12 variants)
Keys per cell: 1 soldiers_sagum, 2 thick_sagum, 3 fine_red_sagum, 4 white_chlamys, 5 blue_chlamys, 6 ochre_chlamys. Cells 7–12 are unused variants (cell 10 is a good alternative white chlamys).
Thank you. Next batch: ROMAN MILITARY CLOAKS of the 1st century AD (sagum and chlamys). Next sheet in exactly the same hand-painted World of Warcraft inventory icon style, lighting and background as the attached icons (stylized, chunky, slightly exaggerated readable shapes that read at 40 px, bold painted highlights, visible brush strokes, smooth painted surfaces with no mosaic or tiled texture, warm upper-left key light, soft rim light, three-quarter view, like a Blizzard game icon, not a photograph). A LANDSCAPE 1536x1024 sheet, a precise grid of 4 columns by 3 rows = 12 icons, each object alone and centred in its own equal cell, filling about 80% of the cell, with wide clear empty gutters so nothing crosses into a neighbouring cell, all on the same plain flat very dark warm brown background (#1a130d), no grid lines, no borders, no frames, no text, no labels, no hands, no people, no heads, no mannequins, no stands. Every piece is an object on its own (folded, laid out, or standing by itself), never worn. 1st-century Galilee and the Roman East (AD 28): wool, linen, felt, straw, leather, bronze and iron only; no trousers, no buttons, no zips, no buckles, no modern shapes, no medieval armour. Every icon must be clearly different from the others in shape or colour. The only metal on these is ONE round brooch (a bronze or iron fibula or disc brooch). Row 1: (1) a soldier's sagum: a big SQUARE military cloak of thick red-brown wool (#7a3a2e), folded into a square with one corner gathered and pinned with a bronze bow fibula brooch (#a7814a), (2) a thick sagum: the same square cloak in heavy, greasy-looking dark brown Gallic wool (#6e5a44) with a darker border (#4a3e32), a plain grey IRON ring brooch (#5d5a55), folded loosely, (3) a fine red sagum: a BRIGHT red wool cloak (#9c3a2c) with a BLACK border (#2f2b27), neatly folded, a round polished bronze DISC brooch (#c09a52) on top, (4) a white chlamys: a short white riding cloak (#e8e2d2), a long rectangle spread flat, a woad-blue border band (#5b6f88), a bronze brooch (#a7814a) at one top corner, little round lead weights hanging at the lower corners. Row 2: (5) a blue chlamys: a short woad-blue riding cloak (#3d4d6b) draped in a swinging curve, a bronze brooch, small lead weights at its corners, (6) an ochre chlamys: a sun-coloured golden ochre cloak (#c2a06a) with a red-brown border (#7a4a38), an iron brooch (#5d5a55), laid flat with weighted corners, (7) another variation of cloak 1, (8) another variation of cloak 2. Row 3: (9) another variation of cloak 3, (10) another variation of cloak 4, (11) another variation of cloak 5, (12) another variation of cloak 6.
Sheet F1: _variants/items_sheet_wear_f1.png (ChatGPT, 1536×1024, 4×3: sandals)
Keys per cell: 1 red_leather_sandals, 2 goat_leather_sandals, 3 white_festival_sandals, 4 rush_sandals, 5 boatmans_sandals, 6 ankle_strap_sandals, 7 black_ankle_sandals, 8 hobnailed_sandals, 9 pilgrim_sandals, 10 greek_laced_sandals, 11 high_laced_sandals, 12 hunters_laced_sandals. Replaced from fix sheet A: boatmans_sandals (wide strap, read as modern pool slides) and hunters_laced_sandals (an odd tube shape).
Thank you. Next batch: SANDALS of 1st-century Galilee. Next sheet in exactly the same hand-painted World of Warcraft inventory icon style, lighting and background as the attached icons (stylized, chunky, slightly exaggerated readable shapes that read at 40 px, bold painted highlights, visible brush strokes, smooth painted surfaces with no mosaic or tiled texture, warm upper-left key light, soft rim light, three-quarter view, like a Blizzard game icon, not a photograph). A LANDSCAPE 1536x1024 sheet, a precise grid of 4 columns by 3 rows = 12 icons, each object alone and centred in its own equal cell, filling about 80% of the cell, with wide clear empty gutters so nothing crosses into a neighbouring cell, all on the same plain flat very dark warm brown background (#1a130d), no grid lines, no borders, no frames, no text, no labels, no hands, no people, no heads, no mannequins, no stands. Every piece is an object on its own (folded, laid out, or standing by itself), never worn. 1st-century Galilee and the Roman East (AD 28): wool, linen, felt, straw, leather, bronze and iron only; no trousers, no buttons, no zips, no buckles, no modern shapes, no medieval armour. Every icon must be clearly different from the others in shape or colour. Each icon is a PAIR of sandals (no feet inside), leather or plant fibre on flat soles, NO buckles, NO metal rings, NO toe post, NOT flip-flops, nothing modern; straps are tied or knotted. Vary the arrangement (side by side, one on the other, one standing, one turned over) and the colours clearly. Row 1: (1) red leather sandals: brown soles with straps of leather dyed bright madder RED (#8a3d2e), side by side, (2) goat leather sandals: soft light tan goat leather (#9a7350) on a THIN sole, one lying across the other, (3) white festival sandals: neat sandals with WHITENED cream straps (#d8cdb4) on pale soles, clean, side by side, (4) rush sandals: soles and straps PLAITED from greenish-tan lake rushes (#a8a070), rough and loose. Row 2: (5) a boatman's sandals: oiled dark brown leather (#4a3e32) with a wet shine, a SINGLE wide strap over the toes and nothing else, (6) ankle-strap sandals: brown leather (#6e4a2e), a long strap wound once round as a loop where the ankle would be, one sandal standing upright with its ankle loop, (7) black ankle sandals: neat BLACKENED leather (#2f2b27) straps and an ankle tie, glossy, (8) hobnailed sandals: thick brown soles (#5a3e28) tied at the ankle, one sandal TURNED OVER showing rows of round iron hobnails on its sole. Row 3: (9) pilgrim sandals: warm brown leather (#7a5232) with DOUBLE-STITCHED thick soles and ankle straps, a little dusty from the road, (10) Greek laced sandals: thin BLACK leather thongs (#2a221c) laced in a criss-cross lattice up the shin, one sandal standing with its thongs crossing upward like a lattice, (11) high laced sandals: long TAN leather thongs (#8a6040) laced criss-cross nearly to the knee, one sandal standing with its TALL lacing, (12) a hunter's laced sandals: dark rawhide (#4a3424) with pale raw edges, laced high in X crossings, lying on their sides with the long thongs coiled.
Sheet F2: _variants/items_sheet_wear_f2.png (ChatGPT, 1536×1024, 4×3: sock sandals, leg wraps, carbatinae, calcei)
Keys per cell: 1 wool_sock_sandals, 2 red_sock_sandals, 3 felt_sock_sandals, 4 linen_leg_wraps, 5 wool_leg_wraps, 6 tall_leg_wraps, 7 carbatinae, 8 red_carbatinae, 9 black_carbatinae, 10 black_calcei, 11 town_shoes, 12 red_calcei. Cells 10–12 (calcei) were laced through eyelets like modern ankle boots; replaced from fix sheet B. The socks have a slightly ribbed top.
Thank you. Next batch: more FOOTWEAR of the Roman East: socks with sandals, leg wraps, one-piece lattice shoes and closed shoes. Next sheet in exactly the same hand-painted World of Warcraft inventory icon style, lighting and background as the attached icons (stylized, chunky, slightly exaggerated readable shapes that read at 40 px, bold painted highlights, visible brush strokes, smooth painted surfaces with no mosaic or tiled texture, warm upper-left key light, soft rim light, three-quarter view, like a Blizzard game icon, not a photograph). A LANDSCAPE 1536x1024 sheet, a precise grid of 4 columns by 3 rows = 12 icons, each object alone and centred in its own equal cell, filling about 80% of the cell, with wide clear empty gutters so nothing crosses into a neighbouring cell, all on the same plain flat very dark warm brown background (#1a130d), no grid lines, no borders, no frames, no text, no labels, no hands, no people, no heads, no mannequins, no stands. Every piece is an object on its own (folded, laid out, or standing by itself), never worn. 1st-century Galilee and the Roman East (AD 28): wool, linen, felt, straw, leather, bronze and iron only; no trousers, no buttons, no zips, no buckles, no modern shapes, no medieval armour. Every icon must be clearly different from the others in shape or colour. Each icon is a PAIR (no feet, no legs), NO buckles, NO metal eyelets, NO modern laces or soles, nothing modern. Row 1: (1) wool sock sandals: thick felted cream wool SOCKS (#bfb193) stuffed so they stand, each inside a brown leather sandal (#5e3b22) with straps over the sock, (2) red sock sandals: bright madder-RED wool socks (#8a4234) in sturdy dark leather sandals (#3e2c20), (3) felt sock sandals: grey FELT socks (#7a756b) in plain dark brown sandals (#4a3322), one lying on its side, (4) linen leg wraps: two long strips of pale linen (#d8cdb4), one ROLLED UP tight like a bandage roll, the other partly unrolled snaking out, with thin brown leather ties (#5e3b22). Row 2: (5) wool leg wraps: two rolled bands of brown wool (#77654e) with dark tie cords (#3f2a1b), side by side, (6) tall leg wraps: red-brown wool bands (#7a3a2e) wound in a SPIRAL into a tall empty tube shape standing upright, dark ties (#3f2a1b) at top and bottom, a simple sandal under it, (7) carbatinae: a pair of one-piece shoes of pale rawhide (#9a7350), the upper cut into an open LATTICE of loops and drawn up round the foot by a brown thong (#6b4a30), (8) red carbatinae: the same one-piece lattice shoes in RED-dyed leather (#8a3d2e) with a dark thong (#4a2a1e). Row 3: (9) black carbatinae: the same lattice shoes in BLACK hide (#2f2b27) laced with a PALE cream thong (#c4a57a), (10) black calcei: CLOSED Roman shoes of black leather (#2a221c) to the ankle, laced over the instep with black leather straps tied in a knot, (11) town shoes: closed BROWN leather shoes (#6b4a30) to the ankle, laced in front with dark thongs (#4a3424), (12) red calcei: soft closed RED leather shoes (#8a3d2e) with dark laces (#3a2a1c), elegant.
Sheet F3: _variants/items_sheet_wear_f3.png (ChatGPT, 1536×1024, 4×3: caligae and boots, cells 7–12 variants)
Keys per cell: 1 worn_caligae, 5 winter_boots, 8 caligae, 9 officers_caligae, 12 drovers_boots. Cell 8 used for caligae (grey iron nails; cell 2's read as brass), cell 9 for officers_caligae (bronze nail heads clearest), cell 12 for drovers_boots (hairier than 6). Both hunting boots (4, 10) had eyelets like modern lace-up boots; replaced from fix sheet B.
Thank you. Next batch: ROMAN MILITARY BOOTS (caligae) and boots. Next sheet in exactly the same hand-painted World of Warcraft inventory icon style, lighting and background as the attached icons (stylized, chunky, slightly exaggerated readable shapes that read at 40 px, bold painted highlights, visible brush strokes, smooth painted surfaces with no mosaic or tiled texture, warm upper-left key light, soft rim light, three-quarter view, like a Blizzard game icon, not a photograph). A LANDSCAPE 1536x1024 sheet, a precise grid of 4 columns by 3 rows = 12 icons, each object alone and centred in its own equal cell, filling about 80% of the cell, with wide clear empty gutters so nothing crosses into a neighbouring cell, all on the same plain flat very dark warm brown background (#1a130d), no grid lines, no borders, no frames, no text, no labels, no hands, no people, no heads, no mannequins, no stands. Every piece is an object on its own (folded, laid out, or standing by itself), never worn. 1st-century Galilee and the Roman East (AD 28): wool, linen, felt, straw, leather, bronze and iron only; no trousers, no buttons, no zips, no buckles, no modern shapes, no medieval armour. Every icon must be clearly different from the others in shape or colour. Each icon is a PAIR (no feet, no legs), NO buckles, NO metal eyelets, nothing modern. Caligae are OPEN-WORK sandal-boots: a thick sole and an upper cut into a lattice of leather straps, laced up over the instep and ankle, the toes showing, with rows of round iron HOBNAILS on the sole. Row 1: (1) worn caligae: old scuffed caligae of brown leather (#5e4430), cracked straps, one boot TURNED OVER showing a sole with HALF the iron hobnails (#5d5a55) missing, (2) caligae: strong dark brown caligae (#4a3424), the leather lattice laced over the instep, a thick sole with neat rows of iron hobnails (#7a776f), side by side, (3) officer's caligae: fine, neat, VERY DARK near-black caligae (#2f2620) with BRONZE-headed nails (#a7814a) shining on the soles and neat lacing, (4) hunting boots: TALL laced boots of soft TAN leather (#8a6040) to mid-calf with a turned-down pale CUFF (#c4a57a) at the top, laced up the front with dark thongs (#4a3424), closed toes. Row 2: (5) winter boots: dark brown leather boots (#4a3424) lined with thick cream FLEECE (#d9cdb5) that CURLS out over the top, (6) a drover's boots: rough goatskin boots (#6e5034) to the calf with the brown HAIR still on the outside, laced with a thong (#3a2a1c), muddy, (7) another variation of 1, (8) another variation of 2. Row 3: (9) another variation of 3, (10) another variation of 4, (11) another variation of 5, (12) another variation of 6.
Sheet FIX1: _variants/items_sheet_wear_fix_a1.png and _variants/items_sheet_wear_fix_a2.png (ChatGPT, 1536×1024, 4×3: fix-ups (ChatGPT returned two versions to compare))
Keys per cell: 1 elders_turban, 2 leather_petasos, 3 long_linen_tunic, 4 soldiers_tunic, 5 grey_work_tunic, 6 girded_harvest_tunic, 7 greek_chiton, 8 dark_fishers_coat, 9 oiled_smock, 10 winter_cloak (from A2), 11 boatmans_sandals, 12 hunters_laced_sandals. All from A1 except winter_cloak from A2 (A1's read as a tied sack). The chiton and the harvest tunic are shown folded, which keeps them from reading as dresses. boatmans_sandals are still a single-strap slide in both versions; that matches the item ("a single strap over the toes"), so they were kept. (The prompt's "Same same" is a typo kept as sent.)
Thank you, these are right. Now a FIX-UP sheet: twelve replacements for icons that came out wrong. Same same hand-painted World of Warcraft inventory icon style, lighting and background as the attached icons (stylized, chunky, slightly exaggerated readable shapes that read at 40 px, bold painted highlights, visible brush strokes, smooth painted surfaces with no mosaic or tiled texture, warm upper-left key light, soft rim light, three-quarter view, like a Blizzard game icon, not a photograph). A LANDSCAPE 1536x1024 sheet, a precise grid of 4 columns by 3 rows = 12 icons, each object alone and centred in its own equal cell, filling about 80% of the cell, with wide clear empty gutters so nothing crosses into a neighbouring cell, all on the same plain flat very dark warm brown background (#1a130d), no grid lines, no borders, no frames, no text, no labels, no hands, no people, no heads, no mannequins, no stands. Every piece is an object on its own (folded, laid out, or standing by itself), never worn. 1st-century Galilee and the Roman East (AD 28): wool, linen, felt, straw, leather, bronze and iron only; no trousers, no buttons, no zips, no buckles, no modern shapes, no medieval armour. Every icon must be clearly different from the others in shape or colour. All tunics and coats are MEN's working garments of FLAT WOVEN cloth (NOT knitted, NOT a sweater), with PERFECTLY STRAIGHT sides, as wide at the hem as at the chest, NO waist, NO flare, NO skirt, NOT a dress. Row 1: (1) an elder's turban: a TALL cylindrical turban of pure white linen (#ece6d6), clearly TALLER than it is wide, neat crisp diagonal wraps stacked high, a flat top, standing upright, (2) a leather petasos: a Greek sun hat of stiff glossy tanned leather (#6b4a30) with a broad FLAT ROUND brim and a LOW round bowl-shaped crown like a shallow dome, a stitched edge and a thin leather chin thong (#2a1e16) hanging below; NOT a cowboy hat, no pinched or dented crown, (3) a long linen tunic: fine pale linen (#ddd3bd) to the ANKLE, laid flat front view as ONE tall straight narrow RECTANGLE with LONG straight sleeves stretched out to both sides like a cross, the hem exactly as wide as the chest, (4) a soldier's tunic: a short-sleeved knee-length wool tunic laid flat front view, WIDER than it is tall, a simple T-shape, faded from red to RUST (#8a3d2e) with patchy pale sun-fading, a plain leather belt tied (no buckle) lying across the waist. Row 2: (5) a grey work tunic: a knee-length tunic of ASH GREY wool (#6b655c), clearly GREY and not brown, laid flat on the diagonal as a straight T-shape, short sleeves, one sleeve rolled, (6) a girded harvest tunic: a pale straw-coloured man's tunic (#c7b998) folded once lengthwise and lying on the diagonal, a twisted rope belt TIED round its middle, the cloth above the belt pulled up and bulging over it in a fat pouch fold, (7) a Greek chiton: fine white linen (#e8e2d2) FOLDED neatly into a flat rectangle with many soft vertical pleats, a woad-blue band (#5b6f88) along the neck edge on top, a thin cream girdle cord coiled on top of it, (8) a dark fisher's coat: a long SLEEVELESS outer coat of dark charcoal wool (#4a4640) laid flat, made of two straight rectangular front panels open down the front like a long vest, PERFECTLY straight sides, a tan rope belt (#9c8460) lying across it. Row 3: (9) an oiled smock: a coarse wool smock folded once into a thick heavy oblong, ochre (#a8884f) with a dark glossy OILY sheen and darker soaked patches, a brown hem band (#6e5a44) showing at the fold, (10) a winter cloak: a very THICK heavy brown cloak (#6e5a44) of FLAT WOVEN wool with a soft brushed nap, NOT knitted, NO cable pattern, NO ribbing, folded into a big plump stack, two cords for tying it at the throat hanging down, (11) a boatman's sandals: a pair of simple flat leather soles of dark OILED leather (#4a3e32) glistening wet with water drops, each with ONE THIN leather strap crossing over the toes, lying one partly on top of the other at an angle; NOT slides, NOT slippers, no toe post, nothing modern, (12) a hunter's laced sandals: a pair of sandals of dark rawhide (#4a3424) with pale raw cut edges lying flat side by side, each with VERY LONG rawhide thongs fanned out beside it in loose loops and X crossings; no tubes, no boots, no buckles, no metal.
Sheet FIX2: _variants/items_sheet_wear_fix_b.png (ChatGPT, 1536×1024, 4×2: calcei and hunting boots)
Keys per cell: 1 black_calcei, 2 town_shoes, 3 red_calcei, 8 hunting_boots. Calcei now have straps crossed over the instep and wrapped round the ankle, on flat soles with no welt. Cell 4 hunting boots still had eyelets; cell 8 laces through cut loops.
Thank you, those are right. One last small fix-up sheet: closed Roman shoes and Greek hunting boots that looked too modern. Same hand-painted World of Warcraft inventory icon style, lighting and background (stylized, chunky, readable at 40 px, bold painted highlights, visible brush strokes, smooth painted surfaces, warm upper-left key light, soft rim light, three-quarter view). A LANDSCAPE 1536x1024 sheet, a precise grid of 4 columns by 2 rows = 8 icons, each a PAIR of shoes alone and centred in its own equal cell, filling about 80% of the cell, with wide clear gutters, on the same plain flat very dark warm brown background (#1a130d), no text, no frames, no feet, no legs. Ancient Roman and Greek footwear ONLY: soft leather sewn in one piece, thin flat leather soles with no heel and no welt stitching, the leather straps wrapped AROUND the ankle and tied in a knot; NO eyelets, NO lace holes, NO modern shoelaces, NO buckles, NO rubber soles, NOT modern boots, NOT work boots. Row 1: (1) black calcei: a pair of closed Roman shoes of soft BLACK leather (#2a221c) to the ankle, with long black leather straps that cross over the instep and WRAP twice round the ankle, tied in a knot in front with the strap ends hanging, (2) town shoes: the same closed Roman shoes in warm BROWN leather (#6b4a30), dark brown straps (#4a3424) crossed over the instep and wrapped round the ankle, (3) red calcei: the same soft closed shoes in RED leather (#8a3d2e), elegant and smooth, dark straps (#3a2a1c) wrapped round the ankle, (4) hunting boots: a pair of TALL soft TAN leather Greek boots (#8a6040) to mid-calf with open toes like a sandal-boot, laced up the front with a dark leather thong (#4a3424) zig-zagging through cut loops in the leather, a pale floppy turned-down cuff (#c4a57a) at the top. Row 2: (5) another variation of 1, (6) another variation of 2, (7) another variation of 3, (8) another variation of 4.
Sheet HOME: _variants/items_sheet_wear_home_mantle.png (ChatGPT, 1254×1254, 2×2): mantle_woven_at_home
Added afterwards on request, same conversation, same contract: items/mantle_woven_at_home.png (slice original, 691×691) and .webp (256×256, q85, 9 KB). The item is in config/game/items.php (rare, undyed #b8a888, blue border #3c5a7a). Kept: cell 1 (top left), the blue border showing on the top fold and down the side, tied with a bow, two tassels with blue cords. Cells 2–4 are close variants. Checked at 44 px beside bordered_mantle, wool_mantle, cream_shawl_mantle, woad_mantle and madder_mantle: it is the only tied bundle and the only one with a blue border on undyed wool. The weave is coarser and blockier than the other mantles, which suits a home weave. The tassels came out cream rather than pure white.
Thank you, those are right. One more item: a precious, homely mantle. Same hand-painted World of Warcraft inventory icon style, lighting and background as before (stylized, chunky, readable at 40 px, bold painted highlights, visible brush strokes, smooth painted surfaces, warm upper-left key light, soft rim light, three-quarter view). A SQUARE 1024x1024 sheet, a precise grid of 2 columns by 2 rows = 4 icons, four variations of the SAME object, each alone and centred in its own equal cell, filling about 80% of the cell, with wide clear gutters, on the same plain flat very dark warm brown background (#1a130d), no text, no frames, no hands, no people. The object: "a mantle woven at home": a rectangle of UNDYED oatmeal-coloured wool (#b8a888), a slightly uneven homely hand weave with a few thicker threads and a gently wavy edge, FOLDED into a neat thick oblong bundle, a wide woad-BLUE woven border (#3c5a7a) running along its edge so the blue band shows clearly on the top fold and down the side, the bundle TIED once around the middle with a thin plain undyed wool cord in a small bow, and two knotted tassels of WHITE wool hanging from the front corners, each tassel with ONE blue cord wound in. Flat woven wool, NOT knitted, NO fringe along the whole edge, no metal, no buttons. It should look loved and handmade, a gift from home.
Notes for the next batch
- Landscape 4×3 sheets at 1536×1024 give slice originals of about 330–480 px, a little smaller than the 3×3 square sheets (420–650) but plenty for 256 webp.
- Garments laid flat still flare into dresses (girded tunics, chitons, sleeveless coats). Folding them, or "two straight rectangular front panels ... PERFECTLY straight sides", fixes it.
- "Another variation of cell N" in the last row gives a free second pick for hard items (helmets, armour, military cloaks, caligae); it was worth it every time.
- Closed shoes and tall boots come back with modern eyelets unless the prompt says "straps wrapped AROUND the ankle and tied; NO eyelets, NO lace holes, NO modern shoelaces, no welt stitching".
- The tassel blue cord shows up reliably when the prompt says "in EVERY tassel ONE bright BLUE cord is wound in".
- ChatGPT sometimes returns two images to compare; the page then has two new blobs, and both were downloaded.
- A thick wool cloak folded into a stack comes out cable-knit; say "FLAT WOVEN wool with a soft brushed nap, NO cable pattern".
Modeler concept sheets M1–M5 (ASSET-QUEUE, 2026-10-30)
ChatGPT in Chrome, one conversation ("Generate Tree Concept Sheet", https://chatgpt.com/c/6ae4bee3-b150-83ed-8b87-63ae00a0295f), in this order so the five share one look. Each is the only variant, 1536×1024 PNG, saved unchanged. Prompts are the queue rows' text with the framing below; M2–M5 open with "Now a new image in exactly the same painterly stylized World of Warcraft style, lighting and plain flat light-grey background, landscape 3:2, no text, no labels, no people".
- concepts/woodlandTrees.png (M1, 2.2 MB): Tabor oak (with a 1.7 m silhouette marker), Kermes oak dome, Atlantic terebinth, Palestine terebinth with red fruit. Note: the oak's crown and the Kermes dome touch slightly.
Generate an image: a concept sheet of woodland trees for a 3D game modeler, landscape 3:2. Painterly stylized World of Warcraft style, hand-painted, chunky readable shapes, soft top-down light, plain flat light-grey background, no text, no labels, no people. Four isolated trees in a row, evenly spaced, not touching, each in three-quarter view, standing on a small patch of dry ground for scale, with a plain 1.7 m tall dark grey human silhouette marker standing beside the first tree: (1) an old Tabor oak (Quercus ithaburensis): short massive leaning trunk splitting low into 2-3 heavy crooked limbs, a very broad flat-topped umbrella crown wider than tall, lobed grey-green leaves, big acorn cups; (2) a Kermes oak (Quercus calliprinos) as a dense dark-green evergreen dome from several stems, foliage almost to the ground, small holly-like leaves; (3) an Atlantic terebinth (Pistacia atlantica): one stout pale grey fissured trunk and a high round crown of dark pinnate leaves; (4) a Palestine terebinth (Pistacia palaestina): a shrubby multi-stem small tree with reddish young leaves and clusters of small red fruit. Hills of Galilee, 1st century. No magic, no creatures.
- concepts/riverPlants.png (M2, 2.8 MB): Euphrates poplar, willow by water, oleander, tamarisk, reed clump, papyrus clump (2 × 3). Note: the poplar is compact and oak-like rather than a tall loose 10 m crown.
- concepts/wildShrubs.png (M3, 2.3 MB): umbrella-thorn acacia, white broom, bay laurel, myrtle. Note: the acacia's crown overhangs the broom.
- concepts/ruralStructures1.png (M4, 2.1 MB): dry-stone sheepfold with thorn top, hurdle gate and corner shelter; black goat-hair tent with mats and jars; rock-cut tomb with forecourt and rolling stone.
- concepts/ruralStructures2.png (M5, 2.1 MB): winepress with treading floor, channel, vat and cupmarks; terrace wall with olive sapling; field wall with thornbush; round migdal with branch booth. Notes: the winepress reads as built blocks rather than cut into bedrock; the field wall uses squared rather than rounded fieldstones.
Animal portraits, batch 2 (2026-10-30): the Bible's animals
Target-frame portraits for the 38 species added by add-more-wildlife. Tool: ChatGPT image generation in Chrome, in one new conversation ("Generate animal portrait sheet", 2026-10-30), with _variants/animals_sheet_b.png attached as the style reference (the same reference the 2026-10-28 batch used). The style is the same as the earlier sets: head-and-shoulders (head-and-neck for birds; a close study of the head and front of the body for snakes, the scorpion, lizards, the frog and the locust), three-quarter view facing slightly left, and a dark warm-brown background. Every sheet is 3×2 at 1536×1024, so each cell is cut directly at 512 px. Files: animals/{key}.png (512×512 cell crop) and animals/{key}.webp (512×512, cwebp q85, 19–50 KB). Edges touched by a neighbour were faded to the sheet's own background colour (sampled from the corners) over 6–44 px.
Sheet F: _variants/animals_sheet_f.png
Keys: lion, brown_bear, leopard, striped_hyena, badger. The jungle_cat from this sheet (long caracal-like black ear tufts) was replaced from sheet L. Hyena: right edge faded 24 px (its crest reaches into the next cell).
Generate an image. The attached sheet is the style reference for animal portraits in my game J12 (a World of Warcraft style RPG set in 1st-century Galilee and Judea): match its painterly hand-painted brushwork, warm Mediterranean key light, soft rim light, earthy palette, dark background and layout exactly. Make a NEW sheet in that same style: landscape 1536x1024, a precise grid of 3 columns by 2 rows = 6 square portraits, each centred in its own equal square cell with clear empty gutters between them and a little empty space above heads, ears, manes and horns so nothing touches the cell edge. All on one plain flat very dark warm brown background (#1a130d), no grid lines, no borders, no frames, no text, no labels. Each portrait is a head-and-shoulders study of one real, naturalistic Levantine animal, three-quarter view facing slightly left, filling about 80% of its cell, the lower body fading softly into the dark background at the bottom. Calm and dignified, never monstrous: natural eyes (no glow), mouths closed, no snarling, no bared teeth, no blood. Row 1: (1) an Asiatic lion, adult male, tawny coat, a modest, fairly short mane that is darker brown than the face, calm heavy-lidded amber eyes, (2) a Syrian brown bear, pale straw-brown to cream-buff fur, rounded ears, small dark eyes, gentle, (3) a Persian leopard, pale greyish-tawny coat with large dark rosettes, pale green-gold eyes, calm and watchful. Row 2: (4) a striped hyena, shaggy grey-buff coat with black vertical stripes, a tall crest of long hair along the neck, large pointed ears, black throat patch, mouth closed, (5) a jungle cat, slender, plain sandy-grey coat, long legs, tall ears with small black ear tufts, faint bars on the legs, (6) a Eurasian badger, grey body, black-and-white striped face with a white stripe down the nose, small ears with white tips.
- The lion's mane came out fuller than "modest", but it is darker than the face and reads as a lion at a glance. Kept.
Sheet G: _variants/animals_sheet_g.png
Keys: fallow_deer, oryx, cattle, porcupine, mongoose. The pig from this sheet looked like the existing wild boar and was replaced from sheet L.
Beautiful, exactly right. Now the next sheet in exactly the same style, lighting, dark background and layout (landscape 1536x1024, a precise grid of 3 columns by 2 rows = 6 square head-and-shoulders portraits, each centred in its own equal square cell, three-quarter view facing slightly left, the lower body fading into the dark background, no text, no frames). Antlers, horns and ears must stay completely INSIDE their own cell with clear empty space above them: for the animals with tall antlers or long horns, make the animal a little smaller in its cell (about 70%) so the whole antlers and horns fit. Calm and dignified, natural eyes, mouths closed. Row 1: (1) a Mesopotamian fallow deer buck, rich reddish-fawn coat with white spots on the flanks, broad flat palmate antlers, (2) an Arabian oryx, almost pure white coat, dark brown-black facial markings and dark legs, two very long, thin, straight horns rising back (show both whole horns, inside the cell), (3) a dark, bristly Levantine domestic pig, black-grey coarse bristles, long snout, small upright ears, no tusks. Row 2: (4) a small reddish-brown Galilean village cow, short curved horns, a light dewlap, gentle eyes (different from a plough ox: smaller, female, softer face), (5) an Indian crested porcupine, long black-and-white banded quills raised in a crest over its back, a blunt dark furry face with small eyes, (6) an Egyptian mongoose, long slender body, grizzled grey-brown fur, small rounded ears, a pointed face with a dark pink nose.
- "Make the animal a little smaller (about 70%)" kept the oryx horns and fallow antlers whole inside their cells.
Sheet H: _variants/animals_sheet_h.png
Keys: tortoise, crocodile, viper, horned_viper, cobra, scorpion.
Very good. Next sheet, exactly the same style, lighting, dark background and layout (landscape 1536x1024, 3 columns by 2 rows = 6 square portraits, each centred in its own equal square cell with clear empty gutters, nothing touching the cell edge, no text, no frames). These are smaller creatures, so each portrait is a close, naturalistic study of the HEAD and the FRONT of the body, three-quarter view facing slightly left, filling about 80% of its cell, the rest of the body fading softly into the dark background. Calm, natural eyes (no glow), mouths CLOSED, no tongues, no fangs, no hissing, no blood, not menacing. Row 1: (1) a spur-thighed tortoise, high domed shell of yellow-ochre and dark brown plates, its scaly head and front leg out of the shell, (2) a Nile crocodile, head and shoulders, olive-bronze scaly hide, mouth fully closed, calm yellow-green eye, (3) a Palestine viper, grey-buff body with a dark brown zig-zag band down the back, broad triangular head resting on its coiled body, mouth closed. Row 2: (4) a desert horned viper, pale sandy colour with faint darker blotches, a small pointed horn-like scale above each eye, resting on its coils, mouth closed, (5) a black desert cobra, glossy jet-black scales catching the warm light, head slightly raised but the hood FOLDED flat (not spread), mouth closed, no tongue, (6) a pale yellow deathstalker scorpion, translucent straw-yellow body, slender claws held forward, tail curled over its back.
- The cobra's hood is folded and no tongue shows; the crocodile's closed jaw shows its interlocking teeth, which is natural. The horned viper's two horns overlap in three-quarter view, so they read as a pair of spikes above the visible eye.
Sheet I: _variants/animals_sheet_i.png
Keys: monitor, agama, frog, locust. The chameleon (a veiled chameleon with a tall casque) and the bat (hanging upside down) were replaced from sheet L.
Excellent. Next sheet, exactly the same style, lighting, dark background and layout (landscape 1536x1024, 3 columns by 2 rows = 6 square portraits, each centred in its own equal square cell with clear empty gutters, nothing touching the cell edge, no text, no frames). Again close, naturalistic studies of the HEAD and FRONT of the body of small creatures, three-quarter view facing slightly left, filling about 80% of the cell, the rest fading softly into the dark background. Calm, natural eyes (no glow), mouths closed, no tongues out, not menacing. Row 1: (1) a desert monitor lizard, long sandy-brown head and neck with faint darker bands, small beaded scales, (2) a starred rock agama (Laudakia stellio), dark grey-brown spiny scales with pale yellowish star-like spots, broad head, resting on a sunlit rock, (3) a common chameleon, bright leaf-green with pale stripes, curled tail, gripping a thin twig, one turret eye looking toward us. Row 2: (4) a marsh frog, olive-green with dark spots, golden eye, a pale stripe down the back, sitting at the water's edge, (5) a desert locust, yellow-ochre adult with dark-speckled folded wings, large compound eye, short antennae, seen close up, (6) an Egyptian fruit bat hanging upside down, wings folded around its body, a soft brown fox-like face with large dark eyes and small rounded ears, warm brown fur.
- The frog is a little stout and toad-like for a marsh frog, but it matches the brief (olive-green, dark spots, golden eye, at the water). Kept.
Sheet J: _variants/animals_sheet_j.png
Keys: rooster, raven, sparrow, little_owl, hoopoe (cropped from y=482 because its crest rises above the row line), cormorant. Raven: bottom 44 px faded to hide the hoopoe crest tips.
Very good. Next sheet: birds, in exactly the same style, lighting, dark background and layout as the first sheets (landscape 1536x1024, 3 columns by 2 rows = 6 square portraits, each centred in its own equal square cell with clear empty gutters and a little empty space above heads and crests so nothing touches the cell edge, no text, no frames). Each is a head-and-neck portrait of one real, naturalistic Levantine bird, three-quarter view facing slightly left, filling about 80% of its cell, the body fading softly into the dark background at the bottom. Calm and dignified, natural eyes (no glow), beaks closed. Row 1: (1) a red village rooster, glowing red-orange hackles, a large upright red comb and wattles, glossy dark green-black tail feathers just showing, (2) a common raven, glossy blue-black plumage, heavy black beak, shaggy throat feathers, dark eye, (3) a male house sparrow, grey crown, chestnut nape, black bib, white cheek, streaked brown back. Row 2: (4) a little owl, small and round, brown with white spots, pale eyebrows, yellow eyes, (5) a hoopoe with its crest RAISED in a fan: orange-pink head and crest feathers tipped with black, long thin slightly curved beak, black-and-white barred wings (keep the whole crest inside the cell), (6) a great cormorant, black plumage with a bronze-green sheen, white cheek and throat patch, hooked grey beak, green eye.
Sheet K: _variants/animals_sheet_k.png
Keys: griffon_vulture, short_toed_eagle, white_stork, crane, grey_heron, pelican.
Beautiful. Next sheet: large birds, exactly the same style, lighting, dark background and layout (landscape 1536x1024, 3 columns by 2 rows = 6 square portraits, each centred in its own equal square cell with clear empty gutters and empty space above the heads so nothing touches the cell edge, no text, no frames). Each is a head-and-neck portrait, three-quarter view facing slightly left, filling about 80% of its cell, the body fading softly into the dark background at the bottom; for the long-necked birds show the head and the upper neck large in the cell (not the whole bird), with the long beaks fully inside the cell. Calm and dignified, natural eyes (no glow), beaks closed. Row 1: (1) a griffon vulture, pale buff-white downy head and neck, a fluffy cream ruff at the base of the neck, sandy-brown body feathers, heavy pale hooked beak, (2) a short-toed snake eagle, a big ROUND owl-like head, bright yellow eyes, pale greyish-brown head and chest, white underparts lightly barred, dark hooked beak, (3) a white stork, white head and neck, long straight red beak, black wing feathers at the bottom. Row 2: (4) a common crane, slate-grey neck, black-and-white head pattern with a white stripe from the eye down the neck, a small red patch on the crown, straight grey-green beak, (5) a grey heron, white head with a black stripe over the eye ending in thin black plumes, grey back, dagger-like yellow beak, (6) a great white pelican, white plumage with a faint pink-peach flush, very long beak with a yellow-orange pouch folded under it, pinkish bare skin around the eye.
Sheet L: _variants/animals_sheet_l.png (the last two species plus four redos)
Keys: ostrich, goose, and the replacements jungle_cat, pig, chameleon, bat (bat cropped from y=506 to keep its ear tips).
Excellent, all six are right. Last sheet, exactly the same style, lighting, dark background and layout (landscape 1536x1024, 3 columns by 2 rows = 6 square portraits, each centred in its own equal square cell with clear empty gutters and empty space above heads and ears so nothing touches the cell edge, three-quarter view facing slightly left, filling about 80% of the cell, the body fading softly into the dark background at the bottom, no text, no frames). Calm and dignified, natural eyes (no glow), mouths and beaks closed. Row 1: (1) an ostrich, head and long neck: small flat head, big dark eye with long lashes, broad flat pale pink-grey beak, the neck bare and pinkish-grey with a few bristly feathers, the black body plumage with white wing plumes just showing at the bottom, (2) a greylag goose, head and neck, grey-brown plumage with pale-edged feather rows on the neck, thick orange beak, pinkish eye ring, (3) a JUNGLE CAT (not a caracal, not a lynx): a slender plain sandy-grey wild cat with a fairly long face, tall rounded-pointed ears with only SHORT, small dark tips (no long black ear tufts), pale throat, faint dark bars on the upper legs, yellow-green eyes. Row 2: (4) a Levantine village PIG, clearly domestic and NOT a wild boar: a rounder, heavier, smoother body, sparse coarse dark grey-black bristles through which the dark skin shows, a shorter straight snout with a flat pink-grey disc, small upright ears, small calm eyes, no tusks, no mane, (5) a COMMON CHAMELEON (Chamaeleo chamaeleon, not a veiled chameleon): a LOW, rounded casque on the head (no tall helmet), leaf-green with a pale stripe along the side, turret eye, gripping a thin twig with its curled tail, the whole twig and tail inside the cell, (6) an Egyptian fruit bat, UPRIGHT (head at the top, not hanging upside down), wings folded close around the body, a soft brown fox-like face with large dark eyes, small rounded ears and a dog-like muzzle, warm brown fur.
- Jungle cat: the ear tips are now short dark tufts rather than the caracal plumes of sheet F. Pig: a pink-grey snout disc, a rounder head and no mane, so it no longer reads as
boar. Chameleon: a lower casque than the sheet I veiled chameleon, though still a little raised.
Notes for the next batch
- Six 3×2 sheets plus one fix-up sheet covered 38 species; 34 were kept from the first pass.
- ChatGPT draws a "domestic pig" as a wild boar, a "jungle cat" with caracal ear plumes and a "common chameleon" as a veiled chameleon unless the prompt says "NOT a wild boar / not a caracal / not a veiled chameleon" and spells out the difference.
- Ask for bats upright; "hanging" gives an upside-down face that is hard to read in a target frame.
- The Chrome tab group was reset once mid-run (after sheet J). Reopening the conversation URL in a new tab carried on with no loss.
NPC portraits for PortraitCoverageTest (artist, 2026-10-30)
List: openspec/maps/PORTRAITS-NEEDED.md (map-pass residents, donkey dealers, older people without a portrait). Style as "Portraits (ChatGPT)" above, with portraits/simon.png attached to the first message of each conversation. Files: portraits/<key>.png and portraits/<key>@web.png, both 512×512 (the same pixels, as for the earlier sheets).
Ordinary people: 2×2 sheets. One ChatGPT conversation, "Generate Character Portrait Grid" (https://chatgpt.com/c/6ae4c5ac-7584-83eb-94f9-82af12ca10ff). Each sheet is 1254×1254 with dark gutters about 27–32 px wide through the middle; the cells are cut inside the detected gutters (darkest band within 35–65 % of each axis), squared about the cell centre (about 611 px), then scaled to 512. Every crop was checked for centring (figure centroid at 0.35–0.48 of the width, as expected for a three-quarter turn to the left) and for bleed across the gutter (edge luminance on the gutter side under 40).
First prompt (sheet 1, with simon.png):
Generate an image. The attached portrait is the style reference for a series of character portraits for my game J12, a World of Warcraft style RPG set in 1st-century Galilee, Judea and the Roman east (AD 28-50). Match it exactly: the same semi-realistic painterly oil rendering and brushwork, warm soft key light from the left with a gentle warm gold rim light, head-and-shoulders bust framing, each figure turned three-quarters to the viewer's left, plain warm dark brown background with a soft vignette. Do not copy the man in the reference; paint four new people, each with a clearly different face. Make a SQUARE 1024x1024 image: a precise 2x2 grid of four equal square portraits, separated by straight, clear gutters of flat very dark brown (#140e09) about 24 px wide running through the exact middle in both directions. Each cell is a complete, self-contained portrait centred in its own cell with its own dark brown vignette, a little empty space above the head, nothing crossing the gutters, no borders, no frames, no text, no labels. No halo, no glow, no weapons drawn. Historically accurate 1st-century dress: wool and linen tunics, wool mantles, cloth caps and headcloths, women with a veil over the head and shoulders; never trousers, nothing medieval. Small props in hand only where described. Top-left: Hananya … Top-right: Yoram … Bottom-left: Ezer … Bottom-right: Zimrah …
Later sheets: "Excellent. Next 2x2 sheet, exactly the same style, lighting, three-quarter turn to the viewer's left, framing, straight dark gutters through the exact middle and dark brown vignette background as before (square, four self-contained portraits, nothing crossing the gutters, no text). Four new, clearly different people; 1st-century dress, women veiled over head and shoulders, never trousers, no halo, no glow." followed by the four people, each described from their PORTRAITS-NEEDED.md look (name, role, age, face, hair, tunic, mantle, prop). All sheets kept on the first variant unless noted.
| Sheet | Top-left | Top-right | Bottom-left | Bottom-right |
|---|---|---|---|---|
| 1 | hananya | yoram | ezer | zimrah |
| 2 | natan | halfon | achbor | elyakim |
| 3 | kleon | shabtai | shifra_of_nephtoah | yoav_of_rephaim |
| 4 | natan_the_vinedresser | shimri_the_shepherd | sychar_hoglah | sychar_milcah |
| 5 | sychar_helek | sychar_shemida | sychar_abiezer | hizkiah_of_apollonia |
| 6 | elnatan_of_ono | shaphan_of_hadid | amram_the_herdsman | antipatris_potter |
| 7 | antipatris_reed_cutter | antipatris_olive_grower | antipatris_innkeeper | antipatris_estate_farmer |
| 8 | antipatris_shepherd | bethlehem_herodium_widow | bethlehem_herodium_shepherd | bethlehem_herodium_north_farmer |
| 9 | bethlehem_herodium_gardener | bethlehem_herodium_quarryman | bethlehem_herodium_householder | chorazin_donkeys |
| 10 | chorazin_shepherd | chorazin_upland_farmer | chorazin_vinedresser | chorazin_quarryman |
| 11 | jericho_tollkeeper | jericho_widow | jericho_goatherd | jericho_innkeeper |
| 12 | jericho_balsam_keeper | jericho_farmer | lower_galilee_sepphoris_mason | lower_galilee_cana_stonecutter |
| 13 | lower_galilee_netofa_farmer | lower_galilee_shikhin_potter | lower_galilee_nain_householder | sebaste_vinedresser |
| 14 | sebaste_farmer | sebaste_quarryman | sebaste_spring_keeper | sebaste_terrace_farmer |
| 15 | sebaste_stable_keeper | hippos_donkeys | jericho_donkeys | sebaste_donkeys |
| 16 | bethlehem_herodium_donkeys | antipatris_donkeys | caesarea_philippi_donkeys | antioch_donkeys |
| 17 | antioch_boatman | antioch_hazzan | antioch_widow | antioch_host |
| 18 | antioch_seller | rome_salt_worker | rome_fisherman | rome_prayer_elder |
| 19 | rome_widow | rome_vilicus | rome_brickmaker | samaritan_elder |
Notes on the sheets: the gutters came back 26–33 px wide and dark (mean luminance 5–13) on every sheet, so no cell needed fading. Props stay inside their own cells (donkeys, a camel, a bucket, a lamp with an ordinary small flame). rome_prayer_elder wears a small dark skullcap that reads a little like a modern kippah; repaint if that matters. The sheets themselves are in the scratchpad only (not kept in _variants/).
Scripture figures: one at a time. A second ChatGPT conversation (https://chatgpt.com/c/6ae4cfc9-bf3c-83ed-824e-07352b07418a, titled "Generate Mary Portrait Image") with portraits/simon.png attached to the first message. Each source is 1254×1254, scaled to 512. First prompt:
Generate an image. The attached portrait is the style reference for a series of character portraits for my game J12, a reverent, historically grounded RPG set in 1st-century Galilee and Judea (AD 28-50) in the painterly spirit of World of Warcraft character art. Match the reference exactly: the same semi-realistic painterly oil rendering and brushwork, warm soft key light from the left with a gentle warm gold rim light, head-and-shoulders bust framing, the figure turned three-quarters to the viewer's left, centred, plain warm dark brown background with a soft vignette, square 1024x1024, a little space above the head, no text, no border, no frame. Do not copy the man in the reference. Historically accurate 1st-century dress (wool and linen, veil for women), never trousers, nothing medieval. Treat the subject with reverence and restraint: no halo, no glow, no light rays, no religious symbols. Subject: Mary, the mother of Jesus, at about fifty, among the believers in Jerusalem after the Ascension (Acts 1:14): a quiet, thoughtful, dignified face with fine lines of age and sorrow and calm strength, a few strands of greying hair just visible under a dark blue wool veil that covers her head and shoulders, a simple grey-violet wool tunic. Plain and real, an ordinary Galilean woman of her age; no crown, no jewellery.
Later prompts: "Very good. Next portrait in the same series, exactly the same style, lighting, framing and dark brown vignette background, one single image, no text, no halo, no glow, 1st-century dress." plus the subject (name and Scripture reference, or "unnamed"; age; face; hair; tunic; mantle; prop). From Cleopas on each prompt also asks for "a clearly different face looking ahead (not upward)" with specific bone structure, because Bartimaeus, the man born blind and the man from the tombs had come out nearly identical (looking up, same curly black hair and beard, same brown mantle).
| Key | Subject as prompted | Notes |
|---|---|---|
| mary_mother_of_jesus | Mary, about 50, dark blue veil, grey-violet tunic (Acts 1:14) | ChatGPT offered two variants to compare; variant 1 kept (veil with a pale inner lining, calmer face). No halo or glow. |
| zacchaeus | short, well-fed, round warm face, madder-red tunic, gold-ochre mantle (Luke 19) | |
| nicodemus | learned old face, white hair and beard, white tunic, deep blue mantle (John 3) | |
| joseph_of_arimathea | grave, grey hair and beard, white tunic, dark violet mantle (Mark 15:43) | |
| lazarus | about 30, black hair and beard, calm, white tunic, cream mantle (John 11) | Checked against portraits/jesus.png: shorter hair, cream mantle, a different man. |
| mary_of_bethany | about 24, sand veil, plum-grey tunic (Luke 10:39) | |
| bartimaeus | weathered, newly seeing, brown tunic, worn dark brown mantle (Mark 10) | |
| man_born_blind | lean angular face, cropped hair, stubble, pale tunic, grey-brown mantle (John 9, unnamed) | Repainted (the first try looked like Bartimaeus). |
| bethesda_man | thin greying face, rolled mat under his arm (John 5, unnamed) | |
| man_from_the_tombs | broad heavy-boned face, long hair tied back, calm eyes, oatmeal mantle (Mark 5, unnamed) | Repainted (the first try looked like Bartimaeus). |
| aeneas | thin face just risen from illness (Acts 9:33) | |
| cleopas | long narrow face, hooked nose, cropped hair, satchel strap (Luke 24) | |
| john_mark | young slim face, sparse black beard, slate-blue mantle (Acts 12:12) | |
| james_the_lords_brother | grave, long brown beard, white tunic, brown mantle with one tassel (Gal 1:19) | |
| silas | square jaw, cropped hair, cream tunic, blue mantle, travel strap (Acts 15:22) | |
| judas_barsabbas | heavy jaw, thick black beard, sand tunic, rust mantle (Acts 15:22) | |
| gentile_brother | clean-shaven Greek, curly hair, wine-red mantle with brooch (Gal 2:12, unnamed) | |
| one_from_james | stern Judean, long beard with grey, olive mantle with tassels (Gal 2:12, unnamed) | |
| jordan_mother | young mother, sand veil, russet tunic, no child shown (Mark 10:13, unnamed) | |
| colt_owner | broad ruddy face, bushy beard, rope halter (Mark 11:3, unnamed) | |
| greek_pilgrim | light-skinned Greek, light-brown hair, blue-grey mantle with brooch (John 12:20, unnamed) |
Replacement prompts (same conversation): man_born_blind — "a lean, angular face with hollow cheeks and a long thin nose, very short-cropped black hair, only a short black stubble beard, large dark eyes wide open and blinking in the light as if seeing for the first time … looking ahead (not upward), a pale undyed tunic and a dark grey-brown mantle"; man_from_the_tombs — "a broad, heavy-boned face with a wide nose and a strong brow, sun-weathered olive-brown skin, very thick long black hair roughly tied back and a long untrimmed black beard, deep calm peaceful eyes looking ahead … a plain dun tunic and a borrowed oatmeal mantle a little too large for him. Nothing frightening: no chains, no wounds." The repainted man_from_the_tombs is the same long-haired, bearded type as portraits/jesus.png (different face, hair tied back, fuller beard, brown and oatmeal clothes rather than the blue mantle); check it side by side if that matters.
Result: php artisan test --compact tests/Feature/PortraitCoverageTest.php passes (2026-10-30), 97 portraits added (76 from 19 sheets, 21 singles; two singles repainted).
Repaints after review (2026-10-30, same singles conversation, one image each, 1254 → 512):
man_from_the_tombs(third version, replaces the long-haired one that read too close toportraits/jesus.png): "the man of the Gerasenes, healed, clothed and in his right mind (Mark 5:15; unnamed), about 30: a gaunt, hollow-cheeked, thin face; hair cropped very short and uneven, almost shorn; only a sparse, patchy short beard; lighter brown skin weathered by the sun; a few old pale healed scars on his brow and on the wrist of the hand resting at his chest; calm, wondering, gentle eyes looking ahead; a borrowed plain undyed tunic that is a little too big for his thin frame, no mantle. No wildness, no chains, no fresh wounds." Checked side by side with the Jesus portrait: clearly a different man.rome_prayer_elder(replaces the sheet-18 cell with a skullcap): "Hanin, a Jewish elder of the synagogue community in Rome, about 66: a dignified, kindly old face, grey hair and a full grey beard, a cream linen tunic, and his dark blue wool mantle drawn up over the back of his head as a head covering in the 1st-century way (no cap, no skullcap, no kippah, no hat)."bethlehem_herodium_shepherd(replaces the sheet-8 cell that looked likeantipatris_shepherd): "Asaph, a shepherd of the hills near Bethlehem, about 45 but looking older: a small, wiry, narrow-shouldered man with a lean, deeply sun-creased face, keen narrowed eyes watching the hillside, a short close-trimmed beard heavily streaked with grey, a striped madder-red and cream headcloth wrapped around his head and tied at the back, a coarse undyed wool tunic and a dun mantle, a sling cord over one shoulder. No staff, no sheepskin."
Opening cinematic backdrops: by_the_jordan (2026-10-30)
- Tool: ChatGPT (chatgpt.com) image generation in the user's Chrome, one conversation ("Generate Historical Scene Image"), in a tab opened and closed for this run. Each image was downloaded by fetching its blob in page JavaScript and moved out of ~/Downloads.
- Use: full-screen painted backdrops behind the subtitles of the opening cinematic
by_the_jordan(config/game/cinematics.php, John 1:28–42), with a slow Ken Burns pan (about 8% scale-up). Both are composed with the key subjects inside the outer ~6% of each edge, and a calm bottom quarter for the subtitle gradient. - Files:
art/cinematic-<name>.png(ChatGPT original, untouched) andart/cinematic-<name>.webp(cwebp -q 82 -m 6, same pixel size). ChatGPT returns about 1670 wide, so there is no 1920 version (never upscaled). Rejected first variants are kept in_variants/cinematic-<name>-v1.png.
Bethany beyond the Jordan — art/cinematic-by_the_jordan.png / .webp (1672×941)
Please generate an image. Use case: historical-scene. Asset type: finished WIDE 16:9 landscape painted backdrop for the opening cinematic of the historical RPG J12 (1792x1024 or 1536x1024). It sits full-screen behind subtitles with a slow Ken Burns zoom, so keep every important subject well inside the frame (nothing important within the outer 6% of any edge), and keep the bottom quarter calm and uncluttered (just grass, reeds, water or shadowed earth, no key subject). Subject: Bethany beyond the Jordan, around AD 28, where John was baptizing (John 1:28-37), late afternoon turning golden. Beautiful hand-painted cinematic historical game environment art: tactile brush strokes, very high craft, rich believable details, grounded World of Warcraft environment-art clarity without fantasy objects. Scene: a shallow, slow, green-brown Jordan river winding through the dry Jordan valley between banks thick with tall reeds and feathery tamarisk thickets, low bare tawny-ochre hills and a hazy valley beyond. Midground, centre-left: John the Baptizer standing waist-deep in the river, a lean bearded man with long dark hair in a rough brown camel-hair garment and a leather belt, one arm raised in mid-gesture toward the bank; on the near bank a small crowd of ordinary people waiting at the water's edge (men and women in plain wool and linen tunics, mantles, head cloths and veils, sandals, beards). Middle ground right of centre on the bank, on a slight rise above the bottom quarter: two young Galilean fishermen, about 20-30, seen from behind and in three-quarter back view, one with a short dark beard and a brown mantle, the other younger with a sand-coloured mantle, both turning to look along the bank path. Their gaze leads upstream along a dusty footpath through the reeds to a lone small figure walking away from us, far in the distance, seen only from behind: a man in a cream tunic with an indigo mantle, tiny in the frame, no face visible, just an ordinary traveller on foot. A few simple reed-and-palm-frond shelters on the bank; no other buildings. High in the warm sky, one small ordinary white dove in flight, just a bird. Warm low golden sunlight from the west, long soft shadows, soft rim light on figures and reeds, teal-green water reflections, ochre hills, olive and sage greens. Calm open sky in the upper area. Strong depth and a clear readable composition with the eye led from the fishermen to the distant walker. NO text, lettering, labels, UI, logos, watermark, halos, glows, light rays, god rays, sunbeams from the clouds, glowing dove, magic, angels, crosses. NO trousers, no medieval, modern or fantasy clothing or armour, no churches, domes, ruins or stone buildings, no bridges. People are ordinary and reverent; nobody looks at the camera.
Follow-up (variant 2, kept):
Very good. Please make one revised version of this same image, keeping the same composition, style, river, John, the crowd, the reed shelters, the two fishermen seen from behind and the bottom quarter of calm water and reeds. Changes: (1) the sun must be a plain soft disc low over the hills with NO starburst, no rays, no beams, no lens flare, just warm diffuse golden light; make it slightly earlier, late afternoon turning golden, with a little more blue left high in the sky. (2) Move the lone distant walker on the path (cream tunic, indigo mantle, seen only from behind, small, no face) further from the right edge, to about 75% of the width, still walking away upstream along the path in the fishermen's line of sight. (3) Keep the small white dove an ordinary bird, not glowing. No text, halos, glows or rays.
Kept: variant 2. Variant 1 (_variants/cinematic-by_the_jordan-v1.png) had a small starburst of rays round the sun and the walker at about 86% of the width, too near the Ken Burns edge. Notes: John stands waist-deep at about 33% x, 55% y, gesturing toward the fishermen. The two fishermen (Andrew and the other disciple, John 1:40) are seen from behind at about 77% x, 50% y. The walker (Jesus, cream tunic and indigo mantle, back view, no face) is a tiny figure on the path at about 71% x, 40% y. The dove is a plain white bird at about 27% x, 12% y. The sun is a plain disc at the left over the hills. The crowd's left edge touches the left frame (unimportant extras). The bottom quarter is open water and reeds. Painterly licence: date palms along the banks.
Capernaum, the house at night — art/cinematic-capernaum_night.png / .webp (1659×948)
Thank you, that is perfect. Next image, same painterly style and quality, a new separate image. Asset type: finished WIDE 16:9 landscape painted backdrop for the same opening cinematic of J12 (1792x1024 or 1536x1024). It sits full-screen behind subtitles with a slow Ken Burns zoom, so keep every important subject well inside the frame (nothing important within the outer 6% of any edge), and keep the bottom quarter calm and dark (a plain shadowed earthen floor, no key subject there). Subject: inside a humble black-basalt fisherman's house in Capernaum on the Sea of Galilee at night, around AD 28, weeks after the Jordan. Beautiful hand-painted cinematic historical game environment art: tactile brush strokes, very high craft, grounded World of Warcraft environment-art clarity, quiet and reverent. The room: rough, chunky walls of dry-laid warm-charcoal basalt fieldstones (warm charcoal, never pure black) with mud mortar, a packed-earth floor, a heavy rough wooden roof beam overhead with reeds and mud of the flat roof visible between smaller crossing poles. A single small open clay oil lamp (a simple pinched or round Herodian-style lamp with one small flame) burning low on a stone ledge in the wall at about centre height; its small warm amber pool of light catches the rough basalt stones and fades quickly into deep blue-brown shadow. In the shadows around: a brown fishing net folded and heaped on a bench with cork floats, a large clay water jar, a few baskets, a rolled woven reed sleeping mat, a wool blanket. A man sits awake on a low stool or mat beside the lamp, slightly right of centre, seen from behind and in partial silhouette so no face is visible: Simon, a sturdy, broad-shouldered Galilean fisherman of about 30 with short dark curly hair and a dark beard just visible at the edge of his cheek, in a plain undyed wool tunic with a dark brown mantle loose over his shoulders, forearms on his knees, quietly thinking. Through a small high window or the gap of the doorway, a sliver of cool moonlit blue night. Colour: warm amber lamplight against cool deep blue-violet night shadow, warm charcoal basalt, ochre and brown textiles. Calm, intimate, still. NO text, lettering, UI, logos, watermark, halos, glows beyond the tiny real lamp flame, light rays, beams, magic, crosses, menorah, candles, fireplace. NO trousers, no modern, medieval or European furniture, no chairs, no tables with four legs, no glass, no metal lantern. Nobody looks at the camera.
Follow-up (variant 2, kept):
Lovely mood. Please make one revised version of this interior, keeping the same room, lamp on the stone ledge, basalt walls, roof beams, net with floats, water jar, baskets, blanket, window with the moon and the doorway to the moonlit lake. Changes: (1) Move the camera further back and a little higher so Simon is smaller in the frame: his whole seated figure (head to stool) should sit in the middle band, between about 30% and 72% of the image height, slightly right of centre, still seen from behind and in partial silhouette, no face visible. (2) The bottom quarter of the image must be only calm, bare, dark packed-earth floor and perhaps the edge of a reed mat, with no feet, stool, figure or bright object in it. (3) Keep the doorway and its view of the lake a little further in from the right edge. (4) Make it clearly hand-painted like the Jordan image: visible broad brush strokes, painterly stylised WoW environment-art forms, less photographic. Same rules: no text, halos, glows beyond the tiny lamp flame, rays or beams; no trousers.
Kept: variant 2. Variant 1 (_variants/cinematic-capernaum_night-v1.png) was closer to photographic, and Simon's legs, sandals and stool filled the bottom quarter (the subtitle band). Notes: the lamp sits on a wall ledge at about 42% x, 31% y. Simon (back view, no face) sits on a wicker stool at about 60% x, between 31% and 66% of the height. The window with the moon is upper left, and the doorway to the moonlit lake is at about 77–90% x. Nets with floats, a bench, the water jar, baskets and a blanket are on the left. The bottom third is bare packed-earth floor with the corner of a reed mat at the lower right. The rafters are poles with reed matting (the mud layer is not visible from inside).
En Gedi NPC portraits (j12-artist, 2026-10-31)
Eight residents of the En Gedi zone (config/game/ein_gedi.php). Made like "NPC portraits for PortraitCoverageTest" above: ChatGPT in Chrome, one new conversation ("Generate Character Portraits", https://chatgpt.com/c/6ae51680-0610-83ed-8167-babce49c2224), portraits/[email protected] attached to the first message, two 2×2 sheets of 1254×1254. The cells were cut inside the detected gutters (x 614–639, y 615–638 on both sheets), squared about the cell centre (608 px) and scaled to 512. Files: portraits/<key>.png and portraits/<key>@web.png, both 512×512 and the same pixels. Downloaded by fetching the image blob in the page and clicking an <a download>. The sheets stay in the scratchpad only.
Sheet 1 prompt (with [email protected]):
Generate an image. The attached portrait is the style reference for a series of character portraits for my game J12, a World of Warcraft style RPG set in 1st-century Galilee and Judea (AD 28-50). Match it exactly: the same semi-realistic painterly oil rendering and brushwork, warm soft key light from the left with a gentle warm gold rim light, head-and-shoulders bust framing, each figure turned three-quarters to the viewer's left, plain warm dark brown background with a soft vignette. Do not copy the man in the reference; paint four new people, each with a clearly different face. Make a SQUARE 1024x1024 image: a precise 2x2 grid of four equal square portraits, separated by straight, clear gutters of flat very dark brown (#140e09) about 24 px wide running through the exact middle in both directions. Each cell is a complete, self-contained portrait centred in its own cell with its own dark brown vignette, a little empty space above the head, nothing crossing the gutters, no borders, no frames, no text, no labels. No halo, no glow, no weapons drawn. Historically accurate 1st-century dress: wool and linen tunics, wool mantles, cloth headcloths, women with a veil over the head and shoulders; never trousers, nothing medieval. Small props in hand only where described. These are Judean Jews of the oasis of En Gedi by the Dead Sea, AD 30, deeply sun-browned by the desert sun. Top-left: Yehonatan, the Elder of En Gedi, about 68: a long, kindly, dignified old face with deep lines, high cheekbones, a straight nose, calm hospitable dark eyes and a faint welcoming smile, thinning white hair and a long full white beard, a fawn wool robe and a slate-blue wool mantle over both shoulders. Top-right: Hanina, Keeper of the Balsam, about 50: a narrow, sharp, secretive face with a hawkish nose, hooded watchful eyes glancing sideways, thin lips pressed shut, straight dark hair under an off-white headcloth tied at the back, a close-trimmed dark beard with a little grey at the chin, a sand-coloured tunic and an olive-green mantle; he holds up a small thin sliver of grey stone between finger and thumb (no metal). Bottom-left: Pinhas, Keeper of the Palm Gardens, about 45: a broad, round, cheerful face, a wide flat nose, a strong neck and heavy shoulders of a man who climbs palms, short-cropped dark hair, a bushy dark beard, a tawny tunic with the sleeve pushed up, a brown mantle knotted at the shoulder, holding a short curved pruning knife, his fingers glossy and sticky with date juice, a few dates in his other hand. Bottom-right: Shelomit, Gatherer of Salt, a woman of about 40: a strong, square-jawed, practical face, squinting a little against glare, wind-chapped cheeks, a pale undyed linen veil over her head and shoulders and a pale mantle, a grey-brown wool robe, holding a flat wooden scraper, her hands and forearms dusted white with salt crust.
Sheet 2 prompt:
Excellent. Next 2x2 sheet, exactly the same style, lighting, three-quarter turn to the viewer's left, framing, straight dark gutters through the exact middle and dark brown vignette background as before (square, four self-contained portraits, nothing crossing the gutters, no text). Four new, clearly different people, also Judeans of En Gedi by the Dead Sea, AD 30, deeply sun-browned; 1st-century dress, women veiled over head and shoulders, never trousers, no halo, no glow. Top-left: Eliashib, Goatherd of the Spring, about 35: a lean, weathered, hard-boned face with sunken cheeks, a long thin nose, deep-set dark eyes narrowed against the sun, a wind-burned brow, thick unruly black hair to the neck and a ragged black beard, a coarse dark brown wool tunic and a heavy dark charcoal goat-hair mantle, one hand gripping a rough wooden shepherd's staff that rises past his shoulder. Top-right: Shifra, Keeper of the Henna Rows, a woman of about 30: a fine oval face with large warm dark eyes, a straight nose and a gentle closed-mouth smile, dark hair just visible at the brow, a light sand-coloured veil and mantle over her head and shoulders, a rust-red robe, her hands and fingers stained deep orange with henna up to the wrists, holding a spray of tiny cream-white henna flowers near her face. Bottom-left: Eleazar, Merchant of En Gedi, about 48: a fleshy, well-fed face with full cheeks, a short rounded nose, shrewd amused eyes and a knowing friendly half-smile, neatly oiled wavy dark hair, a neatly trimmed rounded dark beard with a little grey at the temples, a tan robe and a plum-coloured wool mantle, a small leather purse on a cord hanging at his chest. Bottom-right: Natan, Donkey Dealer of the Shore Road, about 44: a long rectangular face with a heavy brow, a broken crooked nose, a squint against the glare, straight dark hair under a dusty brown headcloth, a short dense dark beard, his face and clothes powdered with pale road dust, a dun robe and a brown mantle, a coil of rope over one shoulder, and the head and long ears of a grey donkey beside him inside the cell.
Shifra repaint (single image, same conversation, 1254 → 512 with sips -z 512 512), because the sheet-2 cell had ornate bridal mehndi patterns on her hands instead of a working stain:
Very good. Now one single portrait (not a grid), exactly the same style, lighting, three-quarter turn to the viewer's left, head-and-shoulders framing and dark brown vignette background, square, no text, no border, no halo, no glow. It replaces the top-right woman: Shifra, Keeper of the Henna Rows at En Gedi, a woman of about 30, the same fine oval face, large warm dark eyes and gentle closed-mouth smile, dark hair just visible at the brow, a light sand-coloured wool veil and mantle over her head and shoulders, a rust-red robe. Important: her hands are NOT decorated. There are no patterns, no designs, no swirls, no lines on her skin: her fingers, palms and the backs of her hands are simply stained a plain, even, blotchy orange-brown all over up to the wrists, like a worker who strips and crushes henna leaves every day. She holds a spray of tiny cream-white henna flowers with small green leaves near her face. 1st-century Judean dress, no jewellery.
| Key | Source | Notes |
|---|---|---|
| ein_gedi_elder | sheet 1, top-left | White curly hair and long white beard, slate-blue mantle over a fawn robe, a warm look off to the left. |
| ein_gedi_balsam_keeper | sheet 1, top-right | Off-white headcloth, sideways suspicious glance, grey stone sliver held up, olive mantle. Clearly unlike jericho_balsam_keeper (no headcloth there, broader face). |
| ein_gedi_palm_grower | sheet 1, bottom-left | Broad cheerful face, curved pruning knife, glossy sticky dates in hand, brown mantle knotted at the shoulder. |
| ein_gedi_salt_gatherer | sheet 1, bottom-right | Pale veil and mantle, grey-brown robe, wooden scraper, hands and forearms crusted white. |
| ein_gedi_goatherd | sheet 2, top-left | Unruly black hair, ragged beard, charcoal goat-hair mantle; the staff top is short and knobbly in frame, reads a little like a club at small size. |
| ein_gedi_henna_keeper | Shifra repaint (single) | Plain orange-brown stain to the wrists, cream henna flowers, sand veil, rust-red robe. Framed slightly wider than the sheet cells. |
| ein_gedi_merchant | sheet 2, bottom-left | Fleshy smiling face, leather purse on a cord; the mantle came out wine-red rather than greyish plum (#6b5a73). |
| ein_gedi_donkeys | sheet 2, bottom-right | Dusty brown headcloth, rope coil, grey donkey on the right inside the cell. Different from jericho_donkeys (headcloth, longer face). |
Result: php artisan test --compact tests/Feature/PortraitCoverageTest.php passes (2026-10-31).
Item icons, batch 11 (j12-artist, 2026-10-31): the last 30 items without an icon
Files: items/{key}.png (slice original, 406–498 px square) and items/{key}.webp (256×256, cwebp q85, 4–16 KB), 30 icons: stones and balsam, the new hunt parts (pelts, hides, horns, feathers), desert food, and three quest keepsakes. App\Game\Art picks them up by key; no code or config was changed. After this batch every key in config('game.items') has a webp (the tinker check prints nothing). Contact sheet at 180 and 40 px: _variants/items_batch11_contact.png.
Tool: ChatGPT (chatgpt.com) image generation only, in the user's Chrome, in the original conversation "Generate inventory icon sheet" (found by scrolling the sidebar history), so no style reference had to be attached. Four 3×3 sheets, each 1254×1254 PNG, sheet colour about RGB (22–33, 12–20, 2–7). Each was downloaded by fetching the generated image blob in the page and clicking an <a download> (j12items-*.png), then moved into the scratchpad.
Post-processing (scripts in the scratchpad, not the repo): slice.py, bgparams.npy, finish.sh, check.py and contact.py, copied from the batch 9 / bag scratchpad: connected blobs against the flat sheet colour, a 1.14 padded square, keyed onto the shared warm radial vignette; finish.sh makes the 256 px webp with sips and cwebp q85. Each icon was checked at 200 and 40 px beside its nearest existing siblings (lake_pearl, gazelle_horn, roe_antler, feathers, fleece, jackal_pelt, wolf_pelt, ibex_hide, roe_hide, rome_sealed_letter, linen_pouch).
Silhouettes for the pelts and hides (so they don't read as the existing folded jackal and wolf pelts, the whole fox, the rolled gazelle hide, the draped roe hide, the flat ibex hide or the tied ox hide): hyena: a long narrow grey-buff pelt on the diagonal with black stripes and a dark bristly mane; leopard: a golden star-spread with rosettes and an S-curled tail; lion: a bundle with a huge dark mane over the top half (dark on top, gold below); bear: a tall caramel heap with a clawed paw; badger: grey, stretched on a round willow hoop; wildcat: hanging straight down from a cord with a ringed tail; crocodile: a dark olive S-curve of scutes; fallow: red-brown with white spots, draped over a pole; oryx: pale rawhide laced into a square stick frame.
Sheet AA: _variants/items_sheet_aa_stones.png (ChatGPT, 1254×1254, 3×3): stones, balsam, quills
Keys per cell: 1 balsam, 2 pearl, 3 jasper, 4 carnelian, 5 agate, 6 rock_crystal, 7 onyx, 8 amethyst, 9 porcupine_quill. All kept except balsam (the horn was painted in blocky mosaic patches; replaced from sheet AD).
Create an image. New batch of inventory icons for the same game. Next sheet in exactly the same hand-painted World of Warcraft inventory icon style, lighting and background as the earlier item sheets in this conversation (stylized, chunky, slightly exaggerated readable shapes that read at 40 px, bold painted highlights, visible brush strokes, smooth painted surfaces with no mosaic or tiled texture, warm upper-left key light, soft rim light, earthy palette, like a Blizzard game icon, not a photograph). A square 1024x1024 sheet, a precise grid of 3 columns by 3 rows = 9 square icons, each object alone and centred in its own equal cell, filling about 75-80% of the cell, with wide clear empty gutters so nothing crosses into a neighbouring cell, all on the same plain flat very dark warm brown background (#1a130d), no grid lines, no borders, no frames, no text, no labels, no hands, no people. Real natural objects of 1st-century Judea only: rough natural stones, NOT cut or faceted jewels, no glow, no sparkle stars, no magic. Every icon must be clearly different from the others in shape and colour. Row 1: (1) a little hollow cow horn used as a flask, curved, cream and tan, its wide end stoppered with a dark wooden plug sealed with black pitch, a short leather carrying thong, one thick golden-amber drop of resin balm running down its side, (2) a single round lustrous white sea pearl with a soft pink-silver sheen, resting in the middle of a small rumpled scrap of undyed cream linen cloth (no shell), (3) a chunky ANGULAR rough lump of opaque dull brick-red jasper, rough and matte on most sides, one flat face worn smooth and glossy. Row 2: (4) three small smooth ROUNDED tumbled pebbles of carnelian, waxy and translucent bright orange-red, light glowing through their edges like honey (no actual glow), (5) a round grey stone nodule broken open in half, showing inside concentric curved bands of grey, milky white and honey-yellow agate, rough grey-brown rind outside, (6) one single clear colourless quartz crystal point standing upright, a six-sided column with a pointed tip, glassy and transparent with a milky white base. Row 3: (7) a flat polished oval slab of onyx with straight parallel bands of jet black and bright white running across it, (8) a broken half of a round geode, a rough grey-brown outer shell, the hollow inside densely lined with many small sharp deep violet amethyst crystal points, (9) a bundle of long thin stiff porcupine quills, banded black and white like stripes, sharp points, loosely tied in the middle with a tan cord and fanning out.
- pearl vs lake_pearl: a single pearl on rumpled linen, with no shell, against the open mussel of
lake_pearl. - jasper vs carnelian: told apart by form, not just colour: one big angular matte block against three small glossy rounded pebbles.
- agate vs onyx vs amethyst: a nodule split in two (concentric bands), a flat oval slab (straight bands), a half geode (violet lining).
- Despite "no mosaic", the horn, the quartz base and the jasper show some blocky patches at 256 px. It is invisible at 40 px, but the horn was the worst, so it was redone.
Sheet AB: _variants/items_sheet_ab_pelts.png (ChatGPT, 1254×1254, 3×3): pelts and hides
Keys per cell: 1 hyena_pelt, 2 leopard_pelt, 3 lion_pelt, 4 bear_pelt, 5 badger_pelt, 6 wildcat_pelt, 7 crocodile_hide, 8 fallow_hide, 9 oryx_hide. Hyena and lion replaced from sheet AD.
Create an image. Very good. Next sheet in exactly the same hand-painted World of Warcraft inventory icon style, lighting and background (stylized, chunky, readable at 40 px, bold painted highlights, visible brush strokes, warm upper-left key light, soft rim light, like a Blizzard game icon, not a photograph). Paint every surface with SMOOTH broad painterly brushwork: no mosaic, no blocky tiles, no pixel-like patches. Same layout: a square 1024x1024 sheet, a precise grid of 3 columns by 3 rows = 9 square icons, each object alone and centred in its own equal cell, filling about 80% of the cell, with wide clear empty gutters so nothing crosses into a neighbouring cell, all on the same plain flat very dark warm brown background (#1a130d), no grid lines, no borders, no frames, no text, no labels, no hands, no people, no blood, no gore. Batch: animal PELTS AND HIDES from 1st-century Judea. They must be told apart at 40 px, so each one has a DIFFERENT silhouette AND a different main colour; no heads or faces on any of them. Row 1: (1) hyena pelt: a long NARROW pelt laid out straight on the diagonal, coarse light grey with bold black vertical bars across it like stripes, and a stiff spiky dark bristly mane standing up along its spine, (2) leopard pelt: a whole golden-yellow pelt spread out flat and wide like a star with four splayed legs, covered in bold black rosette spots, its long spotted tail curling round in a big S, (3) lion pelt: a heavy tawny-gold pelt piled in a big soft heap, crowned at the top by a huge shaggy DARK BROWN mane ruff like a thick fur collar (no face). Row 2: (4) bear pelt: a very thick shaggy pale-brown (light caramel) bear pelt in a tall bulky heap, one broad paw with five dark curved claws hanging over the front, (5) badger pelt: a small coarse grizzled grey pelt stretched tight on a ROUND bent-willow drying hoop laced with cord, a short black-and-white striped strip at the top end, (6) wildcat pelt: a slim sandy-buff pelt with faint thin stripes HANGING VERTICALLY from a loop of cord at the top, its bushy tail hanging straight down with bold black rings and a black tip. Row 3: (7) crocodile hide: a long dark olive-green and brown hide curled in a loose S-curve, covered in rows of hard raised ridged scutes like armour plates, paler yellowish belly scales at the edges, (8) fallow deer hide: a soft warm red-brown hide covered with clear white spots, folded once and DRAPED over a short horizontal wooden pole so it hangs down on both sides, (9) oryx hide: a stiff pale creamy-white rawhide stretched taut and flat in a SQUARE wooden frame of four lashed sticks, laced to the frame with cords all round, a dark brown band along one edge.
- hyena_pelt (rejected): painted with black spots (a spotted hyena of Africa) and spread like the leopard. The hyena of Judea is the striped hyena.
- lion_pelt (rejected): a gold heap with a brown top, too close to the bear heap and the golden folded
jackal_peltat 40 px. - The badger came out with its black-and-white striped head end flattened into the pelt, with no eyes; it reads at once.
- The SMOOTH brushwork line in the prompt worked: no mosaic patches on this sheet.
Sheet AC: _variants/items_sheet_ac_horns_food.png (ChatGPT, 1254×1254, 3×3): horns, feathers, desert food
Keys per cell: 1 fallow_antler, 2 oryx_horn, 3 ostrich_plume, 4 flight_feathers, 5 goose_down, 6 dressed_goose, 7 bird_eggs, 8 desert_truffles, 9 locusts. All kept except oryx_horn (a thin stick at 40 px; replaced from sheet AD).
Create an image. Excellent, these all work. Next sheet in exactly the same hand-painted World of Warcraft inventory icon style, lighting and background (stylized, chunky, readable at 40 px, bold painted highlights, visible brush strokes, warm upper-left key light, soft rim light, like a Blizzard game icon, not a photograph), every surface in SMOOTH broad painterly brushwork with no mosaic, no blocky tiles, no pixel-like patches. Same layout: a square 1024x1024 sheet, a precise grid of 3 columns by 3 rows = 9 square icons, each object alone and centred in its own equal cell, filling about 80% of the cell, with wide clear empty gutters so nothing crosses into a neighbouring cell, all on the same plain flat very dark warm brown background (#1a130d), no grid lines, no borders, no frames, no text, no labels, no hands, no people, no blood, no gore. 1st-century Judea. Each icon clearly different in shape and colour. Row 1: (1) a fallow deer antler: one BROAD flat PALMATE antler, the upper part a wide flat hand-like blade with short points along its edge, pale cream and tan with a knobbly brown burr at the base (not a branching stick antler), (2) an oryx horn: one LONG, STRAIGHT, slender black-brown horn lying on the diagonal from lower left to upper right, ringed with ridges along its lower half, a sharp smooth point, (3) an ostrich plume: one big soft fluffy pure white curving ostrich feather, wispy and billowing like a cloud, with a short black base. Row 2: (4) great flight feathers: three long, stiff, narrow DARK brown eagle flight feathers with pale bases and white quills, laid together and tied with a twist of cord near the quills, pointing diagonally, (5) goose down: a fluffy heap of soft white goose down piled in a small shallow round woven wicker basket, a few wisps floating loose, (6) a dressed goose: a whole plucked goose ready for cooking, plump, pale cream-pink skin, no head, no feathers, legs tucked, lying on a small wooden board with a sprig of green herbs, clean and appetising, no blood. Row 3: (7) wild bird eggs: four small cream eggs speckled with brown, lying in a small round ground nest of dry grass and twigs, (8) desert truffles: four pale knobbly round cream-tan desert truffles, like lumpy potatoes, dusted with golden sand, one cut in half showing a pale marbled inside, on a small mound of sand, (9) locusts: five fat brown-and-olive roasted desert locusts threaded on a thin wooden skewer, lying on the diagonal.
- fallow_antler vs roe_antler: a broad palm blade against the branching roe antler.
- flight_feathers vs feathers: three long, dark, plain feathers tied at the quills, against the fan of patterned feathers.
- goose_down vs fleece vs ostrich_plume: down sits in a wicker basket; the fleece is a bare cream heap; the plume is one curved feather.
- dressed_goose: headless and plucked on a board with herbs; it could pass for any fowl, but nothing else in the game looks like it.
Sheet AD: _variants/items_sheet_ad_quest_fixups.png (ChatGPT, 1254×1254, 3×3): quest keepsakes and fix-ups
Keys per cell: 1 zacchaeus_purse, 2 copy_of_the_apostles_letter, 3 the_letter_from_babylon, 4 balsam, 5 hyena_pelt, 6 lion_pelt, 7 oryx_horn. Cells 8 (the striped hyena pelt folded, too close to the folded grey wolf_pelt) and 9 (the Babylon letter in a red-brown leather tube case) are unused alternatives, kept only on the sheet.
Create an image. Very good. Next sheet in exactly the same hand-painted World of Warcraft inventory icon style, lighting and background (stylized, chunky, readable at 40 px, bold painted highlights, visible brush strokes, warm upper-left key light, soft rim light, like a Blizzard game icon, not a photograph), every surface in SMOOTH broad painterly brushwork with no mosaic, no blocky tiles, no pixel-like patches. Same layout: a square 1024x1024 sheet, a precise grid of 3 columns by 3 rows = 9 square icons, each object alone and centred in its own equal cell, filling about 80% of the cell, with wide clear empty gutters so nothing crosses into a neighbouring cell, all on the same plain flat very dark warm brown background (#1a130d), no grid lines, no borders, no frames, no text, NO writing or letters visible anywhere, no symbols, no hands, no people, no blood, no glow. 1st-century Judea. Row 1: (1) a heavy round brown leather purse bulging full of coins (no coins outside it), its gathered neck tied tight with a thick cord wound several times, the knot covered by a lump of grey clay seal pressed flat, (2) a letter: a roll of PALE cream-yellow papyrus lying HORIZONTALLY, the papyrus fibres faintly visible as a crosshatch, tied round its middle with a plain tan cord in a simple bow, no seal, (3) a letter: a roll of darker honey-brown parchment STANDING UPRIGHT on its end, wound round with a deep blue-dyed cord several times, a round grey-black clay seal disc hanging from the cord on a short loop. Row 2: (4) a little hollow cow horn used as a flask, curved like a crescent, smooth polished cream and tan horn, the wide end stoppered with a dark wooden plug sealed with black pitch, a short leather thong, one thick golden-amber drop of resin balm running down its side, (5) a striped hyena pelt: a long NARROW coarse pelt laid straight on the diagonal, light grey-buff fur with bold BLACK STRIPES running ACROSS the body and legs (stripes, not spots), and a stiff spiky dark bristly mane standing up along its spine, no head, (6) a lion pelt: a heavy tawny-gold pelt folded into a thick rounded bundle, its HUGE shaggy very dark brown-black mane spilling over the whole top half like a big dark hood, so the icon reads as dark on top and gold below, no face. Row 3: (7) an oryx horn: one LONG STRAIGHT horn as long as an arm, THICK and bold, dark black-brown, lying on the diagonal from lower left to upper right, wide at the base and tapering steadily to a sharp point, deep pale-edged rings around its lower half, (8) the same striped hyena pelt as (5), but folded over on itself in a loose fold, grey-buff with bold black stripes and the dark bristly mane along the fold, (9) a letter: a roll of darker honey-brown parchment pushed into a small round tube-shaped case of dark red-brown leather, the top of the roll showing, a grey-black clay seal disc on the case's strap.
- The two letters: the apostles' letter is a pale papyrus roll lying flat with a tan bow and no seal; the letter from Babylon stands upright, darker parchment, a blue cord and a hanging dark clay seal. They differ in orientation, colour and seal at 40 px, and neither looks like the wooden
rome_sealed_lettertablet with its red wax. - zacchaeus_purse vs linen_pouch: dark brown leather and a grey clay seal on the knot, against the pale linen pouch.
- balsam: the horn is much smoother than the sheet AA one, with a little blockiness left near the plug at 256 px.
- oryx_horn: a thick ringed horn. A long straight diagonal object still leaves a slim icon once it's cropped to a square, but at 40 px it now reads as a horn, not a stick.
Notes for the next batch
- The "Generate inventory icon sheet" conversation is far down the sidebar: scroll the history list (about 85 entries loaded) or open
chatgpt.com/c/6ade841c-3ee4-83eb-8e0a-050212c1b846. - "Paint every surface with SMOOTH broad painterly brushwork: no mosaic, no blocky tiles, no pixel-like patches" removed the mosaic artefact much better than the older "smooth painted surfaces with no mosaic" phrase.
- For pelts, give each one its own presentation (hoop, square frame, pole, hanging from a cord, star-spread, S-curve, two-tone bundle) as well as its own colour. Name the species pattern explicitly ("stripes, not spots") or ChatGPT paints the familiar African animal.
Paper-doll layers for the wearables library: images/ui/paperdoll/worn/* (j12-artist, 2026-10-31)
85 new layers for config/game/wearables.php (add-wearables-library task 4.3), same file contract as the 2026-10-30 batch above: worn/{key}.png is the 1024×1536 layer in the frame of simon.png, worn/{key}.webp the placed 720×1080 layer (scale 0.6963, cwebp q86 alpha_q100). Stack order is unchanged: base, body, feet, mantle, head. Source edits and masks are kept as lossless WebP in _variants/paperdoll/{key}_edit.webp and {key}_mask.webp.
- Tool: ChatGPT image editing in the user's Chrome, one conversation ("Edit Character Image",
chatgpt.com/c/6ae522c8-9b78-83ed-a924-9e78ba9a918d), withpaperdoll/simon.pngattached afresh to every message, so each item is an edit of the base, never an edit of an edit. Images were downloaded by fetching the generated blob in page JavaScript and moved out of ~/Downloads. - Pipeline: the 2026-10-30 scripts (
align.py,extract.py,place.py,proc.sh), copied into this session's scratchpad, plusrecolour.pyandfinish.sh. New switches:ANCHOR/MASKANCHOR(alignment rows) andzminfor a mantle drawn over the head (aligned on the legs only, rows 0.80–1, because the hood changes the head rows);zmaxfor long head cloths;hairy=0where the base hair should show beside a narrow crown (palm hat, brow band);top=for footwear that rises up the leg (wraps 1095, boots 1130, socks 1255, festival sandals 1275). - 21 painted, 64 recoloured. Items that share a piece (
wear) with a painted layer were recoloured from it rather than painted again: k-means clusters in Lab, each cluster's median moved to the item'scolor(andborderfor two-tone items), the painted folds and light kept (contrast never raised, chroma of the source's own variation damped to 0.35, +3 b* and +2.5 a* for the warm key light). Skin is protected by a colour model of the base's skin (--skin, limited to the toe and shin rows for boots), and the face inside hood layers by the base's face and beard masks. Siblings therefore have the same drape as their source; mantle and shawl drapes are the same picture.
Template for every painted item (the garment sentence is quoted per item below):
Very good. Next one, same rules. Generate an image: edit the image attached to THIS message (not the previous result). Return it exactly the same, pixel for pixel identical in pose, face, beard, hair, body, undertunic, cord belt, arms, hands, feet, size, position, framing and lighting, with the same fully TRANSPARENT background, 1024x1536. Add ONLY . … Same hand-painted brushwork and warm upper-left light. Nothing else changes: no mantle, no props, no floor, no shadow, no text.
Body garments say "Replace the undertunic with ONLY …" and leave "undertunic" out of the unchanged list; footwear leaves out "feet". The first message (striped headcloth) opened with the full context sentence of the 2026-10-30 batch ("…the base figure of the paper-doll equipment screen of J12, a World of Warcraft style RPG set in 1st-century Galilee, AD 28").
Painted (key: garment sentence; notes).
striped_headcloth: "a large square of undyed off-white linen (about #ddd2b8) with two narrow madder-red stripes woven down each of its side edges, laid loosely over the whole head so it covers all of the hair and falls to the shoulders on both sides of the face, held on by a twisted cord of dark goat hair round the crown."shepherds_headcloth: "a large square of coarse, thick, dark brown-grey wool (about #4a4036), roughly woven and matte, with a narrow lighter fawn band (about #8a7a60) along its edges … falls WELL over the neck and onto both shoulders … held on by a twisted dark cord round the crown."sabbath_headcloth: "a large, long square of fine bleached white linen (about #efeadb) … with a single thin dark blue thread (about #3d4d6b) woven along its edges … falls LONG behind and at both sides, down past the shoulders to the shoulder blades, held on by a thin twisted cream cord." Extracted withzmax=0.42 thr=10.elders_turban: "a long strip of fine white linen (about #ece6d6) wound carefully round the head in about seven neat overlapping turns, built up TALL and full above the brow … the turns crossing at the front." The first send failed (attachment upload error) and was resent.caravan_turban: "a long strip of warm ochre cloth (about #c2a06a) with one narrow dark brown stripe (about #4a3426) running along its length, wound HIGH round the head in about seven turns as the camel drivers of the desert roads wear it."straw_sun_hat: "plaited wheat straw (about #d4b878), a low rounded crown … and a WIDE, softly drooping brim all the way round … No band, no ribbon, no chin cord."palm_leaf_hat: "a hat plaited from strips of dried date-palm leaf (about #b8a070), as they make in Jericho: a PEAKED, softly conical crown and a moderate brim all round, with a darker brown woven band (about #7a6040) round the base of the crown."hairy=0.linen_fillet: "a twisted band of undyed linen (about #e2d9c4), about two fingers wide, tied round the head across the forehead just above the eyebrows and over the hair, knotted at the back of the head, with its two short ends hanging down behind one ear."hairy=0.wool_hood: "a pointed hood of thick, soft brown wool (about #77654e) pulled up over the head … coming to a soft rounded point … with a short cape of the same wool sewn to it that covers both shoulders and the top of the chest and upper back, ending well above the elbows."zmax=0.36.felt_pilos: "a brimless, softly pointed conical cap of smooth brown felt (about #7d6a52), the cap of sailors and workmen round the Mediterranean, sitting snugly on top of the head over the hair."clavi_tunic: "a good tunic of undyed wool (about #cbbf9f) with two narrow dark brown vertical bands (clavi, about #4a3426) woven from each shoulder straight down the front to the hem, wide sleeves reaching the ELBOW … ONE straight skirt over both thighs to just BELOW the knee, belted … with the same thin twisted cord."long_linen_tunic: "a long tunic of fine pale linen (about #ddd3bd) … LONG sleeves reaching the WRISTS, falling straight as ONE skirt all the way down to the ANKLES … the bare feet stay visible below the hem."boatmans_tunic: "a boatman's work tunic of coarse undyed wool (about #b9ad94), plain and a little worn, with SHORT sleeves that cover only the top of the upper arm … to the middle of the THIGH."girded_harvest_tunic: "a girded harvest tunic of plain linen (about #c7b998): sleeves reaching just above the elbow … a wide twisted cloth sash of the same linen tied at the waist; the skirt is hitched up and pulled through the sash so the cloth blouses out over the sash … the hem rises to just ABOVE the knee."prayer_mantle: "a large rectangular mantle of fine cream-white wool (about #ece6d6) with two narrow black bands (about #2f2b27) woven near its lower ends, DRAWN UP OVER THE HEAD like a hood … then falling over both shoulders, its two front edges hanging straight down … to just below the knee, open in the middle … At each of the two front lower corners hangs a small tassel of white wool threads with one blue cord." Magenta mask asked in the next message ("…the whole PRAYER MANTLE, including the part drawn over the head, both black bands and both tassels, is filled with solid flat pure magenta (#FF00FF)…"). Extracted withANCHOR=MASKANCHOR="0.80,1" zmin=0.0 edgeratio=1e9. The black bands read rather like a modern tallit; the item'sborderasks for them.wool_shoulder_cape: "a short shoulder cape of soft brown wool (about #9c8464) with a narrow darker brown woven border (about #5a4a3a) along its lower edge … ending well above the elbows, fastened at the throat with a small leather toggle and loop (about #4a3424). No hood." No mask needed (diff extraction).sheepskin_cape: "a shepherd's short shoulder cape of sheepskin worn fleece side OUT: thick, shaggy, cream curly wool (about #d9cdb5) … tied at the throat with a short brown leather thong." No mask needed.wool_sock_sandals: "undyed wool socks (about #bfb193), thick and soft, covering each whole foot including the toes and rising to just above the ankle bone, worn inside simple dark brown leather sandals (about #5e3b22)."linen_leg_wraps: "long strips of undyed linen (about #d8cdb4) wound in neat, overlapping spiral turns round each foot, ankle and lower leg, from the toes up to the MIDDLE of the shin … worn with simple dark brown leather sandals (about #5e3b22) on top."white_festival_sandals: "soft leather whitened with chalk to a pale cream (about #d8cdb4), a thin flat sole, a strap across the toes, two narrow straps crossing over the top of the foot, and a strap round the ankle tied with a small knot." Painted because a recolour ofleather_sandalsto white left brown specks.hunting_boots: "soft, closed boots of supple tan leather (about #8a6040) rising to the middle of the calf, laced up the front with a thin dark leather thong (about #4a3424), with a turned-down cuff of pale sheep's fleece (about #c4a57a)." ChatGPT made them open-toed; kept (period-plausible).
Recoloured (key ← source, target colours). Head: woad_headcloth ← linen_headcloth #5b6f88; madder_turban ← wound_headcloth #9b5a48; felt_cap, madder_cap, linen_cap ← wool_cap #7a756b / #7a4a38 / #e2d9c4; woven_fillet ← linen_fillet #8a4234 (hair cluster kept); goat_hair_hood, striped_hood ← wool_hood #3a332c / #bfb193 (no stripe); sailors_pilos, white_pilos ← felt_pilos #3e3a36 / #ddd3bd. Body: woad_tunic, ochre_tunic, undyed_wool_tunic, mended_tunic ← plain_tunic; blue_clavi_tunic ← clavi_tunic (#e2d9c4 cloth, #3d4d6b bands); festival_tunic, elders_long_tunic ← long_linen_tunic (#efeadb, #7a756b, no clavi); grey_work_tunic, madder_short_tunic ← short_work_tunic (its sewn patch shows); soldiers_tunic ← boatmans_tunic #8a3d2e; girded_travel_tunic, greek_chiton ← girded_harvest_tunic (#86755c, #e8e2d2, no border); dark_fishers_coat, oiled_smock ← fishers_coat; black_sheepskin_coat, goatskin_coat ← sheepskin_coat (suede and fleece separately); tanners_apron, smiths_apron, potters_apron ← leather_apron (contrast 0.7 / 0.8 / 0.45, so the potter's cloth apron still has a leather grain). Mantle: madder_mantle, ochre_mantle, grey_mantle, olive_mantle, patched_mantle, brown_shawl_mantle, woad_shawl_mantle ← woad_mantle (no woven borders); light_linen_mantle, cream_shawl_mantle ← undyed_mantle; winter_cloak, caravan_cloak, grey_cloak, madder_cloak, woad_lacerna, ochre_lacerna ← road_cloak; mourning_mantle ← prayer_mantle #3a332c; goat_hair_cape ← wool_shoulder_cape #2f2b27; black_fleece_cape ← sheepskin_cape #3e3a36. Feet: red_leather_sandals, goat_leather_sandals, boatmans_sandals ← leather_sandals; rush_sandals ← palm_fibre_sandals; ankle_strap_sandals, black_ankle_sandals, hobnailed_sandals, pilgrim_sandals ← reinforced_sandals; high_laced_sandals, hunters_laced_sandals, greek_laced_sandals ← laced_sandals; red_sock_sandals, felt_sock_sandals ← wool_sock_sandals; wool_leg_wraps, tall_leg_wraps ← linen_leg_wraps; winter_boots, drovers_boots ← hunting_boots.
Gate: every layer checked over the base on #1a130d and mid grey at full size, and six full outfits stacked from the placed WebP files at 290 px tall: no halo, no seams, no undertunic poking through. Known limit: the doll draws feet above body, so boot cuffs and leg wraps sit over the hem of an ankle-length tunic (long_linen_tunic, festival_tunic, elders_long_tunic).
Not done (36, the Greek, Roman and military pieces): phrygian_cap, woad_phrygian_cap, travellers_petasos, leather_petasos, white_chlamys, blue_chlamys, ochre_chlamys, travelling_paenula, rain_paenula, leather_paenula, carbatinae, red_carbatinae, black_carbatinae, black_calcei, town_shoes, red_calcei, leather_jerkin, studded_jerkin, quilted_subarmalis, officers_subarmalis, rusted_mail_shirt, mail_shirt, bronze_scale_shirt, iron_scale_shirt, soldiers_sagum, thick_sagum, fine_red_sagum, worn_caligae, caligae, officers_caligae, and the six helmets (old_auxiliary_helmet, auxiliary_helmet, bronze_montefortino, legionary_helmet, crested_helmet, plumed_helmet). The session ended when the Chrome tab group closed. About 13 paintings would cover them (one per piece shape, the rest recoloured).
Sebaste veteran portrait: sebaste_veteran (j12-artist, 2026-10-31)
Lysimachus, the retired centurion who sells old auxiliary kit at the Sebaste market (config/game/sebaste.php, config/game/people.php). ChatGPT in Chrome, one new conversation ("Generate Character Portrait", https://chatgpt.com/c/6ae5312b-4790-83ed-84a7-604106429426), portraits/[email protected] attached as the style reference. One single portrait of 1254×1254, downloaded by fetching the image blob in the page; scaled to 512 with sips -z 512 512. Files: portraits/sebaste_veteran.png and portraits/[email protected], both 512×512 and the same pixels (as for the other single portraits). The 1254 original stays in the scratchpad only.
Prompt (with [email protected]):
Generate an image. The attached portrait is the style reference for a series of character portraits for my game J12, a World of Warcraft style RPG set in 1st-century Galilee, Samaria and Judea (AD 28-50). Match it exactly: the same semi-realistic painterly oil rendering and brushwork, warm soft key light from the left with a gentle warm gold rim light, head-and-shoulders bust framing with a little empty space above the head, the figure turned three-quarters to the viewer's left, plain warm dark brown background with a soft vignette. Do not copy the man in the reference; paint a new man with a clearly different face. One single SQUARE portrait (not a grid), no text, no labels, no border, no frame, no halo, no glow, no weapons. Lysimachus, about 61, a Greek of Sebaste in Samaria and a retired centurion of a local auxiliary cohort, who now sells old soldiers' kit at a stall in the Sebaste market. A lean, hard, weathered old face with a strong straight Greek nose, a firm square jaw, deep lines across the brow and around shrewd, steady grey-brown eyes, a pale old SCAR running down from the left cheekbone toward the jaw, short receding grey hair cropped close, a short, neatly boxed grey beard trimmed close to the jaw. Upright military bearing, square shoulders, a dry, measuring, faintly amused look. He is a CIVILIAN now: a plain greyish-khaki wool tunic and a madder red-brown wool mantle (about #7a3a2e) over one shoulder, pinned at the shoulder with a plain round bronze brooch. NO armour, NO helmet, NO mail, NO weapons, no trousers, nothing medieval.
| Key | Source | Notes |
|---|---|---|
| sebaste_veteran | single image, first variant (kept) | Receding cropped grey hair, short boxed grey beard, pale scar lines on his left cheek, greyish-khaki tunic, madder red-brown mantle pinned with a round bronze brooch on his left shoulder, a hard sideways look. No armour or weapons. Reads closer to 55 than 61. |
Result: php artisan test --compact tests/Feature/PortraitCoverageTest.php passes (2026-10-31).
Action icons, batch 3, plus two rods and the Antioch crest (j12-artist, 2026-10-31)
Files: actions/{key}.png (slice original, 303–463 px square) + actions/{key}.webp (256×256, cwebp q85, 8–16 KB) for the 86 keys of config/game/actions.php that still had no icon; items/reed_rod and items/willow_rod (.png 395/399 px + .webp 256×256, 8 KB); standing/antioch_households (.png 406 px + .webp 256×256, 12 KB).
Style: the action "v2, current" style above (one central object, thick dark outline, 2–3 colours, no scenery, no people or faces, no small particles). Story and wonder actions use one ordinary object or a gesture of the hands only: an oil juglet for anoint_with_oil, two lowered open hands for lay_hands_in_his_name, the same hands over a pale Samaritan well-head for lay_hands_in_samaria, a hand clasping a wrist for take_him_by_the_right_hand, a plain wooden cross on a mound for remember_the_cross. No face of Jesus or anyone appears anywhere in the batch.
Pipeline: one new ChatGPT conversation ("Generate Ability Icons", 2026-10-31) with a 1024×512 strip of eight existing action icons attached to the first message as the style reference (the strip used for batch 2, _variants/actions_sheet_7–13; it lives only in the scratchpad) (bucket, grill, sickle, teach hand, net needle, salted fish, mallet, figs). Eight 4×3 sheets at 1536×1024 on flat #1a130d, downloaded by fetching the image blob in the page (<a download>), sliced with slice3.py (7% padding; the crest with --pad 0.13, as for the other crests) and finished with finish.py (warm radial vignette, 256 px WebP q85). Every sheet was checked at 128 px and 40×40 next to existing actions/ icons (and items/fish_hooks, items/shepherds_rod, standing/rome_neighbours, standing/market for sheet 21). This batch's sheets fill their cells more than batch 1 (subjects sometimes touch a cell edge); the slicer still separated them cleanly.
Sheet 14: _variants/actions_sheet_14.png (ref strip attached)
Keys: ready_the_little_boat, keep_the_boat_near (pierced stone anchor), hold_the_boat_off (pole against a rock), bail_the_boat, row_through_the_waves, wake_the_teacher (the cushion in the stern, Mark 4:38), beach_the_boat (bow post roped on sand), gather_sea_salt, go_up_with_the_water (the pitcher came out copper rather than gold), fill_to_the_brim, lead_the_donkey_to_water. rod_fishing from this sheet had a red-and-white modern bobber and rod guides; replaced by sheet 21 (_variants/actions_alt/rod_fishing_sheet14_modern_bobber.png).
Generate an image. The attached sheet shows eight action bar ability icons of my game J12 (a World of Warcraft style RPG set in 1st-century Galilee, AD 28): a leather water bucket, fish on a grill, a sickle on barley, a raised hand with voice arcs, a net needle, a salted fish with a salt bowl, a mallet on a stone, and figs on a twig. I need more ability icons in exactly the same hand-painted style, lighting and background. Style: like a classic World of Warcraft spell or profession icon at the SIMPLE end: ONE simple central subject per icon (one object, or at most two big shapes crossed or side by side), a bold chunky silhouette with a thick dark outline, strong value contrast, only 2 or 3 main colours per icon, big flat painted shapes with a few bold highlights, visible brushwork, warm key light from the upper left, soft rim light, earthy palette. Each subject is centred and fills about 70% of its cell; it must read at 40 px. STRICT RULES: no scenery or landscape (no sky, hills, sea surface, rooms or backgrounds behind the subject); at most one simple accent such as a single curl of wave or a single curl of smoke; no hands, arms or people unless stated; no faces; no small particles (no sparks, droplets, splashes, shavings, loose grains, dust); no fine detail, no text, no letters, no frames, no borders, no glow, no magic. 1st-century Judean objects only, nothing medieval or modern. Landscape 1536x1024, a precise grid of 4 columns by 3 rows = 12 icons, each subject alone in its own equal cell with wide empty gutters so no two subjects touch, all on one plain flat very dark warm brown background (#1a130d). Row 1: (1) a long thin cane fishing rod lying on the diagonal, its tip bent down, a line hanging from the tip with a small cork float and a bronze hook; (2) a small open wooden rowing skiff seen from the side and a little above, two oars laid inside it along its length; (3) a heavy round grey stone anchor with a hole bored through it, a thick rope knotted through the hole; (4) a long wooden boat pole pushing diagonally against a big grey rock, one single curl of teal wave at the rock's foot. Row 2: (5) a wooden bailing scoop full of water tipping over, with one single big curl of teal wave behind it; (6) a small dark wooden fishing boat tilted steeply up the face of one huge curling dark-teal wave crest; (7) a plain brown leather cushion lying in the curved wooden stern of a boat, one single curl of wave rising beside it; (8) the curved wooden bow post of a boat resting on a strip of pale sand, a thick bow rope tied round it and trailing off. Row 3: (9) a shallow flat basket holding a few big broken plates of white salt crust; (10) a tall slender golden pitcher with a spout, a green willow branch with narrow leaves leaning against it; (11) a tall grey straight-sided limestone water jar, brim-full of water, a clay pitcher above it pouring one smooth stream into it; (12) the head and neck of a grey donkey with a rope halter, lowered to drink from a small square stone water trough.
Sheet 15: _variants/actions_sheet_15.png (same conversation)
Keys: pluck_grain, give_your_mantle, leave_the_purse, stay_in_the_house, anoint_with_oil, lay_hands_in_his_name, shake_off_the_dust, eat_with_the_twelve (torn loaf beside an empty stone washing cup, Mark 7:2), seat_the_four_thousand (a pyramid of loaves; six are visible, not seven), gather_seven_baskets (a rope basket), lead_the_blind_men, carry_in_the_supper. All kept.
Next sheet with exactly the same simple icon style, rules and layout (landscape 1536x1024, 4x3 = 12 icons, one simple central subject per cell filling about 70%, bold chunky silhouette with a thick dark outline, 2 or 3 main colours, no scenery or background, no hands or people unless stated, no faces, no small particles, wide empty gutters so no two subjects touch, flat #1a130d background, no text, no letters, no frames, no glow, no halos, no light rays; it must read at 40 px). These are quiet, reverent story moments from the Gospels and Acts: plain 1st-century objects only. Row 1: (1) one open hand (from the wrist, simple shapes) holding three golden ears of wheat snapped off at the stalk; (2) one hand holding out a folded heavy brown-and-cream striped wool mantle, offered; (3) a small leather drawstring purse and a round brown loaf sitting together on a plain wooden wall shelf; (4) a clay bowl of brown lentil stew with a round flatbread leaning against it. Row 2: (5) a small round-bellied clay oil juglet tilted, pouring one smooth thin golden stream of olive oil; (6) two open hands from the wrists, palms down, side by side, gently lowered, nothing beneath them; (7) one worn leather sandal turned sole-up, with one soft round puff of brown dust beside it; (8) a round loaf with a piece broken off, beside a small grey stone hand-washing cup standing empty. Row 3: (9) seven small round brown loaves stacked in a pyramid on a pale linen cloth; (10) one tall basket woven of thick brown rope, brimming with big broken pieces of bread; (11) one hand gently leading another hand by the fingers, the second hand holding a plain wooden walking stick; (12) a big round wooden tray carrying two clay serving bowls, one single curl of steam rising.
Sheet 16: _variants/actions_sheet_16.png (same conversation)
Keys: recline_at_bethany (the alabaster flask with its neck snapped off), search_the_leaves, kneel_at_the_roots, sit_among_the_crowd (a denarius with a profile head on paving, for "whose image"), touch_the_great_stones (a hand on a marginal-drafted Herodian block), receive_the_bread, sing_the_hymn (lyre and lamp), gather_the_cut_branches. Four were rejected and redone on sheet 21, kept in _variants/actions_alt/: sit_on_the_mount (*_sheet16_battlements: crusader walls beside the temple), untie_the_colt (*_sheet16_reads_as_cross: the hitching post with a rope looked like a cross with a noose), keep_to_the_edge (*_sheet16_medieval_door: iron-studded door and wall sconce), stand_aside (*_sheet16_battlements: a castle gate with a pointed arch).
Next sheet with exactly the same simple icon style, rules and layout (landscape 1536x1024, 4x3 = 12 icons, one simple central subject per cell filling about 70%, bold chunky silhouette with a thick dark outline, 2 or 3 main colours, no scenery or background, no hands or people unless stated, no faces, no small particles, wide empty gutters so no two subjects touch, flat #1a130d background, no text, no letters, no frames, no glow, no halos, no light rays; it must read at 40 px). These are quiet, reverent story moments from the Gospels and Acts: plain 1st-century objects only. Row 1: (1) a slender white alabaster ointment flask with a long neck, the neck snapped off and lying beside it; (2) a leafy fig branch covered in big broad green fig leaves and NO fruit at all; (3) a withered fig tree stump with bare twisted dry roots and two curled brown dead leaves; (4) a silver denarius coin showing a man's profile head (no letters) lying on a pale square paving stone. Row 2: (5) one open hand laid flat on a huge pale dressed stone block that has a flat recessed margin cut around its edges; (6) a gnarled silver-green olive branch in front, with a small white-and-gold temple building behind it; (7) two cupped open hands, palms up, holding a broken piece of flat round bread; (8) a small wooden lyre with a few strings beside a small clay oil lamp with one steady flame. Row 3: (9) a bundle of pruned bare brown grapevine canes tied with cord, one green vine leaf on top; (10) a wooden hitching post with a rope knot slipping loose from it, the loose end hanging; (11) a dark wooden courtyard gate standing half open, one burning torch fixed to the wall beside it; (12) a tall arched city gateway of big dark stones, its opening dark, empty.
Sheet 17: _variants/actions_sheet_17.png (same conversation)
Keys: stand_far_off (three small bare crosses on a far hill, no figures), stay_through_the_darkness (a darkened sun; it has a red corona but no rays), see_where_he_was_laid (spice jar and aloe), look_at_the_sealed_stone, open_to_the_knock, remember_the_cross, take_him_by_the_right_hand, lay_hands_in_samaria, send_them_all_out (open door with Tabitha's folded tunic), serve_the_widows, break_bread_together, share_out_the_relief. All kept.
Next sheet with exactly the same simple icon style, rules and layout (landscape 1536x1024, 4x3 = 12 icons, one simple central subject per cell filling about 70%, bold chunky silhouette with a thick dark outline, 2 or 3 main colours, no scenery or background, no hands or people unless stated, no faces, no small particles, wide empty gutters so no two subjects touch, flat #1a130d background, no text, no letters, no frames, no glow, no halos, no light rays; it must read at 40 px). These are quiet, reverent story moments from the Gospels and Acts: plain 1st-century objects only. Row 1: (1) three small plain bare wooden crosses standing on a low distant brown hill, no figures, dark grey sky accent behind; (2) a darkened black sun disc with a thin pale rim, against a dim red-brown sky accent (the darkness at midday), no rays; (3) a small round clay jar of spices with a cloth tied over its mouth, a sprig of aloe leaves beside it; (4) a great round disc-shaped rolling stone with a cord stretched across it, fixed with a lump of red clay seal. Row 2: (5) one hand lifting a heavy wooden bar off the iron brackets of a plank door; (6) a plain rough wooden cross on a small rocky mound, no figure, nothing on it; (7) one strong right hand firmly clasping another hand at the wrist, pulling it upward; (8) two open hands palms down, held over a round pale stone well-head. Row 3: (9) a plank door swinging open outward, a neatly folded blue wool tunic lying on the threshold; (10) a flat wicker tray with five round loaves set out in a neat row; (11) two hands breaking a round flat loaf apart into two halves; (12) a squat round wooden grain measure heaped with golden wheat as one solid mound, beside a tied cloth sack.
Sheet 18: _variants/actions_sheet_18.png (same conversation)
Keys: read_the_prophet (scroll and chariot wheel, Acts 8), tap_balsam, sit_where_david_sat (cave mouth with the cut corner of a red robe, 1 Samuel 24), hour_of_incense (horned golden altar, one curl of smoke), sit_with_mary (spindle and distaff), straw_for_the_manger, keep_watch_by_night (crook and campfire), where_anna_prayed (colonnade and lamp), the_bench_in_nazareth (hand plane), open_the_gate (plank gate in a round basalt arch), wash_his_feet, sit_by_the_brazier. All kept. After sheet 16, "nothing medieval (no battlements, no pointed arches, no iron studs)" was added to the prompt.
Next sheet with exactly the same simple icon style, rules and layout (landscape 1536x1024, 4x3 = 12 icons, one simple central subject per cell filling about 70%, bold chunky silhouette with a thick dark outline, 2 or 3 main colours, no scenery or background, no hands or people unless stated, no faces, no small particles, wide empty gutters so no two subjects touch, flat #1a130d background, no text, no letters, no frames, no glow, no halos, no light rays; it must read at 40 px). These are quiet, reverent story moments from the Gospels and Acts: plain 1st-century objects only, nothing medieval (no battlements, no pointed arches, no iron studs). Row 1: (1) an open scroll on two wooden rollers, with a big wooden spoked chariot wheel behind it; (2) a short balsam twig with small leaves and one cut in its bark, one single amber drop of resin falling into a small slender clay vial; (3) a dark cave mouth in a rough pale rock face, a cut-off corner of a red robe lying at its entrance; (4) a small square golden incense altar with horned corners, one single curl of pale smoke rising. Row 2: (5) a wooden spindle and a distaff wrapped with cream wool lying on a stone step; (6) a rough stone feeding trough filled with clean golden straw; (7) a wooden shepherd's crook standing upright beside a small low campfire with one flame; (8) two tall pale stone columns of a colonnade, a small clay oil lamp on the floor between them. Row 3: (9) a wooden carpenter's hand plane resting on a plank with one long curl of wood coming out of it; (10) a heavy plain plank courtyard gate standing open in a round-arched doorway of dark basalt stones; (11) a wide clay basin of water with a linen towel draped over its rim and a small clay pitcher beside it; (12) a small round clay brazier full of glowing red coals, no sparks.
Sheet 19: _variants/actions_sheet_19.png (same conversation)
Keys: hear_them_out (three overlapping speech bubbles; talk has two), seal_the_letter, sit_at_one_table (plain clay cup and black-and-orange Greek cup on one table), draw_back (bowl with a motion arc), hand_down_the_bundles, tie_up_the_bundle, stow_the_bundles, kneel_on_the_quay (raised hands over a ship's rope coil, so it differs from pray), thank_god_and_take_courage (milestone and sunrise, Acts 28:15), pray_by_the_river (prayer shawl with blue tassels by reeds), set_out_the_writing_things, build_a_booth. All kept.
Next sheet with exactly the same simple icon style, rules and layout (landscape 1536x1024, 4x3 = 12 icons, one simple central subject per cell filling about 70%, bold chunky silhouette with a thick dark outline, 2 or 3 main colours, no scenery or background, no hands or people unless stated, no faces, no small particles, wide empty gutters so no two subjects touch, flat #1a130d background, no text, no letters, no frames, no glow, no halos, no light rays; it must read at 40 px). These are quiet story moments from the Acts of the Apostles: plain 1st-century objects only, nothing medieval or modern. Row 1: (1) three plain speech-bubble shapes overlapping, one cream, one ochre and one teal; (2) a rolled papyrus letter tied with cord, a red wax seal on the knot and a bronze signet ring beside it; (3) a low round table with a plain brown clay cup and a black-and-orange painted Greek cup side by side, one round loaf between; (4) a single clay bowl with one curved motion arc behind it, as if just taken away to one side. Row 2: (5) a cloth bundle tied with rope, hanging on a rope above the curved wooden side of a river boat; (6) a rolled brown wool cloak tied with cord into a travel bundle, a leather water skin strapped to it; (7) two tied cloth bundles sitting on a wooden gangplank that slopes up to a ship's dark hull; (8) two open hands raised palms up in prayer above a big coil of thick ship's rope. Row 3: (9) a short round Roman milestone column of pale stone (no letters) on a paved road edge, a rising sun half-disc behind it; (10) a folded cream prayer shawl with blue tassels at its corners, lying beside a clump of green river reeds; (11) a sheet of papyrus with a small clay inkpot and two reed pens lying across it; (12) a small booth of wooden poles roofed with leafy green branches.
Sheet 20: _variants/actions_sheet_20.png (same conversation)
Keys: sit_among_the_people (dropped stones on paving, John 8), help_him_down_the_steps (steps into the pool of Siloam), serve_at_the_table, sit_at_his_feet (sandals by a floor cushion), wait_while_he_prays, trim_the_lamps, wait_beyond_the_jordan (rolled reed mat by reeds), take_away_the_stone, loose_the_grave_clothes, leave_bread_on_the_stone, look_back_up_the_valley. make_a_way_through_the_crowd (an open hand with motion arcs) looked the same as teach at 40 px; replaced by sheet 21 (_variants/actions_alt/make_a_way_through_the_crowd_sheet20_like_teach.png).
Next sheet with exactly the same simple icon style, rules and layout (landscape 1536x1024, 4x3 = 12 icons, one simple central subject per cell filling about 70%, bold chunky silhouette with a thick dark outline, 2 or 3 main colours, no scenery or background, no hands or people unless stated, no faces, no small particles, wide empty gutters so no two subjects touch, flat #1a130d background, no text, no letters, no frames, no glow, no halos, no light rays; it must read at 40 px). These are quiet, reverent story moments from the Gospels: plain 1st-century objects only, nothing medieval or modern. Row 1: (1) three rough grey stones lying dropped on pale stone paving; (2) a short flight of pale stone steps going down into a small pool of blue water, a plain wooden walking stick lying on the steps; (3) a clay bowl of orange lentil stew with a wooden ladle standing in it; (4) a pair of worn leather sandals set neatly beside a low round floor cushion. Row 2: (5) a large flat grey sitting rock with a folded brown mantle laid on it, a small olive sprig beside it; (6) a clay oil lamp with one small flame, a small clay jug tilted pouring oil into its filling hole; (7) a rolled reed sleeping mat tied with cord, lying beside a clump of green river reeds; (8) a great round disc-shaped rolling stone in its stone channel, one big curved motion arc behind it showing it rolled aside. Row 3: (9) a long white linen strip unrolling loosely from a roll in two big loops; (10) a round brown loaf resting on top of a squat grey boundary stone; (11) a traveller's wooden walking staff with a water skin hanging from it, a small white sail of a fishing boat far behind on one wave curl; (12) one broad open hand pushing forward palm-out, two curved motion arcs parting to the left and right of it.
Sheet 21: _variants/actions_sheet_21_fixups.png (same conversation): last two keys, fix-ups, the rods and the crest
Keys: recline_at_his_table (loaf and silver coins on a low table, Zacchaeus), look_out_over_the_wilderness (a loaf-shaped desert stone, Matthew 4:3), and the fix-ups rod_fishing (plain cane rod, natural cork float), sit_on_the_mount (olive branch before the white-and-gold sanctuary; the gold spikes on its roof are Herod's anti-bird spikes, not battlements), untie_the_colt (donkey colt with a loose halter rope), keep_to_the_edge (mantle on a peg, drawn up like a hood, empty), stand_aside (round-arched pale stone gateway), make_a_way_through_the_crowd (a sycomore fig branch, Luke 19:4). Items: items/reed_rod (cell 9, jointed green reed with cork float and bronze hook) and items/willow_rod (cell 10, bent willow rod with coiled flax line and iron hook). Crest: standing/antioch_households (cell 11, a colonnade column with a grapevine and a round loaf at its foot: Antioch's colonnaded street and the shared table). Cell 12, a fire basket past a doorpost, was an alternative for keep_to_the_edge and is in _variants/actions_alt/keep_to_the_edge_sheet21_fire_basket.png.
Next sheet with exactly the same simple icon style, rules and layout (landscape 1536x1024, 4x3 = 12 icons, one simple central subject per cell filling about 70%, bold chunky silhouette with a thick dark outline, 2 or 3 main colours, no scenery or background, no hands or people unless stated, no faces, no small particles, wide empty gutters so no two subjects touch, flat #1a130d background, no text, no letters, no frames, no glow, no halos, no light rays; it must read at 40 px). Plain 1st-century objects only: nothing medieval (no battlements, no crenellations, no towers, no pointed arches, no iron studs) and nothing modern. Row 1: (1) a low wooden table with a round brown loaf and a small stack of silver coins on it; (2) a single round desert stone shaped just like a loaf of bread, lying on a small patch of cracked dry earth; (3) a long thin natural pale cane fishing rod lying on the diagonal with NO rings, NO guides and NO reel, a plain line from its tip to a small plain natural brown cork float (not painted) and a bronze hook; (4) a gnarled silver-green olive branch in front, and behind it the tall square white-and-gold front of the Jerusalem temple sanctuary with a big doorway, no walls, no battlements. Row 2: (5) the head of a young grey donkey colt with a rope halter, its lead rope hanging loose and untied; (6) a plain brown wool mantle hanging on a wooden wall peg, its top folded up like a hood, nobody in it; (7) a tall gateway of big pale stones with a plain semicircular round arch and a flat top, its opening dark, no battlements, no towers; (8) a thick sycomore fig tree branch with big broad rounded leaves, sturdy enough to climb. Row 3, these four are inventory items and fill about 75% of the cell: (9) a straight jointed pale-green-and-tan Jordan reed fishing rod lying on the diagonal, a flax line wound round it with a small cork float and a bronze hook; (10) a long, springy dark-brown willow rod bent in a gentle curve on the diagonal, a twisted flax line coiled near its butt and a small iron hook; (11) a household crest that must fit inside an imagined circle filling 75% of the cell: one pale marble column of a Greek city colonnade with a green grapevine winding around it and a round loaf at its foot; (12) a small iron fire basket of glowing coals, seen past the dark edge of a plain stone doorpost in the foreground.
Notes for the next batch
- With the 8-icon ref strip attached, ChatGPT kept the v2 style for all eight sheets, but subjects were larger than in batch 1 and sometimes touched the cell edge (row 2 of sheet 14). It still sliced cleanly; asking for "a wide empty margin inside each cell" may help.
- Gates, walls and the temple drift medieval (battlements, pointed arches, iron studs) unless the prompt forbids them by name.
- A post with a rope round it reads as a cross; avoid that shape.
- A raised open hand with arcs is already
teach; use another object for any "push", "call" or "make way" action.
UI tab icons: chronicle, collections, catches (j12-artist, 2026-10-31)
Files: images/ui/icons/{chronicle,collections,catches}.png (slice originals, 313, 339 and 393 px square, RGB) + images/ui/icons/{key}.webp (128×128, cwebp q86, opaque, 3.6–4.1 KB). Already wired by another agent through <x-icon art="chronicle|collections|catches">; no Blade, CSS or JS changed.
Pipeline: the same as "Skill icons and UI window icons (2026-10-29)": one new ChatGPT conversation ("Generate interface icons") with _variants/icons_sheet_ui_b.png attached as the style reference, one 4×3 sheet at 1536×1024 on flat #1a130d, downloaded by fetching the image blob in the page, sliced with slice3.py (7% padding), finished with finish.py --keepbg --q 86. The finished WebPs were checked at 40×40 next to ui/icons/{journal,deeds,story,pastimes,talents,merchant}.webp and skills/fishing.webp.
Sheet UD: _variants/icons_sheet_ui_d_tabs.png (ChatGPT, 1536×1024, 4×3): four alternatives per key, first variant
Generate an image. The attached sheet shows menu icons from my game J12 (a World of Warcraft style RPG set in 1st-century Galilee, AD 28). I need three more interface tab icons in exactly the same simple icon style, shown tiny, at about 40 px, with alternatives. Landscape 1536x1024, a precise grid of 4 columns by 3 rows = 12 icons, each subject alone in its own equal cell with a wide empty margin inside each cell so no two subjects touch, all on one plain flat very dark warm brown background (#1a130d). Style exactly like the attached sheet: ONE simple central subject per cell filling about 70-75% of the cell, bold chunky silhouette with a thick dark outline, strong value contrast, only 2 or 3 main colours per icon, big flat painted shapes with a few bold highlights, visible brushwork, warm key light from the upper left, soft rim light, earthy palette. STRICT RULES: no scenery or background, no people, no hands, no faces, no small particles, no fine detail, no text, no letters, no numbers, no symbols, no frames, no borders, no glow, no halos, no light rays. 1st-century Roman-era Galilee objects only, nothing medieval or modern, NO codex books, NO bound books, NO wax seals. It must read at 40 px. Row 1 (a record of many books): (1) a tall cylindrical dark-brown leather scroll case (a Roman capsa) standing upright with a leather strap and a bronze band, the rolled ends of four or five cream parchment scrolls sticking up out of its open top; (2) a small bundle of four rolled parchment scrolls lying horizontally stacked in a pyramid, tied together round the middle with one thick brown cord in a knot, cream and tan parchment, no seals; (3) the same upright leather scroll case as cell 1 but shorter and wider, with three scroll ends showing and its round leather lid leaning against it; (4) five rolled scrolls standing upright side by side, bound together round the middle by a wide brown leather strap. Row 2 (a collection of old finds): (5) a small round open woven reed basket, tan, seen from the front and a little above, three old green-brown bronze coins and one curved red-orange painted pottery sherd with a black stripe spilling out over its rim; (6) a small squat red-brown clay jar lying on its side, three old green-and-bronze coins and one painted pottery sherd spilling from its mouth in front of it; (7) a shallow round woven tray holding one big cream scallop shell, two old bronze coins and one painted red pottery sherd, all big and simple; (8) a small open brown leather pouch with its drawstring loose, three old bronze coins and one painted pottery sherd tumbling out in front. Row 3 (a log of fish caught): (9) ONE plump silver-green Galilee tilapia (musht) with a big tail hanging head-up, vertically, from a short brown cord loop threaded through its gill, the loop at the top, no net; (10) TWO plump silver-green Galilee tilapia hanging side by side head-up from one short brown cord loop through their gills, no net; (11) a string of three silver fish of different sizes hanging head-up from one brown cord threaded through their gills, a loop at the top; (12) one plump silver-green tilapia hanging head-up from a short brown cord tied to a short horizontal wooden peg at the top.
- chronicle (kept cell 3): a squat dark-brown leather capsa with a bronze band, three cream scroll ends showing and its round lid leaning against it. It is the widest of the four, so it fills the 40 px square best, and the dark leather body keeps it clearly apart from
journal(one cream scroll with a red seal). Rejected: cell 1 (taller capsa with a thin strap loop; reads, but smaller at 40 px,_variants/ui_icons_alt/chronicle_capsa_sheet_d.png), cell 2 (cord-tied pile of cream scrolls, too close tojournalin colour and shape,chronicle_bundle_sheet_d.png), cell 4 (five upright scrolls in a strap; reads as a palisade at 40 px,chronicle_strap_sheet_d.png). - collections (kept cell 5): a tan woven basket with three green-bronze coins and a red-and-black painted sherd. Differs from
deeds(wreath) andmerchant(striped stall). Rejected: cell 6 (jar on its side, coins spilled; fine but busier,collections_jar_sheet_d.png), cell 7 (tray with a scallop shell; the shell reads but the flat tray is a thin oval at 40 px,collections_tray_sheet_d.png), cell 8 (leather pouch spilling coins; reads as a money bag,collections_pouch_sheet_d.png). - catches (kept cell 10): two plump musht hanging head-up from one cord loop through their gills, no net, so it differs from
skills/fishing(one musht in a net loop) and reads as "a catch". Rejected: cell 9 (one hanging fish; a narrow vertical shape that fills little of the square at 40 px,catches_one_sheet_d.png), cell 11 (three fish on a cord, busier,catches_three_sheet_d.png), cell 12 (one fish from a wooden peg,catches_peg_sheet_d.png).
Notes for the next batch
- The
icons_sheet_ui_b.pngreference kept the style on the first try; listing four alternatives per key in rows made picking easy. - Tall narrow subjects (one hanging fish, an upright scroll case) shrink at 40 px because the slice is squared on the longest side; prefer subjects about as wide as they are tall.
- Cream scroll subjects compete with
journal; dark leather containers keep scroll ideas distinct.
Notice vignettes: language offer and cookie banner (2026-10-31)
Files: images/ui/notice-language.webp and images/ui/notice-cookies.webp (320×320, cwebp q84, opaque on the sheet's dark brown, about 15 and 20 KB), square crops of _variants/notice_vignettes_b.png (ChatGPT, 1536×1024). _variants/notice_vignettes.png is the first take, with a modern grooved honey dipper. Shown at 124 px (76 px on phones) in <x-language-offer> and <x-cookie-consent>, with a radial mask fading the edges into the plate (resources/css/consent.css).
Generate an image. Two small painted still-life vignettes for the website of my game World of Apostles (a World of Warcraft style RPG set in 1st-century Galilee, AD 28), to sit beside two notice banners. Landscape 1536x1024, the two vignettes side by side, LEFT and RIGHT halves, each centred in its own half with a very wide empty gutter between them so they never touch, both on one plain flat very dark warm brown background (#1a130d) that fills the whole image edge to edge. Style: painterly stylized fantasy-RPG illustration in the spirit of World of Warcraft key art but grounded and historical; big painted shapes, visible brushwork, warm golden oil-lamp key light from the upper left, soft warm rim light, earthy palette (linen, ochre, olive, black basalt, lake teal, a touch of gold), the light falling off softly into the dark background so each vignette has soft dark edges, no hard frame. Each subject fills about 65% of its half and reads clearly when shown small (about 120 px). LEFT (for a 'choose your language' notice): a partly unrolled cream papyrus scroll lying across a low flat black basalt stone, its rolled ends curling up, covered in rows of faint brown ink strokes that are only wavy lines and dots, NOT readable letters; a reed pen resting across it, a small round red-brown clay inkpot beside it, and a small lit clay oil lamp with one calm flame behind. RIGHT (for a 'cookies' notice, shown as their 1st-century equivalent): a small round woven tan reed basket full of round golden honey cakes (flat round baked cakes, a few stacked, one broken showing its crumb), a small red-brown clay honey jar beside it with a wooden dipper and a little honey dripping, two or three dates and a small olive sprig on the ground. STRICT: no text, no letters, no numbers, no symbols, no people, no hands, no faces, no frames, no borders, no glow effects, no halos, no light rays, nothing medieval or modern (no codex books, no wax seals, no candles, no metal cutlery, no modern cookies with chocolate chips).
Follow-up (kept, _variants/notice_vignettes_b.png):
Keep this exact image and change only one thing: the grooved honey dipper is a modern design. Replace it with a plain straight flat stick of olive wood resting in the jar mouth, honey still dripping from it. Everything else identical, same size 1536x1024.
- Crops (left, top, side on the sheet): language 20, 170, 740; cookies 860, 150, 670.
- The scroll's writing came out as dashes and dots, as asked; the olives on the sprig are an extra and harmless.
Painted zone maps (2026-10-31)
Painted replacements for the code-drawn relief on the World Map and minimap: maps/painted/<zone>.webp, each at its relief's exact size (1 px a metre over the walkable bounds, north up), so the game's names and markers sit on top at exact coordinates. Raw ChatGPT outputs are kept as maps/_variants/painted_<zone>_raw.png (rejected tries as _raw_v1.png).
- Tool: ChatGPT (chatgpt.com) image generation in Chrome only, one conversation, "Generate zone map image", so the style stays one set. The style reference
maps/land_map.webp(as PNG) was attached once at the start with Sebaste; each later zone attached only its layout reference~/Sites/_tools/j12-3d/maps/refs/<zone>.png. - Export: ChatGPT's CSP blocks fetches to 127.0.0.1, so the page fetched the image blob and
postMessaged it to a receiver page served from a loopbackhttp.server(opened from the ChatGPT tab), which POSTed it to disk. - Alignment:
~/Sites/_tools/j12-3d/maps/align.py RAW maps/refs/<zone>.json relief/<zone>.webp painted/<zone>.webp --check …. When the fitted shift or scale leftalign.py's edge-clamped (smeared) bands at the borders, those bands (thebandspx below) were replaced by a mirror of the painted rows beside them. The game fades the map edges anyway. - Not done (quota): chorazin, hippos, jericho, bethlehem_herodium, antipatris, caesarea_philippi, ein_gedi. ChatGPT answered the Chorazin request with "You're out of image creations for now" (Plus plan limit, reset about 16:51).
Shared prompt
Sebaste (the first message, with the land map and the Sebaste reference attached):
Generate an image. I'm painting a matched set of zone maps for a historical RPG set in 1st-century Judea, Samaria and Galilee. The FIRST attached image is the STYLE reference only (our painted overview map of the Land): match its palette and brushwork exactly — painterly watercolour and gouache, ochre and olive hills with soft painted relief lit from the north-west (upper left), small painted trees, turquoise water with fine ink ripple lines. Do NOT copy its layout.
The SECOND attached image is the LAYOUT reference for this zone: Sebaste (Samaria), a top-down relief, 1 px = 1 metre, north up. Repaint the second image as a hand-painted, strictly top-down orthographic RPG zone map (looking straight down like a satellite photo, NOT oblique, NOT isometric, NO perspective; hills must not lean or cast long side views) in the style of the first image. Square, 1024x1024, same aspect as the reference.
CRITICAL: trace the layout reference exactly, like a tracing over it. Every hill, terrace ring, road, field and building block stays exactly where it is, with the same size and shape, because game markers are drawn on top at exact coordinates. Do not zoom, crop, shift, rotate or re-compose. What's in it: the big round hill of Sebaste in the centre-left, its summit acropolis (the large dark rectangle at the very top is the temple, paint it as a pale limestone temple platform with a small temple), stepped ring terraces around the hill lined with small houses (each small dark mark is one house: paint a tiny flat-roofed pale limestone house exactly on each mark, no extra houses); the straight road from the summit running down south-east through the town to a round gate and on to the east; the west road leaving from the hill's west side; the curved terrace bands south of the hill become olive terraces with small olive trees; the coloured rectangles in the north-east become painted fields and vineyards on exactly those patches (green = grain and vines, ochre = ripe barley, brown = ploughed earth), likewise the two ochre fields on the west edge; the small round floor top-centre is the threshing floor; the thin brown lines are dirt tracks and stay exactly on those lines; the rough grey-green masses (along the whole west edge, across the top, and in the south-east corner) are rugged rocky high ground with scrub; the small round knobs scattered in the east are lone boulders or trees. Pale limestone everywhere (this is Samaria, not Galilee basalt).
Paint the terrain edge to edge with NO border, NO torn or burnt paper edge, NO vignette, NO frame: continue the land straight out past the reference's faded pale rim to the very edges of the image. Absolutely NO TEXT anywhere: no labels, letters, numbers, compass rose, legend, scale bar or cartouches. No people needed. No magic, no fantasy buildings, no castles, no towers, no creatures.
Every later zone used this template, with {NAME}, {SIZE}, {BODY} and {STONE} filled in. From Coast on, the bracketed sentence was added after Jerusalem slid up.
{Excellent, that one is exactly right: keep that same look and the same faithful tracing. (Galilee) | Very good, that one traced well. Keep the same look and the same faithful tracing. (later zones)} Generate the next image in the set. Use the first image of this conversation (the painted Land map) and {the Sebaste map you just made | the zone maps you have made so far in this conversation} as the style. The attached image is the LAYOUT reference for the next zone: {NAME}, a top-down relief, north up. Repaint it as a hand-painted, strictly top-down orthographic RPG zone map (looking straight down, NOT oblique, NOT isometric, NO perspective; hills must not lean) in the same style, {SIZE}, same aspect as the reference.
CRITICAL: trace the layout reference exactly, like a tracing over it. Every shoreline, lake, river, hill, terrace, road, field and building block stays exactly where it is and keeps its size and shape, because game markers are drawn on top at exact coordinates. Do not zoom, crop, shift, rotate or re-compose [(your last Jerusalem slid up by about 40 px; keep the exact registration: the top, bottom, left and right edges show the same ground as the reference's edges)], and do not add or remove lakes, hills, towns or roads. In the reference: water is blue-green, thin brown lines are dirt roads and paths, small dark brown rectangles are buildings, coloured patches are fields, ring and contour lines are terraces and hills, grey-green masses are rough high ground. {BODY} Each small dark mark becomes one small flat-roofed 1st-century house of {STONE} exactly on the mark, with no extra houses; fields become painted crops on exactly those patches; roads become dirt tracks along exactly the brown lines.
Paint the terrain edge to edge with NO border, NO torn or burnt edge, NO vignette, NO frame: continue the land straight out past the reference's faded pale rim to the very edges of the image. Absolutely NO TEXT anywhere: no labels, letters, numbers, compass, legend, scale bar or cartouches. No people needed (a few tiny fishing boats on water are fine). No magic, no fantasy buildings, no castles, no creatures.
maps/painted/sebaste.webp (1080x1080)
- Kept: first variant (raw 1254x1254). align.py: score 0.440 → 0.442; fit sx 0.9978, sy 0.9920, tx 0, ty 0. Every house, field, terrace ring and road sits on its relief mark. This is the best trace of the set.
maps/painted/galilee.webp (1220x1920)
- Kept: first variant (raw 1024x1536). align.py: 0.851 → 0.851; fit sx 1.0107, sy 1.0009, tx 0, ty 0. The shoreline, both ends of the Jordan, Magdala's compound and Tiberias's grid sit on the relief. Capernaum's scattered houses are drawn as one tighter cluster, offset about 20–40 px east. Some hill tracks are invented.
- NAME: the north shore of the Sea of Galilee around Capernaum. SIZE: portrait 2:3, 1024x1536. STONE: black basalt with flat mud-and-reed roofs (this is Galilee), except Tiberias, which is a pale limestone Roman-style town with some terracotta roofs.
- BODY: What is in it: the big shield-shaped Sea of Galilee filling the middle, turquoise with a soft depth gradient (lighter shallows, deeper teal centre) and fine ink ripple lines, its shoreline exactly as in the reference; the Jordan entering the lake from the top a little right of centre and leaving it at the bottom centre, plus the small stream coming down from the top-left into the north-west corner of the lake; Capernaum, the small cluster of houses on the north shore near the centre-top of the lake, with a slightly larger basalt synagogue; Bethsaida just east of where the Jordan enters; Magdala on the far west shore level with the upper lake; Tiberias, the gridded walled town on the west shore lower down; the cliffs of Arbel in the far west; rugged olive-and-scrub hills and terraced slopes all round the lake on every side, and the plain beside the shore. Three or four tiny wooden fishing boats with a single mast on the lake, papyrus and reeds at the Jordan mouth.
maps/painted/sychar.webp (1080x1080)
- Kept: first variant. align.py: 0.354 → 0.355; fit sx 1.0016, sy 1.0113, tx 0, ty 0. Ebal and Gerizim, their rocky tops, the enclosure on Gerizim, the pass road, Jacob's Well and most field patches are in place. Known misses: the long ridge wall running north-east is painted as a track beside the road; the small round market place of Sychar is missing; a few extra field plots were added on the east plain.
- NAME: Sychar and Shechem in Samaria, the pass between Mount Ebal and Mount Gerizim. SIZE: square 1024x1024. STONE: pale limestone (this is Samaria).
- BODY: What is in it: Mount Ebal, the big high hill in the upper-left (north-west) quarter, and Mount Gerizim, the big high hill in the lower-left (south-west) quarter, both rocky limestone with scrub, sunlit on their north-west sides, keep their exact outlines and contour rings; on the summit of Gerizim the small square outline is a low stone enclosure (a place of prayer, just a walled square, no temple); the pass between the two mountains runs west to east with a dirt road along it, and the round ring on the west slope of Ebal is a herders' camp of a few tents in a circle; at the east mouth of the pass, at the centre of the map, Jacob's Well (a tiny round stone well-head) and the low mound of old Shechem; Sychar, a small village of scattered houses north-east of the well, with its little round market place where the roads meet; the long straight double lines running east are low dry-stone field walls and terrace walls; the open plain to the east is a patchwork of grain fields and ploughed fields exactly on the coloured patches, green with young wheat and barley ("fields white for harvest" near the well can be pale gold); the north-south road through the centre, the diagonal road to the north-east, and the small walled farm enclosure on the east side.
maps/painted/jerusalem.webp (1080x1080)
- Kept: second variant. v1 (rejected,
_variants/painted_jerusalem_raw_v1.png): 0.134 → 0.306, fit sx 1.0149, sy 1.0136, tx 9.8, ty 46.0. The whole picture slid up 46 px and the city was invented as a dense packed town. v2: 0.199 → 0.288; fit sx 1.0000, sy 1.0058, tx 0, ty 38.0; the top 37 px were mirror-filled. The Temple platform, the palace, the pool, the two city-wall lines, the Kidron, Hinnom and the Mount of Olives terraces land within about 10 px. The city now has houses on the marks with open ground between. - NAME: Jerusalem and the Mount of Olives. SIZE: square 1024x1024. STONE: pale limestone (Jerusalem, Judea).
- BODY (v1): What is in it: the Temple Mount, the big pale rectangular platform right of centre, with the sanctuary (the large dark block inside it) as a gleaming pale limestone sanctuary with a touch of gold on a broad paved court surrounded by colonnades, and the narrow colonnaded strip running south from its south-west corner; the city lies west of the Temple: scattered limestone houses exactly on the small dark marks, Herod's palace as the larger dark block left of centre, the round pool north-west of the palace; the two long straight dark lines running north-south through the city (left of centre and just left of the Temple) are the city wall and the scarp, keep them as straight stone walls; the Kidron valley, the deep valley running down from the top centre, along the east side of the Temple and down to the bottom right, with olive groves on its slopes; the Mount of Olives rising east of it on the right third, terraced and covered with olive trees, with the curved terrace rows in the upper right and middle right; the villages of Bethphage and Bethany as a few houses on the far right; the Valley of Hinnom, the long curved valley sweeping across the lower left, and the small square garden plots and fields south of it in the bottom left; the vineyards and fields north-west as patches. Dirt roads exactly along the brown lines.
- v2 prompt (the same reference attached again):
Beautiful painting, but two things moved, so please redo Jerusalem from the same attached layout reference (attached again), same style, square 1024x1024. (1) The whole composition slid UP by about 45 pixels: the Temple platform, the Kidron valley and the Hinnom valley must sit at exactly the same pixel positions as in the reference (the Temple platform's top edge is at about 40% of the image height, its bottom at about 51%; the Hinnom valley's lowest curve reaches the bottom-left corner). Do not shift, zoom or crop; the top edge of the painting must show the same ground as the top edge of the reference. (2) The city was painted as a dense packed town; instead put a small limestone house ONLY on each small dark mark in the reference and leave open ground, gardens and a few olive trees between them, with Herod's palace as the larger block left of centre and the round pool where the round mark is. Fields only on the coloured patches: the two small patches in the north-west and the patches in the bottom-left, nowhere else. Everything else as before: the gleaming Temple platform with its colonnades and sanctuary, the straight city walls along the two long dark lines, the Kidron valley, the terraced Mount of Olives with olive trees on the right, Bethany's few houses far right, roads exactly on the brown lines, edge to edge with no border or vignette, absolutely no text.
maps/painted/coast.webp (1080x1080)
- Kept: first variant. align.py: 0.327 → 0.621; fit sx 1.0254, sy 1.1078, tx 50.9, ty 68.2. ChatGPT squashed the painting about 10% vertically and the fit undoes that. Bands mirror-filled: top 12 px and left 40 px (sea). Caesarea, both rivers, the kurkar ridges, Joppa's headland, Lydda, Hadid and the fields sit within about 10–15 px. The shoreline is up to about 15 px seaward of the relief's in the middle.
- NAME: the coast of the Sharon plain, from Caesarea in the north to Joppa and Lydda in the south. SIZE: square 1024x1024. STONE: pale limestone and sandstone, with red terracotta tiled roofs only in Roman Caesarea.
- BODY: What is in it: the Great Sea (the Mediterranean) along the whole left edge, deep turquoise with fine ripple lines and white surf on the beach, its shoreline exactly as in the reference; a narrow pale sand beach and low dunes along the shore; in the top-left, Caesarea, the walled Roman harbour city in the square outline, with the harbour mole and Herod's palace as the dark blocks on the shore and gridded streets and houses on the dark marks, the round theatre and the round amphitheatre-like ring to the east as small round structures; two small rivers (the narrow blue lines) flowing west across the plain into the sea, the upper one with a bend in the middle and the lower one, the Yarkon, crossing the whole map; the long straight pale ridges running north-south in the middle are low sandstone (kurkar) ridges; Apollonia, a few houses on the shore just above the lower river; in the bottom-left Joppa on its small round headland jutting into the sea, a cluster of houses; Lydda, a village in the bottom centre; Hadid, a hilltop village on the east side, and Ono; oak woods and pastures of the Sharon across the middle, grain fields exactly on the coloured patches, and the foothills of Samaria rising along the right edge with olive terraces.
maps/painted/antioch.webp (1080x1080)
- Kept: second variant, the weakest fit of the set. v1 (rejected,
_variants/painted_antioch_raw_v1.png): 0.128 → 0.178, fit sx 0.9199, sy 0.9655, ty 11.5. The river came out nearly straight, the whole grid was filled with houses and the fields moved. v2: 0.060 → 0.111; fit sx 0.9183, sy 0.9295, tx 0, ty 11.3. ChatGPT zoomed in about 8%, so bands of 52 / 29 / 47 / 47 px (top / bottom / left / right) were mirror-filled. After the fit, the Orontes arc, the city grid, the main street, the cross wall and the Silpius wall are within about 10–25 px. The river is a little straighter than the relief at the top and bottom. The fields west of the river do not follow the patches. The grid is still denser than the marks. - NAME: Antioch on the Orontes, the great Roman city of Syria. SIZE: square 1024x1024. STONE: pale limestone with red terracotta tiled roofs (Antioch is a Roman city).
- BODY (v1): What is in it: the river Orontes, the broad blue-green river sweeping in a long curve from the top (left of centre) down to the bottom (left of centre), exactly along the blue band in the reference, with a small bridge and the little island with a round mark where the cross street meets it; east of the river the city on its regular Roman grid: the very wide colonnaded main street running north-south through the middle (the broad tan strip) with gates at both ends (the small dark marks), the narrower cross streets exactly on the thin lines, house blocks and courtyards exactly on the dark marks, and the denser quarter of Epiphania with rows of house blocks to its east; the long low wall line that crosses the bottom third from the city to the hills; Mount Silpius rising along the right side, steep rocky slopes with olive terraces, with the dark zig-zag city wall climbing up it; west of the river and south of the city a patchwork of fields, orchards and vineyards exactly on the coloured patches, and a small village of a few houses on the left; roads exactly on the brown lines. Plain, dignified Roman buildings, no statues.
- v2 prompt (the same reference attached again):
That Antioch drifted too far from the layout, so please redo it from the same layout reference (attached again), same style, square 1024x1024. What moved: (1) the river Orontes must follow the reference's blue band exactly: it enters at the top edge about 16% from the left, bows strongly to the RIGHT to about 40% from the left at mid-height, and leaves at the bottom edge about 32% from the left; it is a smooth single arc, not straight. (2) The city must stay inside the reference's grid only, between about 42% and 69% of the width and 30% to 71% of the height, with the very wide tan colonnaded main street running straight north-south at 51% from the left, its two gates at its ends; the cross streets exactly on the thin lines; the two blocks of dense rows of small houses only on the right half of the grid (the rows of dark marks) and open paved ground and a few public buildings on the left half; do not fill the whole grid with houses. (3) East of the city, from about 70% to the right edge, is the steep slope of Mount Silpius, with the dark zig-zag wall climbing it exactly where the reference shows it; no city on the mountain. (4) Fields only on the coloured patches: the column of fields just west of the river, the fields at the top, and the fields south of the city; open grassland with scattered trees elsewhere on the left. (5) Keep the long low wall line along the bottom of the city running east to the hills. Keep the registration exact: no zoom, no shift. Everything else as before: Roman pale limestone with red tile roofs, edge to edge with no border or vignette, absolutely no text.
maps/painted/rome.webp (1080x1080)
- Kept: second variant. v1 (rejected,
_variants/painted_rome_raw_v1.png): 0.059 → 0.098, fit sx 0.938, sy 0.980, ty 11.5. The thin sea rim grew into a wide band, the land was squeezed up and inward, and the city became one dense grid. v2: 0.125 → 0.282; fit sx 1.0174, sy 1.0234, tx 0, ty 36.7; the top 27 px were mirror-filled. The Tiber, Tiber Island, the Circus Maximus, Transtiberim, Ostia and the salt pans land within about 15–20 px. The city is still denser than the relief's marks. - NAME: Rome on the Tiber, with Ostia at the river mouth. SIZE: square 1024x1024. STONE: cream and ochre lime plaster with red terracotta tiled roofs (Rome).
- BODY (v1): This one is tricky, so take extra care with the registration: no zoom, no shift. What is in it: the Tiber, the blue-green river running diagonally from the top edge (a little left of centre, about 47% from the left) down to the bottom-left (about 20% from the left at the bottom edge), exactly along the blue band, with the small oval Tiber Island in it just above mid-height and bridges where the roads cross; the thin strip of sea along the left and bottom edges stays sea; west of the river, Transtiberim, a small quarter of houses on its grid, and the long ridge of the Janiculum along the left side with trees; east of the river the city of Rome, buildings ONLY on the dark marks and blocks, streets exactly on the brown lines: the Campus Martius and the round Mausoleum of Augustus at the top, the Capitoline and the Forum with its temples and basilicas (the big dark blocks left of centre), the gridded house blocks of the Subura in the upper right, the Palatine hill in the middle, the long Circus Maximus as the two long parallel dark bars below the middle, the gridded quarter south of it, the Aventine; Ostia as the small walled quarter by the river near the bottom-left, with the pale salt pans as the large pale rectangle along the bottom; the aqueduct arches approaching from the right, fields and gardens exactly on the coloured patches at the far right and bottom right; umbrella pines and cypresses in the gardens. Plain Roman buildings, no statues.
- v2 prompt (the same reference attached again):
Lovely, but Rome drifted from the layout, so please redo it from the same layout reference (attached again), same style, square 1024x1024. What moved: (1) the sea grew: in the reference the water is only a THIN strip, about 6% of the width along the left edge and about 6% of the height along the bottom edge; the land must reach right down to that thin strip, so the land fills 94% of the image; (2) the whole city was squeezed upward and inward: keep every block at its reference position; the long Circus Maximus (the two long parallel dark bars) sits at 53% to 60% of the height and 51% to 65% of the width; the Tiber leaves the land at the bottom about 20% from the left; Ostia's small walled quarter sits by the river at about 82% of the height; (3) the city was painted as one dense continuous grid: instead paint a building ONLY on each dark mark and block of the reference, with open paved streets, gardens and open ground wherever the reference is plain; the large plain areas (the Palatine hill in the middle, the open ground in the lower right, the ground west of the Janiculum ridge on the left) stay open with trees and gardens; (4) the pale rectangle along the bottom is salt pans, the coloured patches on the right edge are fields. Keep everything else: the Tiber along the blue band with the oval Tiber Island, Transtiberim's small grid west of the river, the Janiculum ridge, red tile roofs, edge to edge with no border or vignette, absolutely no text.
maps/painted/lower_galilee.webp (1080x1080)
- Kept: first variant. align.py: −0.024 → 0.245; fit sx 0.9549, sy 1.0785, tx 6.4, ty 56.3. ChatGPT squashed the painting about 8% vertically and widened it about 5%. Bands mirror-filled: top 16, left 33 and right 20 px. After the fit, the Netofa and valley fields, the Sepphoris grid, Nazareth, Cana, Nain, Japha and the main north-south road are within about 5–10 px.
- NAME: Lower Galilee: Nazareth, Sepphoris, Cana and Nain. SIZE: square 1024x1024. STONE: pale limestone with flat mud-and-reed roofs (Lower Galilee is limestone country; Sepphoris a little grander with a few tiled roofs).
- BODY: What is in it: rolling limestone hills with olive groves, vineyards, oak scrub and terraces. Nazareth, a modest village of scattered houses along the ridge in the very centre, with its spring and terraces; Sepphoris, the denser walled hill town with a small street grid just left of centre (the tight block of dark marks), with its houses climbing the hill north of it; Cana, a small village on the slope right of centre and above it (the cluster of dark marks with the curving terraces); Nain, a few houses lower right of centre; Japha, a few houses on the left below centre; the Netofa valley at the top with the two big rectangular brown and striped fields exactly on the patches; the big fields of the plain at the bottom, exactly on the brown and striped patches; the rounded Hill of Moreh in the bottom-right corner and the large rounded hill on the right edge, keep their contour rings; the long road running north-south through the centre and the other dirt roads exactly along the brown lines. The pale diagonal corner in the top right and the strip along the bottom-left are just the edge of the reference: continue the hills and fields naturally into them.