100% OVERVIEW
○ △ □ → — draw · wheel/pinch zoom · space+drag to pan · drag □ anchors to deform
blackmirror — bash
WIDTH
SHAPE
FILL
LINE
FILL
LINE

USAGE — BLACK MIRROR BOARD v1.2

TOOLS

↑ 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

MARQUEE (v0.9)

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

PAN / ZOOM (v0.7+)

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 / LOAD (v0.7+)

SAVE   download .json — all objects + terminal log
OPEN   import .json — fully restore project
Local only. No upload. No account required.

TERMINAL FILE OPS (v1.2)

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.

ANCHOR POINTS

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)

FILL

  outline    black    grey    white
Set before drawing, or apply to selected object.

KEYBOARD

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

SHAPES → COMMANDS

  git init / npm create
  docker run / kubectl apply
  git branch / if-else build
  docker build / terraform
  curl | jq / grep | sort
T  stdin echo → terminal

TERMINAL COMMANDS

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)

PRESET SPELLS (v1.2)

$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

IMAGES (v1.2)

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

SPELL MANAGEMENT

register <name> <js>   save a JS action as $name
alias <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 .json file 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 to localStorage for portability.

EXPORT (v1.2)

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

AI SPELLS (v1.2)

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