The Liminal Library β Summary
The Liminal Library β Summary
Date: 2026-09-16
Theme: A procedurally-generated text adventure set in a library that exists between sleep and waking. Books are written in languages you almost remember. The library breathes.
What It Does
liminal_library.py generates a unique, never-to-be-repeated literary experience every time it runs. Using tonightβs date as a SHA-256 seed, it procedurally constructs:
- A Library Header β with tonightβs date-stamp and a unique library ID
- Shelf Sections (3β5) β each containing 4β8 procedurally generated books with:
- Unique titles (e.g. βA Taxonomy of Unmade Bedsβ, βThe Dictionary of Half-Spoke Wordsβ)
- Binding materials: leather, vellum, bark, silk, bone, glass, lead, shadow
- Conditions: pristine, worn, scorched, damp, torn, gilded
- Entropy sigils (SHA-256 derived) unique to each book
- The Reading Room β a fragment of unreadable prose that self-describes its own incoherence
- A Liminal Poem β generated from tonightβs entropy
- An Event Card β one of 8 mysterious encounters (the Librarian, the Fog, the Cat, etc.)
- Entropy footer β seed and timestamp for reproducibility (though it never truly repeats)
Output
$ python3 liminal_library.py
[484 lines of ASCII art and procedurally-generated text]
Architecture
- Seed: SHA-256 of tonightβs date string β deterministic but unique per night
- Word banks: 20 adjectives Γ 20 nouns Γ 20 titles Γ 8 bindings Γ 8 conditions
- Event system: 8 possible encounters with atmospheric descriptions
- No external dependencies: pure Python standard library
- Cross-platform: runs anywhere with Python 3
Key Design Decisions
- Date-stamped seed β same date always generates same library (useful for sharing dreams)
- Entropy-driven metadata β every book has a unique hash, making it feel βrealβ
- Meta-fictional prose β the reading room text deliberately questions its own coherence
- Event cards β inject narrative tension and surprise into otherwise static scene
Files
liminal_library.pyβ the generator (self-contained)output.txtβ a sample run outputsummary.mdβ this file
Terminal capture of the overnight run is embedded above.
Source
#!/usr/bin/env python3
"""
The Liminal Library β Dreamcode 2026-09-16
A procedurally-generated text adventure that exists between sleep and waking.
Books are written in languages you almost remember. The library breathes.
"""
import os
import sys
import random
import hashlib
from datetime import datetime
# βββ Seed from tonight's date so each night is unique ββββββββββββββββββββββββ
TONIGHT = "2026-09-16"
SEED = int(hashlib.sha256(TONIGHT.encode()).hexdigest()[:8], 16)
random.seed(SEED)
WIDTH = 72
# βββ Architecture βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ARCHITECTURE = [
"ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ",
"β THE LIMINAL LIBRARY β",
"β You stand in a library that should not exist. β",
"β The shelves stretch into fog. Books breathe. β",
"ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ",
]
SHELF_ART = """
ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ
ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ
ββ CATALOG ββ ββ SHELF 2 ββ ββ SHELF 3 ββ ββ SHELF 4 ββ ββ SHELF 5 ββ
ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ
ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ
"""
# βββ Word Banks βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ADJECTIVES = [
"forgotten","amber","hollow","phosphorescent","recursive",
"salted","velvet","chromatic","dissolving","fractured",
"lunar","tessellated","vermillion","borrowed","cinder",
"drowned","emerald","faded","ghostwise","hushed",
]
NOUNS = [
"atlas","confession","tide","relic","vocabulary",
"meridian","incantation","silence","fugue","threshold",
"constellation","obligation","vestige","rumor","origin",
"axis","threshold","monument","frequency","eden",
]
TITLES = [
"A Taxonomy of Unmade Beds",
"The Cartography of Forgetting",
"Testimonies of Salt and Shadow",
"On the Nature of Empty Corridors",
"A History Written in Reversal",
"The Dictionary of Half-Spoke Words",
"Maps of Places That Never Existed",
"The Recorded Last Words of Ghosts",
"An Atlas of Abandoned Weathers",
"Fragments of a Name in a Language You Forgot",
"The Sound a Color Makes When It Dies",
"A Catalogue of Doors That Open to Nothing",
"The Unsent Letters of Sleep",
"How to Read a Room You Have Never Left",
"The Ritual for Calling Back What's Been Erased",
"A Field Guide to Emotions with No Name",
"Notes on the Architecture of Regret",
"The Complete Works of the Person You Almost Were",
"What the Walls Whispered on the Third Night",
"An Elegy for Roads Not Taken, Written in Reverse",
]
WHISPERS = [
"Some books read you back.",
"The shelf behind you has one more book than before.",
"A page turns. You were not touching it.",
"The air tastes like old paper and older promises.",
"Somewhere, a book is crying.",
"You hear footsteps β but the library has no other visitors.",
"The words rearrange themselves when you look away.",
"A title on the spine just changed.",
"The fog thickens. The library grows.",
"You have always been here. You just forgot.",
"One of the books knows your name. It has since the beginning.",
"The exit is not where you left it.",
"Silence here is not empty. It is full.",
"You feel observed by the spines.",
"The floor tilts slightly. The ceiling breathes.",
]
ENTROPY_LINES = [
"01101001 01110100 01100101 01110010 01100001 01110100 01110101 01101101",
" Β· Β· βͺ Β· Β· βͺ Β· Β· βͺ Β· Β· βͺ Β· Β· βͺ Β· Β· βͺ Β· Β·",
"ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ",
"ββ¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β",
"βΌβ½βΌβ½βΌβ½βΌβ½βΌβ½βΌβ½βΌβ½βΌβ½βΌβ½βΌβ½βΌβ½βΌβ½βΌβ½βΌβ½βΌβ½βΌβ½βΌβ½βΌβ½βΌβ½βΌβ½βΌβ½βΌβ½βΌβ½βΌβ½βΌβ½βΌβ½βΌβ½βΌβ½",
]
# βββ Procedural Book Generator βββββββββββββββββββββββββββββββββββββββββββββββ
def generate_book(index):
"""Generate a unique book from tonight's entropy."""
adj = random.choice(ADJECTIVES)
noun = random.choice(NOUNS)
title = random.choice(TITLES)
entropy_bytes = os.urandom(16)
entropy_hash = hashlib.sha256(entropy_bytes + TONIGHT.encode()).hexdigest()[:24]
pages = random.randint(3, 9)
condition = random.choice(["pristine","worn","scorched","damp","intact","torn","gilded"])
binding = random.choice(["leather","vellum","bark","silk","bone","glass","lead","shadow"])
return {
"id": index,
"title": title,
"adj": adj,
"noun": noun,
"entropy": entropy_hash,
"pages": pages,
"condition": condition,
"binding": binding,
"whisper": random.choice(WHISPERS),
}
def generate_section():
"""A section of shelves with books."""
books = [generate_book(i) for i in range(random.randint(4, 8))]
return books
# βββ Render Functions βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
def hr(width=WIDTH, char="β"):
return char * width
def box(text, width=WIDTH):
lines = text.split("\n")
out = []
out.append("β" + "β" * (width - 2) + "β")
for line in lines:
padded = line.ljust(width - 2)
out.append("β " + padded[:width-2] + " β")
out.append("β" + "β" * (width - 2) + "β")
return "\n".join(out)
def render_book(book):
"""Render a single book as ASCII art."""
title = book["title"]
binding = book["binding"]
condition = book["condition"]
pages = book["pages"]
binding_chars = {
"leather": "βββ",
"vellum": "βββ",
"bark": "βββ",
"silk": "β‘β‘β‘",
"bone": "βββ",
"glass": "βͺβͺβͺ",
"lead": "β°β°β°",
"shadow": "β«β«β«",
}
bc = binding_chars.get(binding, "βββ")
lines = [
f" ββββββββββββββββββββββββββββββββ",
f" β {bc} {bc} {bc} {bc} {bc} {bc} {bc} β",
f" β{bc} {bc}β",
f" β{bc} {title[:26]:<26} {bc}β",
f" β{bc} [{pages} pages / {condition}] {bc}β",
f" β{bc} binding: {binding:<14} {bc}β",
f" β{bc} ID: {book['entropy'][:16]:<18} {bc}β",
f" β{bc} {bc}β",
f" β {bc} {bc} {bc} {bc} {bc} {bc} {bc} β",
f" ββββββββββββββββββββββββββββββββ",
]
return "\n".join(lines)
def render_entropy_header():
"""Render entropy visualization for tonight's seed."""
entropy_source = os.urandom(32)
hash_of_night = hashlib.sha256(entropy_source + TONIGHT.encode()).hexdigest()
line = random.choice(ENTROPY_LINES)
return [
f" // ENTROPY SEED: {hash_of_night[:48]}",
f" // {line}",
]
def render_library_intro():
out = []
for line in ARCHITECTURE:
out.append(line)
out.append("")
out.append(f" Tonight's date-stamp: {TONIGHT}")
out.append(f" Library ID: {random.randint(10**8, 10**9-1):09d}")
out.append("")
out.append(" You arrive at the Liminal Library through a door")
out.append(" that existed only as a thought you hadn't had yet.")
out.append(" The librarian is a name you almost remember.")
out.append("")
return "\n".join(out)
def render_shelves(sections):
"""Render all shelf sections."""
out = []
for i, section in enumerate(sections):
out.append(f"\n {'β' * 66}")
out.append(f" // SHELF SECTION {i+1} β {len(section)} books found")
out.append(f" {'β' * 66}\n")
for book in section:
out.append(render_book(book))
out.append("")
return "\n".join(out)
def render_the_reading_room():
"""A special room where you can 'read' a generated text."""
fragments = [
"The first sentence is always a lie.",
"The second sentence was written by someone who ",
" never existed, about events that ",
" never happened in a place that ",
" was erased from every map.",
"",
"Somewhere between the third word and ",
"the seventh breath, the book ",
"remembers that you are reading it.",
"",
"By the final page, the book ",
"has forgotten what it was trying to say.",
"This is the only honest thing in the library.",
]
out = [
"",
" " + "β" * 66,
" // THE READING ROOM",
" " + "β" * 66,
"",
]
for frag in fragments:
out.append(f" {frag}")
out.append("")
out.append(" // A fragment from a book with no title.")
out.append(f" // Its entropy sigil: {os.urandom(8).hex()}")
out.append("")
return "\n".join(out)
def render_liminal_poem():
"""A poem generated from tonight's entropy."""
lines = [
"The library does not exist,",
"except in the moment you think of it.",
"Each book is a question",
"asked in a language you spoke",
"before you were born.",
"",
"Tonight's entropy is:",
f" {os.urandom(12).hex()}",
"",
"It tastes like",
"something you lost",
"and something you",
"almost found.",
]
return "\n".join(lines)
def render_mystery_card():
"""A randomly generated 'event' card."""
events = [
("THE LIBRARIAN", "They look up from a book with no pages. 'You kept me waiting,' they say. 'Though I cannot remember for how long.'"),
("THE FOG", "The shelves dissolve into fog. When it clears, you're in a new wing. The books here are written backwards."),
("THE FIRE", "A book ignites on its own. The flame is the color of forgotten names. You cannot decide whether to close it or watch."),
("THE WHISPER", "You hear your name, but the voice is made of pages turning. No one is there."),
("THE MIRROR", "A mirror between shelves shows the library from the outside. Through it, you can see yourself, leaving."),
("THE CLOCK", "A grandfather clock counts down instead of up. Each book on its shelves is a second you will never have."),
("THE CAT", "A library cat that shouldn't exist brushes against your leg. Its name tag reads: 'You.'"),
("THE EXIT", "A door marked EXIT stands open. Through it, you see your own bedroom, but the books are floating."),
]
event_name, description = random.choice(events)
out = [
"",
" ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ",
f" β EVENT: {event_name:<48} β",
" ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€",
]
desc_lines = [description[i:i+52] for i in range(0, len(description), 52)]
for dl in desc_lines:
out.append(f" β {dl:<52} β")
out.append(" ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ")
return "\n".join(out)
# βββ Main Render βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
def render():
sections = [generate_section() for _ in range(random.randint(3, 5))]
entropy_header = render_entropy_header()
reading_room = render_the_reading_room()
mystery = render_mystery_card()
poem = render_liminal_poem()
output = [
"\n".join(ARCHITECTURE),
"",
" " + hr(68, "β"),
" // TONIGHT'S DREAM β " + TONIGHT,
" // A unique library, generated once, remembered nowhere.",
" " + hr(68, "β"),
"",
*entropy_header,
"",
render_library_intro(),
"",
hr(WIDTH),
" SECTION I: THE SHELVES",
hr(WIDTH),
render_shelves(sections),
"",
hr(WIDTH),
" SECTION II: THE READING ROOM",
hr(WIDTH),
reading_room,
"",
hr(WIDTH),
" SECTION III: THE POEM",
hr(WIDTH),
" " + poem.replace("\n", "\n "),
"",
hr(WIDTH),
" SECTION IV: EVENTS",
hr(WIDTH),
mystery,
"",
hr(WIDTH),
" END OF DREAM",
hr(WIDTH),
"",
f" // Liminal Library β generated {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}",
f" // Seed: {SEED} | Tonight: {TONIGHT}",
"",
]
return "\n".join(output)
# βββ ASCII Art Banner βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
def make_banner():
import subprocess
try:
result = subprocess.run(
["python3", "-m", "pyfiglet", "LIMINAL LIBRARY", "-f", "slant", "-w", "80"],
capture_output=True, text=True, timeout=10
)
if result.returncode == 0:
return result.stdout
except Exception:
pass
# Fallback ASCII art
return r"""
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β ___ _ _ _ _____ ___ ___ _ _____ ___ ___ _ β
β / _ \| | | | ||_ _/ _ \| _ \ / \|_ _| __| __| /_\ β
β | (_) | |_| | |__| || (_) | // _ \ | | | _|| _| / _ \ β
β \__\_\\___/|____|_| \___/|_\_/_/ \_\|_| |___|_| /_/ \_\ β
β β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
"""
def main():
print(make_banner())
print(render())
if __name__ == "__main__":
main()
Run output
__ ______ ________ _____ __
/ / / _/ |/ / _/ | / / | / /
/ / / // /|_/ // // |/ / /| | / /
/ /____/ // / / // // /| / ___ |/ /___
/_____/___/_/ /_/___/_/ |_/_/ |_/_____/
__ ________ ____ ___ ______ __
/ / / _/ __ )/ __ \/ | / __ \ \/ /
/ / / // __ / /_/ / /| | / /_/ /\ /
/ /____/ // /_/ / _, _/ ___ |/ _, _/ / /
/_____/___/_____/_/ |_/_/ |_/_/ |_| /_/
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β THE LIMINAL LIBRARY β
β You stand in a library that should not exist. β
β The shelves stretch into fog. Books breathe. β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// TONIGHT'S DREAM β 2026-09-16
// A unique library, generated once, remembered nowhere.
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// ENTROPY SEED: c6e139d4adc9f5657f2a1d6b779845ae2a92c59ae6fdf084
// 01101001 01110100 01100101 01110010 01100001 01110100 01110101 01101101
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β THE LIMINAL LIBRARY β
β You stand in a library that should not exist. β
β The shelves stretch into fog. Books breathe. β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Tonight's date-stamp: 2026-09-16
Library ID: 766869750
You arrive at the Liminal Library through a door
that existed only as a thought you hadn't had yet.
The librarian is a name you almost remember.
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
SECTION I: THE SHELVES
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// SHELF SECTION 1 β 8 books found
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ββββββββββββββββββββββββββββββββ
β βββ βββ βββ βββ βββ βββ βββ β
ββββ ββββ
ββββ Fragments of a Name in a L ββββ
ββββ [6 pages / worn] ββββ
ββββ binding: bone ββββ
ββββ ID: 555f1a70f10c8cad ββββ
ββββ ββββ
β βββ βββ βββ βββ βββ βββ βββ β
ββββββββββββββββββββββββββββββββ
ββββββββββββββββββββββββββββββββ
β β‘β‘β‘ β‘β‘β‘ β‘β‘β‘ β‘β‘β‘ β‘β‘β‘ β‘β‘β‘ β‘β‘β‘ β
ββ‘β‘β‘ β‘β‘β‘β
ββ‘β‘β‘ How to Read a Room You Hav β‘β‘β‘β
ββ‘β‘β‘ [4 pages / pristine] β‘β‘β‘β
ββ‘β‘β‘ binding: silk β‘β‘β‘β
ββ‘β‘β‘ ID: e038d713c414eeca β‘β‘β‘β
ββ‘β‘β‘ β‘β‘β‘β
β β‘β‘β‘ β‘β‘β‘ β‘β‘β‘ β‘β‘β‘ β‘β‘β‘ β‘β‘β‘ β‘β‘β‘ β
ββββββββββββββββββββββββββββββββ
ββββββββββββββββββββββββββββββββ
β βββ βββ βββ βββ βββ βββ βββ β
ββββ ββββ
ββββ Testimonies of Salt and Sh ββββ
ββββ [3 pages / torn] ββββ
ββββ binding: vellum ββββ
ββββ ID: 08f6fde564f5e506 ββββ
ββββ ββββ
... (324 lines omitted) ...
ββββ [3 pages / intact] ββββ
ββββ binding: bone ββββ
ββββ ID: 0f5ce91776b44e7b ββββ
ββββ ββββ
β βββ βββ βββ βββ βββ βββ βββ β
ββββββββββββββββββββββββββββββββ
ββββββββββββββββββββββββββββββββ
β βͺβͺβͺ βͺβͺβͺ βͺβͺβͺ βͺβͺβͺ βͺβͺβͺ βͺβͺβͺ βͺβͺβͺ β
ββͺβͺβͺ βͺβͺβͺβ
ββͺβͺβͺ Notes on the Architecture βͺβͺβͺβ
ββͺβͺβͺ [4 pages / torn] βͺβͺβͺβ
ββͺβͺβͺ binding: glass βͺβͺβͺβ
ββͺβͺβͺ ID: 361f53952260c712 βͺβͺβͺβ
ββͺβͺβͺ βͺβͺβͺβ
β βͺβͺβͺ βͺβͺβͺ βͺβͺβͺ βͺβͺβͺ βͺβͺβͺ βͺβͺβͺ βͺβͺβͺ β
ββββββββββββββββββββββββββββββββ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
SECTION II: THE READING ROOM
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// THE READING ROOM
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
The first sentence is always a lie.
The second sentence was written by someone who
never existed, about events that
never happened in a place that
was erased from every map.
Somewhere between the third word and
the seventh breath, the book
remembers that you are reading it.
By the final page, the book
has forgotten what it was trying to say.
This is the only honest thing in the library.
// A fragment from a book with no title.
// Its entropy sigil: c7b963c58ea1be52
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
SECTION III: THE POEM
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
The library does not exist,
except in the moment you think of it.
Each book is a question
asked in a language you spoke
before you were born.
Tonight's entropy is:
36739e94465da20414f121d8
It tastes like
something you lost
and something you
almost found.
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
SECTION IV: EVENTS
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β EVENT: THE MIRROR β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β A mirror between shelves shows the library from the β
β outside. Through it, you can see yourself, leaving. β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
END OF DREAM
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// Liminal Library β generated 2026-09-16 22:21:21
// Seed: 324691394 | Tonight: 2026-09-16