# labs — 画像・図解の探索の記録とボード

**たくさん作って、並べて選ぶ**ための場所。1回の探索を1フォルダ（`labs/<lab-id>/`）にまとめる。

- ルールとやり方の正本: nanco-knowledge [`skills/explore-illustration.md`](../../nanco-knowledge/skills/explore-illustration.md)（どの経路・モデルで回すかは `skills/visual-routes.md`）
- 生成画像の**原本**はここに置かない。Google Drive 共有ドライブ `Nanco/visual-lab/<lab-id>/originals/` に、nanco-knowledge の `scripts/visual-vault/vault.py` で送る
- 採用した素材は採用先のリポへ（www = nanco_hp_2026 `public/images/<page>/`、news = nanco-hp-news `public/column/<slug>/`、アプリ = nanco-flutter `assets/images/illustration/`・nanco-next `public/image/illustration/`）
- 経緯: nanco-knowledge `decision-log/2026-10-07-visual-lab-placement.md`

reports のほかのページは「再生成できるスナップショット」だが、**labs/ だけは一次記録**（例外はここだけ）。

## フォルダの中身

```
labs/<lab-id>/                ← lab-id = YYYY-MM-DD-<slug>。作ったら改名しない
├── lab.md            ← 一次記録（ひな形: _template/lab.md）
├── manifest.json     ← 1案1行。vault.py と生成スクリプトが書く
├── spec-r01.tsv      ← 振った軸
├── prompts-r01.txt   ← プロンプト全文（★一番の資産）
├── board-r01.jpg     ← 比較ボード（幅 620px 前後の縮小）
├── thumbs/           ← 案ごとのサムネ WebP（長辺 480px・1枚 60KB 目安）
├── preview/          ← 最終候補を掲載先の実寸に差し込んだプレビュー（最終ラウンドは必須）
├── context/          ← 全案を実ページに差し込んで撮った縮小版（自動で撮れるときは途中のラウンドでも作る）
├── motion/           ← モーションの案の短いループ（幅 480px の webm・1本 1MB 以下が目安）。ポスターは thumbs/ に
├── index.html        ← 選ぶためのページ（python3 labs/build-lab-page.py labs/<lab-id> で作る）
└── src/              ← 図解・デッキのソース（HTML / SVG。全案残す）。デッキは tools/deck/ のエンジンでビルドする
```

## 入れてよいもの・いけないもの

| | 入れる | 入れない |
|---|---|---|
| 画像 | ボード・サムネ（長辺 480px）・最終候補の実寸プレビュー | 生成した原本（Drive へ） |
| 図解 | HTML / SVG のソース（全案）、撮影したボード | 書き出しの PDF・動画（Drive へ） |
| 動き | 選ぶための短いループ（`motion/` に幅 480px の webm）とポスター（`thumbs/`） | 書き出した mp4（1280×720）の原本（Drive へ） |
| テキスト | lab.md・manifest・spec・プロンプト全文 | 顧客名・顧客の発言（社外秘は knowledge の `customer/` の外に出さない） |
| 参照 | `labs/` の中への相対パス | `../nanco-hp-news/...` のような**リポ外への相対パス**（2026-07 にこれで8ページが壊れた） |

## 回し方（短く）

1. lab-id を決め、`_template/lab.md` を写して目的と採用先を書く（status = 選定中）
2. 生成する: `LAB_ID=<lab-id> PARALLEL=3 TOPIC=... bash ../nanco-knowledge/skills/gen-variations.sh labs/<lab-id>/ labs/<lab-id>/spec-r01.tsv`（3本ずつ並列。ボード・プロンプト・サムネ・manifest〔振った軸・プロンプト・ラウンド〕・選ぶページがここに、原本は Drive に）。図解は `src/` に案ごとの HTML を書き、全案を撮ってボードにする。モーションは `tools/deck/` の `record.mjs` でループと mp4 を書き出す
   - 掲載先に差し込んだ見え方を撮る: `node tools/lab/context.mjs --lab labs/<lab-id> --url <掲載先の URL> --match <差し替える画像の src の一部> --images <各案の画像のフォルダ> --mobile 390 --current`（`context/` に縮小版、manifest の context に記録。原本は `vault.py get` で取り出せる）
3. ボードで絞る → 前のラウンドの勝ち案も並べて次のラウンド（案 ID は `r02-a04` のように、親の案 ID を持たせる）
4. 最終の2〜3案は掲載先の実寸に差し込んで `preview/` で比べる
5. 人が案 ID を指す → AI が lab.md に選定者・日付・採否・理由を書き、status = 確定
6. 採用は採用先のリポの別セッションで（lab-id を渡し、Drive の原本から書き出す）。lab.md に採用先のパスと出た日を追記
7. `python3 labs/build-index.py` で一覧ページ（`labs/index.html`）を作り直す

## デッキとモーション

動きで説明するデッキ（記事・ヘルプのティザーの素材）は [`tools/deck/`](../tools/deck/README.md) で作る。ソースは `src/`、スライドごとの動きは `record.mjs` で書き出し、480px のループを `motion/`、ポスターを `thumbs/`、mp4 の原本を Drive に置く。manifest の案には `"media": "motion"`・`"preview_video"`・`"thumb"`・`"derived_to"`（派生先の候補）を入れると、選ぶページがループを再生する。記事にはスライドのスクショを貼らず、`notes.py` で書き出したテキストと構造を使う。見本: [`2026-10-07-motion-sample/`](./2026-10-07-motion-sample/)

## 過去の探索

- `_legacy/2026-07-tanaoroshi/` — 2026-07 の棚卸し記事の編集グラフィック研究の画像（研究ページ8本の表示修復のため収容）
- それより前の探索は nanco-knowledge の `sessions/`（過去分はそのまま）と Drive `Nanco/visual-lab/_legacy/`
