Follow-up to #18, narrower scope. The splash should look different every time it's called. This issue is for picking an approach — design discussion welcome from any collaborator before we commit to one.
A demo script (demo_splash.py) is in PR #52. Run python demo_splash.py to see fresh randomized output any time. Samples below are from python demo_splash.py --seed 42 so the discussion has a stable reference.
Each option shows 5 samples so the range of variation is visible, not just one arbitrary instance.
Option 1: Mask + random fill character
Single hand-designed letter shape; each call picks one random char (#, █, ▓, ▀, ♟, …) for the filled cells. Same silhouette every call, different fill texture.
█████ █ █ █
█ █ █ ██ ██
█████ █ █ █ █ █
█ █ █ █ █ █
█ █ █ █ █
█ █ ██████ █ █
##### # # #
# # # ## ##
##### # # # # #
# # # # # #
# # # # #
# # ###### # #
░░░░░ ░ ░ ░
░ ░ ░ ░░ ░░
░░░░░ ░ ░ ░ ░ ░
░ ░ ░ ░ ░ ░
░ ░ ░ ░ ░
░ ░ ░░░░░░ ░ ░
▒▒▒▒▒ ▒ ▒ ▒
▒ ▒ ▒ ▒▒ ▒▒
▒▒▒▒▒ ▒ ▒ ▒ ▒ ▒
▒ ▒ ▒ ▒ ▒ ▒
▒ ▒ ▒ ▒ ▒
▒ ▒ ▒▒▒▒▒▒ ▒ ▒
▒▒▒▒▒ ▒ ▒ ▒
▒ ▒ ▒ ▒▒ ▒▒
▒▒▒▒▒ ▒ ▒ ▒ ▒ ▒
▒ ▒ ▒ ▒ ▒ ▒
▒ ▒ ▒ ▒ ▒
▒ ▒ ▒▒▒▒▒▒ ▒ ▒
Option 2: Per-cell jitter
Same mask, but each filled cell picks independently from a small pool (mostly █, occasionally ▓/▒/▀), and background cells occasionally pick up a faint dot. Letters look noisy / hand-stamped.
███▒█ █ . ▒ █
▒ ▓ ▒ █▒ ▓█
█████ █ . █·█ █ █
█ █. ·▓ █ █. ▒
▀ █ ▒ █ . ▒
█ █ ██▓██▒ █ █
██▓██ █ █ █
▀ ▒ █ ·. ▀█ ▓█
█████ ▓ · █ ▀ ▀ █
█ ·▒ █·.. █ █ █
▒ █ █ . ▒ █
▒ █ ▀█████ █ █
█████· █ ▒· █
█· ▒ ·█ ██ ██
▓██▓█ █ . · █ █ █ █
█ █ ·.█ . █ ▓ .█
█ █ █ █ ·█
█ █ █▒██▓▒· █ █
█▀▓██ ·█ .▒· █
█ ▒ ▒ █▒ █▓
▒█▓▓█ ▒ ▒·█ █ █
█ ▒ . ▀ · █ ▓ █
█ █ █ . ▒ . ▒
█ █ █▀▓▀▒▀ ▀ . ▀
██▀██ ▓ █ ▀
▒ █ ▀ █▀ ▀█
▒▓▒█▀ █ · .▒ ▀ █ ▒
▓ ▓ █ █. █ █
█ █ █ █ ·▒
▒ .█ ██▓▒▓█ .▓ ▓
Option 3: Pre-designed font pool
Hand-craft ~6–10 RLM banners (block, heavy, tile, thin, chess-themed, …), pick one at random. Highest visual quality per option, finite variety, more art work to maintain. Current pool in the demo has 4 banners.
▄▀▀▀▄ █ █▄ ▄█
█▄▄▄▀ █ █ ▀ █
█ █ █ █ █
█ █ █▄▄▄ █ █
██████╗ ██╗ ███╗ ███╗
██╔══██╗██║ ████╗ ████║
██████╔╝██║ ██╔████╔██║
██╔══██╗██║ ██║╚██╔╝██║
██║ ██║███████╗██║ ╚═╝ ██║
╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝
▄▀▀▀▄ █ █▄ ▄█
█▄▄▄▀ █ █ ▀ █
█ █ █ █ █
█ █ █▄▄▄ █ █
██████╗ ██╗ ███╗ ███╗
██╔══██╗██║ ████╗ ████║
██████╔╝██║ ██╔████╔██║
██╔══██╗██║ ██║╚██╔╝██║
██║ ██║███████╗██║ ╚═╝ ██║
╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝
.------..------..------.
|R.--. ||L.--. ||M.--. |
| :(): || :/\: || (\/) |
| ()() || (__) || :\/: |
| '--'R|| '--'L|| '--'M|
`------'`------'`------'
Option 4: Pyfiglet with a random font
Adds a pyfiglet dependency; gets dozens of ASCII fonts essentially for free.
[font: standard]
____ _ __ __
| _ \| | | \/ |
| |_) | | | |\/| |
| _ <| |___| | | |
|_| \_\_____|_| |_|
[font: speed]
____________________ ___
___ __ \__ /___ |/ /
__ /_/ /_ / __ /|_/ /
_ _, _/_ /___ / / /
/_/ |_| /_____/_/ /_/
[font: smslant]
___ __ __ ___
/ _ \/ / / |/ /
/ , _/ /__/ /|_/ /
/_/|_/____/_/ /_/
[font: shadow]
_ \ | \ |
| | | |\/ |
__ < | | |
_| \_\_____|_| _|
[font: small]
___ _ __ __
| _ \ | | \/ |
| / |__| |\/| |
|_|_\____|_| |_|
Option 5: Glitch overlay
Render letters cleanly (any method) then perturb cells — drop some, lighten some, sprinkle faint marks in the background.
██·██ .█ ·· █
░ █ █ ██ ██
█████ ▒ █ █ █ █
█ ░ █ █ ▒ █
█ · .█ █ ░
█ █ ██████ ·█ █
░████ █ · █
█ █ █ ██ █▒
█████ █ █ █ █ █
█ █ █ · █ █
█. █ █ █ █
█· █ █████ █ ·
█████ .█ █ █
█ █ █ ██ ██
█████ █ █ █ █ █
█ █ █ · █ █. █
· █ ░ █ █
█ █ █████ █
█████· █ .· █
█ █ · ██ ██
█████ █ █ █ █ ·
█ █ █ █ █
█ █ . · █· █
█ ▒ ██████ █ .█
█████ █
█ █ █ ██ ██
█████ █ █ █ █ █
█ █ █ █ █
█ █ █ ▒ █
█ █ █·████ █ . █
Layered: base = pre-designed banner
Uses Option 3 as the base, then perturbs cells. Original banner glyphs are kept for most cells; jittered cells swap to lighter block glyphs (▓/▒/░), dropped cells become spaces, background cells occasionally pick up a faint dot. Each call also picks a different banner from the pool, so silhouette and texture both vary.
Subtle (jitter=0.10, drop=0.00, bg=0.02)
▄▀▀▀▄ █ █▄ ▄█
█▄▒▄▀ █ █ ▀ █
█ █ █ █ █
█ █ █▄▓▄ ▓ █
██████╗·▓█╗ ▒██▒ • ██▒╗
██▒░═██▒▒█║· ██░█╗ ████║
██▓▓██╔╝██░ ██╔████╔██║
██░══██╗██║ ██║╚░█╔╝██║
██▓ ██▓███████╗██║ ╚═╝ ██║
╚═╝ ╚═░╚══════╝╚═╝ ╚═╝
▄▀▀▒▄ █ ▒▄ ▄█
█▄▄▄▀ █ █ ▀ █
█ █ █ █ █
█ █ █▄▄▄ █ █
██████╗ ██╗ ███╗ ███╗
██▒══██▒██║ · ████╗ ░███║
██▒███╔╝██▓ ██╔████╔██║
█▒╔══██╗▒█║ ██║╚██╔╝██║
██║ ██║███████╗██║ ╚═╝ ██║
╚═╝ ╚═╝╚══════╝╚░▒ ╚═╝
████▒█╗ ██╗ ███▓ █▓█╗
█▒╔══██▒██║ ████╗ ████║
██████░▓██▒ ░█╔████╔██║
██╔══██╗██║ ██║╚██╔╝██║
██║ ██║▓██▒██▒╗██▒ ╚▓╝ ██║
╚═╝ ╚═╝░══════╝╚═╝ ╚═╝
Medium (jitter=0.30, drop=0.06, bg=0.06)
██░███ ▓█╗ . █ █░ █▓█╗
█░╔══██╗██║ ███░▒ ███▓▒
███░█ ╔╝ ░║ █╔▒███╔▒█║
█▒▒══██▓██║ █▒░╚██╔▒██║
▒░║ ██║█░ ░░▓╗██║ ╚═ █▒
═╝ ▓═░╚═▒▒═░░╝░═▒ ╚═▓
___▓_ _ · _▓ __
| __ \▓ | |. \░ |
| |__▓ | | | ▒ /.|
| /| ░ | |\/▒ |
| | \| |____░ ▒ ░ |
|▒▒ ░░ __▒_▒_▒░▒ |_|
▄▀░▀▄ ░ • █▄ ░
█▄▄▒▀ █ · ░ ▒ █
▓ ▒• █ ▓ █
█ █ █▄ ▒ ▓ ▓
.--▒--▒..-░--▓▓.▒-▒----.
▓R▒--. |▒L.--. |▓M▓░▒. |
| ░():•|▒ :/▓: || (░/░ |
| ()() ░░ (__▒ || :░▓: |
| '--'░|| '--'L▒| '--'M|
▒░▒--- '` -▒ -░'`▒▒▒-- '
█▓ █▓█╗.██╗ ▒▓█╗ ▒██▒
██▓▓═██▓░░║ • ░██▓╗ ▒▒█▓║
█░██▒█╔ ▒▓║ ██╔▓░██▒██║
█░╔═▓▒░╗░█▓ ██▓╚██▓▒▓░║
██ ▓█║░█ █▒██▓██║ ▒═▓ ░█░
╚═▒ ▓═ ░══▒═══░╚▓╝• ═╝
Heavy (jitter=0.40, drop=0.10, bg=0.10)
░-▓-▒ -..-░ ▒ .▓▒--░▒▓.
░▓▒▓-. ▒| .░- ▓|M▓-▓ ░
|·:▓ : ▒░ /\ ░▓.▒ /░
| ▓▒( ▒░ ▒░░ || :░/▓•▒
'--'░░| -▒▓░░| --'M▒
`▓ ▓ ▒-▓▓--▓░--'`-░▓▒▓-░
▄░▀▀▄ █ █▄ ▄█
▄▄▄░ ▒ ▀ ▒
░. █. █ ░
█ ░ ▄▄ █ █
▓▓░▀▄ ▓. ▒▄ ▓
▒▄▓▒░ █ .▓ ▀ █
░ .█ ▓ •█
█ █ █▄▄▒• █ █
•▒___ _ ▓_ _░
░ ░_ | ░ | \/ ░
▒ ░ ▒) | | | / ▒
| _ ░ | ░·▓\/▓ |
▒ | \ ▓|.|___▒| ▒ ▓•|
|_| ▒_\_░__░_|_| |_|
▒░ --░-..░▒---▓░░-░--▓-▒
░▓░-- ||▒▓▓░. ░▓░.▓ ▓ ▓
▒ ▒▓): || \▒ ░| (▒░) |
| (▓▒ |▓ ▒__░ | :\ : ░
░ '-░░░|▓ '▓░▒L|▒ ▓-▓ |
`--▓- -'`▒▓ ▓-░░▓ ░▒--░
What I'm asking
- Which option (or combination) feels right for RLM's vibe?
- Anyone strongly anti-
pyfiglet as a dependency (Option 4)?
- For the layered version: subtle, medium, heavy, or something else entirely?
- Counter-proposals welcome — there are other axes (color via ANSI, animated reveal, glyphs-as-pieces-only, …) that aren't covered here.
React with thumbs up / down on each option, or comment with a different direction. I'll implement whatever consensus we land on (#18).
Follow-up to #18, narrower scope. The splash should look different every time it's called. This issue is for picking an approach — design discussion welcome from any collaborator before we commit to one.
A demo script (
demo_splash.py) is in PR #52. Runpython demo_splash.pyto see fresh randomized output any time. Samples below are frompython demo_splash.py --seed 42so the discussion has a stable reference.Each option shows 5 samples so the range of variation is visible, not just one arbitrary instance.
Option 1: Mask + random fill character
Single hand-designed letter shape; each call picks one random char (
#,█,▓,▀,♟, …) for the filled cells. Same silhouette every call, different fill texture.Option 2: Per-cell jitter
Same mask, but each filled cell picks independently from a small pool (mostly
█, occasionally▓/▒/▀), and background cells occasionally pick up a faint dot. Letters look noisy / hand-stamped.Option 3: Pre-designed font pool
Hand-craft ~6–10 RLM banners (block, heavy, tile, thin, chess-themed, …), pick one at random. Highest visual quality per option, finite variety, more art work to maintain. Current pool in the demo has 4 banners.
Option 4: Pyfiglet with a random font
Adds a
pyfigletdependency; gets dozens of ASCII fonts essentially for free.Option 5: Glitch overlay
Render letters cleanly (any method) then perturb cells — drop some, lighten some, sprinkle faint marks in the background.
Layered: base = pre-designed banner
Uses Option 3 as the base, then perturbs cells. Original banner glyphs are kept for most cells; jittered cells swap to lighter block glyphs (
▓/▒/░), dropped cells become spaces, background cells occasionally pick up a faint dot. Each call also picks a different banner from the pool, so silhouette and texture both vary.Subtle (jitter=0.10, drop=0.00, bg=0.02)
Medium (jitter=0.30, drop=0.06, bg=0.06)
Heavy (jitter=0.40, drop=0.10, bg=0.10)
What I'm asking
pyfigletas a dependency (Option 4)?React with thumbs up / down on each option, or comment with a different direction. I'll implement whatever consensus we land on (#18).