○ △ □ → — draw · wheel/pinch zoom · space+drag to pan · drag □ anchors to deform
blackmirror — bash
❯
↑ Select tap/click · drag to move · Del to delete
↳ drag ○ handle above box to rotate
↳ drag blue □ anchors to deform (single select)
↳ drag on empty canvas → marquee multi-select
✎ Pen draw freely — shape detected on lift
⌫ Eraser tap object to remove
○ △ □ → drag to place shape → terminal fires
🪣 Fill tap bucket → pick none/black/grey/white
T Text tap canvas, type, Enter to confirm
Drag on empty canvas → blue dotted rect. Release → all fully-enclosed objects selected. drag move whole group ○ handle rotate whole group Del delete all selected Esc deselect all
Space + drag pan canvas (desktop) 2-finger drag pan canvas (mobile / trackpad) Pinch zoom in / out (touch) Wheel zoom in / out (mouse) Dbl-tap/click reset view to 100%
SAVE download .json — all objects + terminal log OPEN import .json — fully restore project Local only. No upload. No account required.
save <name> commit canvas → blackmirror / projects
ls list every snapshot
load <name> restore a snapshot to the canvas
snapshots live in IndexedDB — survive reloads, no upload.
Select → blue □ anchors appear. Drag to deform: ○ 4 edge points (radii) △ 3 vertices (free edit) □ 4 corners + 4 edge midpoints → start + end endpoints ✎✐ every vertex editable (pen strokes auto-simplified)
○ outline ● black ◑ grey □ white Set before drawing, or apply to selected object.
S P N E C G Q A T switch tool (N = path/anchor) I upload image from disk X export selection → transparent PNG 1 2 3 line width Space hold to pan Shift (resize) lock aspect ratio Alt / Option (resize) scale from center Cmd+Z / Cmd+Shift+Z undo / redo Del / Backspace delete selected Esc cancel / deselect
○ git init / npm create ◎ docker run / kubectl apply △ git branch / if-else build □ docker build / terraform → curl | jq / grep | sort T stdin echo → terminal
dark / light / gray theme switch Black Mirror live selfie wipe · top-right · drag to reposition Black Mirror off dismiss the selfie wipe youtube a surprise awaits help / ? quick in-terminal reference usage / man / docs summon this manual overlay clear / flush wipe terminal output objects dump every object (debug)
$scatter scatter selected objects
$grid-3x3 place a 3×3 square grid
$biwako-blue retint every stroke to #0044CC
$fetch-img <kw> <n> summon n images (Lorem Flickr, no key)
$monoclo grayscale the selected image(s)
$svg export selection as editable vector SVG
I key upload an image from disk (dataURL) fetch-img sea 6 6 photos · auto 3×2 grid · color by default monoclo select image(s) → grayscale · Cmd+Z reverts · max 25 per fetch · grid cols = ceil(√n) · CORS-safe images are dataURL-persisted into bundles
register <name> <js> save a JS action as$namealias <new>=<old> duplicate under a new name share <name> copy command JSON → clipboard share (no args) generate a URL that re-opens your exact canvas list preset + user spells inventory forget <name> remove a user spell (presets protected) paste{"command":"...","action":"..."}into the terminal → auto-register. Enter not required. drop a.jsonfile anywhere on the board · single / array / blackmirror.spells / blackmirror.bundle · same name → renamed<name>_2026-04-19· identical action → skipped · preset never overwritten spells live in IndexedDB (blackmirror / commands), mirrored tolocalStoragefor portability.
export selection → transparent PNG (or X key) $svg selection → editable SVG (Illustrator / Figma) export magic spell picker modal (checkbox-per-spell) export data bundle dialog (canvas / user / preset) export-all non-interactive · project + all spells export-spells [names] non-interactive · spells package
Ask Claude / ChatGPT for a spell by pasting:
Make a Black Mirror Board spell as JSON:
{"command":"NAME","action":"JS"}
BM API: getSelected(), all(), create(type, props),
translate, setStroke, setFill, remove, viewCenter,
rand(min,max), log(msg,cls), redraw(), save().
types: circle | square | triangle | arrow | text
NO 'rect'. NO async/await. Always end with redraw().
Paste the JSON back into the terminal — auto-registers.
Full guide → usage.html §5