luv

Workshop wiki

showcase-gazetteer.org

The luvcraft showcase gazetteer

The showcase is an atlas with three lanes #RFUR2R

The showcase should say what luvcraft can actually do, preserve good views of those things, and occasionally be beautiful enough to stand on its own. Those are related jobs, but not identical ones. The useful catalogue has three lanes:

This page is a source-backed roster, not a claim that all these recipes exist. Names in verbatim are proposed literal capture names. Each figure can own a still and one or more films under the executable media contract #IVRWI8. A recipe only joins luv/showcase when it can render from source without private ambient state; networked, credentialed, and Darwin-only views remain authored shots until they acquire a deterministic fixture.

The first folio should be small enough to art-direct: the pre-noon ridge #NLCFX0, a crystal afterglow #Q8ZIFD, a terminal at home in the terrain #2TMUKK, the instrument family #DYJZBK, inhabitants #W7T2IT, physics #CSCFGF, and the already composed birthday world #L5G2WQ. The rest of the gazetteer prevents those hero shots from becoming the only visual memory of the game.

defconstant +gallery-portrait-width+ gallery.lisp:8

The first broad gallery folio: portrait compositions for phones, clean authored motion, and one deliberately gameplay-shaped landscape walk. Each subject still owns its world and motion; this file only shares the hidden-session lifecycle and the portrait frame. #RFUR2R #I380Q9

Pre-noon light on the little world #NLCFX0

The principal landscape should be a recognizably generated little world, not a bespoke diorama. The terrain source already supplies rolling grass, sand, stone and snow with rocks and broad-canopied trees. The sky can pin any hour, while the HDR presentation in the renderer supplies fog, bloom, vignette, focus blur, and screen-space sunlight shafts.

The composition wants a ridge or shallow valley from seed 121 or another recorded seed: warm light from the left at roughly ten in the morning, the sun just inside or just outside the frame, two or three tree crowns breaking it into shafts, a bright middle-distance slope, and a cooler fogged horizon. The camera should be near human height rather than the old gazetteer's aerial debugging angle. The grade may make the pre-noon sun warmer, but should not raise shaft or bloom gain until the entire frame looks veiled.

The still establishes the picture. The glide proves that shadows, fog, lens effects, streamed terrain products, and exposure remain coherent when the camera moves.

define-capture pre-noon-under-the-trees gallery.lisp:142

Generated terrain: the same real little world as #NLCFX0 and #TRYHPN, recomposed vertically rather than cropped after rendering.

luv:define-capturepre-noon-under-the-trees
:figurenlcfx0:kind:image:extension"png":description"A lower clean ridge view using trunks and crowns as warm foreground."
pathname
call-with-generated-gallery-session
lambda
session
luvcraft:capture-luvcraft-screenshotsessionpathname:include-hud-pnil:include-viewmodel-pnil
:title"pre-noon under the trees":seed121:pose
gallery-ridge-pose:lateral-offset-4.0d0:height7.85d0:pitch0.12d0
:day-fraction+pre-noon-ridge-day-fraction+:width+gallery-landscape-width+:height+gallery-landscape-height+:clean-pt
defconstant +pre-noon-ridge-day-fraction+ pre-noon.lisp:7

The first landscape subject in the showcase gazetteer: one seed, one art-directed view, and one grade shared by its still and motion proof. #NLCFX0 #2ILB5D

defconstant+pre-noon-ridge-day-fraction+0.40625"Quarter to ten in the morning, expressed as a fraction of one day."

The sky deserves one fixed camera across a whole day #TRYHPN

A time-of-day folio should use one seed, one camera, one viewport, and one grade. Only the pinned sky-clock reading changes. That makes the default profile's midnight, sunrise, morning, noon, sunset, and dusk keyframes visible as a system rather than as unrelated pretty pictures.

The six stills are reference plates. The film is where continuous profile interpolation, shadow motion, cloud movement, and exposure transitions become visible.

defparameter *little-world-day-cycle-grade* day-cycle.lisp:7

One fixed little-world plate at six hours and across one continuous day. The clock is the only authored variable: world, camera, viewport, sky profile, presentation grade, and compositing layers stay fixed. #TRYHPN

defun call-with-little-world-day-cycle-capture day-cycle.lisp:19
defuncall-with-little-world-day-cycle-capture

Call function with the fixed #TRYHPN session and its pinned sky clock.

The caller may change only the clock's pinned day fraction. Teardown restores the process-wide grade even when session shutdown or function signals.

check-typeday-fractionreal
let
sessionnil
saved-grade
mapcar
lambda
entry
cons
carentry
symbol-value
carentry
*little-world-day-cycle-grade*
unwind-protect
progn

These controls are process globals because the renderer reads them on its canvas thread. Set them before constructing the pipelines and restore them only after the session is gone.

dolist
setf
symbol-value
carentry
cdrentry
let*
camera
make-instance'luvcraft:fly-camera:position
luvcraft::make-vec38.0d011.0d0-18.0d0
:yaw0.0d0:pitch-0.30d0
setfsession
luvcraft:start-luvcraft:title"little world - one fixed day":width960:height640:visible-pnil:frames-per-secondnil:worldworld:cameracamera:residency-radius4:sky-clockclock:sky-profile
dolist
overlay
copy-list
luvcraft:luvcraft-session-overlayssession
luvcraft:wait-for-luvcraft-productssession:minimum
hash-table-count
luvcraft::luvcraft-session-desired-chunkssession
funcallfunctionsessionclock
unwind-protect
whensession
dolist
entrysaved-grade
setf
symbol-value
carentry
cdrentry
define-capture pre-noon-under-the-trees gallery.lisp:142

Generated terrain: the same real little world as #NLCFX0 and #TRYHPN, recomposed vertically rather than cropped after rendering.

luv:define-capturepre-noon-under-the-trees
:figurenlcfx0:kind:image:extension"png":description"A lower clean ridge view using trunks and crowns as warm foreground."
pathname
call-with-generated-gallery-session
lambda
session
luvcraft:capture-luvcraft-screenshotsessionpathname:include-hud-pnil:include-viewmodel-pnil
:title"pre-noon under the trees":seed121:pose
gallery-ridge-pose:lateral-offset-4.0d0:height7.85d0:pitch0.12d0
:day-fraction+pre-noon-ridge-day-fraction+:width+gallery-landscape-width+:height+gallery-landscape-height+:clean-pt

Crystal afterglow shows luminous materials #Q8ZIFD

The crystal is simultaneously a textured material, a blocklight emitter, and an HDR surface emitter. A small grove at late dusk can show all three: crystal light reaching grass, stone, trunks, and the underside of leaves; faceted normal relief on the near blocks; and a restrained bloom spread against a dark sky. The existing glow-floor and crystal-seam gazetteer views already provide the diagnostic core in luvcraft/gazetteer.lisp.

A terminal is a place, a pane, and a carried thing #2TMUKK

The world terminal discovers an authored rectangle of blocks, sizes a Ghostty grid to it, draws styled cell backgrounds and Slug glyph geometry, and adds a separately lit screen panel and glass faceplate. The same terminal surface protocol reaches the graphite slab in the player's hand. A terminal showcase should therefore keep enough oblique perspective for the rim, glass, and world placement to survive; a square-on crop makes the surface look like a pasted screenshot.

The shell fixture should contain colour, bold text, a command and output, but no hostname, home directory, credential, or wall-clock reading.

defconstant +terminal-cinema-width+ terminal-cinema.lisp:8

A world terminal photographed through its existing display ownership. Shell fixtures cross the real PTY/Ghostty path; Film fixtures cross the existing video-screen path and remain under the terminal faceplate. #2TMUKK #TWKA93

Player instruments should be readable in context #DYJZBK

The main panes are already McCLIM frames composited into the one game canvas. They should be photographed over a quiet midtone landscape which gives their edges contrast without competing with their text.

An authored instrument-tour film may open hotbar, inventory, metabar, legend, and command menu in a stable sequence, but the individual stills remain the better reference for typography and layout.

defconstant +character-focus-film-seconds+ characters-instruments.lisp:7

Focused inhabitants and player instruments, each photographed through its real interaction owner. Fixture speech and menu state live here in source; no world-agent or network-backed conversation is created. #W7T2IT #DYJZBK

defun configure-capture-metabar characters-instruments.lisp:164

Player instruments remain live McCLIM frames composited into the one game canvas. The fixtures below configure those owners directly. #DYJZBK

defunconfigure-capture-metabar
session

Open the real metabar on grading and select its light-shafts knob.

let*
frame
mcluv:widget-overlay-frameoverlay
knob
or
error"The grading metabar has no SHAFT-GAIN knob."
mcluv::metabar-open-group-rowoverlay:grading
let
index
positionknob
mcluv::metabar-rowsframe
:key#'second:test#'eq
unlessindex
error"The SHAFT-GAIN knob is absent from the open grading group."
mcluv::metabar-selectoverlayindex

A still wants the fully open endpoint, not wall-clock easing captured at an arbitrary phase.

setf
mcluv::metabar-slideoverlay
1d0
mcluv::metabar-last-timeoverlay
0d0
overlay

World-native panes should keep their depth cues #FSDUXL

Some panes live on world surfaces rather than in the HUD. Their showcase pair is an environmental view proving placement and a close view proving content. Both keep the surface slightly off-axis.

The communicator and paper are real capabilities, but need small source-owned fixtures before they can enter the default Chapel render set.

Inhabitants need portraits and motion #W7T2IT

The little world now has box-built turtles and independently ray-marched gnome and cat bodies. Their pictures should show scale against blocks and ground, not isolate them on a transparent turntable.

defconstant +character-focus-film-seconds+ characters-instruments.lisp:7

Focused inhabitants and player instruments, each photographed through its real interaction owner. Fixture speech and menu state live here in source; no world-agent or network-backed conversation is created. #W7T2IT #DYJZBK

define-capture gnome-garden-conversation characters-instruments.lisp:91

The focused FoV and dialogue are the gnome's own interaction, not a crop or a separately painted caption. #W7T2IT

luv:define-capturegnome-garden-conversation
:figurew7t2it:kind:image:extension"png":description"A gnome at its real conversational FoV with source-owned dialogue."
pathname
call-with-focused-character
lambda
sessiongnomepose
declare
ignoregnome
luvcraft:capture-luvcraft-screenshotsessionpathname:camera-posepose:include-hud-pt:include-viewmodel-pnil
#'spawn-capture-gnome"The ridge is warm now; the shaded path stays cool.":title"gnome garden conversation":width+gallery-landscape-width+:height+gallery-landscape-height+:day-fraction0.42
define-capture cat-in-the-sun-conversation characters-instruments.lisp:128

cat inherits the embodied-agent conversation protocol but retains its own SDF body, face position, audience distance, and focused camera pose. These portrait recipes enter that actual interaction. #W7T2IT

luv:define-capturecat-in-the-sun-conversation
:figurew7t2it:kind:image:extension"png":layout:portrait:description"The seated cat in warm light, using its real focused dialogue surface."
pathname
call-with-focused-character
lambda
sessioncatpose
declare
ignorecat
luvcraft:capture-luvcraft-screenshotsessionpathname:camera-posepose:include-hud-pt:include-viewmodel-pnil
#'spawn-capture-cat"The sunny stone is occupied. The path may proceed around me.":title"cat in the sun conversation":width+gallery-portrait-width+:height+gallery-portrait-height+:day-fraction0.38

Agent work has four visible surfaces #HA4V5Q

The agent is visually larger than its gnome. Its work appears as a top-right cassette HUD, bubbles and dialogue around an embodied presence, an ANSI transcript written onto a terminal wall, and a clean over-the-shoulder surroundings observation. Construction adds the fifth special case already captured by #Y7X7WK: an inert possible world awaiting approval.

Synthetic transcript objects keep typography and layout deterministic. A separate authored film may show a real model turn, but it should be presented as an observed session rather than as a reproducible capture recipe.

Physics is best shown with causality #CSCFGF

The physics presentation draws true patterned spheres, posts the player and animals as kinematic obstacles, and turns the fountain and lava spring blocks into persistent body sources. A still can show materials and a settled pile; motion is required to show the system.

The spring films need a bounded clock and fixed emission sequence so their authored motion remains repeatable enough to compare.

The birthday world is the authored ensemble shot #L5G2WQ

The luvcraft/birthday system is already a composed scene rather than a bag of demonstrations. The party owner places a gazebo in a flowered meadow, ties back-lit balloons to it, rings it with dancing gnomes and physical balls, runs a terminal-based marquee, pins the sky, and starts the fireworks. It deserves both a coherent film and smaller portraits of the work that disappears in the ensemble.

A world within a world needs its own folio #TWKA93

Film walls and portals both put a moving image onto a world panel, but they prove different things. Film can use the hardware-backed video path; the showcase renderer can also cross the same wall texture, screen-panel, and faceplate ownership with a tiny generated clip and a deliberately selected decoder. A portal shows another live luvcraft process through a shared IOSurface and is Darwin-only.

Portal entries stay out of the Chapel default set unless the render host and capture operation acquire an explicit Darwin route. “Hw accelerated” film captures require the hardware path; a silent software fallback does not prove the feature being shown.

defconstant +terminal-cinema-width+ terminal-cinema.lisp:8

A world terminal photographed through its existing display ownership. Shell fixtures cross the real PTY/Ghostty path; Film fixtures cross the existing video-screen path and remain under the terminal faceplate. #2TMUKK #TWKA93

Reference plates make failures legible #OK1OC8

The diagnostic gazetteer remains valuable beside the editorial showcase. Its existing views should be wrapped by small capture recipes instead of copied or retired: gazetteer-little-world-noon, little-world-dusk, shadow-forest, glow-floor, crystal-seam, turtle-meadow, and shadow-yard.

The broader reference shelf should add:

Reference captures should keep their ordinary PNGs and short MP4s available even when only selected scenes appear on the front showcase grid. The current flat manifest does not need categories yet: the page can remain flat until enough real captures make navigation a demonstrated problem.

defun render-gazetteer-reference-plate reference-plates.lisp:7

Small source-owned recipes for the deterministic diagnostic gazetteer. Scene construction and rendering remain owned by luvcraft's named views; these wrappers only adapt their output to the capture manifest. #OK1OC8

defunrender-gazetteer-reference-plate
view-namepathname

Render gazetteer view-name to the capture protocol's exact pathname.

let*
directory
uiop:pathname-directory-pathnamepathname
unless
string=
uiop:native-namestringrendered
uiop:native-namestringpathname
uiop:rename-file-overwriting-targetrenderedpathname
pathname

Every still has a motion companion when time matters #I380Q9

An orbit is useful when the claim is shape, depth, or attachment to the world. It is not a universal video template. The film should move the variable that the subject owns:

SubjectStill establishesFilm must establish
Terrain lightComposition and gradeStable shafts, shadows, fog, streaming
Day cycleKeyframe appearancesContinuous interpolation and shadow motion
TerminalGlyph and surface qualityFocus, typing, mode and lifetime transitions
PaneLayout and legibilityOpening, selection, feedback and dismissal
InhabitantModel, material and scaleGait, breath, turn, ride or conversation
PhysicsMaterial and settled stateContact, bounce, flow, cooling and sleep
ProposalFinished counterfactualView-dependent orbit and approval transition
Portal or filmPanel placementIndependent moving image without tearing

capture-luvcraft-screenshot already chooses HUD and viewmodel layers, and film-luvcraft-session gives authored code a before-frame boundary. A recipe should reuse one scene constructor across its still and film whenever they depict the same subject. That makes their difference an authored camera or clock path rather than accidental world state.

defconstant +gallery-portrait-width+ gallery.lisp:8

The first broad gallery folio: portrait compositions for phones, clean authored motion, and one deliberately gameplay-shaped landscape walk. Each subject still owns its world and motion; this file only shares the hidden-session lifecycle and the portrait frame. #RFUR2R #I380Q9

DONE Author the pre-noon ridge #2ILB5D

Intent. Turn #NLCFX0 into the first new subject after the construction proposal: one composed terrain still and one motion proof from the same hidden session, with the seed, camera, sky profile, clock, grade, and layer choices in source.

Evidence. The current capture protocol already renders hidden sessions, stills, and MP4s; the terrain source supplies trees and relief; the post stack already exposes bloom and light shafts. What is missing is art direction and visual acceptance, not another capture abstraction.

Done when. pre-noon-ridge-still and pre-noon-ridge-glide render on the showcase host, the still reads as warm pre-noon terrain rather than a diagnostic aerial, the film has responsive consecutive frames with no streaming pop or shadow shimmer, teardown leaves no surviving session, and both published cards are inspected at their actual browser size.

The Chapel capture at source 2f251e7f5957 rendered the complete 81-chunk resident scene into both artifacts. Every hidden Vulkan canvas closed; the published glide reached 1.43 seconds during browser playback with a visibly advanced camera and no changed terrain, while the still and film remained clean of HUD and viewmodel layers.

defconstant +pre-noon-ridge-day-fraction+ pre-noon.lisp:7

The first landscape subject in the showcase gazetteer: one seed, one art-directed view, and one grade shared by its still and motion proof. #NLCFX0 #2ILB5D

defconstant+pre-noon-ridge-day-fraction+0.40625"Quarter to ten in the morning, expressed as a fraction of one day."

DONE Open the phone-first gallery #GS5XNW

Intent. Grow the first folio into something that can be browsed for pleasure: dozens of distinct stills and films, with clean portrait compositions taking the lead on phones and a smaller set of landscape play views retaining the crosshair, hotbar, and first-person body when those are the subject.

Evidence. Source revision a3283ebe9a0a publishes 39 capture recipes: 27 stills and 12 films, including 14 portrait cards. The portrait films use the LUFT Atelier vocabulary from #SY26PO: a 720 by 1280 frame, authored position/look/FOV paths, eased Catmull-Rom travel, field scale 1.25, collision clearance, and a clean presentation. New terrain, day-cycle, crystal, inhabitant, and physics subjects sit beside one ordinary landscape walk with its HUD and viewmodel.

The public index serves 480-pixel WebP stills and video posters, with 768-pixel WebP alternatives for landscape stills; the PNG and MP4 originals remain linked. At a 390 by 844 browser viewport, all 39 phone-card assets total 503,406 bytes. The 12 videos remain at media readyState zero until the visitor plays one. Browser acceptance played the LUFT clay flight, crystal night arc, party-ball cascade, and landscape HUD walk; each decoded at its declared 720 by 1280 or 1200 by 800 dimensions and advanced continuously.

Chapel's RX 6600 XT rendered two raw Vulkan jobs in 10.195 seconds in parallel versus 20.276 seconds sequentially, with byte-identical PNG frames. Parallel x264 did not pass the stronger film gate: encoded files and decoded frames differed from an isolated render even with one encoder thread. The published path therefore remains sequential and now fails closed unless Vulkan resolves the explicit RADV ICD to the discrete RX 6600 XT.

DONE Put action, inhabitants, and authored surfaces in the gallery #BX4TG3

Intent. Make the enlarged folio show things one can do as well as places one can admire: mine a wall, build a brick arch, converse through the focused-FOV inhabitant view, inspect the metabar and M-x command table, use a real terminal wall, and watch a locally authored film in a dusk shelter.

Evidence. Source revision e8b6fc8 registers twelve new recipes through the existing concrete owners, bringing the executable gallery to 51 cards: 34 stills, 17 films, and 16 portrait compositions. The two gameplay films call ordinary centre-ray :remove and :place edits and retain the crosshair, hotbar, and first-person body. The gnome and cat pairs use the embodied-agent focus/dialogue path, with the cat pair composed at 720 by 1280. The two instrument stills repaint the real McCLIM metabar and command-menu state. The terminal pair runs a finite, credential-free shell through an actual PTY and Ghostty/Slug surface; the cinema pair generates and plays a deterministic H.264 clip through the existing Film wall.

Focused Chapel captures visually accepted every family. The mining film opens a broad stone wall and throws brick fragments to reveal crystal; the building film completes a brick arch around its wooden scaffold. Dialogue, instrument text, ANSI terminal lines, glass faceplate, shelter perspective, and the moving cinema picture all remain legible at their card shapes.

Chapel's current RADV H.264 decode loses the graphics device at the first decoded picture. The cinema recipe therefore selects software decode explicitly rather than disguising a failed hardware proof as :auto fallback; the world rendering itself remains on the fail-closed RX 6600 XT RADV route. The file-browser film choice remains deferred because its current entry point depends on the ambient home directory instead of a source-owned fixture.