diff --git a/assets/branding/boot_splash.png b/assets/branding/boot_splash.png index 73bae8f..9e9d936 100644 Binary files a/assets/branding/boot_splash.png and b/assets/branding/boot_splash.png differ diff --git a/docs/BRANDING.md b/docs/BRANDING.md index a2d23ce..eae4b06 100644 --- a/docs/BRANDING.md +++ b/docs/BRANDING.md @@ -9,17 +9,21 @@ The stock Godot boot splash (logo plus "GODOT Game engine") is replaced by the ## Asset -`assets/branding/boot_splash.png`, 1024x1218, palette PNG with alpha -(256 colors, 95 alpha levels), about 150 KB. Subject: cartoon zombie head and bust, -unsettling grin, thumbs up, with "Mat Games" below in a phosphor-terminal typeface. +`assets/branding/boot_splash.png`, 1024x1185, palette PNG with alpha +(256 colors, 95 alpha levels), about 159 KB. Subject: cartoon zombie head and bust, +bald scalp with a sparse hair fringe on the sides, unsettling grin, thumbs up, with +"MatGames" below (one word, no space) in a phosphor-terminal typeface. Provenance is recorded in `tools/branding/manifest.json`: - mascot: generated with `agy_generate` (Antigravity direct API, model `gemini-3.1-flash-image`) on 2026-10-11 from no third-party source material; the - provider terms do not claim ownership of the output. Raw source kept at - `tools/branding/raw/` with its SHA256. Note that an image generator does not emit - real alpha, so the flat magenta background is keyed out locally; + provider terms do not claim ownership of the output. A second AI pass (`agy_edit`) + kept the face, grin, thumbs-up hand, shirt, pose and flat background and changed + only the hair to a bald scalp with a side fringe; both files and their SHA256 are + kept in `tools/branding/raw/` and the edit is recorded under `mascot_derived_from`. + Note that an image generator does not emit real alpha, so the flat magenta + background is keyed out locally; - lettering: drawn by script, not by the generator, because generated text is unreliable. Font `tools/branding/fonts/VT323-Regular.ttf`, glyphs of the DEC VT320 terminal, licensed **SIL Open Font License 1.1** (license text kept next to it in @@ -41,7 +45,8 @@ packed into the export (`tools/*` is already excluded by the export preset). pink tongue or the blue shirt because their red and blue are not both above green; 4. crops to the subject, applies a 50 px fade at the bottom to soften the frame cut of the generated bust, and scales to 1024 px wide with 40 px side padding; -5. draws the title with VT323 in amber over a blurred glow layer; +5. draws the title with VT323 in amber over a blurred glow layer. The title defaults + to the one-word form `MatGames`; pass `--title` to change it; 6. quantizes to 256 colors (no dither) and writes the PNG plus the manifest. ```sh @@ -66,11 +71,11 @@ ratio; the exported shell confirms the result with the classes ## Verification -- Exported `index.png` has the same 1024x1218 dimensions as the master. It is - re-encoded by the exporter to 32-bit RGBA (about 475 KB), so the bytes are not +- Exported `index.png` has the same 1024x1185 dimensions as the master. It is + re-encoded by the exporter to 32-bit RGBA (about 496 KB), so the bytes are not identical; composited on black the two images differ by at most 6.4/255 on - 0.14% of pixels, all with alpha below 20, i.e. invisible. The release keeps the - 150 KB master in the repository and ships a gzip sidecar. + 0.13% of pixels, all with alpha below 20, i.e. invisible. The release keeps the + 159 KB master in the repository and ships a gzip sidecar. - The exported shell contains no "Game engine" text and the splash image has an empty `alt`. - `html/export_icon=false`, so no favicon is exported: the browser tab still shows diff --git a/docs/WEB-DEPLOY.md b/docs/WEB-DEPLOY.md index ddcf61f..f9c8426 100644 --- a/docs/WEB-DEPLOY.md +++ b/docs/WEB-DEPLOY.md @@ -1,5 +1,21 @@ # Web build and compressed deployment +## Bald mascot release: 1194f239fcbd91d6 + +Title is now the one-word `MatGames` and the mascot has a bald scalp with a side +fringe (AI edit of the previous generation, see `docs/BRANDING.md`). PCK 4,347,536 +bytes; gzip payload total 12,796,287 bytes. Backup `index-before-bald.html`. + +Cleanup after this deploy: the three older directories (ddba14dd80539f19, +9a376a3dbf674069, 7ebf03fe3c88be15) were removed with approval, leaving +1194f239fcbd91d6 (live) and 097e6c64b42640ad (previous): 272 MB -> 110 MB, free space +1,5 GB. The same guarded procedure was used (hash read from the live base href, +hex validation, containment check, kept-list exclusion, `rm -rf --` with absolute +paths) and the post-checks passed: root 200 with the new base href, live PCK +byte-identical, previous release still served, removed release 404, and the live +loading screen captured in the browser. + + ## Loading screen branding release: 097e6c64b42640ad See `docs/BRANDING.md`: black boot splash background and the "Mat Games" mascot in diff --git a/tools/branding/manifest.json b/tools/branding/manifest.json index 2f7543c..0ce12fd 100644 --- a/tools/branding/manifest.json +++ b/tools/branding/manifest.json @@ -3,36 +3,43 @@ "file": "assets/branding/boot_splash.png", "size": [ 1024, - 1218 + 1185 ], "mode": "P", "palette_colors": 256, - "sha256": "78524be4ba17ab04afe56d16b00954989457f9af247367f7c4b0f9ed8ea2dec4" + "sha256": "4b4bab87b5038915d5a7493c6ee134cd654293036d093e71d210cbad6359bdb2" }, "mascot_source": { - "file": "tools/branding/raw/agy_generate_20261010234423_0.jpg", - "sha256": "5929495ff606fbcdd74f52a37304f3b569315bcd1fc0fef812b5fd7689dc1396" + "file": "tools/branding/raw/agy_edit_20261010235510_0.jpg", + "sha256": "913184c2e2e3dd5357f7729988859c8e038e4561ba18af7cb60f12644f7f6994" }, "generator": { "tool": "agy_generate (Antigravity direct API)", "model": "gemini-3.1-flash-image", "date": "2026-10-11", - "prompt": "single cartoon zombie head-and-bust mascot, unsettling wide grin, thumbs up, 2D cartoon style with bold outlines, flat magenta chroma-key background, no text and no logo", + "prompt": "single cartoon zombie head-and-bust mascot, unsettling wide grin, thumbs up, 2D cartoon style with bold outlines, flat magenta chroma-key background, no text and no logo; then edited to a bald scalp with a sparse hair fringe on the sides only", "terms_note": "generated from no third-party source material; the provider terms do not claim ownership of the output. The generator emits no real alpha channel, so the background is keyed out locally by this script." }, "chroma_key": { "background_rgb": [ - 250, - 4, - 247 + 246, + 1, + 237 ], "transparent_below": 55, "opaque_above": 130 }, "title": { - "text": "Mat Games", + "text": "MatGames", "font": "tools/branding/fonts/VT323-Regular.ttf", "license": "SIL Open Font License 1.1 (tools/branding/fonts/OFL.txt)" }, - "bottom_fade_px": 50 + "bottom_fade_px": 50, + "mascot_derived_from": [ + { + "file": "tools/branding/raw/agy_generate_20261010234423_0.jpg", + "sha256": "5929495ff606fbcdd74f52a37304f3b569315bcd1fc0fef812b5fd7689dc1396", + "edit": "AI edit (agy_edit): keep face, grin, thumbs up, shirt, pose and flat background; change the hair to a bald scalp with a sparse fringe on the sides only" + } + ] } diff --git a/tools/branding/raw/agy_edit_20261010235510_0.jpg b/tools/branding/raw/agy_edit_20261010235510_0.jpg new file mode 100644 index 0000000..34a0647 Binary files /dev/null and b/tools/branding/raw/agy_edit_20261010235510_0.jpg differ diff --git a/tools/branding/raw/agy_edit_20261010235510_0.jpg.import b/tools/branding/raw/agy_edit_20261010235510_0.jpg.import new file mode 100644 index 0000000..cbdd0e0 --- /dev/null +++ b/tools/branding/raw/agy_edit_20261010235510_0.jpg.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://co32s8aqwa3bj" +path="res://.godot/imported/agy_edit_20261010235510_0.jpg-d9de74481e03780407b2a1aacf263683.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://tools/branding/raw/agy_edit_20261010235510_0.jpg" +dest_files=["res://.godot/imported/agy_edit_20261010235510_0.jpg-d9de74481e03780407b2a1aacf263683.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/tools/make_boot_splash.py b/tools/make_boot_splash.py index 0e3640f..17b121d 100644 --- a/tools/make_boot_splash.py +++ b/tools/make_boot_splash.py @@ -13,13 +13,15 @@ from PIL import Image, ImageDraw, ImageFilter, ImageFont parser = argparse.ArgumentParser() parser.add_argument('raw', type=pathlib.Path, help='raw generated image (magenta background)') -parser.add_argument('--title', default='Mat Games') +parser.add_argument('--title', default='MatGames') parser.add_argument('--canvas', type=int, default=1024) parser.add_argument('--title-height', type=int, default=190) parser.add_argument('--bottom-fade', type=int, default=50, help='soften the generator frame cut at the bottom of the bust') parser.add_argument('--colors', type=int, default=256, help='palette colors for the shipped PNG; 0 keeps 32-bit RGBA') +parser.add_argument('--generated-from', type=pathlib.Path, default=None, + help='pre-edit generation this file was derived from, for provenance') args = parser.parse_args() args.raw = args.raw.resolve() root = pathlib.Path(__file__).resolve().parents[1] @@ -108,7 +110,8 @@ manifest.update({ 'date': '2026-10-11', 'prompt': ('single cartoon zombie head-and-bust mascot, unsettling wide grin, thumbs up, ' '2D cartoon style with bold outlines, flat magenta chroma-key background, ' - 'no text and no logo'), + 'no text and no logo; then edited to a bald scalp with a sparse hair fringe ' + 'on the sides only'), 'terms_note': ('generated from no third-party source material; the provider terms do not claim ' 'ownership of the output. The generator emits no real alpha channel, so the ' 'background is keyed out locally by this script.'), @@ -118,5 +121,13 @@ manifest.update({ 'license': 'SIL Open Font License 1.1 (tools/branding/fonts/OFL.txt)'}, 'bottom_fade_px': args.bottom_fade, }) +if args.generated_from is not None: + chain = manifest.get('mascot_derived_from', []) + manifest['mascot_derived_from'] = chain + [{ + 'file': str(args.generated_from.resolve().relative_to(root)), + 'sha256': hashlib.sha256(args.generated_from.read_bytes()).hexdigest(), + 'edit': 'AI edit (agy_edit): keep face, grin, thumbs up, shirt, pose and flat background; ' + 'change the hair to a bald scalp with a sparse fringe on the sides only', + }] (source_tools / 'manifest.json').write_text(json.dumps(manifest, indent=2) + '\n') print(out, canvas.size, canvas.mode, 'mascot', mascot.size)