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

USAGE — BLACK MIRROR BOARD v1.3

v1.3 NEW

GIF on canvas           drop a .gif file → animates in place
                            (copy-paste from web converts to PNG; use file D&D)
align <direction>       align 2+ selected objects:
                            left / center / right / top / middle / bottom
distribute h | v      evenly space 3+ selected objects (by center)
tpl <name>             instant scaffold at view center:
                            wireframe · kanban · mindmap · moodboard
                            tpl alone opens a picker modal

bg-pattern <name>       dots / grid / cross / dotted-grid / stripes
bg-opacity 0-100        adjust background pattern opacity
bg none                  clear background pattern
drawmode <name>          classic (BMBoard signature pencil) / tldraw (smooth vector style)
DUP button (header)     1-tap duplicate of selected object — mobile-friendly,
                            no long-press required

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 · with selection: 1-tap batch-delete
○ △ □ →   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 (Eraser tap on mobile)
  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.

⚠ IMAGES & AUTOSAVE
Autosave (localStorage) stores shapes, text, and
positions — but NOT image pixel data.
If your board contains images, always SAVE to .json
before closing or reloading. Images are fully
embedded in the .json and restore on OPEN.

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
$sticky-3x3             place a 3×3 yellow sticky-note grid
$sakura                 桜の花びらをループで降らせる (toggle)
$rain                   雨をループで降らせる (toggle)
$leaf                   茶色の落ち葉をループで降らせる (toggle)
$snow                   雪をループで降らせる (toggle)
$powerpoint             16:9 slide frame + title/body プレースホルダ配置
$biwako-blue            retint every stroke to #0044CC
$make-img <kw> <n>      summon n images (Lorem Flickr, no key) · alias: $fetch-img
$monoclo                grayscale the selected image(s)
$svg                    export selection as editable vector SVG

IMAGES (v1.2)

I key              upload an image from disk (dataURL)
make-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

⚠ IMAGE PERSISTENCE
Images are NOT saved by autosave (localStorage limit).
They exist in memory for the current session only.
→ Use SAVE or export data to write a .json file.
→ The .json contains full image data and restores on OPEN.
→ Tip: save to iCloud Drive to share between Mac and iPhone.

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)

bgm 1 on               start ambient bgm track 1 (lofi)
bgm 2 on / bgm 3 on      switch to track 2 / 3
bgm off                stop bgm
volume off / mute       silence click + timer beep + chime

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 pptx / pptx      selection → editable .pptx (PowerPoint / Keynote)
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
BLACK MIRROR BOARD
BLACK MIRROR BOARD