{"api":{"structure":{"boot":{"label":"🥾 Boot","sig":"boot($)","desc":"Runs once when a piece starts. Use it to initialize state and configure systems.","params":[{"name":"$","type":"api","required":true,"desc":"Full AC runtime API object for the piece."}],"returns":"void","done":true},"paint":{"label":"🎨 Paint","sig":"paint($)","desc":"Runs on each render frame. Draw graphics and update visual state here.","params":[{"name":"$","type":"api","required":true,"desc":"Frame API with graphics/input/system helpers."}],"returns":"void | boolean","done":true},"act":{"label":"🎪 Act","sig":"act($)","desc":"Runs for input and system events (keyboard, pointer, signals, lifecycle notifications).","params":[{"name":"$","type":"api","required":true,"desc":"Event API. Current event is available at $.event."}],"returns":"void","done":true},"sim":{"label":"🧮 Sim","sig":"sim($)","desc":"Fixed-step simulation hook for logic updates independent from render timing.","params":[{"name":"$","type":"api","required":true,"desc":"Simulation API for deterministic state updates."}],"returns":"void","done":true},"beat":{"label":"🥁 Beat","sig":"beat($)","desc":"Runs on system metronome ticks for rhythm-synced behavior.","params":[{"name":"$","type":"api","required":true,"desc":"Beat API including sound timing helpers."}],"returns":"void","done":true},"leave":{"label":"👋 Leave","sig":"leave($)","desc":"Execute code right before the piece is unloaded.","params":[{"name":"$","type":"api","required":true,"desc":"API snapshot available during teardown."}],"returns":"void","done":true},"meta":{"label":" 📰 Meta","sig":"meta()","desc":"Optional static metadata declaration for the piece (name, author, capabilities).","returns":"object","done":true},"preview":{"label":"🖼️ Preview","sig":"preview($)","desc":"Render a custom preview thumbnail for galleries and listings.","params":[{"name":"$","type":"api","required":true,"desc":"Graphics API for drawing thumbnail output."}],"returns":"void","done":true},"icon":{"label":"🪷 Icon","sig":"icon($)","desc":"Render a small icon/fav icon representation for the piece.","params":[{"name":"$","type":"api","required":true,"desc":"Graphics API for icon rendering."}],"returns":"void","done":true},"brush":{"label":"🖌️ Brush","sig":"brush($)","desc":"For implementing brushes in the `nopaint` system.","params":[{"name":"$","type":"api","required":true,"desc":"Nopaint brush API and event context."}],"returns":"void","done":true},"filter":{"label":"🥤 Filter","sig":"filter($)","desc":"For implementing filters in the `nopaint` system.","params":[{"name":"$","type":"api","required":true,"desc":"Nopaint filter API and source image data."}],"returns":"void","done":true},"curtain":{"label":"curtain","sig":"curtain($)","desc":"Top-layer render hook for world-mode pieces.","params":[{"name":"$","type":"api","required":true,"desc":"World render API for overlay/cutaway effects."}],"returns":"void","done":true},"background":{"label":"🏔️ background","sig":"background($)","desc":"World-system backdrop hook rendered behind foreground actors.","params":[{"name":"$","type":"api","required":true,"desc":"World render API for backdrop painting."}],"returns":"void","done":true},"api":{"sig":"api","desc":"References all built-in functionality for a top-level function.","returns":"object","done":true},"DEBUG":{"sig":"DEBUG","desc":"A global constant that determines if `AC` is in debug mode.","returns":"boolean","done":true}},"interaction":{"pen":{"sig":"pen: { x, y, ... }","desc":"Current primary pointer state (mouse or touch), including coordinates and press state.","returns":"object","examples":["prompt~line","prompt~plot"],"done":true},"pens":{"sig":"pens(n)","desc":"Read active pointer inputs. Without args returns all pens, with index returns one pointer.","params":[{"name":"n","type":"number","required":false,"desc":"Pointer index for a single pen."}],"returns":"array | object","done":true},"pen3d":{"sig":"pen3d","desc":"Current XR/controller pointer state when running in immersive input contexts.","returns":"object | null","done":true},"event":{"sig":"event","desc":"The current input/system event being processed in the active callback.","returns":"object","done":true}},"graphics":{"abstract.bresenham":{"sig":"bresenham(x0, y0, x1, y1)","desc":"Returns an array of integer points that make up an aliased line from (x0,y0) to (x1,y1). This function is abstract and does not render anything.","done":true},"line":{"sig":"line(x0, y0, x1, y1) or line({x0, y0, x1, y1}) or line(p1, p2)","desc":"Draw a 1-pixel wide line. Can take 4 coordinates, an object with coordinates, or two points.","params":[{"name":"x0, y0, x1, y1","type":"number","required":false,"desc":"Line start and end coordinates."},{"name":"p1, p2","type":"point","required":false,"desc":"Alternative point-object form."}],"returns":"void","examples":["line","line:2","line:5"],"example":{"type":"piece","entry":"line","height":288},"done":true},"point":{"sig":"point(...args) or point({x, y})","desc":"Plot a single pixel within the panned coordinate space. Takes x,y coordinates or a point object.","params":[{"name":"x, y","type":"number","required":false,"desc":"Pixel coordinates."},{"name":"{x, y}","type":"object","required":false,"desc":"Point-object form."}],"returns":"void","examples":["plot","plot 48 48","plot 128 128"],"example":{"type":"piece","entry":"plot","height":288},"done":true},"box":{"sig":"box(x, y, w, h, mode)","desc":"Draw a box with optional modes: 'fill' (default), 'outline', 'inline'. Add '*center' to draw from center. Use ':N' for thickness.","body":"<code>box()</code> <em>A random box</em></li><br>\n    <code>box(x, y, size)</code></code> <em>Square from top left corner</em><br>\n    <mark><code>box(x, y, w, h)</code> <em>Rectangle from top left corner</em></mark><br>\n    <code>box(x, y, size, mode)</code> <em>Square with <code>mode</code></em><br>\n    <code>box(x, y, w, h, mode)</code> <em>Rectangle with <code>mode</code></em><br>\n    <br>\n    <hr>\n    <code>mode</code>\n    <br>\n    <code>center</code> &nbsp;- paints a box from the center<br>\n    <code>outline</code> - paints the outline of a box<br>\n    <code>inline</code> &nbsp;- the opposite of outline<br>\n    <em>(thicken with <code>:</code> like <code>outline:4</code>)</em>\n    <br>\n    combine modes with <code>*</code> like <code>outline*center</code> or <code>inline:3*center</code>","params":[{"name":"x, y","type":"number","required":true,"desc":"Top-left or center position (depending on mode)."},{"name":"w, h","type":"number","required":true,"desc":"Box width and height."},{"name":"mode","type":"string","required":false,"desc":"fill/outline/inline with optional center and thickness modifiers."}],"returns":"void","examples":["box","box:outline","box:center"],"example":{"type":"piece","entry":"box","height":288},"done":true},"wipe":{"sig":"wipe(color)","desc":"Clear the screen with a solid color. Color can be a single number (0-255 for grayscale) or an array [r,g,b,a].","params":[{"name":"color","type":"number | string | array","required":false,"desc":"Fill color. Defaults to black when omitted."}],"returns":"void","examples":["wipe","wipe:red","wipe:white"],"example":{"type":"piece","entry":"wipe","height":288},"done":true},"ink":{"sig":"ink(color)","desc":"Set the current drawing color. Color can be a single number (0-255 for grayscale) or an array [r,g,b,a].","params":[{"name":"color","type":"number | string | array","required":true,"desc":"Next draw color for primitives and text."}],"returns":"paintApi","examples":["prompt~ink","prompt~ink:red","prompt~ink:black"],"done":true},"circle":{"sig":"circle(x, y, radius)","desc":"Draw a filled circle centered at (x,y) with the specified radius using the current ink color.","params":[{"name":"x, y","type":"number","required":true,"desc":"Circle center coordinates."},{"name":"radius","type":"number","required":true,"desc":"Circle radius in pixels."}],"returns":"void","examples":["prompt~circle","prompt~circle:16","prompt~circle:outline"],"done":true},"layer":{"sig":"layer(index | options)","desc":"Work with layered painting buffers for compositing and advanced drawing workflows.","returns":"object","done":true},"painting":{"sig":"painting(width, height, callback) or painting(width, height)","desc":"Create an offscreen painting buffer, optionally drawing into it via callback.","params":[{"name":"width, height","type":"number","required":true,"desc":"Buffer dimensions."},{"name":"callback","type":"function","required":false,"desc":"Draw callback receiving a paint API."}],"returns":"painting","done":true},"inkrn":{"sig":"inkrn()","desc":"Read current ink color state as an RGBA array.","returns":"[r, g, b, a]","done":true},"pagern":{"sig":"pagern()","desc":"Read the current active page/buffer reference.","returns":"painting","done":true},"notice":{"sig":"notice(msg, color, opts)","desc":"Show a transient runtime notice/HUD message.","params":[{"name":"msg","type":"string","required":true,"desc":"Notice text."},{"name":"color","type":"array","required":false,"desc":"Foreground/background color pair."},{"name":"opts","type":"object","required":false,"desc":"Duration/behavior options."}],"returns":"void","done":true},"blend":{"sig":"blend(mode)","desc":"Set blend mode behavior for subsequent draw operations.","returns":"void","done":true},"page":{"sig":"page(buffer)","desc":"Switch the active drawing target buffer.","params":[{"name":"buffer","type":"painting","required":true,"desc":"Target buffer/page."}],"returns":"void","done":true},"edit":{"sig":"edit(callback)","desc":"Mutate the current pixel buffer with a callback.","params":[{"name":"callback","type":"function","required":true,"desc":"Pixel mutation callback."}],"returns":"void","done":true},"copy":{"sig":"copy(x, y, w, h)","desc":"Copy pixel data from the current buffer region.","returns":"painting","done":true},"paste":{"sig":"paste(painting, x, y)","desc":"Paste a painting at the given position, anchored from the top left.","params":[{"name":"painting","type":"painting | image","required":true,"desc":"Source bitmap, painting id, or URL."},{"name":"x, y","type":"number","required":false,"desc":"Target top-left position. Defaults to 0,0."},{"name":"scale","type":"number","required":false,"desc":"Optional scale factor."}],"returns":"void","examples":["paste","paste:camera","paste:under"],"example":{"type":"piece","entry":"paste","height":288},"done":true},"stamp":{"sig":"stamp(painting, x, y, scale)","desc":"Paste a painting centered at (x,y). Useful for sprites and markers.","params":[{"name":"painting","type":"painting | image","required":true,"desc":"Source bitmap, painting id, or URL."},{"name":"x, y","type":"number","required":false,"desc":"Center position."},{"name":"scale","type":"number","required":false,"desc":"Optional scale factor."}],"returns":"void","examples":["stamp","stamp:camera","stamp:under"],"example":{"type":"piece","entry":"stamp","height":288},"done":true},"pixel":{"sig":"pixel(x, y) -> [r, g, b, a]","desc":"Read a single pixel color from the current active painting buffer.","params":[{"name":"x, y","type":"number","required":true,"desc":"Pixel coordinates."}],"returns":"[r, g, b, a]","examples":["prompt~pixel"],"done":true},"plot":{"sig":"plot(x, y) or plot({x, y})","desc":"Draw one pixel at the given position using current ink color.","params":[{"name":"x, y","type":"number","required":false,"desc":"Pixel coordinates."},{"name":"{x, y}","type":"object","required":false,"desc":"Point-object form."}],"returns":"void","examples":["plot","plot 32 32","plot 200 120"],"example":{"type":"piece","entry":"plot","height":288},"done":true},"flood":{"sig":"flood(x, y)","desc":"Flood-fill adjacent matching pixels at (x,y) using current ink color.","params":[{"name":"x, y","type":"number","required":true,"desc":"Seed position for the fill operation."}],"returns":"void","examples":["prompt~flood","prompt~flood:blue"],"done":true},"lineAngle":{"sig":"lineAngle(x, y, distance, angle)","desc":"Draw a line from origin using polar coordinates.","returns":"void","done":true},"pline":{"sig":"pline(points)","desc":"Draw a connected polyline from a point list.","returns":"void","done":true},"pppline":{"sig":"pppline(points)","desc":"Draw a pixel-perfect polyline with aliased-style stepping.","returns":"void","done":true},"oval":{"sig":"oval(x, y, w, h, mode)","desc":"Draw an ellipse bounded by width and height dimensions.","params":[{"name":"x, y","type":"number","required":true,"desc":"Top-left or center position depending on mode."},{"name":"w, h","type":"number","required":true,"desc":"Ellipse width and height."},{"name":"mode","type":"string","required":false,"desc":"fill/outline variants."}],"returns":"void","examples":["oval","oval:outline","oval:center"],"example":{"type":"piece","entry":"oval","height":288},"done":true},"poly":{"sig":"poly(x0, y0, x1, y1, ...)","desc":"Draw a polygon from point pairs in sequence.","params":[{"name":"points","type":"number[]","required":true,"desc":"Alternating x/y coordinate list."}],"returns":"void","examples":["prompt~poly","prompt~poly:outline"],"done":true},"shape":{"sig":"shape(points, mode)","desc":"Draw a higher-level shape from point arrays/objects with optional mode controls.","params":[{"name":"points","type":"array","required":true,"desc":"Point list or packed coordinate data."},{"name":"mode","type":"string","required":false,"desc":"fill/outline behavior."}],"returns":"void","examples":["shape","shape:outline"],"example":{"type":"piece","entry":"shape","height":288},"done":true},"grid":{"sig":"grid(x, y, w, h, scale)","desc":"Create a uniform grid helper for layout and sampling.","returns":"Grid","done":true},"draw":{"sig":"draw(shapeOrCommand, ...args)","desc":"Execute a generic draw command helper.","returns":"void","done":true},"printLine":{"sig":"printLine(text, x, y, opts)","desc":"Render a single line of text using low-level type metrics.","returns":"void","done":true},"form":{"sig":"form(options)","desc":"Create/manage a higher-level geometric form object for 3D or batched drawing.","returns":"Form","done":true},"pan":{"sig":"pan(x, y)","desc":"Set or offset the current 2D camera pan.","returns":"void","done":true},"unpan":{"sig":"unpan()","desc":"Reset active pan transform.","returns":"void","done":true},"savepan":{"sig":"savepan()","desc":"Store current pan transform state.","returns":"void","done":true},"loadpan":{"sig":"loadpan()","desc":"Restore previously stored pan transform state.","returns":"void","done":true},"skip":{"sig":"skip(n)","desc":"Skip/pad drawing steps in helper-driven sequences.","returns":"void","done":true},"glaze":{"sig":"glaze({ on: bool })","desc":"Enable a fullscreen shader `glaze` effect.","returns":"void","done":true},"paintCount":{"sig":"paintCount","desc":"The number of `paint` frames that have passed.","returns":"bigint","done":true},"screen":{"sig":"screen","desc":"Current screen buffer object with width/height/pixels.","returns":"painting","done":true},"display":{"sig":"display","desc":"A reference to the current display information.","returns":"object","done":true},"fps":{"sig":"fps(value)","desc":"Set target frame rate for draw loops.","returns":"void","done":true},"resolution":{"sig":"resolution(width, height = width, gap = 8)","desc":"Adjust display resolution and optional gap/pixel spacing.","params":[{"name":"width","type":"number","required":true,"desc":"Target render width."},{"name":"height","type":"number","required":false,"desc":"Target render height (defaults to width)."},{"name":"gap","type":"number","required":false,"desc":"Display gap spacing between pixels."}],"returns":"void","examples":["prompt~resolution:128","prompt~resolution:64"],"done":true},"video":{"sig":"video(mode, options)","desc":"Access camera/video capture and tracking modes.","returns":"object | void","done":true},"rec":{"sig":"rec","desc":"Recorder subsystem for capturing frames/media output.","returns":"Recorder","done":true},"needsPaint":{"sig":"needsPaint()","desc":"Mark the renderer as dirty so a frame will be painted.","returns":"void","done":true},"noise16":{"sig":"noise16(opts)","desc":"Apply 16-color noise texture overlay.","returns":"void","done":true},"noise16DIGITPAIN":{"sig":"noise16DIGITPAIN(opts)","desc":"Apply DIGITPAIN-flavored 16-color noise texture.","returns":"void","done":true},"noise16Aesthetic":{"sig":"noise16Aesthetic(opts)","desc":"Apply Aesthetic-themed 16-color noise texture.","returns":"void","done":true},"noise16Sotce":{"sig":"noise16Sotce(opts)","desc":"Apply SOTCE-themed 16-color noise texture.","returns":"void","done":true},"noiseTinted":{"sig":"noiseTinted(opts)","desc":"Apply tinted procedural noise to the active buffer.","returns":"void","done":true},"write":{"sig":"write(text, pos, b, bounds, wordWrap)","desc":"Render text into the current painting using current ink, font, and optional bounds.","params":[{"name":"text","type":"string","required":true,"desc":"Text content to draw."},{"name":"pos","type":"object | number","required":false,"desc":"Position or anchor object."},{"name":"bounds","type":"object","required":false,"desc":"Optional clipping/wrapping bounds."}],"returns":"painting | metrics","examples":["prompt~write","prompt~word"],"done":true},"text.capitalize":{"sig":"capitalize(text)","desc":"Capitalize words in a string for display labels/headings.","returns":"string","done":true},"text.box":{"sig":"box(text, pos, bounds, scale, wordWrap, fontName)","desc":"Measure and layout text block metrics without drawing.","returns":"object","done":true},"clonePixels":{"sig":"clonePixels(buffer)","desc":"Return a cloned pixel buffer for safe mutation.","returns":"Uint8ClampedArray","done":true},"colorsMatch":{"sig":"colorsMatch(color1, color2)","desc":"Checks if two colors `[r, g, b, a]` are the same.","returns":"boolean","done":true},"color":{"sig":"color(?)","desc":"Return a color `[r, g, b, a]` from a variety of inputs.","returns":"[r, g, b, a]","done":true},"resize":{"sig":"resize(bitmap, width, height)","desc":"Get a fresh resized bitmap with nearest neighbor scaling.","returns":"painting","done":true},"Camera":{"sig":"Camera","desc":"3D camera model/type used by form and world rendering helpers.","done":true},"Form":{"sig":"Form","desc":"3D/mesh form primitive type used in advanced rendering.","done":true},"Dolly":{"sig":"Dolly","desc":"Camera dolly helper type for 3D transforms and motion.","done":true},"TRI":{"sig":"TRI","desc":"Triangle primitive constant for form pipelines.","done":true},"QUAD":{"sig":"QUAD","desc":"Quad primitive constant for form pipelines.","done":true},"LINE":{"sig":"LINE","desc":"Line primitive constant for form pipelines.","done":true},"CUBEL":{"sig":"CUBEL","desc":"Cuboid/cube primitive constant for form pipelines.","done":true},"ORIGIN":{"sig":"ORIGIN","desc":"Origin reference constant for transform helpers.","done":true},"ui.Button":{"sig":"new Button(box)","desc":"An interactive button model with a text label.","returns":"Button","done":true},"ui.TextButton":{"sig":"new TextButton(text, pos)","desc":"An interactive button model with a text label.","returns":"TextButton","done":true},"ui.TextInput":{"sig":"new TextInput($, text, processCommand, options = { palette, font, wrap })","desc":"An interactive text prompt object.","returns":"TextInput","done":true},"content.add":{"sig":"add(content)","desc":"Make a request to add content to the DOM.","returns":"string","done":true},"dom.html":{"sig":"html(src)","desc":"Add `html` content to the DOM.","returns":"void","done":true},"dom.css":{"sig":"css(src)","desc":"Add `css` content to the DOM.","returns":"void","done":true},"dom.javascript":{"sig":"javascript(src)","desc":"Add `javascript` content to the DOM.","returns":"void","done":true},"dom.clear":{"sig":"clear()","desc":"Clear (remove) all DOM content.","returns":"void","done":true},"typeface":{"sig":"typeface","desc":"A reference to the default system typeface.","returns":"object","done":true},"cursor":{"sig":"cursor(code)","desc":"Set the system mouse cursor to a different graphic.","returns":"void","done":true}},"sound":{"sound.time":{"sig":"sound.time","desc":"Current audio engine time in seconds.","returns":"number","done":true},"sound.bpm":{"sig":"sound.bpm(newBPM?)","desc":"Get or set the current BPM used for beat-based durations.","params":[{"name":"newBPM","type":"number","required":false,"desc":"Optional BPM override."}],"returns":"number","done":true},"sound.freq":{"sig":"sound.freq(input)","desc":"Resolve note names or numeric input to frequency in Hz.","params":[{"name":"input","type":"string | number","required":true,"desc":"Examples: 440, C4, 4C#, A3."}],"returns":"number | null","done":true},"sound.microphone":{"sig":"sound.microphone","desc":"Live microphone object (connect/poll/record + analysis fields).","returns":"object","done":true},"sound.speaker":{"sig":"sound.speaker","desc":"Live speaker output analysis object (amplitude/waveform/frequency data).","returns":"object","done":true},"sound.play":{"sig":"sound.play(sfx, options, callbacks)","desc":"Play a registered sample/sfx by id and return a live handle.","params":[{"name":"sfx","type":"string","required":true,"desc":"Sample id/path to play."},{"name":"options","type":"object","required":false,"desc":"Playback options (volume, pan, loop, speed, etc)."},{"name":"callbacks","type":"object","required":false,"desc":"Lifecycle callbacks (for example kill handlers)."}],"returns":"object","done":true},"sound.synth":{"sig":"sound.synth({ tone, type, duration, beats, attack, decay, volume, pan, generator })","desc":"Play a synthesized voice and return a handle for kill/progress/update.","params":[{"name":"options","type":"object","required":false,"desc":"Synth options object with oscillator and envelope fields."}],"returns":"object","done":true},"sound.bubble":{"sig":"sound.bubble({ radius, rise, volume, pan })","desc":"Spawn a bubble-style synthesized sound voice.","params":[{"name":"options","type":"object","required":false,"desc":"Bubble synth options."}],"returns":"object","done":true},"sound.kill":{"sig":"sound.kill(id, fade?)","desc":"Stop an active synth/sample by id, with optional fade time.","params":[{"name":"id","type":"number | bigint | string","required":true,"desc":"Active sound identifier."},{"name":"fade","type":"number","required":false,"desc":"Optional fade-out duration."}],"returns":"void","done":true}},"network":{"net.signup":{"sig":"signup()","desc":"Redirect a user to the signup screen.","returns":"void","done":true},"net.login":{"sig":"login()","desc":"Redirect a user to the login screen.","returns":"void","done":true},"net.logout":{"sig":"logout()","desc":"Log a user out and redirect them to the `prompt`.","returns":"void","done":true},"net.pieces":{"sig":"pieces","desc":"The system path to all built-in piece code.","returns":"string","done":true},"net.parse":{"sig":"parse(slug)","desc":"Parse a textual piece slug.","params":[{"name":"slug","type":"string","required":true,"desc":"Piece slug or prompt-style path."}],"returns":"object","done":true},"net.userRequest":{"sig":"userRequest(method, endpoint, body)","desc":"Make an authorized request for a logged in user.","params":[{"name":"method","type":"string","required":true,"desc":"HTTP method (GET, POST, etc)."},{"name":"endpoint","type":"string","required":true,"desc":"Relative API endpoint."},{"name":"body","type":"object","required":false,"desc":"JSON payload for write requests."}],"returns":"Promise<object>","done":true},"net.udp":{"sig":"udp(receive)","desc":"Loosely connect the UDP receiver.","params":[{"name":"receive","type":"function","required":true,"desc":"Callback for incoming UDP-style messages."}],"returns":"void","done":true},"net.lan":{"sig":"lan","desc":"A reference to the local area network IP if it is available.","returns":"string | null","done":true},"net.iframe":{"sig":"iframe","desc":"Whether or not the system is running hosted within an `iframe`.","returns":"boolean","done":true},"back":{"sig":"back()","desc":"Go back to the previous piece or prompt if there is no history.","returns":"void","done":true},"alias":{"sig":"alias(name, colon, params)","desc":"Jump to a piece without changing the corner label or url, and ignoring the history stack.","params":[{"name":"name","type":"string","required":true,"desc":"Piece slug to load."},{"name":"colon","type":"array","required":false,"desc":"Colon params to pass through."},{"name":"params","type":"array","required":false,"desc":"Space params to pass through."}],"returns":"void","done":true},"load":{"sig":"async load(parsed, fromHistory, alias, devReload, loadedCallback)","desc":"Load a piece after parsing a slug, with various options.","params":[{"name":"parsed","type":"object","required":true,"desc":"Parsed slug payload."},{"name":"fromHistory","type":"boolean","required":false,"desc":"Treat this load as history navigation."},{"name":"alias","type":"boolean","required":false,"desc":"Skip URL/label rewrite when true."},{"name":"devReload","type":"boolean","required":false,"desc":"Set dev-reload mode."},{"name":"loadedCallback","type":"function","required":false,"desc":"Callback after load success."}],"returns":"Promise<void>","done":true},"slug":{"sig":"slug","desc":"The full piece address containing its name, colon parameters, and space separated parameters.","returns":"object","done":true},"piece":{"sig":"piece","desc":"The name of the running piece.","returns":"string","done":true},"query":{"sig":"query","desc":"An object containing the system's URL query parameters.","returns":"object","done":true},"params":{"sig":"params","desc":"Array of space-delimited piece parameters from the current slug.","returns":"array","done":true},"colon":{"sig":"colon","desc":"Array of colon parameters for the active piece slug.","returns":"array","done":true},"preload":{"sig":"async preload(path, parseJSON = true, progressReport, options)","desc":"Preload a media asset from the network.","params":[{"name":"path","type":"string","required":true,"desc":"Asset URL or path."},{"name":"parseJSON","type":"boolean","required":false,"desc":"Auto-parse JSON responses."},{"name":"progressReport","type":"function","required":false,"desc":"Progress callback."},{"name":"options","type":"object","required":false,"desc":"Fetch options overrides."}],"returns":"Promise<any>","done":true},"download":{"sig":"download(filename, data, modifiers)","desc":"Download a file.","params":[{"name":"filename","type":"string","required":true,"desc":"Output filename."},{"name":"data","type":"Blob | string | object","required":true,"desc":"Download payload."},{"name":"modifiers","type":"object","required":false,"desc":"Optional mime/options."}],"returns":"void","done":true},"dark":{"sig":"dark","desc":"If the system is in dark mode.","returns":"boolean","done":true},"jump":{"sig":"jump(to)","desc":"Navigate to a piece/url or cached code id.","params":[{"name":"to","type":"string","required":true,"desc":"Target piece slug, URL, or code id."}],"returns":"void","done":true},"leaving":{"sig":"leaving()","desc":"Returns true if a piece is leaving / a `jump` is in process.","returns":"boolean","done":true},"broadcast":{"sig":"broadcast(msg)","desc":"Send a message to other open `aesthetic.computer` tabs.","params":[{"name":"msg","type":"any","required":true,"desc":"Broadcast payload."}],"returns":"void","done":true},"net.socket":{"sig":"socket(receive)","desc":"Hook into the piece's socket server with a receive callback.","params":[{"name":"receive","type":"function","required":true,"desc":"Callback for socket events/messages."}],"returns":"object | void","done":true},"net.devReload":{"sig":"devReload","desc":"A flag that determines if the piece code was just reloaded in development.","returns":"boolean","done":true},"net.web":{"sig":"web(url, jumpOut)","desc":"Jump the browser to a new url.","params":[{"name":"url","type":"string","required":true,"desc":"Destination URL."},{"name":"jumpOut","type":"boolean","required":false,"desc":"Open externally when true."}],"returns":"void","done":true},"net.host":{"sig":"host","desc":"The current network host.","returns":"string","done":true},"net.rewrite":{"sig":"rewrite(path, historical = false)","desc":"Rewrite a new URL / parameter path without affecting the history.","params":[{"name":"path","type":"string","required":true,"desc":"New path/query to write."},{"name":"historical","type":"boolean","required":false,"desc":"Whether to push history."}],"returns":"void","done":true},"net.refresh":{"sig":"refresh()","desc":"Refresh the page / restart `aesthetic.computer`.","returns":"void","done":true},"net.waitForPreload":{"sig":"waitForPreload()","desc":"Tell the system to wait until preloading is finished before painting.","returns":"void","done":true},"net.preloaded":{"sig":"preloaded()","desc":"Tell the system that all preloading is done.","returns":"void","done":true}},"number":{"simCount":{"sig":"simCount","desc":"The number of simulation frames passed.","returns":"bigint","done":true},"seconds":{"sig":"seconds(s)","desc":"Convert seconds to `sim` frames.","params":[{"name":"s","type":"number","required":true,"desc":"Seconds value."}],"returns":"number","done":true},"num.add":{"sig":"add(...numbers) | add(numbers[])","desc":"Add all numeric inputs and return the total.","returns":"number","done":true},"num.wrap":{"sig":"wrap(n, to)","desc":"Wrap a number into the range 0..to (exclusive upper bound).","returns":"number","done":true},"num.even":{"sig":"even(n)","desc":"Return true when n is evenly divisible by 2.","returns":"boolean","done":true},"num.odd":{"sig":"odd(n)","desc":"Return true when n is odd.","returns":"boolean","done":true},"num.clamp":{"sig":"clamp(value, low, high)","desc":"Clamp a value between low and high.","returns":"number","done":true},"num.rand":{"sig":"rand()","desc":"Return a random float in the range 0..1.","returns":"number","done":true},"num.randInt":{"sig":"randInt(n)","desc":"Gets a random integer.","done":true},"num.randInd":{"sig":"randInd(arr)","desc":"Generates a random index from an array.","done":true},"num.randIntArr":{"sig":"randIntArr(n, count)","desc":"Generates an array of random integers from 0-n (inclusive)","done":true},"num.randIntRange":{"sig":"randIntRange(low, high)","desc":"Generates an integer from low-high (inclusive)","done":true},"num.rangedInts":{"sig":"rangedInts(ints)","desc":"Converts an array of strings formatted like 1-100 into an array of random integer ranges. Useful for color ranges.","done":true},"num.multiply":{"sig":"multiply(operands, n)","desc":"Multiplies one or more [] operands by n and returns a Number or Array.","done":true},"num.dist":{"sig":"dist(x1, y1, x2, y2)","desc":"Compute the distance between two 2D points.","done":true},"num.dist3d":{"sig":"dist3d(p1, p2)","desc":"Compute the distance between two 3D points as [x, y, z].","done":true},"num.perlin":{"sig":"perlin(x, y)","desc":"Compute a 2D perlin noise value.","done":true},"num.radians":{"sig":"radians(deg)","desc":"Convert degrees to radians.","done":true},"num.degrees":{"sig":"degrees(rad)","desc":"Convert radians to degrees.","done":true},"num.lerp":{"sig":"lerp(a, b, amount)","desc":"Slides a number between a and b by a normalized amount.","done":true},"num.map":{"sig":"map(num, inMin, inMax, outMin, outMax)","desc":"Maps a number within a range to a new range.","done":true},"num.arrMax":{"sig":"arrMax(arr)","desc":"Return the maximum number in an array.","done":true},"num.arrCompress":{"sig":"arrCompress(arr, n)","desc":"Return a new array with every nth index missing.","done":true},"num.Track":{"sig":"new Track(values, result)","desc":"Lerp a value using a stepping function, with optional quantization.","done":true},"num.p2.of":{"sig":"of(x, y)","desc":"Turns two values into an {x, y} point.","done":true},"num.p2.len":{"sig":"len(pA)","desc":"Gets the length of the point as a vector.","done":true},"num.p2.norm":{"sig":"norm(p)","desc":"Normalizes a vector to have a length of 1.","done":true},"num.p2.eq":{"sig":"eq(p1, p2)","desc":"Checks for the equality of two points.","done":true},"num.p2.inc":{"sig":"inc(pout, pin)","desc":"Mutably adds P->in to P->out.","done":true},"num.p2.scl":{"sig":"scl(pout, pin)","desc":"Mutably scales P->out by P->in.","done":true},"num.p2.add":{"sig":"add(pA, pB)","desc":"Immutably adds pA + pB.","done":true},"num.p2.sub":{"sig":"sub(pA, pB)","desc":"Immutably subtracts pA - pB.","done":true},"num.p2.rot":{"sig":"rot(p, angle)","desc":"Immutably rotates p by angle in radians.","done":true},"num.p2.mul":{"sig":"mul(pA, pB)","desc":"Immutably multiplies pA * pB.","done":true},"num.p2.div":{"sig":"div(pA, pB)","desc":"Immutably divides pA / pB. Expands pA to an {x, y} if it is a single number.","done":true},"num.p2.mid":{"sig":"mid(pA, pB)","desc":"Calculates the midpoint between two points.","done":true},"num.p2.dist":{"sig":"dist(pA, pB)","desc":"Calculates the distance between two points.","done":true},"num.p2.angle":{"sig":"angle(pA, pB)","desc":"Calculates the angle between two points.","done":true},"num.p2.dot":{"sig":"dot(pA, pB)","desc":"Calculates the dot product of two points.","done":true},"num.p2.floor":{"sig":"floor(p)","desc":"Applies the floor function to both x and y coordinates of a point.","done":true},"num.midp":{"sig":"midp(a, b)","desc":"Find the midpoint between two [x, y] coordinates.","done":true},"num.number":{"sig":"number(maybeNumber)","desc":"Determine if the value is a number or not.","done":true},"num.intersects":{"sig":"intersects(line1, line2)","desc":"Compute whether two lines intersect. A line is: `{x0, y0, x1, y1}`","done":true},"num.signedCeil":{"sig":"signedCeil(n)","desc":"Ceil a number away from 0.","done":true},"num.signedFloor":{"sig":"signedFloor(val)","desc":"Floor a number towards 0.","done":true},"num.vec2":{"sig":"vec2.?","desc":"All the `vec2` functions from the `glMatrix` library.","done":true},"num.vec3":{"sig":"vec3.?","desc":"All the `vec3` functions from the `glMatrix` library.","done":true},"num.vec4":{"sig":"vec4.?","desc":"All the `vec4` functions from the `glMatrix` library.","done":true},"num.mat3":{"sig":"mat3.?","desc":"All the `mat3` functions from the `glMatrix` library.","done":true},"num.mat4":{"sig":"mat4.?","desc":"All the `mat4` functions from the `glMatrix` library.","done":true},"num.quat":{"sig":"quat.?","desc":"All the `quat` (quaternion) functions from the `glMatrix` library.","done":true},"num.parseColor":{"sig":"parseColor(params)","desc":"Parses a color from piece params.","done":true},"num.findColor":{"sig":"findColor(rgb)","desc":"Find a color inside of `cssColors` by value","done":true},"num.saturate":{"sig":"saturate(rgb, amount = 1)","desc":"Saturate a color by `amount`.","done":true},"num.desaturate":{"sig":"desaturate(rgb, amount = 1)","desc":"Desaturate a color by `amount`","done":true},"num.shiftRGB":{"sig":"shiftRGB(a, b, step, mode = \"lerp\", range = 255)","desc":"Lerp two RGBA arrays, skipping alpha and rounding the output.","done":true},"num.rgbToHexStr":{"sig":"rgbToHexStr(r, g, b, prefix = \"\")","desc":"Convert separate RGB values to a hex string.","done":true},"num.hexToRgb":{"sig":"hexToRgb(h)","desc":"Takes a string/number hex value and outputs an [r, g, b] array.","done":true},"num.blend":{"sig":"blend(dst, src, alphaIn = 1)","desc":"Alpha blends two colors, mutating and returning `dst`.","done":true},"num.rgbToHsl":{"sig":"rgbToHsl(r, g, b)","desc":"Convert rgb to hsl (360, 100, 100).","done":true},"num.hslToRgb":{"sig":"hslToRgb(h, s, l)","desc":"Convert hsl (360, 100, 100) to rgb.","done":true},"num.rainbow":{"sig":"rainbow()","desc":"Return a cycled color from the `rainbow` template.","done":true},"delay":{"sig":"delay(fun, time)","desc":"Delay a function by `time` number of sim steps.","done":true},"blink":{"sig":"blink(time, fun)","desc":"A looped `delay`.","done":true},"geo.Box":{"sig":"new Box()","desc":"A dynamic box with helpful methods.","done":true},"geo.DirtyBox":{"sig":"new DirtyBox()","desc":"A box model implementing dirty rectangle optimization.","done":true},"geo.Grid":{"sig":"new Grid(x, y, w, h, s = 1)","desc":"A 2 dimensional uniform grid, using a box as the frame (with scaling).","done":true},"geo.Circle":{"sig":"new Circle(x, y, radius = 8)","desc":"A generic circle model.","done":true},"geo.linePointsFromAngle":{"sig":"linePointsFromAngle(x1, y1, dist, degrees)","desc":"Project outwards from an origin point at dist, and degrees to get the full line.","done":true},"geo.pointFrom":{"sig":"pointFrom(x, y, angle, dist)","desc":"Project outwards from a point at an `angle` and `dist` and get the resulting point.","done":true},"geo.Race":{"sig":"new Race(opts = { quantized: true })","desc":"Follows a point over time.","done":true},"geo.Quantizer":{"sig":"new Quantizer(opts)","desc":"A simple model for lazy following of a 3D point.","done":true}},"help":{"choose":{"sig":"choose(a, b, ...)","desc":"Randomly return one of the arguments.","returns":"any","done":true},"flip":{"sig":"flip()","desc":"Flip a coin, returning true or false.","returns":"boolean","done":true},"repeat":{"sig":"repeat(n, fn)","desc":"Run a function `n` times, passing in `i` on each iteration and returning an array of the results (like map).","params":[{"name":"n","type":"number","required":true,"desc":"Iteration count (floored)."},{"name":"fn","type":"function","required":true,"desc":"Callback receiving index i."}],"returns":"array","done":true},"every":{"sig":"every(obj, value)","desc":"Set every property of an object to a certain value.","params":[{"name":"obj","type":"object","required":true,"desc":"Target object to mutate."},{"name":"value","type":"any","required":true,"desc":"Value assigned to every key."}],"returns":"void","done":true},"any":{"sig":"any(objOrArray)","desc":"Returns a random value from an object, or array.","returns":"any","done":true},"anyIndex":{"sig":"anyIndex(array)","desc":"Returns a random index value from an array.","returns":"number","done":true},"anyKey":{"sig":"anyKey(obj)","desc":"Returns a random key from an object.","returns":"string","done":true},"each":{"sig":"each(obj, fun)","desc":"Run a function on every value in an object.","params":[{"name":"obj","type":"object","required":true,"desc":"Object to iterate."},{"name":"fun","type":"function","required":true,"desc":"Callback receiving (value, key)."}],"returns":"void","done":true},"shuffleInPlace":{"sig":"shuffleInPlace(array)","desc":"Shuffles an array, mutating it.","returns":"array","done":true},"gizmo.Hourglass":{"sig":"new Hourglass(max, { completed, flipped, every, autoFlip = false }, startingTicks = 0)","desc":"A repeatable timer with callbacks.","returns":"Hourglass","done":true},"gizmo.EllipsisTicker":{"sig":"new EllipsisTicker()","desc":"An animated `...` string for showing processing indicators.","returns":"EllipsisTicker","done":true}},"system":{"signal":{"sig":"signal(content)","desc":"Send a message through the `signal` system, good for communicating with added DOM content.","params":[{"name":"content","type":"any","required":true,"desc":"Signal payload."}],"returns":"void","done":true},"sideload":{"sig":"sideload(type)","desc":"Open a file chooser to load a file.","params":[{"name":"type","type":"string","required":false,"desc":"Optional file type filter."}],"returns":"Promise<File | null>","done":true},"user":{"sig":"user","desc":"A reference to the currently logged in user.","returns":"object | null","done":true},"vscode":{"sig":"vscode","desc":"A flag that's true while running the VS Code extension.","returns":"boolean","done":true},"meta":{"sig":"meta(data)","desc":"Add meta to the common api so the data can be overridden as needed.","params":[{"name":"data","type":"object","required":true,"desc":"Meta fields to merge into runtime state."}],"returns":"void","done":true},"reload":{"sig":"reload({ piece, name, source, codeChannel })","desc":"Reload / start a piece in various ways. Used especially in live development.","params":[{"name":"options","type":"object","required":true,"desc":"Reload options including piece/name/source/codeChannel."}],"returns":"void","done":true},"pieceCount":{"sig":"pieceCount","desc":"Keeps track of how many pieces have been run so far in a session.","returns":"number","done":true},"store":{"sig":"store","desc":"An object for keeping data in across piece jumps.","returns":"object","done":true},"store.persist":{"sig":"store.persist(key, method = \"local\")","desc":"Save a storage key with associated data in the user's browser.","params":[{"name":"key","type":"string","required":true,"desc":"Store key to persist."},{"name":"method","type":"string","required":false,"desc":"Persistence backend (for example `local` or `local:db`)."}],"returns":"Promise<void>","done":true},"store.retrieve":{"sig":"store.retrieve(key, method = \"local\")","desc":"Load a storage key with associated data.","params":[{"name":"key","type":"string","required":true,"desc":"Store key to read."},{"name":"method","type":"string","required":false,"desc":"Persistence backend."}],"returns":"Promise<any>","done":true},"store.delete":{"sig":"store.delete(key, method = \"local\")","desc":"Remove a storage key and any saved data.","params":[{"name":"key","type":"string","required":true,"desc":"Store key to remove."},{"name":"method","type":"string","required":false,"desc":"Persistence backend."}],"returns":"Promise<boolean>","done":true},"debug":{"sig":"debug","desc":"Reports whether the system is in debug / development mode.","returns":"boolean","done":true},"canShare":{"sig":"canShare","desc":"Whether the current environment supports the Web Share API.","returns":"boolean","done":true},"handle":{"sig":"handle()","desc":"Returns the user's handle, if one exists.","returns":"string | null","done":true},"ticket":{"sig":"ticket(name)","desc":"Open a ticketed paywall by its name.","params":[{"name":"name","type":"string","required":true,"desc":"Ticket/paywall identifier."}],"returns":"void","done":true},"mint":{"sig":"mint(picture, progress, params)","desc":"Mint a picture on an external service.","params":[{"name":"picture","type":"object","required":true,"desc":"Painting/pixel payload."},{"name":"progress","type":"function","required":false,"desc":"Progress callback."},{"name":"params","type":"object","required":false,"desc":"Mint metadata/options."}],"returns":"Promise<any>","done":true},"print":{"sig":"print(picture, quantity, progress)","desc":"Print the `pixels` that get passed in via an external service. Stickers only right now.","params":[{"name":"picture","type":"object","required":true,"desc":"Painting/pixel payload."},{"name":"quantity","type":"number","required":false,"desc":"Requested print quantity."},{"name":"progress","type":"function","required":false,"desc":"Progress callback."}],"returns":"Promise<any>","done":true},"zip":{"sig":"zip(content, progress)","desc":"Create a zip file of the content. Auto-encodes paintings.","params":[{"name":"content","type":"object | array","required":true,"desc":"Files/content to include."},{"name":"progress","type":"function","required":false,"desc":"Progress callback."}],"returns":"Promise<Blob>","done":true},"motion.start":{"sig":"start()","desc":"Start tracking device motion.","returns":"Promise<void> | void","done":true},"motion.stop":{"sig":"stop()","desc":"Stop tracking device motion.","returns":"void","done":true},"motion.current":{"sig":"current","desc":"Populated with the device motion data upon `motion.start()`.","returns":"object | null","done":true},"speak":{"sig":"speak(utterance, voice, mode, opts)","desc":"Speak an `utterance` aloud.","params":[{"name":"utterance","type":"string","required":true,"desc":"Text to speak."},{"name":"voice","type":"string","required":false,"desc":"Voice id/preset."},{"name":"mode","type":"string","required":false,"desc":"Speech backend mode."},{"name":"opts","type":"object","required":false,"desc":"Optional speech options."}],"returns":"Promise<void> | void","done":true},"act":{"sig":"act(event, data)","desc":"Broadcast an `act` event through the system.","params":[{"name":"event","type":"string","required":true,"desc":"Event name."},{"name":"data","type":"any","required":false,"desc":"Optional payload."}],"returns":"void","done":true},"get.painting().by()":{"sig":"get.painting(code, opts).by(handle, opts)","desc":"Retrieve a painting from network storage.","returns":"Promise<object>","done":true},"upload":{"sig":"async upload(filename, data, progress, bucket)","desc":"Upload a media file to network storage.","params":[{"name":"filename","type":"string","required":true,"desc":"Destination filename."},{"name":"data","type":"Blob | Uint8Array | string","required":true,"desc":"File payload."},{"name":"progress","type":"function","required":false,"desc":"Progress callback."},{"name":"bucket","type":"string","required":false,"desc":"Target storage bucket."}],"returns":"Promise<object>","done":true},"code.channel":{"sig":"channel(chan)","desc":"Set the current code channel for live development.","params":[{"name":"chan","type":"string","required":true,"desc":"Channel name/id."}],"returns":"void","done":true},"encode":{"sig":"async encode(file)","desc":"File should be { type, data } where type is `png`, `webp`, or `jpg`, etc.","params":[{"name":"file","type":"object","required":true,"desc":"Encoder payload {type, data, ...}."}],"returns":"Promise<Blob | Uint8Array>","done":true},"file":{"sig":"async file()","desc":"Request a file from the user.","returns":"Promise<File | null>","done":true},"authorize":{"sig":"async authorize()","desc":"Authorize a user.","returns":"Promise<void>","done":true},"hand.mediapipe":{"sig":"mediapipe","desc":"A reference to the mediapipe hand tracking data. Enable through `video`.","returns":"object | null","done":true},"hud.label":{"sig":"label(text, color, offset)","desc":"Override the piece corner label.","params":[{"name":"text","type":"string","required":true,"desc":"Label text."},{"name":"color","type":"string | array","required":false,"desc":"Optional label color."},{"name":"offset","type":"number","required":false,"desc":"Optional offset/priority."}],"returns":"void","done":true},"hud.currentStatusColor":{"sig":"currentStatusColor()","desc":"Get the current connection status label color.","returns":"string | array","done":true},"hud.currentLabel":{"sig":"currentLabel()","desc":"Get the current label content and button.","returns":"object","done":true},"hud.labelBack":{"sig":"labelBack()","desc":"Jump to the `prompt` with the current label applied.","returns":"void","done":true},"send":{"sig":"send({type, content})","desc":"Send a message to the bios.","params":[{"name":"message","type":"object","required":true,"desc":"Message payload with `type` and optional `content`."}],"returns":"void","done":true},"platform":{"sig":"platform","desc":"Get the current host platform.","returns":"string","done":true},"history":{"sig":"history","desc":"An array of previously visited pieces in a session.","returns":"array","done":true},"bgm.set":{"sig":"set(trackNumber, volume)","desc":"Start a background music track, persisting across jumps.","params":[{"name":"trackNumber","type":"number | string","required":true,"desc":"Track id/index."},{"name":"volume","type":"number","required":false,"desc":"Playback gain."}],"returns":"void","done":true},"bgm.stop":{"sig":"stop()","desc":"Stop a background music track.","returns":"void","done":true},"bgm.data":{"sig":"data","desc":"Gets live analysis data from the current background track.","returns":"object | null","done":true},"system.world":{"sig":"system.world","desc":"A reference to the world system state if a piece is using it.","returns":"object | null","done":true},"system.nopaint":{"sig":"system.nopaint","desc":"A reference to the `nopaint` system state that all brushes use.","returns":"object","done":true},"flatten":{"sig":"flatten()","desc":"Paint (bake) all graphics commands immediately.","returns":"void","done":true},"connect":{"sig":"connect()","desc":"Connect with external wallet software.","returns":"Promise<void> | void","done":true},"wiggle":{"sig":"wiggle(n, level, speed)","desc":"Oscillate a value over time using a sine wave.","params":[{"name":"n","type":"number","required":true,"desc":"Base value."},{"name":"level","type":"number","required":false,"desc":"Amplitude."},{"name":"speed","type":"number","required":false,"desc":"Oscillation speed."}],"returns":"number","done":true},"dark":{"sig":"dark","desc":"Gets whether the system is in dark mode.","returns":"boolean","done":true},"darkMode":{"sig":"darkMode(enabled)","desc":"Toggle dark mode on or off with a boolean.","params":[{"name":"enabled","type":"boolean","required":true,"desc":"Target dark mode state."}],"returns":"void","done":true},"gpuReady":{"sig":"gpuReady","desc":"Whether the system GPU is ready for rendering.","returns":"boolean","done":true},"gpu.message":{"sig":"message(content)","desc":"Send a message to the GPU driver.","params":[{"name":"content","type":"object","required":true,"desc":"Driver command payload."}],"returns":"void","done":true}},"mjs":{"overview":{"sig":"MJS / AC piece API overview","desc":"Entry point for JavaScript piece API docs.","body":"<p>\n      This lane documents the JavaScript piece API for <code>.mjs</code> pieces on AC.\n      It is the runtime-facing reference for functions used in <code>boot/paint/act/sim/beat</code>.\n    </p>\n    <p>\n      Start with <a href=\"https://aesthetic.computer/docs/structure:paint\">paint()</a>,\n      then browse <a href=\"https://aesthetic.computer/docs/graphics:line\">graphics</a>,\n      <a href=\"https://aesthetic.computer/docs/interaction:pen\">interaction</a>,\n      and <a href=\"https://aesthetic.computer/docs/system:reload\">system</a>.\n    </p>","done":true}},"kidlisp":{"overview":{"sig":"KidLisp API overview","desc":"How KidLisp docs connect into the unified AC docs system.","body":"<p>\n      KidLisp docs are part of the unified platform docs program and currently use\n      <a href=\"https://learn.kidlisp.com\" target=\"_blank\" rel=\"noopener\">learn.kidlisp.com</a>\n      as the canonical public reference.\n    </p>\n    <p>\n      Use this section for cross-links between AC platform APIs and KidLisp language APIs.\n      Long-term source convergence is tracked in <code>/plans/docs-js-lua-overhaul-hitlist.md</code>.\n    </p>\n    <p>\n      <a href=\"https://learn.kidlisp.com/?tab=reference\" target=\"_blank\" rel=\"noopener\">Open full KidLisp reference</a> ·\n      <a href=\"https://learn.kidlisp.com/?tab=functions\" target=\"_blank\" rel=\"noopener\">Open popularity/function view</a>\n    </p>","done":true},"core":{"sig":"KidLisp core map","desc":"Core families and canonical source links for KidLisp APIs.","body":"<table>\n      <thead>\n        <tr>\n          <th>Family</th>\n          <th>Examples</th>\n          <th>Canonical source</th>\n        </tr>\n      </thead>\n      <tbody>\n        <tr>\n          <td>Drawing</td>\n          <td><code>wipe</code>, <code>ink</code>, <code>line</code>, <code>box</code>, <code>circle</code></td>\n          <td><a href=\"https://learn.kidlisp.com/?tab=reference\" target=\"_blank\" rel=\"noopener\">learn.kidlisp.com reference tab</a></td>\n        </tr>\n        <tr>\n          <td>Transform</td>\n          <td><code>scroll</code>, <code>zoom</code>, <code>spin</code>, <code>blur</code>, <code>bake</code></td>\n          <td><a href=\"https://learn.kidlisp.com/?id=scroll\" target=\"_blank\" rel=\"noopener\">Identifier detail pages</a></td>\n        </tr>\n        <tr>\n          <td>Control + Math</td>\n          <td><code>def</code>, <code>later</code>, <code>once</code>, <code>repeat</code>, <code>random</code></td>\n          <td><a href=\"https://learn.kidlisp.com/?id=def\" target=\"_blank\" rel=\"noopener\">Learn identifiers</a></td>\n        </tr>\n      </tbody>\n    </table>","done":true}},"l5":{"overview":{"sig":"L5 (Lua) on Aesthetic Computer","desc":"Processing-style Lua compatibility notes and rollout status.","body":"<p>\n              This is the implementation board for L5 support in AC.\n              Keep this page aligned with the actual runtime state.\n            </p>\n            <p>\n              <a href=\"https://aesthetic.computer/docs/l5:checklist\">Open checklist</a> ·\n              <a href=\"https://aesthetic.computer/docs/l5:examples\">Open examples</a> ·\n              <a href=\"https://aesthetic.computer/l5\">Open /l5 try page</a>\n            </p>","done":true},"checklist":{"sig":"L5 compatibility checklist (v0)","desc":"Single source of truth for what is implemented right now.","body":"<p>\n      This board tracks what is actually implemented, not intended parity.\n      Update statuses as work lands.\n    </p>\n    <table>\n      <thead>\n        <tr>\n          <th>Area</th>\n          <th>Status</th>\n          <th>Notes</th>\n        </tr>\n      </thead>\n      <tbody>\n        \n              <tr>\n                <td>Docs checklist + /l5 try page</td>\n                <td><span class=\"status-badge status-done\">done</span></td>\n                <td>This docs section and /l5 landing page exist.</td>\n              </tr>\n            \n              <tr>\n                <td>Lua source detection (.lua) in loader</td>\n                <td><span class=\"status-badge status-done\">done</span></td>\n                <td>disk + parse support .lua, including .mjs -> .lua -> .lisp fallback.</td>\n              </tr>\n            \n              <tr>\n                <td>Lua runtime adapter (Wasmoon)</td>\n                <td><span class=\"status-badge status-done\">done</span></td>\n                <td>Wasmoon runtime is vendored and wired through lib/l5.mjs.</td>\n              </tr>\n            \n              <tr>\n                <td>L5 lifecycle bridge (setup/draw/events)</td>\n                <td><span class=\"status-badge status-in-progress\">in progress</span></td>\n                <td>setup/draw + key/mouse callbacks are mapped; advanced callbacks remain.</td>\n              </tr>\n            \n              <tr>\n                <td>Core graphics API parity</td>\n                <td><span class=\"status-badge status-in-progress\">in progress</span></td>\n                <td>background/fill/stroke/line/rect/circle/ellipse/text/triangle/quad mapped.</td>\n              </tr>\n            \n              <tr>\n                <td>Input globals (mouse/key/frame)</td>\n                <td><span class=\"status-badge status-in-progress\">in progress</span></td>\n                <td>mouse/key/frame globals are injected each frame; parity is still incomplete.</td>\n              </tr>\n            \n              <tr>\n                <td>Publish .lua pieces</td>\n                <td><span class=\"status-badge status-done\">done</span></td>\n                <td>Upload + media tracking now accept lua extension.</td>\n              </tr>\n            \n              <tr>\n                <td>Trust/restricted API posture for Lua</td>\n                <td><span class=\"status-badge status-done\">done</span></td>\n                <td>Lua pieces use trustLevel=l5 and run through restricted API policy.</td>\n              </tr>\n            \n      </tbody>\n    </table>\n    <p><strong>Status date:</strong> 2026-02-26</p>","done":true},"lifecycle":{"sig":"L5 lifecycle bridge","desc":"How setup/draw/events map onto AC piece lifecycle hooks.","body":"<table>\n      <thead>\n        <tr>\n          <th>L5 callback</th>\n          <th>AC bridge</th>\n          <th>Status</th>\n        </tr>\n      </thead>\n      <tbody>\n        <tr><td><code>setup()</code></td><td><code>boot($)</code></td><td><span class=\"status-badge status-done\">done</span></td></tr>\n        <tr><td><code>draw()</code></td><td><code>paint($)</code></td><td><span class=\"status-badge status-done\">done</span></td></tr>\n        <tr><td><code>keyPressed()</code></td><td><code>act($)</code> keyboard events</td><td><span class=\"status-badge status-done\">done</span></td></tr>\n        <tr><td><code>mousePressed()</code></td><td><code>act($)</code> pen/touch events</td><td><span class=\"status-badge status-done\">done</span></td></tr>\n      </tbody>\n    </table>","done":"in-progress"},"graphics":{"sig":"L5 graphics mapping","desc":"Core drawing calls and their AC equivalents.","body":"<table>\n      <thead>\n        <tr>\n          <th>L5 API</th>\n          <th>AC target</th>\n          <th>Status</th>\n        </tr>\n      </thead>\n      <tbody>\n        <tr><td><code>background()</code></td><td><code>$.wipe()</code></td><td><span class=\"status-badge status-done\">done</span></td></tr>\n        <tr><td><code>fill()</code>/<code>stroke()</code></td><td>state + <code>$.ink()</code></td><td><span class=\"status-badge status-done\">done</span></td></tr>\n        <tr><td><code>line()</code>/<code>point()</code></td><td><code>$.line()</code>/<code>$.plot()</code></td><td><span class=\"status-badge status-done\">done</span></td></tr>\n        <tr><td><code>rect()</code>/<code>circle()</code>/<code>ellipse()</code></td><td><code>$.box()</code>/<code>$.circle()</code>/<code>$.oval()</code></td><td><span class=\"status-badge status-done\">done</span></td></tr>\n        <tr><td><code>beginShape()</code>…</td><td><code>$.shape()</code>/<code>$.poly()</code></td><td><span class=\"status-badge status-planned\">planned</span></td></tr>\n      </tbody>\n    </table>","done":"in-progress"},"input":{"sig":"L5 input globals","desc":"Frame-updated globals expected by Processing-style sketches.","body":"<table>\n      <thead>\n        <tr>\n          <th>L5 global</th>\n          <th>Source in AC</th>\n          <th>Status</th>\n        </tr>\n      </thead>\n      <tbody>\n        <tr><td><code>mouseX</code>/<code>mouseY</code></td><td><code>$.pen.x</code>/<code>$.pen.y</code></td><td><span class=\"status-badge status-done\">done</span></td></tr>\n        <tr><td><code>mouseIsPressed</code></td><td><code>$.pen.drawing</code></td><td><span class=\"status-badge status-done\">done</span></td></tr>\n        <tr><td><code>width</code>/<code>height</code></td><td><code>$.screen.width</code>/<code>$.screen.height</code></td><td><span class=\"status-badge status-done\">done</span></td></tr>\n        <tr><td><code>frameCount</code></td><td>runtime counter</td><td><span class=\"status-badge status-done\">done</span></td></tr>\n      </tbody>\n    </table>","done":"in-progress"},"unsupported":{"sig":"Known gaps / out of scope (v1)","desc":"Features explicitly not shipped yet.","body":"<ul>\n      <li><code>rotate()</code> and <code>scale()</code> require matrix transform support.</li>\n      <li><code>bezier()</code> and curve families are not mapped in v1 scope.</li>\n      <li>File/video APIs and full Processing IO are out of scope for initial launch.</li>\n      <li>Do not claim full L5 parity until checklist items move to <em>done</em>.</li>\n    </ul>","done":true},"examples":{"sig":"L5 example snippets","desc":"Starter Lua examples for the upcoming runtime.","body":"<p>Use these as starter snippets. Runtime wiring exists; API coverage is still partial.</p>\n    <div class=\"doc-examples\">\n      <article class=\"doc-example\">\n        <h3>Pulse Circle</h3>\n        <pre><code class=\"language-lua\">function setup()\n  size(256, 256)\nend\n\nfunction draw()\n  background(12, 12, 18)\n  local r = 40 + math.sin(frameCount * 0.05) * 20\n  fill(255, 120, 80)\n  circle(width / 2, height / 2, r * 2)\nend</code></pre>\n      </article>\n      <article class=\"doc-example\">\n        <h3>Mouse Dots</h3>\n        <pre><code class=\"language-lua\">function setup()\n  background(255)\nend\n\nfunction draw()\n  if mouseIsPressed then\n    fill(30, 30, 30)\n    circle(mouseX, mouseY, 10)\n  end\nend</code></pre>\n      </article>\n    </div>\n    <p>\n      <a href=\"https://aesthetic.computer/l5\">Open the L5 try page</a> ·\n      <a href=\"https://aesthetic.computer/prompt\">Open prompt</a>\n    </p>","done":true},"size":{"sig":"size(width, height?)","desc":"Set sketch resolution by forwarding to AC `resolution()`.","params":[{"name":"width","type":"number","required":true,"desc":"Target width."},{"name":"height","type":"number","required":false,"desc":"Target height (defaults to width)."}],"returns":"void","done":true},"background":{"sig":"background(r, g, b, a?)","desc":"Clear frame with a solid color.","returns":"void","done":true},"clear":{"sig":"clear()","desc":"Clear frame to transparent black.","returns":"void","done":true},"fill":{"sig":"fill(r, g, b, a?)","desc":"Set fill color for subsequent shape and text draws.","returns":"void","done":true},"noFill":{"sig":"noFill()","desc":"Disable shape fill rendering.","returns":"void","done":true},"stroke":{"sig":"stroke(r, g, b, a?)","desc":"Set stroke color for line/outline rendering.","returns":"void","done":true},"noStroke":{"sig":"noStroke()","desc":"Disable stroke rendering.","returns":"void","done":true},"strokeWeight":{"sig":"strokeWeight(weight)","desc":"Set line/outline thickness.","params":[{"name":"weight","type":"number","required":true,"desc":"Stroke width in pixels."}],"returns":"void","done":true},"point":{"sig":"point(x, y)","desc":"Plot a single point using stroke color if stroke is enabled.","returns":"void","done":true},"line":{"sig":"line(x1, y1, x2, y2)","desc":"Draw a line using stroke color.","returns":"void","done":true},"rect":{"sig":"rect(x, y, width, height)","desc":"Draw a rectangle with active fill/stroke state.","returns":"void","done":true},"square":{"sig":"square(x, y, size)","desc":"Draw a square with active fill/stroke state.","returns":"void","done":true},"circle":{"sig":"circle(x, y, diameter)","desc":"Draw a circle with active fill/stroke state.","returns":"void","done":true},"ellipse":{"sig":"ellipse(x, y, width, height)","desc":"Draw an ellipse with active fill/stroke state.","returns":"void","done":true},"triangle":{"sig":"triangle(x1, y1, x2, y2, x3, y3)","desc":"Draw a triangle with active fill/stroke state.","returns":"void","done":true},"quad":{"sig":"quad(x1, y1, x2, y2, x3, y3, x4, y4)","desc":"Draw a quadrilateral with active fill/stroke state.","returns":"void","done":true},"text":{"sig":"text(value, x, y)","desc":"Draw text at coordinates using fill color.","returns":"void","done":true},"textSize":{"sig":"textSize(size)","desc":"Set text size scale for subsequent `text()` draws.","params":[{"name":"size","type":"number","required":true,"desc":"Text size value."}],"returns":"void","done":true},"textWidth":{"sig":"textWidth(value)","desc":"Measure text width in pixels.","returns":"number","done":true},"frameRate":{"sig":"frameRate(fps)","desc":"Request a target frame rate for draw calls.","params":[{"name":"fps","type":"number","required":true,"desc":"Target frames per second."}],"returns":"void","done":true},"noLoop":{"sig":"noLoop()","desc":"Stop continuous draw execution.","returns":"void","done":true},"loop":{"sig":"loop()","desc":"Resume continuous draw execution.","returns":"void","done":true},"isLooping":{"sig":"isLooping()","desc":"Get whether draw loop is active.","returns":"boolean","done":true},"redraw":{"sig":"redraw()","desc":"Request a one-off draw when loop is disabled.","returns":"void","done":true},"random":{"sig":"random(max?) or random(min, max)","desc":"Generate a random number with optional range.","returns":"number","done":true},"map":{"sig":"map(value, inMin, inMax, outMin, outMax)","desc":"Remap a value from one range to another.","returns":"number","done":true},"dist":{"sig":"dist(x1, y1, x2, y2)","desc":"Calculate Euclidean distance between two points.","returns":"number","done":true},"lerp":{"sig":"lerp(start, stop, amount)","desc":"Linear interpolate between two values.","returns":"number","done":true},"radians":{"sig":"radians(degrees)","desc":"Convert degrees to radians.","returns":"number","done":true},"degrees":{"sig":"degrees(radians)","desc":"Convert radians to degrees.","returns":"number","done":true},"constrain":{"sig":"constrain(value, min, max)","desc":"Clamp a value into a minimum/maximum range.","returns":"number","done":true},"millis":{"sig":"millis()","desc":"Get elapsed runtime milliseconds.","returns":"number","done":true},"frameCount":{"sig":"frameCount","desc":"Number of draw frames processed so far.","returns":"number","done":true},"width":{"sig":"width","desc":"Current sketch width in pixels.","returns":"number","done":true},"height":{"sig":"height","desc":"Current sketch height in pixels.","returns":"number","done":true},"mouseX":{"sig":"mouseX","desc":"Current pointer X coordinate.","returns":"number","done":true},"mouseY":{"sig":"mouseY","desc":"Current pointer Y coordinate.","returns":"number","done":true},"pmouseX":{"sig":"pmouseX","desc":"Previous frame pointer X coordinate.","returns":"number","done":true},"pmouseY":{"sig":"pmouseY","desc":"Previous frame pointer Y coordinate.","returns":"number","done":true},"mouseIsPressed":{"sig":"mouseIsPressed","desc":"Whether pointer is currently pressed.","returns":"boolean","done":true},"key":{"sig":"key","desc":"Last key value from keyboard events.","returns":"string","done":true},"keyCode":{"sig":"keyCode","desc":"Last key code value from keyboard events.","returns":"number","done":true},"keyIsPressed":{"sig":"keyIsPressed","desc":"Whether a key is currently pressed.","returns":"boolean","done":true}},"processing":{"overview":{"sig":"Processing (Java) on Aesthetic Computer","desc":"Early Processing-style Java support via transpile bridge to the L5 Lua runtime.","body":"<p>\n              This lane tracks the Processing v0 bridge, where Java-style Processing code\n              is transpiled into Lua for AC's L5 runtime.\n            </p>\n            <p>\n              <a href=\"https://aesthetic.computer/docs/processing:checklist\">Open checklist</a> ·\n              <a href=\"https://aesthetic.computer/docs/processing:syntax\">Open syntax notes</a> ·\n              <a href=\"https://aesthetic.computer/processing\">Open /processing try page</a>\n            </p>","done":true},"checklist":{"sig":"Processing compatibility checklist (v0)","desc":"Current integration scope and readiness checkpoints.","body":"<p>\n      This board tracks current Processing-on-AC integration scope.\n      Keep statuses synced with runtime behavior.\n    </p>\n    <table>\n      <thead>\n        <tr>\n          <th>Area</th>\n          <th>Status</th>\n          <th>Notes</th>\n        </tr>\n      </thead>\n      <tbody>\n        \n              <tr>\n                <td>Docs checklist + /processing try page</td>\n                <td><span class=\"status-badge status-done\">done</span></td>\n                <td>Processing lane docs and /processing route are live.</td>\n              </tr>\n            \n              <tr>\n                <td>Shared try-page architecture reuse</td>\n                <td><span class=\"status-badge status-done\">done</span></td>\n                <td>Processing page is configured via shared try-page client module.</td>\n              </tr>\n            \n              <tr>\n                <td>Processing (Java) -> Lua transpile bridge</td>\n                <td><span class=\"status-badge status-in-progress\">in progress</span></td>\n                <td>v0 transpiler supports callbacks, typed vars, if/while, numeric for loops, and operators.</td>\n              </tr>\n            \n              <tr>\n                <td>Runtime parity with Processing reference</td>\n                <td><span class=\"status-badge status-planned\">planned</span></td>\n                <td>Only a subset of Processing syntax and APIs are mapped in v0.</td>\n              </tr>\n            \n      </tbody>\n    </table>\n    <p><strong>Status date:</strong> 2026-02-28</p>","done":"in-progress"},"lifecycle":{"sig":"Processing lifecycle bridge","desc":"How setup/draw/events map from Processing Java syntax to L5 callbacks.","body":"<table>\n      <thead>\n        <tr>\n          <th>Processing callback</th>\n          <th>Runtime target</th>\n          <th>Status</th>\n        </tr>\n      </thead>\n      <tbody>\n        <tr><td><code>void setup()</code></td><td><code>function setup()</code> in L5 runtime</td><td><span class=\"status-badge status-done\">done</span></td></tr>\n        <tr><td><code>void draw()</code></td><td><code>function draw()</code> in L5 runtime</td><td><span class=\"status-badge status-done\">done</span></td></tr>\n        <tr><td><code>void mousePressed()</code>/<code>void keyPressed()</code></td><td>Mapped directly to L5 event callbacks</td><td><span class=\"status-badge status-done\">done</span></td></tr>\n      </tbody>\n    </table>","done":"in-progress"},"syntax":{"sig":"Processing syntax transpile rules (v0)","desc":"What Java-like syntax the bridge currently rewrites.","body":"<ul>\n      <li><code>void setup()</code>, <code>void draw()</code>, and common event callbacks are transpiled.</li>\n      <li>Typed declarations such as <code>int</code>, <code>float</code>, and <code>boolean</code> become Lua locals.</li>\n      <li><code>if/else</code>, <code>while</code>, and numeric <code>for</code> loops are translated to Lua block syntax.</li>\n      <li>Operators like <code>!=</code>, <code>&amp;&amp;</code>, and <code>||</code> are rewritten to Lua equivalents.</li>\n      <li>Math helpers like <code>sin()</code> and <code>cos()</code> map to <code>math.sin()</code> and <code>math.cos()</code>.</li>\n    </ul>","done":"in-progress"},"unsupported":{"sig":"Processing v0 known gaps","desc":"Features intentionally excluded in the first bridge release.","body":"<ul>\n      <li>Class declarations, custom object types, and overloaded methods are out of scope for v0.</li>\n      <li>Complex Java generics/arrays and Processing Java-mode library imports are not supported yet.</li>\n      <li>Only syntax that can safely transpile to L5 runtime callbacks is currently targeted.</li>\n    </ul>","done":true},"examples":{"sig":"Processing v0 examples","desc":"Starter snippets for the Processing page.","body":"<p>Starter snippets for the Processing v0 transpile bridge.</p>\n    <div class=\"doc-examples\">\n      <article class=\"doc-example\">\n        <h3>Pulse Circle</h3>\n        <pre><code class=\"language-java\">void setup() {\n  size(256, 256);\n}\n\nvoid draw() {\n  background(12, 12, 18);\n  float r = 40 + sin(frameCount * 0.05) * 20;\n  fill(255, 120, 80);\n  circle(width / 2, height / 2, r * 2);\n}</code></pre>\n      </article>\n      <article class=\"doc-example\">\n        <h3>Mouse Dots</h3>\n        <pre><code class=\"language-java\">void setup() {\n  background(255);\n}\n\nvoid draw() {\n  if (mouseIsPressed) {\n    fill(20, 20, 20);\n    circle(mouseX, mouseY, 10);\n  }\n}</code></pre>\n      </article>\n    </div>\n    <p>\n      <a href=\"https://aesthetic.computer/processing\">Open the Processing try page</a> ·\n      <a href=\"https://aesthetic.computer/docs/processing:syntax\">Open syntax notes</a>\n    </p>","done":true},"setup":{"sig":"void setup()","desc":"Called once at startup. Transpiles to `function setup()`.","returns":"void","done":true},"draw":{"sig":"void draw()","desc":"Called every frame. Transpiles to `function draw()`.","returns":"void","done":true},"size":{"sig":"size(width, height)","desc":"Set sketch resolution in Processing syntax.","returns":"void","done":true},"background":{"sig":"background(r, g, b, a?)","desc":"Clear frame with a color.","returns":"void","done":true},"fill":{"sig":"fill(r, g, b, a?)","desc":"Set fill color for subsequent shapes and text.","returns":"void","done":true},"stroke":{"sig":"stroke(r, g, b, a?)","desc":"Set stroke color for lines/outlines.","returns":"void","done":true},"line":{"sig":"line(x1, y1, x2, y2)","desc":"Draw a line primitive.","returns":"void","done":true},"rect":{"sig":"rect(x, y, width, height)","desc":"Draw a rectangle primitive.","returns":"void","done":true},"circle":{"sig":"circle(x, y, diameter)","desc":"Draw a circle primitive.","returns":"void","done":true},"mousePressed":{"sig":"void mousePressed()","desc":"Pointer-down callback mapped to L5 event hook.","returns":"void","done":true}}},"prompts":{"2022":{"sig":"2022","desc":"Run the 2022 prompt command.","done":false,"hidden":true},"pack":{"sig":"pack <piece>","desc":"Download a piece as a self-contained HTML file.","params":[{"name":"piece","type":"string","required":true,"desc":"Piece name or $code"}],"done":true},"bundle":{"sig":"bundle <piece>","desc":"Download a piece as a self-contained HTML file.","params":[{"name":"piece","type":"string","required":true,"desc":"Piece name or $code"}],"done":true},"m4d":{"sig":"m4d <piece>","desc":"Download a piece as an offline Max for Live device (.amxd).","params":[{"name":"piece","type":"string","required":true,"desc":"Piece name or $code"}],"done":true},"4d":{"sig":"4d <piece>","desc":"Download a piece as an offline Max for Live device (.amxd).","params":[{"name":"piece","type":"string","required":true,"desc":"Piece name or $code"}],"done":true},"m4do":{"sig":"m4do <piece>","desc":"Download a piece as an online Max for Live device (.amxd) that streams from aesthetic.computer.","params":[{"name":"piece","type":"string","required":true,"desc":"Piece name"}],"done":true},"4do":{"sig":"4do <piece>","desc":"Download a piece as an online Max for Live device (.amxd) that streams from aesthetic.computer.","params":[{"name":"piece","type":"string","required":true,"desc":"Piece name"}],"done":true},"tezos":{"sig":"tezos <action> [network]","desc":"Manage Tezos wallet.","params":[{"name":"action","type":"enum","values":["connect","disconnect","status"],"required":true},{"name":"network","type":"enum","values":["ghostnet","mainnet"],"required":false,"default":"ghostnet"}],"done":true},"keep":{"sig":"keep $code","desc":"Keep $code in your wallet.","params":[{"name":"code","type":"string","prefix":"$","required":true,"desc":"KidLisp piece code"}],"done":true},"tape":{"sig":"tape [duration] [flags]","desc":"Record your screen.","params":[{"name":"duration","type":"number","required":false,"default":5,"desc":"Seconds (add 'f' for frames)"},{"name":"flags","type":"flags","values":["mic","nomic","baktok"],"required":false}],"done":true},"tape:add":{"sig":"tape:add","desc":"Add time to your tape.","done":false,"hidden":true},"tape:tt":{"sig":"tape:tt","desc":"Start recording a tape","done":false,"hidden":true},"tape:nomic":{"sig":"tape:nomic","desc":"Start recording a tape","done":false,"hidden":true},"tape:mic":{"sig":"tape:mic","desc":"Start recording a tape","done":false,"hidden":true},"tapem":{"sig":"tapem","desc":"Run the tapem prompt command.","done":false,"hidden":true},"tape:cut":{"sig":"tape:cut","desc":"Stop recording and save tape","done":false,"hidden":true},"cut":{"sig":"cut","desc":"Stop the active tape recording and finalize the clip.","examples":["cut","tape:cut"],"returns":"void","done":true},"me":{"sig":"me","desc":"Open your profile.","examples":["me"],"returns":"void","done":true},"scream":{"sig":"scream <message>","desc":"Scream at all users.","params":[{"name":"message","type":"string","required":true,"desc":"Your scream text"}],"done":true},"nonotifs":{"sig":"nonotifs","desc":"Turn off notifications.","examples":["nonotifs"],"returns":"void","done":true},"notifs":{"sig":"notifs","desc":"Turn on notifications.","examples":["notifs"],"returns":"void","done":true},"news":{"sig":"news","desc":"Aesthetic.computer news.","done":true},"papers":{"sig":"papers","desc":"Open papers.aesthetic.computer.","done":true},"deadlines":{"sig":"deadlines","desc":"Open papers conference & grant deadlines.","url":"https://papers.aesthetic.computer/deadlines","done":true},"nela":{"sig":"nela","desc":"Open NELA Computer Club.","done":true},"selfie":{"sig":"selfie","desc":"Open the front camera.","done":false},"cam":{"sig":"cam","desc":"Take a picture.","done":false},"camu":{"sig":"camu","desc":"Camera utilities","done":false,"hidden":true},"sparkle":{"sig":"sparkle","desc":"Paint with Maya's really fun brush.","done":false},"painting:start":{"sig":"painting:start","desc":"Start a new painting","done":false,"hidden":true},"print":{"sig":"print","desc":"Open the print flow for the current painting.","examples":["print"],"returns":"void","done":true},"mint":{"sig":"mint","desc":"Open mint flow for the current painting.","examples":["mint"],"returns":"void","done":true},"painting:done":{"sig":"painting:done","desc":"Finish current painting","done":false,"hidden":true},"yes!":{"sig":"yes!","desc":"Finish your painting.","examples":["yes!"],"returns":"void","done":true},"done":{"sig":"done","desc":"Finish and confirm your painting.","examples":["done"],"returns":"void","done":true},"flower":{"sig":"flower","desc":"He loves me.","done":false,"hidden":true},"petal":{"sig":"petal","desc":"He loves me not.","done":false,"hidden":true},"bro":{"sig":"bro","desc":"Stay out of his room.","done":false},"sis":{"sig":"sis","desc":"Don't steal her makeup.","done":false},"gf":{"sig":"gf","desc":"Caring confidant.","done":false},"bf":{"sig":"bf","desc":"He might care.","done":false},"bb":{"sig":"bb","desc":"AC fundraiser.","done":false},"p":{"sig":"p","desc":"View your current painting's steps.","done":false},"pain":{"sig":"pain","desc":"View your current painting's steps.","done":false},"load":{"sig":"load","desc":"Run the load prompt command.","done":false,"hidden":true},"mood:nuke":{"sig":"mood:nuke","desc":"Run the mood:nuke prompt command.","done":false,"hidden":true},"mood:denuke":{"sig":"mood:denuke","desc":"Run the mood:denuke prompt command.","done":false,"hidden":true},"mood":{"sig":"mood [emoji]","desc":"Set your mood.","params":[{"name":"emoji","type":"string","required":false,"desc":"Emoji or text mood"}],"done":true},"channel":{"sig":"channel [name]","desc":"View or set a piece code channel.","params":[{"name":"name","type":"string","required":false,"desc":"Channel name to join"}],"done":true},"code-channel":{"sig":"code-channel","desc":"Run the code channel prompt command.","done":false,"hidden":true},"run":{"sig":"run","desc":"Run the run prompt command.","done":false,"hidden":true},"docs":{"sig":"docs","desc":"Aesthetic Computer Documentation.","examples":["docs","l5docs","processingdocs","l5","processing"],"returns":"void","done":true},"l5docs":{"sig":"l5docs","desc":"Open the L5 compatibility docs checklist.","done":true},"processingdocs":{"sig":"processingdocs","desc":"Open the Processing compatibility docs checklist.","done":true},"l5":{"sig":"l5","desc":"Open the L5 try page.","done":true},"l5learn":{"sig":"l5learn","desc":"Open the L5 try page.","done":true},"processing":{"sig":"processing","desc":"Open the Processing try page.","done":true},"processinglearn":{"sig":"processinglearn","desc":"Open the Processing try page.","done":true},"code":{"sig":"code [name]","desc":"Write a piece.","params":[{"name":"name","type":"string","required":false,"desc":"Piece name (creates new)"}],"done":true},"edit":{"sig":"edit <piece>","desc":"Edit a piece.","params":[{"name":"piece","type":"string","required":true,"desc":"Piece name to edit"}],"done":true},"source":{"sig":"source [piece]","desc":"Download piece code.","params":[{"name":"piece","type":"string","required":false,"desc":"Piece name (or current)"}],"done":true},"email":{"sig":"email <address>","desc":"Update your email.","params":[{"name":"address","type":"email","required":true,"desc":"New email address"}],"done":true,"hidden":false},"admin:migrate-":{"sig":"admin:migrate-","desc":"Run the admin:migrate prompt command.","done":false,"hidden":true},"handle":{"sig":"handle <name>","desc":"Set your user handle.","params":[{"name":"name","type":"string","required":true,"desc":"New handle (alphanumeric)"}],"done":true},"handles":{"sig":"handles","desc":"Browse all user handles.","done":true},"ul":{"sig":"ul","desc":"Alias for `upload`.","examples":["ul"],"returns":"void","done":true},"upload":{"sig":"upload","desc":"Upload your current painting/media.","examples":["upload"],"returns":"void","done":true},"flip":{"sig":"flip","desc":"Flip painting vertically.","examples":["flip"],"returns":"void","done":true},"flop":{"sig":"flop","desc":"Flop painting horizontally.","examples":["flop"],"returns":"void","done":true},"right":{"sig":"right","desc":"Rotate painting right.","examples":["right"],"returns":"void","done":true},"left":{"sig":"left","desc":"Rotate painting left.","examples":["left"],"returns":"void","done":true},"resize":{"sig":"resize <w> [h]","desc":"Resize by x and y pixel #s.","params":[{"name":"w","type":"number","required":true,"desc":"Width in pixels"},{"name":"h","type":"number","required":false,"desc":"Height (defaults to w)"}],"done":true},"res":{"sig":"res <w> [h]","desc":"Resize by x and y pixel #s.","params":[{"name":"w","type":"number","required":true,"desc":"Width in pixels"},{"name":"h","type":"number","required":false,"desc":"Height (defaults to w)"}],"done":true},"dl":{"sig":"dl [scale]","desc":"Download your painting.","params":[{"name":"scale","type":"number","required":false,"default":1,"desc":"Scale multiplier"}],"done":true},"download":{"sig":"download [scale]","desc":"Download your painting.","params":[{"name":"scale","type":"number","required":false,"default":1,"desc":"Scale multiplier"}],"done":true},"gutter":{"sig":"gutter","desc":"Run the gutter prompt command.","done":false,"hidden":true},"login":{"sig":"login","desc":"Log in.","examples":["login","hi"],"returns":"void","done":true},"hi":{"sig":"hi","desc":"Log in.","done":false},"signup":{"sig":"signup","desc":"Sign up.","examples":["signup","imnew"],"returns":"void","done":true},"imnew":{"sig":"imnew","desc":"Alias for sign up.","examples":["imnew"],"returns":"void","done":true},"logout":{"sig":"logout","desc":"Log out.","examples":["logout"],"returns":"void","done":true},"bye":{"sig":"bye","desc":"Leave a bot / character or log out.","done":false},"no":{"sig":"no","desc":"Undo painting step.","examples":["no"],"returns":"void","done":true},"yes":{"sig":"yes","desc":"Redo painting step.","examples":["yes"],"returns":"void","done":true},"nopan":{"sig":"nopan","desc":"Center your painting.","examples":["nopan"],"returns":"void","done":true},"new":{"sig":"new","desc":"Start a new painting.","examples":["new"],"returns":"void","done":true},"painting:reset":{"sig":"painting:reset","desc":"Open painting viewer","done":false,"hidden":true},"publish":{"sig":"publish","desc":"Publish your last-run piece.","examples":["publish"],"returns":"void","done":true},"no!":{"sig":"no!","desc":"Abandon your painting.","done":false},"3ine:reset":{"sig":"3ine:reset","desc":"Run the 3ine:reset prompt command.","done":false,"hidden":true},"dark":{"sig":"dark","desc":"Enable dark system theme.","examples":["dark"],"returns":"void","done":true},"light":{"sig":"light","desc":"Enable light system theme.","examples":["light"],"returns":"void","done":true},"serious":{"sig":"serious","desc":"Toggle minimal black & white prompt.","done":false},"stop":{"sig":"stop","desc":"Stop a running merry pipeline.","done":false},"mug":{"sig":"mug [code] [color]","desc":"Preview & order a mug with a painting.","params":[{"name":"code","type":"string","required":false,"desc":"Painting code"},{"name":"color","type":"string","required":false,"desc":"Mug color (white, black, blue, pink, orange)"}],"done":true},"merry":{"sig":"merry [duration-]piece ...","desc":"Run pieces in sequence.","params":[{"name":"pieces","type":"string","required":true,"desc":"Pieces to chain, optionally with duration prefix"}],"done":true},"merryo":{"sig":"merryo [duration-]piece ...","desc":"Run pieces in a loop.","params":[{"name":"pieces","type":"string","required":true,"desc":"Pieces to chain and loop"}],"done":true},"mo":{"sig":"mo[.duration] piece ...","desc":"Shorthand for merryo (looping merry).","done":true},"desktop":{"sig":"desktop","desc":"Download the desktop app.","done":false},"chatgpt":{"sig":"chatgpt","desc":"Open ChatGPT.","done":false,"hidden":true},"nws":{"sig":"nws","desc":"Open Aesthetic News.","done":false,"hidden":true},"product":{"sig":"product [key]","desc":"Switch or view active shop product.","done":false,"hidden":true},"connect":{"sig":"connect","desc":"Run the connect prompt command.","done":false,"hidden":true},"bgm stop":{"sig":"bgm stop","desc":"Background music controls","done":false,"hidden":true},"+":{"sig":"+","desc":"Make new window.","done":false},"google":{"sig":"google <query>","desc":"Search google.","params":[{"name":"query","type":"string","required":true,"desc":"Search query"}],"done":true},"github":{"sig":"github","desc":"View AC source code.","done":false},"gmail":{"sig":"gmail","desc":"Go to gmail.","done":false},"gh":{"sig":"gh","desc":"View AC source code.","done":false},"score":{"sig":"score","desc":"Open the Aesthetic Computer score.","done":false},"ucla":{"sig":"ucla-syllabus","desc":"UCLA DESMA 28 - Syllabus","done":false},"ucla-1":{"sig":"ucla-1","desc":"UCLA DESMA 28 - Piece 1","done":false},"ucla-2":{"sig":"ucla-2","desc":"UCLA DESMA 28 - Piece 2","done":false},"ucla-3":{"sig":"ucla-3","desc":"UCLA DESMA 28 - Piece 3","done":false},"ucla-4":{"sig":"ucla-4","desc":"UCLA DESMA 28 - Piece 4","done":false},"ucla-4-box":{"sig":"ucla-4-box","desc":"UCLA DESMA 28 - Piece 4 (Box)","done":false},"ucla-5":{"sig":"ucla-5","desc":"UCLA DESMA 28 - Piece 5","done":false},"ucla-6":{"sig":"ucla-6","desc":"UCLA DESMA 28 - Piece 6","done":false},"ucla-7":{"sig":"ucla-7","desc":"UCLA DESMA 28 - Piece 7","done":false},"ucla-7-dial":{"sig":"ucla-7-dial","desc":"UCLA DESMA 28 - Piece 7 (Dial)","done":false},"ucla-7-jump":{"sig":"ucla-7-jump","desc":"UCLA DESMA 28 - Piece 7 (Jump)","done":false},"app":{"sig":"app","desc":"Get AC in the app store.","done":false},"ios":{"sig":"ios","desc":"Get AC in the app store.","done":false},"pp":{"sig":"pp","desc":"Read the privacy policy.","done":false},"direct":{"sig":"direct","desc":"Aesthetic Inc. corporate updates.","done":false},"support":{"sig":"support","desc":"Go to AC support page.","done":false},"browserstack":{"sig":"browserstack","desc":"Go to AC browserstack.","done":false,"hidden":true},"bs":{"sig":"bs","desc":"Go to AC browser stack.","done":false,"hidden":true},"gpt":{"sig":"gpt","desc":"Run the gpt prompt command.","done":false,"hidden":true},"help":{"sig":"help","desc":"Join a help channel.","done":false},"shillball":{"sig":"shillball","desc":"Run the shillball prompt command.","done":false,"hidden":true},"sb":{"sig":"sb","desc":"Run the sb prompt command.","done":false,"hidden":true},"prod":{"sig":"prod","desc":"Run the prod prompt command.","done":false,"hidden":true},"local":{"sig":"local","desc":"Run the local prompt command.","done":false,"hidden":true},"of":{"sig":"of","desc":"View ordfish paintings.","done":false}},"pieces":{"0":{"sig":"0","desc":"🕳️ Zero, Nothing, Empty... the rest/silence in music!","done":false,"hidden":false,"auto":true},"1":{"sig":"1","desc":"☝️ One, First, Single... and the C note (root)!","done":false,"hidden":false,"auto":true},"2":{"sig":"2","desc":"✌️ Two, Pair, Double... and the D note (second)!","done":false,"hidden":false,"auto":true},"3":{"sig":"3","desc":"🔺 Three, Triple, Triangle... and the E note (third)!","done":false,"hidden":false,"auto":true},"4":{"sig":"4","desc":"🍀 Four, Square, Quad... and the F note (fourth)!","done":false,"hidden":false,"auto":true},"5":{"sig":"5","desc":"🖐️ Five, Hand, Star... and the G note (fifth)!","done":false,"hidden":false,"auto":true},"6":{"sig":"6","desc":"🎲 Six, Dice, Hexagon... and the A note (sixth)!","done":false,"hidden":false,"auto":true},"7":{"sig":"7","desc":"🌈 Seven, Rainbow, Lucky... and the B note (seventh)!","done":false,"hidden":false,"auto":true},"8":{"sig":"8","desc":"🎱 Eight, Octopus, Octave... and the high C note (octave)!","done":false,"hidden":false,"auto":true},"9":{"sig":"9","desc":"🎳 Nine, Cloud, Lives... and the high D note (ninth)!","done":false,"hidden":false,"auto":true},"404":{"sig":"404","desc":"Open the 404 piece.","done":false,"hidden":true},"about":{"sig":"about","desc":"Open the about piece.","done":false,"hidden":true},"aframe":{"sig":"aframe","desc":"Open the aframe piece.","done":false,"hidden":true},"a*":{"sig":"a*","desc":"A* pathfinding animation.","done":true},"alex-row":{"sig":"alex-row","desc":"Open the alex row piece.","done":false,"hidden":true},"alphapoet":{"sig":"alphapoet","desc":"Generate poems.","done":false},"angel":{"sig":"angel","desc":"Say a prayer.","done":false},"api":{"sig":"api","desc":"Open the api piece.","done":false,"hidden":true},"baktok":{"sig":"baktok","desc":"Learn to talk backwards.","done":false},"bills":{"sig":"bills","desc":"Service & billing dashboard.","url":"https://bills.aesthetic.computer","done":true},"balls":{"sig":"balls","desc":"Open the balls piece.","done":false,"hidden":true},"basic-line-pointer":{"sig":"basic-line-pointer","desc":"Drag mouse to point a line.","done":false},"bgm":{"sig":"bgm","desc":"Background music visualizer.","done":false,"hidden":false},"bits":{"sig":"bits","desc":"Learn about bits","done":false,"hidden":false},"blank":{"sig":"blank","desc":"Open the blank piece.","done":false,"hidden":true},"blank-vello":{"sig":"blank-vello","desc":"GPU test: Vello WASM renderer (purple lines)","done":true},"blank-webgl2":{"sig":"blank-webgl2","desc":"GPU test: WebGL2 renderer (cyan lines)","done":true},"blank-canvas2d":{"sig":"blank-canvas2d","desc":"GPU test: Canvas2D fallback (green lines)","done":true},"blank-thorvg":{"sig":"blank-thorvg","desc":"GPU test: ThorVG WASM stub (orange lines)","done":true},"blank-blend2d":{"sig":"blank-blend2d","desc":"GPU test: Blend2D WASM stub (magenta lines)","done":true},"bleep":{"sig":"bleep","desc":"Play notes on a grid. Try adding a #.","done":false},"blur":{"sig":"blur","desc":"Blur pixels.","done":false},"box":{"sig":"box[:color]","desc":"Draw rectangles with brush gestures.","colon":[{"name":"color","values":["red","green","blue","yellow","white","black","orange","purple","pink","cyan"]}],"done":true},"booted-by":{"sig":"booted-by","desc":"Special thanks to early patrons.","done":false},"boxes":{"sig":"boxes","desc":"Open the boxes piece.","done":false,"hidden":true},"boyfriend":{"sig":"boyfriend","desc":"He might care.","done":false},"brick-breaker":{"sig":"brick-breaker","desc":"Open the brick breaker piece.","done":false,"hidden":true},"brother":{"sig":"brother","desc":"Stay out of his room.","done":false},"brush":{"sig":"brush","desc":"Brush tool","done":false,"hidden":true},"bubble":{"sig":"bubble","desc":"Make bubble boing. Sound on.","done":false},"butterflies":{"sig":"butterflies","desc":"A 1-bit bitmap reader instrument.","done":false},"camera":{"sig":"camera[:mode]","desc":"Take a picture.","colon":[{"name":"mode","type":"enum","values":["under","u"],"required":false,"desc":"Put camera under drawing"}],"examples":["camera","camera:under"],"done":true},"chat":{"sig":"chat","desc":"Chat with handles.","done":false,"hidden":false},"chord":{"sig":"chord","desc":"Open the chord piece.","done":false,"hidden":false},"colors":{"sig":"colors","desc":"An index of usable colors on AC.","done":false,"hidden":false},"colplay":{"sig":"colplay","desc":"Turn colors into notes.","done":false},"common":{"sig":"common","desc":"Open the common piece.","done":false,"hidden":true},"clock":{"sig":"clock[:divisor] [melody] [sync]","desc":"Musical clock with melody, waveforms, Hz shifts, and parallel tracks.","colon":[{"name":"divisor","type":"number","required":false,"default":1,"desc":"Time divisor (0.5 = faster, 2 = slower)"}],"params":[{"name":"melody","type":"string","required":false,"desc":"Notes like cdefg, {square}cde, (ceg) (dfa)"},{"name":"sync","type":"enum","values":["sync"],"required":false,"desc":"UTC sync mode"}],"examples":["clock cdefg","clock:0.5 {square}cdefgab","clock (ceg) (dfa)","clock ^cdefg"],"done":true},"commits":{"sig":"commits","desc":"Browse the live commit history.","done":true},"crop":{"sig":"crop","desc":"Crop your painting.","done":false},"dad":{"sig":"dad","desc":"A dad-icated and punny guy.","done":false},"debug":{"sig":"debug","desc":"Open the debug piece.","done":false,"hidden":true},"deck":{"sig":"deck","desc":"A little slide deck!","done":false,"hidden":false},"decode":{"sig":"decode","desc":"Reveal an encoded message. See encode.","done":false},"delete-erase-and-forget-me":{"sig":"delete-erase-and-forget-me","desc":"Delete your account.","done":false},"github":{"sig":"github","desc":"Open the AC Tangled repo (legacy alias).","done":true},"gh":{"sig":"gh","desc":"Open the AC Tangled repo (legacy alias).","done":true},"gmail":{"sig":"gmail","desc":"Open Gmail.","done":true},"agc":{"sig":"agc","desc":"Open ACG at MIT Media Lab.","done":true},"ucla-syllabus":{"sig":"ucla-syllabus","desc":"Open the UCLA syllabus.","done":true},"demo":{"sig":"demo","desc":"Watch a demo of AC.","done":false,"hidden":false},"description":{"sig":"description","desc":"Open the description piece.","done":false,"hidden":true},"digitpain0":{"sig":"digitpain0","desc":"Open the digitpain0 piece.","done":false,"hidden":true},"digitpain1":{"sig":"digitpain1","desc":"Open the digitpain1 piece.","done":false,"hidden":true},"digitpain2":{"sig":"digitpain2","desc":"Open the digitpain2 piece.","done":false,"hidden":true},"digitpain3":{"sig":"digitpain3","desc":"Open the digitpain3 piece.","done":false,"hidden":true},"docgen":{"sig":"docgen","desc":"Open the docgen piece.","done":false,"hidden":true},"dolls":{"sig":"dolls","desc":"Open the dolls piece.","done":false,"hidden":true},"doodle":{"sig":"doodle","desc":"Open the doodle piece.","done":false,"hidden":true},"download":{"sig":"download","desc":"Download your painting.","done":false},"drawings":{"sig":"drawings","desc":"Open the drawings piece.","done":false,"hidden":true},"dync":{"sig":"dync","desc":"Open the dync piece.","done":false,"hidden":true},"encode":{"sig":"encode","desc":"Encrypt a secret message.","done":false},"ff":{"sig":"ff","desc":"View the Freaky Flowers collection.","done":false},"field":{"sig":"field","desc":"Play in the field with others.","done":false},"fill":{"sig":"fill","desc":"Fill with solid color.","done":false},"fly":{"sig":"fly","desc":"Open the fly piece.","done":false,"hidden":true},"freaky-flowers":{"sig":"freaky-flowers","desc":"View the Freaky Flowers collection.","done":false},"gargoyle":{"sig":"gargoyle","desc":"A steadfast guardian.","done":false},"girlfriend":{"sig":"girlfriend","desc":"Caring confidant.","done":false},"give":{"sig":"give","desc":"Support aesthetic.computer.","done":true},"gostop":{"sig":"gostop","desc":"Stop and go.","done":false},"handprint":{"sig":"handprint","desc":"Track your hand.","done":false},"handtime":{"sig":"handtime","desc":"Draw with a pinch.","done":false},"hell_-world":{"sig":"hell_-world","desc":"View the hell_ world collection.","done":false},"hha":{"sig":"hha","desc":"Happy Hands Assembler","done":false,"hidden":false},"horizon":{"sig":"horizon","desc":"Walk on the horizon.","done":false},"husband":{"sig":"husband","desc":"Absent-minded but well-meaning.","done":false},"hw":{"sig":"hw","desc":"View the hell_ world paintings.","done":false},"icon":{"sig":"icon","desc":"Open the icon piece.","done":false,"hidden":true},"images":{"sig":"images","desc":"Open the images piece.","done":false,"hidden":true},"imessage":{"sig":"imessage","desc":"Open the imessage piece.","done":false,"hidden":true},"i":{"sig":"i","desc":"Open the i piece.","done":false,"hidden":true},"kid":{"sig":"kid","desc":"Maybe a unicorn.","done":false},"lang":{"sig":"lang","desc":"Open the lang piece.","done":false,"hidden":true},"learn":{"sig":"learn","desc":"Open the learn piece.","done":false,"hidden":true},"laer-klokken":{"sig":"laer-klokken","desc":"Learn the 'clock'! (alias of laklok)","done":false},"laklok":{"sig":"laklok","desc":"Learn the 'clock'! (laklok.com)","done":false},"legacy-prompt":{"sig":"legacy-prompt","desc":"Open the legacy prompt piece.","done":false,"hidden":true},"liar":{"sig":"liar","desc":"Incredibly honest and trustworthy.","done":false},"3-kidlisp-tests":{"sig":"3-kidlisp-tests","desc":"Tests of a new language.","done":false},"fia-birthday":{"sig":"fia-birthday","desc":"Come to Fía's birthday!","done":false},"kaos-pad-template":{"sig":"kaos-pad-template","desc":"A simple multi-touch XY pad template.","done":false},"line":{"sig":"line[:thickness]","desc":"Draw lines with your finger.","colon":[{"name":"thickness","type":"number","required":false,"default":1,"desc":"Line width in pixels"}],"examples":["line","line:2","line:5"],"done":true},"list":{"sig":"list","desc":"View all commands.","done":false},"lmn-flower":{"sig":"lmn-flower","desc":"Open the lmn flower piece.","done":false,"hidden":true},"lmn-petal":{"sig":"lmn-petal","desc":"Open the lmn petal piece.","done":false,"hidden":true},"login-pattern":{"sig":"login-pattern","desc":"Open the login pattern piece.","done":false,"hidden":true},"login-wait":{"sig":"login-wait","desc":"Open the login wait piece.","done":false,"hidden":true},"m2w2":{"sig":"m2w2","desc":"Music 2 Whistlegraph 2.","done":false},"melody":{"sig":"melody","desc":"Plays a sequence.","done":false},"metronome":{"sig":"metronome","desc":"Keep time.","done":false},"microphone":{"sig":"microphone","desc":"Open the microphone piece.","done":false,"hidden":true},"mom":{"sig":"mom","desc":"Why does she love this way?","done":false},"mood":{"sig":"mood","desc":"Set your mood.","done":false},"moods":{"sig":"moods","desc":"Read all the moods.","done":false},"multipen":{"sig":"multipen","desc":"Open the multipen piece.","done":false,"hidden":true},"nail":{"sig":"nail","desc":"Open the nail piece.","done":false,"hidden":true},"noise":{"sig":"noise","desc":"Some nice noise.","done":false},"news":{"sig":"news","desc":"Community news and links.","done":true},"nopaint":{"sig":"nopaint","desc":"Open the nopaint piece.","done":false,"hidden":true},"numbnom":{"sig":"numbnom[:words|:spanish]","desc":"Number Munchers-style grid game: munch squares that match the math rule (odds, evens, primes, multiples, factors) on a beat, dodge troggles.","colon":[{"name":"mode","type":"enum","values":["words","spanish"],"required":false,"desc":"play the word edition (engnom) or spanish edition (mexinom) instead of numbers"}],"examples":["numbnom","numbnom:words","numbnom:spanish"],"done":true},"engnom":{"sig":"engnom","desc":"Word Munchers-style grid game: munch squares matching the word rule (animals, colors, fruits, rhymes, doubles). English word edition of numbnom.","examples":["engnom"],"done":true},"mexinom":{"sig":"mexinom","desc":"Spanish (Mexican-flavored) word Munchers: comida, animales, colores, frutas, fiesta — speaks the English translation aloud as you munch.","examples":["mexinom"],"done":true},"dannom":{"sig":"dannom","desc":"Danish word Munchers: mad, dyr, farver, frugt, hygge — speaks the English translation aloud as you munch.","examples":["dannom"],"done":true},"rusnom":{"sig":"rusnom","desc":"Russian word Munchers: еда, животные, цвета, фрукты, природа — speaks the English translation aloud as you munch.","examples":["rusnom"],"done":true},"notenom":{"sig":"notenom","desc":"Musical Munchers-style grid game: munch the note squares that match the rule (C major, A minor, sharps, C chord, high, low) on the beat — each bite plays its note.","examples":["notenom"],"done":true},"notepat":{"sig":"notepat[:wave][:octave] [melody...]","desc":"A melodic keyboard instrument.","colon":[{"name":"wave","type":"enum","values":["sine","square","triangle","sawtooth","noise"],"required":false,"default":"sine"},{"name":"octave","type":"number","values":[1,2,3,4,5,6,7,8,9],"required":false,"default":4}],"params":[{"name":"melody","type":"string","required":false,"desc":"Melody in note:word format (e.g. C:twin- C:-kle)"}],"examples":["notepat","notepat:square","notepat:sine:5","notepat twinkle"],"done":true},"stample":{"sig":"stample","desc":"A sampling instrument.","done":false},"old":{"sig":"old","desc":"Open the old piece.","done":false,"hidden":true},"oldpull":{"sig":"oldpull","desc":"Open the oldpull piece.","done":false,"hidden":true},"oldwand":{"sig":"oldwand","desc":"Open the oldwand piece.","done":false,"hidden":true},"ordfish":{"sig":"ordfish","desc":"View the Ordfish painting collection.","done":false},"ordsy":{"sig":"ordsy","desc":"Open the ordsy piece.","done":false,"hidden":true},"oval":{"sig":"oval","desc":"Draw an oval.","done":false},"painting":{"sig":"painting","desc":"View your current painting's steps.","done":false},"paint":{"sig":"paint","desc":"Generate marks by adding instructions.","done":false},"paste":{"sig":"paste","desc":"Paste an image from your library.","done":false},"perf":{"sig":"perf","desc":"Open the perf piece.","done":false,"hidden":true},"phand":{"sig":"phand","desc":"Open the phand piece.","done":false,"hidden":true},"pip":{"sig":"pip","desc":"Open the pip piece.","done":false,"hidden":true},"play":{"sig":"play","desc":"Open the play piece.","done":false,"hidden":true},"pline":{"sig":"pline","desc":"Open the pline piece.","done":false,"hidden":true},"plot":{"sig":"plot","desc":"Plot vector graphics.","done":false},"pond":{"sig":"pond","desc":"Draw ripples with others.","done":false},"profile":{"sig":"profile","desc":"Go to your profile or enter another user's.","done":false},"prompt":{"sig":"prompt","desc":"Go to the prompt.","done":false},"prutti":{"sig":"prutti","desc":"Genius old man rants.","done":false},"ptt":{"sig":"ptt","desc":"Open the ptt piece.","done":false,"hidden":true},"pull":{"sig":"pull","desc":"Open the pull piece.","done":false,"hidden":true},"rain":{"sig":"rain","desc":"A nice rain animation.","done":false},"rattle":{"sig":"rattle","desc":"Open the rattle piece.","done":false},"rect":{"sig":"rect","desc":"Draw a rectangle.","done":false},"run&gun":{"sig":"run&gun","desc":"Open the run&gun piece.","done":false,"hidden":true},"sage":{"sig":"sage","desc":"Paths move across the screen.","done":false},"sb":{"sig":"sb","desc":"Open the sb piece.","done":false,"hidden":true},"scawy-snake":{"sig":"scawy-snake","desc":"The classic game of snake.","done":false},"seashells":{"sig":"seashells","desc":"A multi-touch bytebeat instrument.","done":false},"screenshots":{"sig":"screenshots","desc":"Open the screenshots piece.","done":false},"screentest":{"sig":"screentest","desc":"Open the screentest piece.","done":false,"hidden":true},"selfie":{"sig":"selfie","desc":"Open the front camera.","done":false},"sfx":{"sig":"sfx","desc":"Sound effects","done":false,"hidden":true},"shape":{"sig":"shape","desc":"Draw a freehand polygon.","done":false},"shop":{"sig":"shop","desc":"Order artwork and services from @jeffrey.","done":true},"share":{"sig":"share","desc":"Generate a QR code to share.","done":false},"signature":{"sig":"signature","desc":"Open the signature piece.","done":false,"hidden":true},"sign":{"sig":"sign","desc":"Open the sign piece.","done":false,"hidden":true},"sing":{"sig":"sing","desc":"Open singing interface","done":false,"hidden":true},"sister":{"sig":"sister","desc":"Don't steal her makeup.","done":false},"slip":{"sig":"slip","desc":"A two octave slide instrument.","done":false},"smear":{"sig":"smear","desc":"Move pixels around.","done":false},"sno":{"sig":"sno","desc":"Walk around and fall asleep.","done":false},"song":{"sig":"song","desc":"Learn a song.","done":false},"sotce-net":{"sig":"sotce-net","desc":"diaries (work in progress)","done":false,"hidden":true},"sparkle":{"sig":"sparkle","desc":"Paint with @maya's really fun brush.","done":false},"spline":{"sig":"spline","desc":"A springy wave.","done":false},"spray":{"sig":"spray","desc":"Open the spray piece.","done":false,"hidden":true},"sprinkles":{"sig":"sprinkles","desc":"Watch the pretty sprinkles.","done":false},"sprite":{"sig":"sprite","desc":"Open the sprite piece.","done":false,"hidden":true},"squaresong":{"sig":"squaresong","desc":"Mmmm squaresong.","done":false},"stage":{"sig":"stage","desc":"Open the stage piece.","done":false,"hidden":true},"staka":{"sig":"staka","desc":"Open the staka piece.","done":false,"hidden":true},"starfield":{"sig":"starfield","desc":"A celestial experience.","done":false},"test":{"sig":"test","desc":"Open the test piece.","done":false,"hidden":true},"textfence":{"sig":"textfence","desc":"A tiny play by @jeffrey and @georgica.","done":false},"tone":{"sig":"tone[:wave] [frequency]","desc":"Listen to a tone.","colon":[{"name":"wave","type":"enum","values":["sine","triangle","square","sawtooth","cycle"],"required":false,"default":"sine"}],"params":[{"name":"frequency","type":"number","required":false,"desc":"Tone frequency in Hz (50-4000)"}],"examples":["tone","tone 440","tone:square 880","tone:cycle"],"done":true},"toss":{"sig":"toss[:wave][:tempo]","desc":"Play microtonal oscillators.","colon":[{"name":"wave","type":"enum","values":["sine","square","triangle","sawtooth"],"required":false,"default":"sine"},{"name":"tempo","type":"number","values":[60,80,100,120,140,160],"required":false,"default":120}],"done":true},"tracker":{"sig":"tracker","desc":"A simple music tracker.","done":false},"udp":{"sig":"udp","desc":"Open the udp piece.","done":false,"hidden":true},"uke":{"sig":"uke","desc":"Standard note meter.","done":false},"valbear":{"sig":"valbear","desc":"Make a V-Day card.","done":false},"vary":{"sig":"vary","desc":"Open the vary piece.","done":false,"hidden":true},"video":{"sig":"video","desc":"Open video player/editor","done":false,"hidden":true},"wand":{"sig":"wand","desc":"Sculpt in XR.","done":false,"hidden":false},"wallet":{"sig":"wallet","desc":"View your Tezos wallet.","done":true},"wave":{"sig":"wave","desc":"Wave using your hand.","done":false,"hidden":false},"wg":{"sig":"wg","desc":"Watch and learn whistlegraphs.","done":false},"wgr":{"sig":"wgr","desc":"Whistlegraph recorder.","done":false,"hidden":false},"whistlegraph":{"sig":"whistlegraph","desc":"Whistlegraph index.","done":false,"hidden":false},"whistle":{"sig":"whistle","desc":"Convert whistles to sine waves.","done":false},"wife":{"sig":"wife","desc":"Get ready for chores.","done":false},"wipe":{"sig":"wipe","desc":"Clear your painting canvas","done":false,"hidden":false},"word":{"sig":"word","desc":"Add text to your painting.","done":false},"zoom":{"sig":"zoom","desc":"Zoom in/out","done":false,"hidden":true},"$":{"sig":"$","desc":"A live feed of recent KidLisp cached codes. Updated to use new $code shorthand for simplified preview execution.","done":false,"hidden":false,"auto":true},"1but":{"sig":"1but","desc":"One button game — tap or press space to jump. Dodge the walls!","done":false,"hidden":false,"auto":true},"1v1":{"sig":"1v1","desc":"Multiplayer Quake-like FPS game.","done":false,"hidden":true,"auto":true},"25.4.13.19.24":{"sig":"25.4.13.19.24","desc":"A drawing by @jeffrey, in the Venice Family Clinic Art Auction 2026. https://vfcartauction2026.indy.auction","done":false,"hidden":false,"auto":true},"3x3":{"sig":"3x3","desc":"A 3x3 ortholinear pad instrument.","done":false,"hidden":true,"auto":true},"a-star":{"sig":"a-star","desc":"Open the a star piece.","done":false,"hidden":true,"auto":true},"a":{"sig":"a","desc":"🍎 Apple, Ant, Airplane... and the musical note A!","done":false,"hidden":false,"auto":true},"aa":{"sig":"aa","desc":"Phone-side conversation with AA — your remote Claude on the macbook, reached via help.aesthetic.computer. @jeffrey only.","done":false,"hidden":false,"auto":true},"ableton":{"sig":"ableton","desc":"Open the ableton piece.","done":false,"hidden":false,"auto":true},"addition":{"sig":"addition","desc":"Open the addition piece.","done":false,"hidden":false,"auto":true},"ads":{"sig":"ads","desc":"Advertising info page for aesthetic.computer","done":false,"hidden":false,"auto":true},"amaythingra":{"sig":"amaythingra","desc":"pop/big-pictures/ released single — see pop/RELEASES.md. Thin wrapper around lib/pop.mjs (mirror of marimbaba.mjs).","done":false,"hidden":false,"auto":true},"amby":{"sig":"amby","desc":"A tonal music generator using radial cycles and turtle graphics.","done":false,"hidden":true,"auto":true},"amp":{"sig":"amp","desc":"A simple microphone amplifier with monitor - plug in and play!","done":false,"hidden":false,"auto":true},"ant":{"sig":"ant","desc":"A colony of ants foraging for food with pheromone trails.","done":false,"hidden":false,"auto":true},"arena":{"sig":"arena","desc":"Quake-style arena with large tessellated ground, player shadow, and speedometer.","done":false,"hidden":true,"auto":true},"artnom":{"sig":"artnom","desc":"The art-history edition of nom: every answer is a museum thumbnail and every round is identified by a Getty AAT style URI. Artwork metadata and rights","done":false,"hidden":false,"auto":true},"audio":{"sig":"audio","desc":"Longform audio player with scrubbing, waveform, and subtitle display.","done":false,"hidden":true,"auto":true},"aura":{"sig":"aura","desc":"The original No Paint aura as a standalone AC piece.","done":false,"hidden":true,"auto":true},"autopat":{"sig":"autopat","desc":"Open the autopat piece.","done":false,"hidden":false,"auto":true},"b":{"sig":"b","desc":"🏀 Ball, Bear, Banana... and the musical note B!","done":false,"hidden":false,"auto":true},"bag":{"sig":"bag","desc":"A \"bag\" is a curated container of mixed media — pieces, paintings, kidlisp, tapes, whatever. Carry it by its handle: type `^reel` (the ^ is the handle,","done":false,"hidden":true,"auto":true},"banner":{"sig":"banner","desc":"The original No Paint banner as a standalone AC piece.","done":false,"hidden":true,"auto":true},"beat":{"sig":"beat","desc":"A rhythmic percussion instrument.","done":false,"hidden":true,"auto":true},"besospesos":{"sig":"besospesos","desc":"A ceo dating sim. besos or pesos — you can't have both. The cast is the marketing-campaign roster (collectors-altman-facetime, jeffrey-helping-elon-igstory, …","done":false,"hidden":false,"auto":true},"bloomwell":{"sig":"bloomwell","desc":"Supersampled feedback-mandala pad — a breathing kaleidoscope well, now a thin wrapper over lib/pads.mjs (the shared pad engine: UTC-clock beat grid,","done":false,"hidden":true,"auto":true},"bootpics":{"sig":"bootpics","desc":"Browse the webcam snapshots ac-native captured at boot + shutdown.","done":false,"hidden":true,"auto":true},"boots":{"sig":"boots","desc":"Boot telemetry viewer","done":false,"hidden":true,"auto":true},"botce":{"sig":"botce","desc":"A paywall for botce, and... a paywalled ticket test implementation using `ticket` from the disk API.","done":false,"hidden":false,"auto":true},"breathe":{"sig":"breathe","desc":"The original No Paint bulge as a standalone AC piece. It is a pixel transform, not a brush: it swells what is already painted.","done":false,"hidden":false,"auto":true},"brindo":{"sig":"brindo","desc":"Demoscene PLASMA × TRANCE SUPERSAW — a thin wrapper over lib/pads.mjs (the shared pad engine: UTC-clock beat grid, `params[0]` rate override e.g.","done":false,"hidden":true,"auto":true},"bubbles":{"sig":"bubbles","desc":"Original No Paint bubble sprites as a standalone AC brush.","done":false,"hidden":true,"auto":true},"build":{"sig":"build","desc":"The original No Paint build as a standalone AC piece.","done":false,"hidden":true,"auto":true},"c":{"sig":"c","desc":"🐱 Cat, Car, Cake... and the musical note C - THE ROOT!","done":false,"hidden":false,"auto":true},"cal":{"sig":"cal","desc":"Editing/scheduling lives in the native DateWizard app; this piece is the web calendar view. It ships MONTH, WEEK, and DAY browsing surfaces. All date-math","done":false,"hidden":false,"auto":true},"cancelok":{"sig":"cancelok","desc":"A machine makes instruments. You decide which ones live — by wandering.","done":false,"hidden":true,"auto":true},"cap":{"sig":"cap","desc":"Camera piece for recording videos (caps/tapes) Workflow: preview camera → tap to start recording → tap to stop → jump to video","done":false,"hidden":true,"auto":true},"cards":{"sig":"cards","desc":"Display a single playing card that fills the screen.","done":false,"hidden":false,"auto":true},"carry":{"sig":"carry","desc":"Learn base-10 arithmetic by feel. Tap columns (1s, 10s, 100s) to add beads. Ten beads in a column collapse into one bead in the next column —","done":false,"hidden":false,"auto":true},"caterpillar":{"sig":"caterpillar","desc":"The original No Paint caterpillar as a standalone AC brush. Ask for seven segments and you get the rainbow road.","done":false,"hidden":true,"auto":true},"catnom":{"sig":"catnom","desc":"The Categories edition of nom (shared lib/nom.mjs) — same game, but every board is one category from the classic parlor game, AC-flavored: slang,","done":false,"hidden":false,"auto":true},"chart":{"sig":"chart","desc":"Make a piece from a diagram.","done":false,"hidden":true,"auto":true},"chinese":{"sig":"chinese","desc":"Translate any language to Chinese.","done":false,"hidden":false,"auto":true},"clocks":{"sig":"clocks","desc":"Browse saved clocks from the database","done":false,"hidden":false,"auto":true},"cobo":{"sig":"cobo","desc":"Fireworks × orchestral-hit stabs — a thin wrapper over lib/pads.mjs (the shared pad engine: UTC-clock beat grid, `params[0]` rate override e.g.","done":false,"hidden":true,"auto":true},"code":{"sig":"code","desc":"A graphical editor for producing kidlisp code, written in kidlisp","done":false,"hidden":false,"auto":true},"complex-timing":{"sig":"complex-timing","desc":"Open the complex timing piece.","done":false,"hidden":false,"auto":true},"connect-wallet":{"sig":"connect-wallet","desc":"Simple wallet connection page for CLI tools. Opens from CLI, connects wallet, saves to profile, shows success.","done":false,"hidden":true,"auto":true},"crayon":{"sig":"crayon","desc":"Draw with a crayon.","done":false,"hidden":false,"auto":true},"cross-tab-test":{"sig":"cross-tab-test","desc":"Test piece for cross-tab painting synchronization","done":false,"hidden":true,"auto":true},"d":{"sig":"d","desc":"🐕 Dog, Duck, Dinosaur... and the musical note D!","done":false,"hidden":false,"auto":true},"da":{"sig":"da","desc":"Shortcut for `danish` - translate any language to Danish.","done":false,"hidden":false,"auto":true},"danish":{"sig":"danish","desc":"Translate any language to Danish.","done":false,"hidden":false,"auto":true},"dark-window":{"sig":"dark-window","desc":"The recovered two-window No Paint action as a standalone AC brush.","done":false,"hidden":true,"auto":true},"dax":{"sig":"dax","desc":"A hanging CLOTH / FABRIC MESH ripples in the wind while warm RHODES chords wash color gradients across it — a thin wrapper over lib/pads.mjs (the shared pad","done":false,"hidden":true,"auto":true},"dd":{"sig":"dd","desc":"Open the dd piece.","done":false,"hidden":true,"auto":true},"debug-kidlisp-hud":{"sig":"debug-kidlisp-hud","desc":"Tests the exact KidLisp HUD rendering scenario to identify the single column issue","done":false,"hidden":true,"auto":true},"demoplay":{"sig":"demoplay","desc":"A conductor for automated AC performances — \"Test Suite for Aesthetic Computer\"","done":false,"hidden":true,"auto":true},"desk":{"sig":"desk","desc":"Pick and use a webcam, with support for Elmo cameras.","done":false,"hidden":true,"auto":true},"desktop":{"sig":"desktop","desc":"Download page for the Aesthetic Computer desktop app. Redesigned with animation, better colors, and responsive layout. Fetches real release info from GitHub.","done":false,"hidden":true,"auto":true},"dj":{"sig":"dj","desc":"One big record. Drop an audio file on the window (ac-electron) and scratch it. Ported from the AC Native turntable piece. Usage: dj [url|track-name] — or dra…","done":false,"hidden":true,"auto":true},"dorf":{"sig":"dorf","desc":"Rorschach inkblot × gong/bell tolls — a thin wrapper over lib/pads.mjs (the shared pad engine: UTC-clock beat grid, `params[0]` rate override e.g.","done":false,"hidden":true,"auto":true},"dravo":{"sig":"dravo","desc":"Pendulum wave whose bobs pluck themselves — drolo's row of just-intonation swinging pendulums, but instead of a beat-quantized melody stepping through","done":false,"hidden":true,"auto":true},"drolo":{"sig":"drolo","desc":"Pendulum-wave pad — a thin wrapper over lib/pads.mjs (the shared pad engine: UTC-clock beat grid, `params[0]` rate override e.g. `drolo 0.5`, the tap/XY","done":false,"hidden":true,"auto":true},"dumduel":{"sig":"dumduel","desc":"Top-down stick figure shootout — server-authoritative netcode. Client sends inputs, server owns state, snapshots broadcast via UDP.","done":false,"hidden":false,"auto":true},"e":{"sig":"e","desc":"🐘 Elephant, Egg, Ear... and the musical note E!","done":false,"hidden":false,"auto":true},"ellipse":{"sig":"ellipse","desc":"The original No Paint ellipse as a standalone AC piece.","done":false,"hidden":true,"auto":true},"emberdrift":{"sig":"emberdrift","desc":"Cosmic starfield groove — a thin wrapper over lib/pads.mjs (the shared pad engine: UTC-clock beat grid, `params[0]` rate override e.g. `emberdrift 0.5`,","done":false,"hidden":true,"auto":true},"emostripes":{"sig":"emostripes","desc":"Open the emostripes piece.","done":false,"hidden":false,"auto":true},"en":{"sig":"en","desc":"Shortcut for `english` - translate any language to English.","done":false,"hidden":false,"auto":true},"english":{"sig":"english","desc":"Translate any language to English.","done":false,"hidden":false,"auto":true},"error":{"sig":"error","desc":"A minimal error/stall screen.","done":false,"hidden":true,"auto":true},"es":{"sig":"es","desc":"Shortcut for `spanish` - translate any language to Spanish.","done":false,"hidden":false,"auto":true},"f":{"sig":"f","desc":"🐟 Fish, Frog, Flower... and the musical note F!","done":false,"hidden":false,"auto":true},"f3ral3xp":{"sig":"f3ral3xp","desc":"Experiments for Feral File.","done":false,"hidden":true,"auto":true},"fartflower":{"sig":"fartflower","desc":"One button. Press it. Flower blooms. Fart plays.","done":false,"hidden":false,"auto":true},"ff1-debug":{"sig":"ff1-debug","desc":"A diagnostic piece that displays system info and test patterns on FF1 Cast this to FF1 to verify the display is working","done":false,"hidden":true,"auto":true},"ff1":{"sig":"ff1","desc":"Send pieces to FF1 Art Computer via the Electron bridge. Usage: `ff1 starfield` or `ff1 wipe:red` or `ff1 $mycode`","done":false,"hidden":false,"auto":true},"fight":{"sig":"fight","desc":"six attacks, throws, jumping, crouching, dashes and hold-away blocking. Hold away to block; crouching kicks get underneath that guard. Up jumps,","done":false,"hidden":true,"auto":true},"fish":{"sig":"fish","desc":"A realtime raycast (SDF raymarched) 3D fish that swims in place.","done":false,"hidden":true,"auto":true},"flap":{"sig":"flap","desc":"Two frames make a flap, more are welcome.","done":false,"hidden":true,"auto":true},"flim":{"sig":"flim","desc":"Spirograph epicycloid pad — a thin wrapper over lib/pads.mjs (shared pad engine: UTC beat grid, `flim 0.5` rate override, tap/XY pump, audio polling,","done":false,"hidden":true,"auto":true},"fluttabap360":{"sig":"fluttabap360","desc":"pop/marimba/ released single — see pop/RELEASES.md. Thin wrapper around lib/pop.mjs (mirror of how laer-klokken wraps chat). Add a new track piece by droppin…","done":false,"hidden":false,"auto":true},"fps":{"sig":"fps","desc":"The most basic first person environment.","done":false,"hidden":true,"auto":true},"frames":{"sig":"frames","desc":"The eleven original No Paint borders as a standalone AC brush.","done":false,"hidden":true,"auto":true},"frizmo":{"sig":"frizmo","desc":"FIZZY-STATIC SPARKLE instrument — champagne fizz / effervescence, now a THIN WRAPPER over lib/pads.mjs (the shared pad engine: UTC-clock beat grid,","done":false,"hidden":true,"auto":true},"g":{"sig":"g","desc":"🍇 Grapes, Giraffe, Guitar... and the musical note G!","done":false,"hidden":false,"auto":true},"game":{"sig":"game","desc":"The most basic game.","done":false,"hidden":true,"auto":true},"gameboy-lab":{"sig":"gameboy-lab","desc":"Lists all available GB/GBC ROMs and allows loading them for testing","done":false,"hidden":false,"auto":true},"gameboy":{"sig":"gameboy","desc":"GameBoy button state","done":false,"hidden":true,"auto":true},"gamepad":{"sig":"gamepad","desc":"Test your gamepad connectivity and view device information.","done":false,"hidden":true,"auto":true},"gesture":{"sig":"gesture","desc":"Track and play back a gesture.","done":false,"hidden":true,"auto":true},"get-handle":{"sig":"get-handle","desc":"A friendly landing page for claiming/setting your @handle.","done":false,"hidden":false,"auto":true},"girlstripes":{"sig":"girlstripes","desc":"Open the girlstripes piece.","done":false,"hidden":false,"auto":true},"gla":{"sig":"gla","desc":"Open the gla piece.","done":false,"hidden":false,"auto":true},"glavo":{"sig":"glavo","desc":"A rising-bubble bath seen through vex's datamosh eye — a thin wrapper over lib/pads.mjs (the shared pad engine: UTC-clock beat grid, `params[0]` rate","done":false,"hidden":true,"auto":true},"glibo":{"sig":"glibo","desc":"Wave-interference ripple tank × marimba/soft-mallet — a thin wrapper over lib/pads.mjs (the shared pad engine: UTC-clock beat grid, `params[0]` rate","done":false,"hidden":true,"auto":true},"gloob":{"sig":"gloob","desc":"Gooey metaball-VOICES instrument — a thin wrapper over lib/pads.mjs (the shared pad engine: UTC-clock beat grid, `params[0]` rate override e.g. `gloob 0.5`, the","done":false,"hidden":true,"auto":true},"gradient-test":{"sig":"gradient-test","desc":"Testing gradient support in ink() function with masking 📚 DOCUMENTATION: See /reports/ink-function-gradient-documentation.md for complete usage guide","done":false,"hidden":true,"auto":true},"graphics":{"sig":"graphics","desc":"A test of various low level AC graphics capabilities.","done":false,"hidden":true,"auto":true},"grid-worm":{"sig":"grid-worm","desc":"The original No Paint grid worm as a standalone AC piece: three exclusion channels crawling a quantized grid.","done":false,"hidden":true,"auto":true},"gulmo":{"sig":"gulmo","desc":"Terrain-heightfield scanlines × deep sub techno — a thin wrapper over lib/pads.mjs (the shared pad engine: UTC-clock beat grid, `params[0]` rate","done":false,"hidden":true,"auto":true},"h":{"sig":"h","desc":"🏠 House, Hat, Heart... and the high C note!","done":false,"hidden":false,"auto":true},"halley":{"sig":"halley","desc":"Halley's method fractal for f(z) = z³ + 7.","done":false,"hidden":true,"auto":true},"handle":{"sig":"handle","desc":"Customize your @handle colors - per-character RGB customization with dynamic shadows.","done":false,"hidden":false,"auto":true},"handles":{"sig":"handles","desc":"Browse all user handles in a scrollable list ╔═══════════════════════════════════════════════════════════╗ ║  A typographically styled user handle directory …","done":false,"hidden":false,"auto":true},"hellsine":{"sig":"hellsine","desc":"pop/hellsine/ released single — see pop/RELEASES.md. Thin wrapper around lib/pop.mjs (mirror of marimbaba.mjs).","done":false,"hidden":false,"auto":true},"help":{"sig":"help","desc":"Public, sandboxed chatbot about aesthetic.computer. Rate-limited, stateless, backed by the same macbook bridge as aa but through /api/help/chat with a","done":false,"hidden":false,"auto":true},"helpabeach":{"sig":"helpabeach","desc":"pop/chillwave/ released single — see pop/RELEASES.md. Thin wrapper around lib/pop.mjs; see disks/pop/README.md for the recipe.","done":false,"hidden":false,"auto":true},"hoom":{"sig":"hoom","desc":"Radial polyrhythm clock — a thin wrapper over lib/pads.mjs (the shared pad engine: UTC-clock beat grid, `params[0]` rate override e.g. `hoom 0.5`, the","done":false,"hidden":true,"auto":true},"hop":{"sig":"hop","desc":"A first-person shooter.","done":false,"hidden":false,"auto":true},"hueber":{"sig":"hueber","desc":"Hue-rotated / psychedelic uber riding.","done":false,"hidden":false,"auto":true},"insta":{"sig":"insta","desc":"Browse public Instagram profiles in a compact pixel view. Usage: insta:whistlegraph or insta:@whistlegraph","done":false,"hidden":false,"auto":true},"j":{"sig":"j","desc":"🪼 Jellyfish, Jungle, Juice... and the high E note!","done":false,"hidden":false,"auto":true},"ja":{"sig":"ja","desc":"Shortcut for `japanese` - translate any language to Japanese.","done":false,"hidden":false,"auto":true},"japanese":{"sig":"japanese","desc":"Translate any language to Japanese.","done":false,"hidden":false,"auto":true},"jas":{"sig":"jas","desc":"Spatial bytecode instrument — type to compose, pixels are the waveform.","done":false,"hidden":false,"auto":true},"jaxo":{"sig":"jaxo","desc":"Confetti-rain footwork pad — a thin wrapper over lib/pads.mjs (the shared pad engine: UTC-clock beat grid, `params[0]` rate override e.g. `jaxo 0.2`, the","done":false,"hidden":true,"auto":true},"justsound":{"sig":"justsound","desc":"Explore pure tonal relationships.","done":false,"hidden":false,"auto":true},"k":{"sig":"k","desc":"🪁 Kite, King, Kangaroo... and the high F note!","done":false,"hidden":false,"auto":true},"keep":{"sig":"keep","desc":"Preserve a KidLisp piece as a KEEP on Tezos. A \"keep\" stores your code, artwork, and interaction forever on the blockchain. Usage: `keep piece-name` or `keep…","done":false,"hidden":true,"auto":true},"kept":{"sig":"kept","desc":"Shows the result of a KidLisp Keep mint operation.","done":false,"hidden":true,"auto":true},"kerncheck":{"sig":"kerncheck","desc":"Kerning & advance overlap detector for AC fonts. Red dots mark where adjacent characters are tightest or collide.","done":false,"hidden":false,"auto":true},"kexo":{"sig":"kexo","desc":"Falling/shattering glass-shard pad — thin wrapper over lib/pads.mjs (UTC beat grid, params[0] rate override e.g. `kexo 0.5`, tap/XY pump, audio","done":false,"hidden":true,"auto":true},"keys":{"sig":"keys","desc":"Use keys to trigger actions like musical notes.","done":false,"hidden":true,"auto":true},"kidlisp-gb-test":{"sig":"kidlisp-gb-test","desc":"Test piece for KidLisp → GameBoy ROM compilation (Phase 1)","done":false,"hidden":true,"auto":true},"kidlisp-in-js":{"sig":"kidlisp-in-js","desc":"Simple split-screen KidLisp showcase with $code shorthand support","done":false,"hidden":true,"auto":true},"kidlisp-piece":{"sig":"kidlisp-piece","desc":"Proper integration of KidLisp as a first-class AC piece","done":false,"hidden":true,"auto":true},"kidlisp-wip":{"sig":"kidlisp-wip","desc":"Open the kidlisp wip piece.","done":false,"hidden":false,"auto":true},"kidlisp":{"sig":"kidlisp","desc":"Default KidLisp piece that shows a checkerboard pattern when no code is provided","done":false,"hidden":true,"auto":true},"klbutton":{"sig":"klbutton","desc":"Open the klbutton piece.","done":false,"hidden":false,"auto":true},"klokkentales":{"sig":"klokkentales","desc":"Dramatic storybook dispatches from the public Lær Klokken chat.","done":false,"hidden":false,"auto":true},"klpad":{"sig":"klpad","desc":"Open the klpad piece.","done":false,"hidden":false,"auto":true},"korvo":{"sig":"korvo","desc":"Orrery pad — a thin wrapper over lib/pads.mjs (UTC-clock beat grid, params[0] rate override, the tap/XY pump, audio polling). This file only says what makes …","done":false,"hidden":true,"auto":true},"kpbj":{"sig":"kpbj","desc":"📻 KPBJ.FM live stream player - Shadow Hills Community Radio Stream: https://stream.kpbj.fm/","done":false,"hidden":false,"auto":true},"l":{"sig":"l","desc":"🦁 Lion, Lemon, Leaf... and the high G note!","done":false,"hidden":false,"auto":true},"lab":{"sig":"lab","desc":"Open the lab piece.","done":false,"hidden":false,"auto":true},"land":{"sig":"land","desc":"A multiuser 3D meadow — grass, trees, boulders, sky. Forked from arena.mjs with the combat stripped: same server-authoritative netcode, no lava, no","done":false,"hidden":true,"auto":true},"lavabath":{"sig":"lavabath","desc":"Raw-pixel metaballs plasma — a thin wrapper over lib/pads.mjs (the shared pad engine: UTC-clock beat grid, `params[0]` rate override e.g. `lavabath 0.5`,","done":false,"hidden":true,"auto":true},"link":{"sig":"link","desc":"Pair this account with an aesthetic computer device.","done":false,"hidden":false,"auto":true},"loxa":{"sig":"loxa","desc":"Lightning-storm pad — a thin wrapper over lib/pads.mjs (the shared pad engine: UTC-clock beat grid, `params[0]` rate override e.g. `loxa 0.5`, the tap/XY","done":false,"hidden":true,"auto":true},"lull":{"sig":"lull","desc":"A slow melodic bassline + warm sustained pad drive an undulating gooey field of nested contour-blobs in a soft dawn palette — a thin wrapper over","done":false,"hidden":true,"auto":true},"m":{"sig":"m","desc":"🌙 Moon, Mouse, Milk... and the high A note!","done":false,"hidden":false,"auto":true},"machines":{"sig":"machines","desc":"Dashboard for monitoring ac-native devices remotely. Shows live status, logs, and supports remote commands (jump, reboot, update).","done":false,"hidden":true,"auto":true},"mail":{"sig":"mail","desc":"Email preferences and blast history for aesthetic.computer.","done":false,"hidden":false,"auto":true},"make":{"sig":"make","desc":"Creates animated art from text prompts using KidLisp language","done":false,"hidden":true,"auto":true},"marimbaba":{"sig":"marimbaba","desc":"pop/marimba/ released single — see pop/RELEASES.md. Thin wrapper around lib/pop.mjs (mirror of how laer-klokken wraps chat). Add a new track piece by droppin…","done":false,"hidden":false,"auto":true},"marimbagraph":{"sig":"marimbagraph","desc":"A whistlegraph score for marimbaba (pop/marimba/marimbaba.np). The page starts blank, like every whistlegraph. Tap to begin: each note of the lullaby pulls o…","done":false,"hidden":false,"auto":true},"marker":{"sig":"marker","desc":"A brush interpolation test.","done":false,"hidden":true,"auto":true},"menu-fighter":{"sig":"menu-fighter","desc":"Two pals enter. The menu decides what happens next.","done":false,"hidden":false,"auto":true},"merry-fade":{"sig":"merry-fade","desc":"Stays loaded while the merry pipeline runs. Renders $code pieces via paintApi.kidlisp() and alpha-blends them during transitions.","done":false,"hidden":true,"auto":true},"merry":{"sig":"merry","desc":"🎄 Merry - URL-able merry command router URL examples: /merry:0.5-tone:0.5-clock -> merry 0.5-tone 0.5-clock /merry:tone:clock -> merry tone clock (5s defaul…","done":false,"hidden":false,"auto":true},"merryo":{"sig":"merryo","desc":"🎄 Merryo - URL-able looping merry command router URL examples: /merryo:0.5-tone:0.5-clock -> merryo 0.5-tone 0.5-clock (loops forever) /merryo:tone:clock ->…","done":false,"hidden":false,"auto":true},"message":{"sig":"message","desc":"Shows a single chat message or mood, full screen.","done":false,"hidden":false,"auto":true},"metaballs":{"sig":"metaballs","desc":"A basic metaballs sample.","done":false,"hidden":true,"auto":true},"mibo":{"sig":"mibo","desc":"Texture-tunnel psy-trance pad — a thin wrapper over lib/pads.mjs (the shared pad engine: UTC-clock beat grid, `params[0]` rate override e.g. `mibo 0.5`,","done":false,"hidden":true,"auto":true},"mo":{"sig":"mo","desc":"🎄 Mo - Shorthand for merryo with uniform timing URL examples: /mo.1:a:b:c -> merryo 0.1-a 0.1-b 0.1-c (100ms each, loops) /mo.05:tone:clock -> merryo 0.05-t…","done":false,"hidden":false,"auto":true},"mobile":{"sig":"mobile","desc":"Download page for the Aesthetic Computer mobile apps (iOS & Android). Redirects to App Store or shows download options.","done":false,"hidden":false,"auto":true},"molten":{"sig":"molten","desc":"Warm liquid molten field — a thin wrapper over lib/pads.mjs (the shared pad engine: UTC-clock beat grid, `params[0]` rate override e.g. `molten 0.5`, the","done":false,"hidden":true,"auto":true},"morpho":{"sig":"morpho","desc":"Pixel sorting as a model of morphogenesis — a laboratory / sandbox.","done":false,"hidden":true,"auto":true},"mug":{"sig":"mug","desc":"Preview and purchase ceramic mugs with your paintings","done":false,"hidden":false,"auto":true},"mugs":{"sig":"mugs","desc":"Browse recent mugs - preview on top, scrollable list below","done":false,"hidden":false,"auto":true},"murmo":{"sig":"murmo","desc":"Murmuration-swarm pad — a thin wrapper over lib/pads.mjs (the shared pad engine: UTC-clock beat grid, `params[0]` rate override e.g. `murmo 0.5`, the","done":false,"hidden":true,"auto":true},"n":{"sig":"n","desc":"🪹 Nest, Nose, Nut... and the high B note!","done":false,"hidden":false,"auto":true},"neo-wipppps":{"sig":"neo-wipppps","desc":"Visualizations for `wipppps` musical tracks.","done":false,"hidden":false,"auto":true},"neural-garden":{"sig":"neural-garden","desc":"Transformer-based autoregressive model","done":false,"hidden":true,"auto":true},"newprofile":{"sig":"newprofile","desc":"The default profile page for all users.","done":false,"hidden":false,"auto":true},"nibbo":{"sig":"nibbo","desc":"Circle-packing gamelan pad — a thin wrapper over lib/pads.mjs (the shared pad engine: UTC-clock beat grid, `params[0]` rate override e.g. `nibbo 0.5`, the","done":false,"hidden":true,"auto":true},"notepat-remote":{"sig":"notepat-remote","desc":"AC 🎹 Notepat Remote — Max for Live device UI. • Local keyboard input is owned by BIOS (bios.mjs dawKeyEmit) — it captures keydown/keyup in the jweb iframe a…","done":false,"hidden":false,"auto":true},"notepat-tv":{"sig":"notepat-tv","desc":"Remotely create pictures with `notepat`.","done":false,"hidden":true,"auto":true},"nuxo":{"sig":"nuxo","desc":"String-art harp pad — a thin wrapper over lib/pads.mjs (the shared pad engine: UTC-clock beat grid, `params[0]` rate override e.g. `nuxo 0.5`, tap/XY \"pump\",","done":false,"hidden":true,"auto":true},"o":{"sig":"o","desc":"🍊 Orange, Owl, Ocean... and the high G# note!","done":false,"hidden":false,"auto":true},"oldline":{"sig":"oldline","desc":"A clean, responsive line drawing brush with proper thickness support","done":false,"hidden":true,"auto":true},"oldmake":{"sig":"oldmake","desc":"Creates animated art from text prompts with sequential parameter highlighting","done":false,"hidden":true,"auto":true},"oldshape":{"sig":"oldshape","desc":"A brush for making filled freehand shapes in any color. (Requested by Artur)","done":false,"hidden":false,"auto":true},"oldwipppps":{"sig":"oldwipppps","desc":"High-performance audio-reactive fractal visualizations.","done":false,"hidden":true,"auto":true},"opinion":{"sig":"opinion","desc":"Native pixel-text renderer for opinion markdown files. Reads from /opinion/*.md with YAML frontmatter. Index view at aesthetic.computer/opinion","done":false,"hidden":false,"auto":true},"orbo":{"sig":"orbo","desc":"Gravity-well pad — a thin wrapper over lib/pads.mjs. Each beat drops a particle into orbit around screen-center; every OTHER pad on this list","done":false,"hidden":true,"auto":true},"os":{"sig":"os","desc":"FedAC OS — hero header + uniform option pills + download + live builds.","done":false,"hidden":true,"auto":true},"oskiewar":{"sig":"oskiewar","desc":"Opens the standalone oskiewar game, live room, or replay suite.","done":false,"hidden":false,"auto":true},"p":{"sig":"p","desc":"🐷 Pig, Pizza, Penguin... and the high A# note!","done":false,"hidden":false,"auto":true},"pack":{"sig":"pack","desc":"Generate a self-contained offline HTML pack for a KidLisp piece. Usage: pack~$code (e.g., pack~$bop) This loads the piece in a standalone HTML file with all …","done":false,"hidden":true,"auto":true},"paintball":{"sig":"paintball","desc":"Paint on a ball.","done":false,"hidden":true,"auto":true},"paintings":{"sig":"paintings","desc":"User painting portfolio page.","done":false,"hidden":false,"auto":true},"paste-test":{"sig":"paste-test","desc":"Open the paste test piece.","done":false,"hidden":false,"auto":true},"pedal":{"sig":"pedal","desc":"Audio effect pedal for Ableton Live - processes incoming audio through Web Audio effects.","done":false,"hidden":false,"auto":true},"pieces":{"sig":"pieces","desc":"Most recently added / edited pieces.","done":false,"hidden":false,"auto":true},"plax":{"sig":"plax","desc":"Glassy PRISM-SHARD instrument — a thin wrapper over lib/pads.mjs (the shared pad engine: UTC-clock beat grid, `params[0]` rate override e.g. `plax 0.5`,","done":false,"hidden":true,"auto":true},"pledo":{"sig":"pledo","desc":"Dot-matrix / LED-grid step SEQUENCER × house piano + four-on-the-floor — a thin wrapper over lib/pads.mjs (the shared pad engine: UTC-clock beat grid,","done":false,"hidden":true,"auto":true},"plimo":{"sig":"plimo","desc":"Voronoi / cellular-shatter pad — a thin wrapper over lib/pads.mjs (the shared pad engine: UTC-clock beat grid, `params[0]` rate override e.g. `plimo 0.5`,","done":false,"hidden":true,"auto":true},"ploo":{"sig":"ploo","desc":"Concentric SHOCKWAVE / STARBURST bloom — a thin wrapper over lib/pads.mjs (the shared pad engine: UTC-clock beat grid, `params[0]` rate override e.g.","done":false,"hidden":true,"auto":true},"pp":{"sig":"pp","desc":"Open the pp piece.","done":false,"hidden":true,"auto":true},"pressure":{"sig":"pressure","desc":"A pen HID pressure test.","done":false,"hidden":true,"auto":true},"prism":{"sig":"prism","desc":"Kaleidoscopic A-minor arpeggio pad — a thin wrapper over lib/pads.mjs (the shared pad engine: UTC-clock beat grid, `params[0]` rate override e.g.","done":false,"hidden":true,"auto":true},"q":{"sig":"q","desc":"👑 Queen, Quilt, Question... and the A# (sharp) note!","done":false,"hidden":false,"auto":true},"quem":{"sig":"quem","desc":"Dendritic crystal/coral GROWTH pad — a thin wrapper over lib/pads.mjs (the shared pad engine: UTC-clock beat grid, `params[0]` rate override e.g.","done":false,"hidden":true,"auto":true},"quilo":{"sig":"quilo","desc":"Matrix glyph-rain × chiptune arps — a thin wrapper over lib/pads.mjs (the shared pad engine: UTC-clock beat grid, `params[0]` rate override e.g.","done":false,"hidden":true,"auto":true},"r":{"sig":"r","desc":"🌈 Rainbow, Rabbit, Rain... and the G# (sharp) note!","done":false,"hidden":false,"auto":true},"r8dio":{"sig":"r8dio","desc":"📻 R8dio.dk live stream player Stream: https://s3.radio.co/s7cd1ffe2f/listen","done":false,"hidden":false,"auto":true},"rainbow-x":{"sig":"rainbow-x","desc":"Draws a centered rainbow X with extra geometric accents.","done":false,"hidden":true,"auto":true},"rainbow":{"sig":"rainbow","desc":"The original No Paint hue rotation as a standalone AC piece. It is a pixel transform, not a brush: it rotates the hue of everything already painted.","done":false,"hidden":false,"auto":true},"replay":{"sig":"replay","desc":"View and playback any aesthetic.computer tape recording.","done":false,"hidden":false,"auto":true},"robo":{"sig":"robo","desc":"Automates brush drawing by loading and executing brushes with synthetic pen data","done":false,"hidden":true,"auto":true},"rotate-text-demo":{"sig":"rotate-text-demo","desc":"Testing rotation issues at different X positions","done":false,"hidden":true,"auto":true},"rozzy":{"sig":"rozzy","desc":"Open the rozzy piece.","done":false,"hidden":false,"auto":true},"ru":{"sig":"ru","desc":"Shortcut for `russian` - translate any language to Russian.","done":false,"hidden":false,"auto":true},"rullo":{"sig":"rullo","desc":"A honeycomb gamelan pad — a thin wrapper over lib/pads.mjs (the shared pad engine: UTC-clock beat grid, `params[0]` rate override e.g. `rullo 0.5`, the","done":false,"hidden":true,"auto":true},"russian":{"sig":"russian","desc":"Translate any language to Russian.","done":false,"hidden":false,"auto":true},"s":{"sig":"s","desc":"⭐ Star, Sun, Snake... and the D# (sharp) note!","done":false,"hidden":false,"auto":true},"sab":{"sig":"sab","desc":"Live system status check - SharedArrayBuffer, embedding context, audio","done":false,"hidden":true,"auto":true},"say":{"sig":"say","desc":"A simple test piece for the TTS API. Type a word or phrase after `say` to hear it spoken.","done":false,"hidden":false,"auto":true},"screen":{"sig":"screen","desc":"Mirror another screen from your system display.","done":false,"hidden":true,"auto":true},"seash":{"sig":"seash","desc":"Lab bench proof of concept: minimal code, maximum clarity","done":false,"hidden":true,"auto":true},"see":{"sig":"see","desc":"Image generation via NVIDIA NIM FLUX.1 schnell, with a bounded GPT Image fallback and two AC style presets baked into the proxy at /api/flux.","done":false,"hidden":false,"auto":true},"shh":{"sig":"shh","desc":"Play various noise drones.","done":false,"hidden":true,"auto":true},"sifo":{"sig":"sifo","desc":"Water caustics × steel-pan — a thin wrapper over lib/pads.mjs (the shared pad engine: UTC-clock beat grid, `params[0]` rate override e.g. `sifo 0.5`, the","done":false,"hidden":true,"auto":true},"slgb":{"sig":"slgb","desc":"false.work - 2025.10.31 Automatically loads and plays the SpiderLily Game Boy Color ROM from the false.work assets directory.","done":false,"hidden":false,"auto":true},"snap":{"sig":"snap","desc":"Camera piece for taking still photos (paintings/snaps) Simple workflow: preview camera → tap to capture → save to painting","done":false,"hidden":true,"auto":true},"snappidagg":{"sig":"snappidagg","desc":"View snappidaggs from Goodiepal's archive. Usage: snappidagg [id] or snappidagg [tier:id] Examples: snappidagg 42, snappidagg flokrae:a, snappidagg garundz:2718","done":false,"hidden":false,"auto":true},"snappidaggs":{"sig":"snappidaggs","desc":"Browse the complete snappidagg archive - scrollable index. Click any entry to view it, or use keyboard to navigate.","done":false,"hidden":false,"auto":true},"softy":{"sig":"softy","desc":"The original No Paint soft brush as a standalone AC piece: a soft circle that walks, turns, and drifts its colour as it goes.","done":false,"hidden":true,"auto":true},"sork":{"sig":"sork","desc":"Isometric voxel-city pad — a thin wrapper over lib/pads.mjs (the shared pad engine: UTC-clock beat grid, `params[0]` rate override e.g. `sork 0.5`, the","done":false,"hidden":true,"auto":true},"spanish":{"sig":"spanish","desc":"Translate any language to Spanish.","done":false,"hidden":false,"auto":true},"sparkle-brush":{"sig":"sparkle-brush","desc":"Every new piece has to start somewhere...","done":false,"hidden":true,"auto":true},"speaker":{"sig":"speaker","desc":"Open the speaker piece.","done":false,"hidden":true,"auto":true},"spinning-cube":{"sig":"spinning-cube","desc":"(label \"\")","done":false,"hidden":false,"auto":true},"splat":{"sig":"splat","desc":"CPU-rendered 3D Gaussian splat with drag-to-rotate.","done":false,"hidden":true,"auto":true},"split":{"sig":"split","desc":"Run two instances of aesthetic computer inside itself, side by side. Updated 2025.12.25 - Added inter-frame messaging, orientation support, CDP hooks","done":false,"hidden":false,"auto":true},"spreadnob":{"sig":"spreadnob","desc":"AC-native UI for the Ableton spreadnob device. M4L → HTML bridge (acSn*) → bios send → disk → sound.spreadnob","done":false,"hidden":false,"auto":true},"squash":{"sig":"squash","desc":"A round-based 2D platformer for two players. Uses WebSocket for reliable game events + UDP for low-latency position sync.","done":false,"hidden":false,"auto":true},"ss":{"sig":"ss","desc":"This piece is a meta-router / shortcut for \"screenshots\".","done":false,"hidden":false,"auto":true},"stamp":{"sig":"stamp","desc":"A basic stamp brush that imports a user's painting.","done":false,"hidden":true,"auto":true},"stick":{"sig":"stick","desc":"Render clock melodies to WAV and download","done":false,"hidden":true,"auto":true},"stripes":{"sig":"stripes","desc":"Open the stripes piece.","done":false,"hidden":false,"auto":true},"subtraction":{"sig":"subtraction","desc":"Open the subtraction piece.","done":false,"hidden":false,"auto":true},"sundo":{"sig":"sundo","desc":"Slow SUNRISE DRONE — a gentle, meditative ambient PAD that shifts every couple of beats over a deep held sub, with soft airy shimmer. A thin wrapper over","done":false,"hidden":true,"auto":true},"t":{"sig":"t","desc":"🐢 Turtle, Tree, Train... and the high C# note!","done":false,"hidden":false,"auto":true},"table":{"sig":"table","desc":"A multiplayer card table — drag cards on a shared surface. Fixed table geography (like a pool table). One card per player at a time.","done":false,"hidden":false,"auto":true},"tapes":{"sig":"tapes","desc":"Browse recently posted tapes from the database Shows tapes as !codes with tappable UI text buttons","done":false,"hidden":false,"auto":true},"tavo":{"sig":"tavo","desc":"Rising-bubbles bath — a thin wrapper over lib/pads.mjs (the shared pad engine: UTC-clock beat grid, `params[0]` rate override e.g. `tavo 0.5`, the tap/XY","done":false,"hidden":true,"auto":true},"terrarium-dev":{"sig":"terrarium-dev","desc":"Hidden development seam for authenticated Mediorgan visits on loopback.","done":false,"hidden":true,"auto":true},"test-delay-timing":{"sig":"test-delay-timing","desc":"Should flash green for 1 frame, then be colored for 3 frames, then grayed out","done":false,"hidden":false,"auto":true},"test-invert":{"sig":"test-invert","desc":"Draws a red box then inverts it to cyan","done":false,"hidden":false,"auto":true},"test-write-center":{"sig":"test-write-center","desc":"Open the test write center piece.","done":false,"hidden":false,"auto":true},"theme":{"sig":"theme","desc":"Displays available prompt themes and lets you pick one. Stores the selection to `prompt:theme` and jumps back to `prompt`.","done":false,"hidden":true,"auto":true},"throb":{"sig":"throb","desc":"Miles first piece.","done":false,"hidden":false,"auto":true},"timing-highlight":{"sig":"timing-highlight","desc":"Keep this minimal: the spec's mock API only provides `write`.","done":false,"hidden":false,"auto":true},"tobby":{"sig":"tobby","desc":"Type each character in time.","done":false,"hidden":true,"auto":true},"token":{"sig":"token","desc":"Display and copy your AC authentication token for API/MCP use Requires three taps to reveal (security pattern)","done":false,"hidden":true,"auto":true},"torva":{"sig":"torva","desc":"Delaunay/triangulation-web × ACID 303 — a thin wrapper over lib/pads.mjs (the shared pad engine: UTC-clock beat grid, `params[0]` seconds-per-beat override","done":false,"hidden":true,"auto":true},"trancenwaltz":{"sig":"trancenwaltz","desc":"pop/dance/ released single — see pop/RELEASES.md. Thin wrapper around lib/pop.mjs; see disks/pop/README.md for the recipe.","done":false,"hidden":false,"auto":true},"trancepenta":{"sig":"trancepenta","desc":"pop/dance/ released single — see pop/RELEASES.md. Thin wrapper around lib/pop.mjs; see disks/pop/README.md for the recipe.","done":false,"hidden":false,"auto":true},"transform":{"sig":"transform","desc":"Test flip, flop, rotation, scaling, and anchor points for debugging painting transforms 🖼️ Comprehensive testing tool for bitmap transformations","done":false,"hidden":true,"auto":true},"tremory":{"sig":"tremory","desc":"A temperal memory trainer.","done":false,"hidden":true,"auto":true},"triangle":{"sig":"triangle","desc":"The original No Paint triangle as a standalone AC piece.","done":false,"hidden":true,"auto":true},"trido":{"sig":"trido","desc":"Boids-schooling pad — a thin wrapper over lib/pads.mjs (the shared pad engine: UTC-clock beat grid, `params[0]` rate override e.g. `trido 0.5`, the tap/XY","done":false,"hidden":true,"auto":true},"triquilt":{"sig":"triquilt","desc":"A half square triangle design tool for quilters.","done":false,"hidden":true,"auto":true},"tv":{"sig":"tv","desc":"A For You page / vertical feed for browsing !tape codes from the tv endpoint.","done":false,"hidden":true,"auto":true},"twofa":{"sig":"twofa","desc":"The 2FA Brush — comodiddy 1. An electric toothbrush that is also a hardware security key. Tap for the product sheet.","done":false,"hidden":false,"auto":true},"typecheck":{"sig":"typecheck","desc":"International type specimen for AC fonts.","done":false,"hidden":false,"auto":true},"u":{"sig":"u","desc":"☂️ Umbrella, Unicorn, Up... and the high F# note!","done":false,"hidden":false,"auto":true},"ucla-1":{"sig":"ucla-1","desc":"Basic graphics.","done":false,"hidden":true,"auto":true},"ucla-2":{"sig":"ucla-2","desc":"Interactive graphics.","done":false,"hidden":true,"auto":true},"ucla-3-keyboard":{"sig":"ucla-3-keyboard","desc":"Essential sonics and data types.","done":false,"hidden":true,"auto":true},"ucla-3":{"sig":"ucla-3","desc":"Essential sonics and data types.","done":false,"hidden":true,"auto":true},"ucla-4-box":{"sig":"ucla-4-box","desc":"Intermediate graphics and modal logic. (A rectangle painting program.)","done":false,"hidden":true,"auto":true},"ucla-4":{"sig":"ucla-4","desc":"Intermediate graphics and modal logic.","done":false,"hidden":true,"auto":true},"ucla-5":{"sig":"ucla-5","desc":"Worms and clocks.","done":false,"hidden":true,"auto":true},"ucla-6-turtle":{"sig":"ucla-6-turtle","desc":"Clocks, component design and relative coordinate systems.","done":false,"hidden":true,"auto":true},"ucla-6":{"sig":"ucla-6","desc":"Clocks, component design and relative coordinate systems.","done":false,"hidden":true,"auto":true},"ucla-7-balls":{"sig":"ucla-7-balls","desc":"Forces","done":false,"hidden":true,"auto":true},"ucla-7-dial":{"sig":"ucla-7-dial","desc":"Forces","done":false,"hidden":true,"auto":true},"ucla-7-jump":{"sig":"ucla-7-jump","desc":"Forces","done":false,"hidden":true,"auto":true},"ucla-7":{"sig":"ucla-7","desc":"Forces","done":false,"hidden":true,"auto":true},"v":{"sig":"v","desc":"🎻 Violin, Van, Volcano... and the C# (sharp) note!","done":false,"hidden":false,"auto":true},"varo":{"sig":"varo","desc":"Moiré interference × detuned pad swell — a thin wrapper over lib/pads.mjs (the shared pad engine: UTC-clock beat grid, `params[0]` rate override e.g.","done":false,"hidden":true,"auto":true},"velk":{"sig":"velk","desc":"Neon-wireframe synthwave pad — a thin wrapper over lib/pads.mjs (the shared pad engine: UTC-clock beat grid, `params[0]` rate override e.g. `velk 0.5`,","done":false,"hidden":true,"auto":true},"velsor":{"sig":"velsor","desc":"Datamosh pad scored by just-intonation dissonance — a thin wrapper over lib/pads.mjs (the shared pad engine: UTC-clock beat grid, `params[0]` rate","done":false,"hidden":true,"auto":true},"vertilok":{"sig":"vertilok","desc":"A full-screen, vertical-only cancelok feed.","done":false,"hidden":true,"auto":true},"vex":{"sig":"vex","desc":"Pixel-sort / datamosh glitch pad — a thin wrapper over lib/pads.mjs (the shared pad engine: UTC-clock beat grid, `params[0]` rate override e.g.","done":false,"hidden":true,"auto":true},"vexen":{"sig":"vexen","desc":"Pendulum wave × pentatonic pluck, RUN BACKWARDS — wexo's row of bobs drifts apart and BUILDS toward a bright realignment chord; vexen starts there.","done":false,"hidden":true,"auto":true},"vignette":{"sig":"vignette","desc":"The original No Paint vignette as a standalone AC piece.","done":false,"hidden":true,"auto":true},"vindle":{"sig":"vindle","desc":"A GROWING-VINE instrument — the melody literally DRAWS a plant. A thin wrapper over lib/pads.mjs (the shared pad engine: UTC-clock beat grid, `params[0]` rate","done":false,"hidden":true,"auto":true},"visualizer":{"sig":"visualizer","desc":"Open the visualizer piece.","done":false,"hidden":true,"auto":true},"voop":{"sig":"voop","desc":"Bouncing-droplet pentatonic score — a thin wrapper over lib/pads.mjs (the shared pad engine: UTC-clock beat grid, `params[0]` rate override e.g.","done":false,"hidden":true,"auto":true},"vroon":{"sig":"vroon","desc":"Warp-tunnel drone — a thin wrapper over lib/pads.mjs (the shared pad engine: UTC-clock beat grid, `params[0]` rate override e.g. `vroon 0.5`, the tap/XY","done":false,"hidden":true,"auto":true},"vunn":{"sig":"vunn","desc":"A GROWING FRACTAL TREE/FERN instrument — the melody RECURSIVELY BRANCHES a plant. A thin wrapper over lib/pads.mjs (the shared pad engine: UTC-clock beat","done":false,"hidden":true,"auto":true},"w":{"sig":"w","desc":"🐋 Whale, Water, Wind... and the F# (sharp) note!","done":false,"hidden":false,"auto":true},"wafer":{"sig":"wafer","desc":"The original No Paint biscuit as a standalone AC piece: it appears, gets nibbled around its rim in a shuffled order, then grows and starts again.","done":false,"hidden":true,"auto":true},"walker":{"sig":"walker","desc":"WalkerElla's nine original sprite animations as a standalone AC brush.","done":false,"hidden":true,"auto":true},"wandro":{"sig":"wandro","desc":"Pendulum-wave visual (wexo) driven by just-intonation swing ratios and a layered pluck/bell/sub voice (drolo) — a thin wrapper over lib/pads.mjs (the","done":false,"hidden":true,"auto":true},"wattajetta-stone-club":{"sig":"wattajetta-stone-club","desc":"Water-engine stone club single by Aesthetic Dot Computer.","done":false,"hidden":false,"auto":true},"weather":{"sig":"weather","desc":"Open the weather piece.","done":false,"hidden":false,"auto":true},"welto":{"sig":"welto","desc":"Pendulum wave you can GRAB — a thin wrapper over lib/pads.mjs (the shared pad engine: UTC-clock beat grid, `params[0]` rate override e.g. `welto 0.5`,","done":false,"hidden":true,"auto":true},"wexo":{"sig":"wexo","desc":"Pendulum wave × pentatonic pluck — a thin wrapper over lib/pads.mjs (the shared pad engine: UTC-clock beat grid, `params[0]` rate override e.g.","done":false,"hidden":true,"auto":true},"whistlegraphs":{"sig":"whistlegraphs","desc":"Open the whistlegraphs piece.","done":false,"hidden":true,"auto":true},"wipppps":{"sig":"wipppps","desc":"Color history for decay effect (module-level since no window object in worker)","done":false,"hidden":true,"auto":true},"wispo":{"sig":"wispo","desc":"Lissajous / harmonograph pad — a thin wrapper over lib/pads.mjs (the shared pad engine: UTC-clock beat grid, `params[0]` rate override e.g. `wispo 0.5`,","done":false,"hidden":true,"auto":true},"wobbo":{"sig":"wobbo","desc":"WOBBLE-BASS OSCILLOSCOPE — a thin wrapper over lib/pads.mjs (the shared pad engine: UTC-clock beat grid, `params[0]` rate override e.g. `wobbo 0.5`, the","done":false,"hidden":true,"auto":true},"words":{"sig":"words","desc":"A Word Munchers-style educational word game.","done":false,"hidden":false,"auto":true},"x":{"sig":"x","desc":"🩻 X-ray, Xylophone, Box... a mysterious letter with no note!","done":false,"hidden":false,"auto":true},"y":{"sig":"y","desc":"🪀 Yo-yo, Yellow, Yak... and the high D# note!","done":false,"hidden":false,"auto":true},"z":{"sig":"z","desc":"🦓 Zebra, Zoo, Zipper... the sleepy letter with no note (zzz)!","done":false,"hidden":false,"auto":true},"zh":{"sig":"zh","desc":"Shortcut for `chinese` - translate any language to Chinese.","done":false,"hidden":false,"auto":true},"zim":{"sig":"zim","desc":"Volumetric smoke pad — a thin wrapper over lib/pads.mjs (the shared pad engine: UTC-clock beat grid, `params[0]` rate override e.g. `zim 0.5`, the","done":false,"hidden":true,"auto":true},"zoom-test":{"sig":"zoom-test","desc":"Testing zoom and scaling functionality.","done":false,"hidden":true,"auto":true},"zorb":{"sig":"zorb","desc":"Reaction-diffusion DUB-TECHNO pad — a thin wrapper over lib/pads.mjs (the shared pad engine: UTC-clock beat grid, `params[0]` rate override e.g. `zorb 0.5`, the","done":false,"hidden":true,"auto":true},"zzzwap":{"sig":"zzzwap","desc":"Forked from a*.mjs for the wipppps zzzzwap track","done":false,"hidden":true,"auto":true}},"template":"<html>\n    <head>\n      <link\n        rel=\"icon\"\n        href=\"https://sitemap.aesthetic.computer/icon/128x128/prompt.png\"\n        type=\"image/png\"\n      />\n      <meta charset=\"utf-8\" />\n      <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n      <title>$name · Aesthetic Computer</title>\n      <style>\n        ::-webkit-scrollbar {\n          display: none;\n        }\n        html {\n          cursor:\n            url(\"/aesthetic.computer/cursors/precise.svg\") 12 12,\n            auto;\n        }\n        body {\n          margin: 0;\n          font-size: 22px;\n          font-family: monospace;\n          -webkit-text-size-adjust: none;\n        }\n        body.doc {\n          overflow-x: hidden;\n        }\n        h1 a, h1 a:visited {\n          color: inherit;\n          cursor: inherit;\n          text-decoration: none;\n        }\n        .links a[data-done=false] {\n          /* text-decoration: line-through; */\n        }\n        h1 {\n          font-weight: normal;\n          font-size: 22px;\n          margin: 0;\n          position: fixed;\n        }\n        h1:before {\n          content: \"\";\n          height: 2.5em;\n          width: 100vw;\n          position: absolute;\n          z-index: -1;\n          top: -16px;\n          left: -16px;\n        }\n        h1[data-done=false]:after {\n          content: \"wip\";\n          color: yellow;\n          background: maroon;\n          position: absolute;\n          right: -32px;\n          top: 0px;\n          display: block;\n          font-size: 50%;\n          padding: 0px 3px 2px 3px;\n          border-radius: 2px;\n        }\n        h2 {\n          font-weight: normal;\n          font-size: 18px;\n        }\n        iframe {\n          position: fixed;\n          top: 0;\n          left: 0;\n          width: 100%;\n          height: 100%;\n          border: none;\n          z-index: -1;\n          opacity: 0.5;\n        }\n        section {\n          margin: 12px 16px 12px 16px;\n        }\n        #pals {\n          position: fixed;\n          bottom: 5px;\n          right: 16px;\n          user-select: none;\n        }\n        p {\n          margin-top: 0;\n        }\n        #command-list, #docs-welcome {\n          margin-top: 1.5em;\n        }\n        #docs-welcome {\n          padding: 0;\n        }\n        #title {\n          display: inline-block;\n        }\n        #title.block:after {\n          content: \"_\";\n          position: absolute;\n          top: 6px;\n          right: -16px;\n          line-height: 20px;\n          color: rgb(205, 92, 155);\n          background-color: rgb(205, 92, 155);\n        }\n        a.prompt,\n        a.prompt:visited {\n          color: white;\n          text-decoration: none;\n          cursor: inherit;\n        }\n        a.prompt:hover {\n          color: rgb(205, 92, 155);\n        }\n        small {\n          opacity: 0.25;\n          font-size: 100%;\n        }\n        .code-doc {\n          padding-top: 2.5em;\n          font-size: 65%;\n          padding-left: 1px;\n        }\n        .doc-body {\n          margin-top: 1em;\n        }\n        .doc-body table {\n          border-collapse: collapse;\n          width: 100%;\n          max-width: 960px;\n          margin-top: 0.75em;\n          margin-bottom: 0.75em;\n        }\n        .doc-body th,\n        .doc-body td {\n          text-align: left;\n          border: 1px solid rgba(255, 255, 255, 0.2);\n          padding: 0.4em 0.5em;\n          vertical-align: top;\n        }\n        .doc-body ul {\n          padding-left: 1.2em;\n          margin-top: 0.6em;\n          margin-bottom: 0.6em;\n        }\n        .doc-body h3 {\n          margin: 0.8em 0 0.4em;\n          font-size: 1em;\n          font-weight: normal;\n        }\n        .status-badge {\n          display: inline-block;\n          padding: 0.1em 0.45em;\n          border-radius: 0.35em;\n          font-size: 0.9em;\n          text-transform: lowercase;\n          border: 1px solid currentColor;\n          white-space: nowrap;\n        }\n        .status-done {\n          color: #4ade80;\n        }\n        .status-in-progress {\n          color: #fbbf24;\n        }\n        .status-planned {\n          color: #94a3b8;\n        }\n        .doc-examples {\n          display: grid;\n          gap: 0.75em;\n        }\n        .doc-example {\n          border: 1px solid rgba(255, 255, 255, 0.2);\n          padding: 0.45em 0.6em;\n          border-radius: 0.35em;\n        }\n        .code-doc-welcome {\n          padding-top: 2.75em;\n          font-size: 65%;\n          padding-bottom: 3em;\n        }\n        .lane-grid {\n          display: grid;\n          gap: 14px;\n          grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n        }\n        .lane-card {\n          border: 1px solid rgba(255, 255, 255, 0.22);\n          border-radius: 8px;\n          padding: 10px 11px 11px 11px;\n        }\n        .lane-card.lane-mjs {\n          border-color: rgba(124, 212, 255, 0.45);\n          background: linear-gradient(180deg, rgba(26, 60, 86, 0.2), rgba(26, 60, 86, 0.05));\n        }\n        .lane-card.lane-l5 {\n          border-color: rgba(245, 213, 66, 0.5);\n          background: linear-gradient(180deg, rgba(90, 75, 0, 0.22), rgba(90, 75, 0, 0.08));\n        }\n        .lane-card.lane-processing {\n          border-color: rgba(86, 220, 255, 0.5);\n          background: linear-gradient(180deg, rgba(9, 71, 92, 0.22), rgba(9, 71, 92, 0.08));\n        }\n        .lane-card.lane-kidlisp {\n          border-color: rgba(102, 230, 187, 0.45);\n          background: linear-gradient(180deg, rgba(16, 74, 56, 0.2), rgba(16, 74, 56, 0.06));\n        }\n        .lane-card.lane-prompts {\n          border-color: rgba(248, 168, 78, 0.45);\n          background: linear-gradient(180deg, rgba(92, 41, 10, 0.2), rgba(92, 41, 10, 0.06));\n        }\n        .lane-card.lane-pieces {\n          border-color: rgba(230, 125, 175, 0.42);\n          background: linear-gradient(180deg, rgba(78, 24, 63, 0.2), rgba(78, 24, 63, 0.06));\n        }\n        .lane-head {\n          display: flex;\n          align-items: center;\n          justify-content: space-between;\n          gap: 8px;\n          margin-bottom: 0.45em;\n        }\n        .lane-title {\n          font-size: 1.1em;\n        }\n        .lane-mjs .lane-title {\n          color: #9bddff;\n        }\n        .lane-l5 .lane-title {\n          color: #ffe37a;\n        }\n        .lane-processing .lane-title {\n          color: #93ecff;\n        }\n        .lane-kidlisp .lane-title {\n          color: #9ff2d4;\n        }\n        .lane-prompts .lane-title {\n          color: #ffd29a;\n        }\n        .lane-pieces .lane-title {\n          color: #f3b3d3;\n        }\n        .lane-count {\n          font-size: 0.92em;\n          opacity: 0.75;\n          white-space: nowrap;\n        }\n        .lane-subtitle {\n          font-size: 0.95em;\n          opacity: 0.9;\n          margin-bottom: 0.65em;\n        }\n        .lane-section {\n          margin-top: 0.75em;\n        }\n        .lane-section h3 {\n          margin: 0 0 0.25em 0;\n          font-size: 0.95em;\n          font-weight: normal;\n          opacity: 0.85;\n        }\n        .doc-meta {\n          margin-top: 0.3em;\n          font-size: 0.92em;\n          opacity: 0.8;\n          display: flex;\n          flex-wrap: wrap;\n          gap: 8px;\n        }\n        .doc-status {\n          text-transform: lowercase;\n        }\n        .doc-grid {\n          display: grid;\n          gap: 11px;\n        }\n        .doc-block {\n          border: 1px solid rgba(255, 255, 255, 0.2);\n          border-radius: 8px;\n          padding: 0.55em 0.7em;\n        }\n        .doc-block h2 {\n          margin: 0 0 0.4em;\n          font-size: 1em;\n          text-transform: uppercase;\n          letter-spacing: 0.04em;\n          opacity: 0.85;\n        }\n        .doc-preview {\n          border: 1px solid rgba(255, 255, 255, 0.2);\n          border-radius: 8px;\n          overflow: hidden;\n        }\n        .doc-preview iframe {\n          position: static !important;\n          z-index: auto !important;\n          opacity: 1 !important;\n          width: 100% !important;\n          height: 100% !important;\n          min-height: 280px;\n          border: 0;\n          display: block;\n        }\n        .doc-preview-head {\n          padding: 0.45em 0.65em;\n          font-size: 0.9em;\n          border-bottom: 1px solid rgba(255, 255, 255, 0.2);\n        }\n        .doc-preview-body {\n          min-height: 280px;\n        }\n        .doc-preview-links {\n          display: flex;\n          flex-wrap: wrap;\n          gap: 7px;\n          margin-top: 0.65em;\n        }\n        .doc-preview-links a {\n          text-decoration: none;\n          padding: 3px 6px;\n          border: 1px solid rgba(255, 255, 255, 0.26);\n          border-radius: 6px;\n        }\n        .doc-preview-links button {\n          text-decoration: none;\n          padding: 3px 6px;\n          border: 1px solid rgba(255, 255, 255, 0.26);\n          border-radius: 6px;\n          background: transparent;\n          color: inherit;\n          font: inherit;\n          cursor: pointer;\n        }\n        pre {\n          margin-top: 1em;\n          margin-bottom: 1em;\n        }\n        pre code.hljs {\n          padding: 0.2em 0em;\n          position: relative;\n          overflow-x: visible;\n        }\n        pre code.hljs:after {\n          content: \"\";\n          height: 100%;\n          top: 0;\n          right: -16px;\n          width: 16;\n          background-color: #f3f3f3;\n          position: absolute;\n        }\n        pre code.hljs:before {\n          content: \"\";\n          height: 100%;\n          top: 0;\n          left: -16px;\n          width: 16px;\n          background-color: #f3f3f3;\n          position: absolute;\n        }\n        .links a {\n          text-decoration: none;\n          /* border: 1px solid; */\n          padding: 4px;\n        }\n        @media (prefers-color-scheme: dark) {\n          body {\n            background-color: rgb(64, 56, 74);\n            color: rgba(255, 255, 255, 0.85);\n          }\n          h1 a:hover {\n            color: rgb(205, 92, 155);\n          }\n          h1:before {\n            background-image: linear-gradient(to bottom, rgba(64, 56, 74, 0.75) 80%, transparent);\n          }\n          .hljs-title.function_ {\n            color: rgb(225, 105, 175);\n          }\n          .hljs {\n            color: white;\n          }\n          pre code.hljs,\n          pre code.hljs:after,\n          pre code.hljs:before {\n            background: rgb(25, 0, 25);\n          }\n          .links a {\n            color: rgb(205, 92, 155);\n          }\n          .links a.top-level {\n            color: rgb(92, 205, 155);\n          }\n        }\n        @media (prefers-color-scheme: light) {\n          body {\n            background-color: rgba(244, 235, 250);\n          }\n          .doc-body th,\n          .doc-body td,\n          .doc-example,\n          .lane-card,\n          .doc-block,\n          .doc-preview,\n          .doc-preview-head,\n          .doc-preview-links a,\n          .doc-preview-links button {\n            border-color: rgba(0, 0, 0, 0.2);\n          }\n          .lane-card.lane-mjs {\n            background: linear-gradient(180deg, rgba(206, 237, 255, 0.8), rgba(238, 248, 255, 0.7));\n            border-color: rgba(49, 133, 173, 0.55);\n          }\n          .lane-card.lane-l5 {\n            background: linear-gradient(180deg, rgba(255, 247, 185, 0.85), rgba(255, 252, 220, 0.7));\n            border-color: rgba(179, 149, 37, 0.55);\n          }\n          .lane-card.lane-processing {\n            background: linear-gradient(180deg, rgba(205, 244, 255, 0.85), rgba(233, 251, 255, 0.72));\n            border-color: rgba(37, 137, 179, 0.55);\n          }\n          .lane-card.lane-kidlisp {\n            background: linear-gradient(180deg, rgba(204, 245, 230, 0.8), rgba(233, 252, 245, 0.7));\n            border-color: rgba(41, 141, 102, 0.5);\n          }\n          .lane-card.lane-prompts {\n            background: linear-gradient(180deg, rgba(255, 227, 194, 0.82), rgba(255, 244, 226, 0.72));\n            border-color: rgba(176, 108, 41, 0.5);\n          }\n          .lane-card.lane-pieces {\n            background: linear-gradient(180deg, rgba(255, 216, 236, 0.82), rgba(255, 238, 247, 0.72));\n            border-color: rgba(161, 73, 115, 0.46);\n          }\n          .lane-mjs .lane-title {\n            color: rgb(20, 90, 128);\n          }\n          .lane-l5 .lane-title {\n            color: rgb(130, 102, 0);\n          }\n          .lane-processing .lane-title {\n            color: rgb(8, 101, 138);\n          }\n          .lane-kidlisp .lane-title {\n            color: rgb(24, 112, 76);\n          }\n          .lane-prompts .lane-title {\n            color: rgb(132, 76, 18);\n          }\n          .lane-pieces .lane-title {\n            color: rgb(125, 43, 83);\n          }\n          a.prompt, a.prompt:visited {\n            color: rgb(64, 56, 74);\n          }\n          h1 a:hover, a.prompt:hover {\n            color: rgb(205, 92, 155);\n          }\n          h1:before {\n            background-image: linear-gradient(to bottom, rgba(244, 235, 250, 0.75) 80%, transparent);\n          }\n          .hljs-title.function_ {\n            color: rgb(205, 92, 155);\n          }\n          .links a {\n            color: rgb(180, 72, 135);\n          }\n          .links a.top-level {\n            color: green;\n          }\n        }\n        .nolink {\n          user-select: none;\n          pointer-events: none;\n        }\n      </style>\n      <link\n        rel=\"stylesheet\"\n        href=\"https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.5.1/styles/default.min.css\"\n      />\n      <script nonce=\"$nonce\" src=\"https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.5.1/highlight.min.js\"></script>\n      <script nonce=\"$nonce\">\n        hljs.highlightAll();\n      </script>\n    </head>\n    <body class='doc'>\n      <section><h1 data-done=\"$done\" id=\"title\"><a href=\"/docs\">$name</a></h1>\n    <div class=\"code-doc\">\n      <pre><code class=\"language-$lang\">$sig</code></pre>\n      <p>$desc</p>\n      <div class=\"doc-body\">$body</div>\n    </div></section>\n      <img\n        id=\"pals\"\n        width=\"64\"\n        src=\"https://sitemap.aesthetic.computer/purple-pals.svg\"\n      />\n      <script nonce=\"$nonce\">\n        const titleLink = document.querySelector(\"#title a\");\n        if (window.self !== window.top && titleLink.innerText === \"docs\") {\n          title.classList.add(\"nolink\");\n        }\n        const docPreviewFrame = document.getElementById(\"doc-preview-frame\");\n        const docPreviewBase = docPreviewFrame?.dataset?.src || docPreviewFrame?.src || \"\";\n        function withFreshTimestamp(url) {\n          if (!url) return \"\";\n          try {\n            const next = new URL(url, window.location.origin);\n            next.searchParams.set(\"t\", Date.now());\n            return next.toString();\n          } catch (_err) {\n            const joiner = url.includes(\"?\") ? \"&\" : \"?\";\n            return url + joiner + \"t=\" + Date.now();\n          }\n        }\n        window.runDocPreview = function runDocPreview() {\n          if (!docPreviewFrame) return;\n          docPreviewFrame.src = withFreshTimestamp(docPreviewFrame.src || docPreviewBase);\n        };\n        window.resetDocPreview = function resetDocPreview() {\n          if (!docPreviewFrame || !docPreviewBase) return;\n          docPreviewFrame.src = withFreshTimestamp(docPreviewBase);\n        };\n        // 🌠 Live editing (while developing aesthetic locally)\n        if (false) {\n          var socket = new WebSocket(\"ws://localhost:8889\");\n\n          socket.onopen = function (event) {\n            console.log(\"🟢 Live editing enabled.\");\n          };\n\n          socket.onmessage = function (event) {\n            const msg = JSON.parse(event.data);\n            console.log(\"🟡 Message from server:\", msg);\n            if (msg.type === \"reload\") document.location.reload();\n          };\n\n          socket.onerror = function (event) {\n            console.error(\"🔴 Error observed:\", event);\n          };\n\n          socket.onclose = function (event) {\n            console.log(\"🔴 Live editing disabled.\");\n          };\n        }\n      </script>\n    </body>\n  </html>"}