◼ COMMAND REFERENCE — v1.2
あなた専用のスペルブック。左の目次をクリックすると、各コマンドの詳細がこちら側で展開します。
$command の形式は "呪文(spell)" — プリセットとユーザー定義どちらも同じ表記です。
▸Quick Start — I want to…
BMBoard を久しぶりに開いて「あれ、何ができるんだっけ?」となった時のチートシート。
やりたい事 → 打つコマンドの逆引きです。詳細は各セクションへ。
- 図形を出したい → キーボード
C(円)/Q(四角)/G(三角)/A(矢印) - フリーハンドで描く →
P(pen) - テキスト →
T→ クリックして入力 - 画像を貼る →
I(ファイル選択) / 直接ドラッグ&ドロップ / スクショ →⌘ + Vでペースト - スクショの撮り方 → Mac
⌘ + Shift + Ctrl + 4(クリップボード)/⌘ + Shift + 4(ファイル → D&D) · WindowsPrtScn(通常キー)/Win + Shift + S - キーワードで画像を呼ぶ →
fetch-img mountain 6
- 選択 →
S→ クリック / 範囲ドラッグ - 削除 → 選択して
Delete/Backspace - 取り消し →
⌘ + Z/ やり直し⌘ + Shift + Z - パン →
Space+ ドラッグ - ズーム → ホイール or ピンチ / リセット
ダブルタップ - 画像を白黒に → 選択して
monoclo
- テーマ切替 →
light/dark/gray - 履歴を消す →
clear - プリセット魔法を見る →
list - 過去の入力を呼ぶ → ターミナルで
↑/↓ - ヘルプ →
help
- キャンバスを保存 →
save name - 保存一覧 →
ls - 呼び戻し →
load name - PNG で書き出し →
Xまたはexport - SVG で書き出し →
svg(Illustrator/Figma 編集可) - URL でシェア →
share(gzip+URL に圧縮)
- 魔法を一発実行 →
$spell-nameまたはspell-name - 登録済の魔法を見る →
list - 自分で魔法を作る → ↓ Write Your First Spell
- 他人の魔法を取り込む → JSON を canvas に drag-drop
- 魔法を共有 →
share spell-nameでクリップボードにコピー
- 自撮りカメラで自分を映す →
Black Mirror - カメラ OFF →
Black Mirror off - ? →
youtube
▸Write Your First Spell
"魔法 (spell)" は 選択中の図形を変形させる JS スニペット。
register で名前付き登録 → 以降は $その名前 で何度でも呼び出せる。
他人にも JSON 1 個で送れる。
円を描いて選択 → ターミナルに
$biwako-blue と打つ → 線が琵琶湖ブルー (#0044CC) に。これが「魔法」の最小例。1 行で全選択を一括変換します。
ターミナルに以下を 1 行で打つ:
register paint-red for(const o of BM.all()){BM.setStroke(o,'#FF0000')}BM.redraw();BM.log('painted red!')
登録完了。次から $paint-red で全図形が赤線になる。
register spell-name JS コード の形式で登録。コードの中で BM.xxx() という API が使える。
よく使う API:
BM.all()— 全図形の配列BM.getSelected()— 今選択中の図形BM.setStroke(obj, color)— 線の色を変えるBM.translate(obj, dx, dy)— 位置をずらすBM.create(type, props)— 新規作成 (`circle` / `square` / `triangle` / `arrow` / `text`)BM.redraw()— 反映BM.log(text)— ターミナルにメッセージ
share paint-red → JSON がクリップボードへ。SNS や Discord に貼り付ければ、相手はそれを drag-drop or paste するだけで使える。「自分の作品 + 自作魔法」をワンセットで人に送れるのが BMBoard の核です。
ChatGPT や Claude に「BM API(
BM.all() / BM.setStroke() / BM.translate())を使って、選択した全図形をランダム位置に散らす JS スニペットを 1 行で」と頼めば、すぐ出してくれる。出力をそのまま
register scatter-mine ... に貼って登録、で完成。
register は JS をそのまま実行できます。
知らない人から受け取った魔法を取り込む前に、JSON の中身を確認してください。怪しいコードは登録しない。
01Themes
一語でパレット全体を切り替える。キャンバス / ツールバー / ポップオーバー / ヘッダが連動。
lightpaper ground · default
THEME›
背景 #FAFAF8 / インク #0c0c0c。標準テーマ。
別名: light mode
darkvoid / CRT phosphor
THEME›
背景 #000000 / インク #F0EDE6。ダークモード。
別名: dark mode
注: オブジェクトのfillは元のlight-modeの色を保持しており、描画時に resolveFill() で反転される(破壊的変更なし)。
graypebble + cobalt · studio palette
THEME›
背景 #DCDBD5(暖かい石色)/ アクセント #1600A2(エレクトリックコバルト)。
別名: grey, gray mode, grey mode
02Canvas Control
ターミナルの出力を消す。キャンバス上のオブジェクトは消えない(それはヘッダの CLEAR ボタンや選択→Del で)。
clearwipe terminal output
TERMINAL›
ターミナルの出力ログをクリア。キャンバスは無変更。
flushalias of clear
TERMINAL›
clear と同じ。
03Camera / Black Mirror Wipe
自分のウェブカメラをセルフミラーでPIP表示。ドラッグで好きな場所に置ける。YouTubeライブ/スクリーン収録/描きながら自分を見たいときに。
Black Mirrorcamera ON · draggable PIP
CAMERA›
getUserMedia を呼び、右上にPIP (220×165 / モバイル 128×170) を配置。赤い REC ドットが点滅、◼ BLACK MIRROR ラベルは mix-blend-mode: difference。
フレームを掴むとドラッグで移動可能。ホバーで × クローズが表示。
別名: Black Mirror on
Black Mirror offrelease camera tracks
CAMERA›
トラックを全解放してPIPを閉じる。タブを閉じなくてもカメラのインジケーターはすぐに消える。
別名: Black Mirror-off
04Project Persistence
すべて IndexedDB にローカル保存。サーバー無し、クラウド無し。
save <name>snapshot canvas + view
IndexedDB›
キャンバス全体とビュー (scale / tx / ty) を <name> で保存。
名前ルール: [a-zA-Z0-9][a-zA-Z0-9_\-. ]{0,40}
> save biwako-study → serializing... → 23 object(s) [SUCCESS] Snapshot 'biwako-study' committed.
lslist all snapshots
IndexedDB›
保存済みのスナップショット一覧。新しい順。
load <name>restore a snapshot
IndexedDB›
指定のスナップショットに戻す。選択状態はリセットされ、ビューも復元される。
05Export
SVG / PNG / JSON バンドル。全てローカル、クラウド不要。
$svgeditable SVG for Figma / Illustrator
EXPORT›
選択オブジェクト(無ければ全体)をネイティブSVGに書き出し。すべてのプリミティブが対応:
circle→<ellipse>square→<rect>triangle→<polygon>arrow→<line>+<polygon>頭text→<text dominant-baseline="hanging">stroke→<path M…Q…>image→<image>- 回転は
<g transform="rotate(θ cx cy)">でラップ
exportproject → .json
EXPORT›
現在のプロジェクトを .json で書き出し。ヘッダの SAVE ボタンと同等。
export-allproject + spells → .json bundle
EXPORT›
プロジェクト + 登録済みスペル全部を1つの .json に。自分のBMセットアップの完全バックアップ。
別名: exportall
export-spells [names...]spells only
EXPORT›
スペルだけ。名前を空白区切りで指定すると、それだけを含む。無指定なら全ユーザースペル。
別名: exportspells
Xtransparent PNG (keyboard) PNG›
選択オブジェクト(無ければ全体)をbbox切り抜きの透過PNGで書き出し。3× DPR上限でメモリスパイク抑止。
06Spellbook
機能は買うものじゃなく、呪文として共有するもの。1行のJSで新機能を登録、JSONで他人と交換。
listevery registered spell
META›
登録済みコマンド全部を [preset] または [ user ] タグ付きで列挙。
register <name> <js>install a new spell
META›
新しいスペルを登録。名前の制約: [a-z0-9][a-z0-9_-]{0,30}。
> register hi BM.log('hello, spellbook!')
→ compiling...
→ persisting...
[OK] $hi — try it now.
alias <new>=<old>clone an existing spell
META›
既存スペルに別名を付ける。短縮名を作りたい時に。
forget <name>remove a user spell
META›
ユーザースペルを削除。プリセットは削除できない。
別名: unregister
paste JSONinstall from a payload
META›
JSONペイロードをターミナルに貼るだけでスペル登録。形式:
{
"command": "my-spell",
"action": "BM.log('hello from JSON')"
}
スキーマチェックが通ると IndexedDB にバインドされ、以後 $my-spell で呼べる。
07Preset Spells
ビルトインのスペル。いずれも $name の形で呼び出し。貼り直せば上書き可能。
$scatterrandom-jitter the selection
PRESET›
選択オブジェクトを ±400px (x) / ±300px (y) の範囲でランダムに移動。
$grid-3x3place 9 squares
PRESET›
ビューの中心に 80×80 の四角を 3×3 で配置。ワイヤーフレームの下敷きに。
$biwako-blueretint all objects #0044CC
PRESET›
全オブジェクトのストローク(と存在すればfill)を #0044CC に。"Biwako Silence" パレット。
$svgexport SVG
PRESET›
Export セクション参照。
$monoclograyscale selected image(s)
PRESET›
選択画像をグレースケール化(grayscale(100%) contrast(110%) brightness(95%))。オフスクリーンcanvasでdataURLを書き換え、元画像はそのまま残さない(上書き)。
08Image Brainstorm
キーワードを投げると、イメージが散らばる。ブレスト用、思考のノンストップ。
$fetch-img [keyword] [n]mood-board scatter
PRESET›
使い方
$fetch-img— 1枚 (biwako)$fetch-img ocean— 1枚 (キーワードocean)$fetch-img ocean 9— 9枚(上限 25)
公開画像フィードから取得、ランダム回転と余白でキャンバスに散布。CORS安全な画像は永続化可能、ブロックされた画像はプレースホルダで代替。
10Help / Docs
helpquick reference card
DOC›
ターミナル内でクイックリファレンスを表示。登録済みスペル数と主要コマンドをまとめて確認できる。
別名: ?
usageopen full USAGE panel
DOC›
詳細なマニュアルパネルを開く。Escで閉じる。
別名: man, docs
11Easter Eggs / Diagnostics
youtubetrigger animation
EGG›
YouTube イースターエッグのアニメーションを発火。別名 yt, youtube.com。
objectsprint raw objects array
DIAG›
内部の S.objects 配列をダンプ。スペル作成時のデバッグに。
test-parse <text>echo tokens
DIAG›
入力のパース結果を返す。スペル作成時の引数挙動確認に。
12Ideas to Extend
以下はまだ実装していない候補。いずれも register か JSON ペーストで追加できる。
Claude や ChatGPT に BM API と一文の意図を渡せば、動くJSONが返ってくる。
align <edge>align selection
IDEA · LAYOUT›
選択オブジェクトを共通の辺に揃える: left / right / top / bottom / center-x / center-y。
distribute-h / distribute-vequal spacing
IDEA · LAYOUT›
3つ以上の選択オブジェクト間のギャップを均等化。水平 / 垂直を別コマンドに。
group / ungroupvirtual grouping
IDEA · STRUCTURE›
選択オブジェクトを仮想グループ化。S に groups マップを追加し、ヒットテストがグループを優先する。
bring-front / send-backz-order swap
IDEA · STRUCTURE›
描画順を直接操作。raise / lower で1段ずつ、bring-front / send-back で両端に。
flip-h / flip-v / mirror <axis>flip selection
IDEA · GEOMETRY›
選択オブジェクトを水平/垂直反転。
palette <name>apply a palette
IDEA · COLOR›
名前付きパレットを一括適用(biwako / ink-brush / crt / ...)。$biwako-blue をベースに多色化。
sepia / noir / neon / duotoneimage filters
IDEA · IMAGE›
$monoclo の兄弟コマンド。duotone <hex1> <hex2> で2色マッピング。
grain <amount>sprinkle pixel noise
IDEA · IMAGE›
選択画像にピクセルグレインを散らす。amount で強度調整。
sticky <text>post-it note object
IDEA · INPUT›
黄色い付箋風テキストオブジェクト。リサイズ可・回転可。ブレスト専用。
checkbox <text>interactive tickbox
IDEA · INPUT›
クリックで✓が入る小さなトグル付きテキスト。TODO用。
callout <text>arrow + label combo
IDEA · INPUT›
矢印+ラベルをまとめた一発作成。画面キャプチャに注釈をつけるワークフロー向け。
timer <min>pomodoro countdown
IDEA · PRODUCTIVITY›
PIPスロットでカウントダウン。0で通知。集中作業支援。
countobject type stats
IDEA · DIAG›
キャンバス上のオブジェクトをtype別に集計。
search <keyword>highlight matches
IDEA · DIAG›
テキストオブジェクトの本文・タグから検索し、マッチしたものを点滅ハイライト。
speak <text>Web Speech TTS
IDEA · AUDIO›
Web Speech API でテキストを読み上げる。配信やプレゼンテーションに。
hearspeech → text
IDEA · AUDIO›
Web Speech Recognition で音声入力。認識結果をテキストオブジェクトとして配置。
ai <prompt>ask AI for a spell
IDEA · AI›
プロンプトをAIに渡し、返ってきたJSONをそのまま登録。fetch で OpenAI / Anthropic / Gemini 互換APIを叩く設計に。
replaystroke animation
IDEA · FUN›
ストローク生成順を記録しておき、アニメーションで再生。制作プロセスの記録に。
layer new / layer hidenamed layers
IDEA · STRUCTURE›
オブジェクトに layer タグを付与し、表示/非表示を切替。最小限の階層化。
13Keyboard Shortcuts
キーボードから直接触れるアクション一覧。
| Key | Action |
|---|---|
| S | select |
| P | pen (freehand) |
| N | path (bezier) |
| E | eraser |
| C | circle |
| G | triangle |
| Q | square |
| A | arrow |
| T | text |
| 1 / 2 / 3 | stroke width 1 / 2 / 3 |
| Space + drag | pan view |
| X | export selection (or all) → transparent PNG |
| Ctrl/⌘ + Z | undo |
| Ctrl/⌘ + Y or Shift+Z | redo |
| Del / Backspace | delete selected (ignored during text edit) |
| Shift (during drag) | aspect-lock resize |
| Alt (during drag) | resize from the opposite anchor |
| Esc | cancel gesture / exit text edit |
14The BM API
スペル作者向けの最小API。スペルのJSは args(コマンド以降の文字列)と BM オブジェクトを使える。
BM.*spell runtime surface
API›
BM.all() // array of every object on the canvas
BM.getSelected() // array of currently-selected objects
BM.redraw() // mark dirty, re-render
BM.save() // commit to IndexedDB
BM.log(msg, cls?) // print to the terminal
// cls: 't-ok' | 't-err' | 't-dim'
BM.create(type, data) // new object; type =
// 'circle' | 'square' | 'triangle'
// | 'arrow' | 'text' | 'image' | 'stroke'
BM.translate(obj, dx, dy)
BM.viewCenter() // { x, y } in world coords
BM.rand(a, b) // random float in [a, b)
BM.exportSvg(targets?) // same as $svg (default: selection or all)
最小のスペル例:
{
"command": "spread",
"action": "const sel = BM.getSelected(); if (!sel.length) { BM.log('select first.', 't-err'); return; } for (const o of sel) BM.translate(o, BM.rand(-600, 600), 0); BM.log('spread ' + sel.length + ' object(s) horizontally.');"
}
ターミナルに貼るだけで $spread が恒久登録される。