@mcptoolshop/style-dataset-lab 3.4.0 → 3.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.es.md +111 -59
  3. package/README.fr.md +117 -67
  4. package/README.hi.md +109 -70
  5. package/README.it.md +111 -60
  6. package/README.ja.md +116 -76
  7. package/README.md +58 -2
  8. package/README.pt-BR.md +119 -64
  9. package/README.zh.md +108 -67
  10. package/bin/sdlab.js +50 -1
  11. package/lib/adapters/ai-toolkit.js +187 -30
  12. package/lib/adapters/comfyui-workflows.js +84 -9
  13. package/lib/asset-ingest.js +575 -0
  14. package/lib/asset-masks.js +323 -0
  15. package/lib/asset-source.js +1176 -0
  16. package/lib/canon-author.js +350 -0
  17. package/lib/canon-review-gate.js +205 -0
  18. package/lib/colab-launcher-guards.js +285 -0
  19. package/lib/export.js +1 -1
  20. package/lib/freeze-gate.js +3 -0
  21. package/lib/generated-provenance.js +178 -5
  22. package/lib/lane1-render.js +668 -0
  23. package/lib/memory-store.js +663 -0
  24. package/lib/model-licences.js +305 -0
  25. package/lib/npy-meta.js +130 -0
  26. package/lib/png-meta.js +512 -0
  27. package/lib/records.js +54 -8
  28. package/lib/reingest-selected.js +15 -1
  29. package/lib/reingest.js +27 -3
  30. package/lib/run-manifest.js +59 -11
  31. package/lib/train-runs.js +214 -0
  32. package/lib/verifier.js +3 -0
  33. package/lib/verify-chain.js +367 -0
  34. package/package.json +2 -2
  35. package/scripts/asset-ingest.js +160 -0
  36. package/scripts/canon-draft.js +82 -0
  37. package/scripts/canon-freeze.js +4 -0
  38. package/scripts/colab/REAL_SERVICE_ASSUMPTIONS.md +14 -0
  39. package/scripts/colab/ai-toolkit-override-py315.txt +45 -0
  40. package/scripts/colab/colab_window.sh +587 -0
  41. package/scripts/colab/lane1_render.py +970 -0
  42. package/scripts/colab/launch_guards.py +564 -0
  43. package/scripts/colab/launch_lane1_stub.sh +309 -0
  44. package/scripts/colab/launch_lane3_stub.sh +366 -0
  45. package/scripts/colab/remote_runner.py +59 -0
  46. package/scripts/doctor.js +1 -0
  47. package/scripts/generate.js +38 -12
  48. package/scripts/verify.js +67 -0
package/README.ja.md CHANGED
@@ -1,5 +1,5 @@
1
1
  <p align="center">
2
- <a href="README.md">English</a> | <a href="README.zh.md">中文</a> | <a href="README.es.md">Español</a> | <a href="README.fr.md">Français</a> | <a href="README.hi.md">हिन्दी</a> | <a href="README.it.md">Italiano</a> | <a href="README.pt-BR.md">Português (BR)</a>
2
+ <a href="README.ja.md">日本語</a> | <a href="README.zh.md">中文</a> | <a href="README.es.md">Español</a> | <a href="README.fr.md">Français</a> | <a href="README.hi.md">हिन्दी</a> | <a href="README.it.md">Italiano</a> | <a href="README.pt-BR.md">Português (BR)</a>
3
3
  </p>
4
4
 
5
5
  <p align="center">
@@ -13,11 +13,11 @@
13
13
  <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue" alt="MIT License"></a>
14
14
  </p>
15
15
 
16
- 自分のビジュアルルールを記述します。アートを生成します。すべての画像をそれらのルールに対して評価します。結果をバージョン管理された、監査可能なトレーニングデータとして出力し、次に、トレーニング済みのモデルを実際の制作ワークフローで活用し、最高の出力をコーパスに再投入します。
16
+ 自分のビジュアルルールを記述します。アートを生成します。すべての画像をそれらのルールに対して評価します。結果をバージョン管理された、監査可能なトレーニングデータとして出力し、次に、トレーニングされたモデルを実際の運用ワークフローで使用し、最高の出力を自分のデータセットにフィードバックします。
17
17
 
18
- スタイルデータセットラボは、アートスタイルに関する記述と、実際にトレーニングに使用するデータセットを結びつけ、その後、制作プロセス全体を通してそのループを閉じます。プロジェクトにとって重要な要素(シルエットルール、パレットの制約、マテリアルの表現など)を定義します。パイプラインは候補を生成し、それらをルールに基づいて評価し、承認されたものを再現可能なデータセットにパッケージ化します。各レコードには、なぜそれが含まれたのかが説明されています。
18
+ スタイルデータセットラボは、アートスタイルについて記述した内容と、実際にトレーニングに使用するデータセットを結びつけ、その後、運用全体を通してそのループを閉じます。構成を定義します。シルエットルール、パレットの制約、マテリアルの言語など、プロジェクトにとって重要な要素を定義します。パイプラインは候補を生成し、それらをルールに対して評価し、承認されたものを再現可能なデータセットにパッケージ化します。各レコードには、なぜそれが含まれたのかが説明されています。
19
19
 
20
- 次に、制作ワークベンチが引き継ぎます。プロジェクトの要件から生成指示をまとめ、ComfyUIで実行し、出力を評価し、表現シートや環境ボードを一括作成し、最良の結果を選択して、新しい候補として再取り込みます。このループは、生成、選択、レビュー、強化という流れで閉じられます。
20
+ 次に、運用ワークベンチが引き継ぎます。プロジェクトの要件から生成ブリーフをコンパイルし、それをComfyUIに適用し、出力を評価し、表現シートと環境ボードをバッチ処理で作成し、最良の結果を選択し、それらを新しい候補として再取り込みます。ループが閉じます。生成、選択、レビュー、強化。
21
21
 
22
22
  ## パイプライン
23
23
 
@@ -63,11 +63,46 @@ sdlab select --run run_2026-04-16_001 --approve 001.png,003.png
63
63
  sdlab reingest selected --selection selection_2026-04-16_001
64
64
  ```
65
65
 
66
- 最後のコマンドがポイントです。選択された出力は、他のすべてのものと同様に、同じレビュープロセスを経て再利用されます。コーパスが増加し、ルールは維持されます。
66
+ 最後のコマンドがポイントです。選択された出力は、他のすべてのものと同様に、同じレビュープロセスを通過します。データセットは拡張され、ルールは維持されます。
67
+
68
+ ## アセットの経路 — トレーニングデータとしての3Dエクスポート
69
+
70
+ `sdlab ingest`は、生の画像を信頼して受け入れます。`sdlab asset ingest`は、**契約**を受け入れます。
71
+
72
+ 3Dアセットが受け入れゲートを通過した場合、N個の角度から再レンダリングすると、ビューの一貫性が*構造的に*保証されたターンアラウンドが得られます。これは、パービュー拡散では保証できない特性です。アセットの経路は、これらのエクスポートを、プロベナンス(来歴)情報を含むトレーニングデータとして受け入れます。
73
+
74
+ ```bash
75
+ # Validate an export's manifest end to end, run the gates, write nothing
76
+ sdlab asset ingest ~/exports/dragon_dense --project my-project --dry-run
77
+
78
+ # Register it: records, candidates, masks, channels, receipt
79
+ sdlab asset ingest ~/exports/dragon_dense --project my-project
80
+ ```
81
+
82
+ エクスポートディレクトリには、そのチャンネル、パレットバンド、ゲートの閾値、受け入れの判断、スタイル登録、レンダリングがどのように作成されたか、およびその生成のプロベナンスを宣言する`asset-source.json`マニフェスト(スキーマ**1.3.0**)が含まれています。sdlabは、すべての宣言を実際のバイトに対して検証し、違反があった場合は、すべてを拒否します。不良のマニフェストは登録されません。
83
+
84
+ **接合部:** sdlabはメカニズムを提供し、アセットはセマンティクスを提供します。sdlabは、決してレイキャストを行ったり、レンダリングを行ったり、チャンネルが「プロベナンス」であることは特別なことであるとは学習しません。sdlabは、検証、測定、登録、パッケージ化を行います。数値が*意味する*ものは、アセットに保持されます。
85
+
86
+ 契約で強制されること:
87
+
88
+ | 段階 | 検証されること |
89
+ |---|---|
90
+ | **schema** | 形状、ID、適切に形成されたパレットバンド、および文字通り`"accepted"`である受け入れの判断 |
91
+ | **containment** | 参照されているすべてのパスは、エクスポートディレクトリ*内*に解決され(信頼できない入力です)、存在します。 |
92
+ | **encoding** | PNGのIHDRは、宣言されたエンコーディングと一致します。NPYヘッダーは、宣言されたdtypeと形状と一致します。「見た目は正しい」が、そのバイトと矛盾するマニフェストは、この経路が存在する理由である失敗ケースです。 |
93
+ | **categorical** | インデックス化されたPNGは、PLTE⊆宣言されたパレットであることを検証します。`nearest`でフィルタリングされたチャンネルは、*包括的な*ピクセルデコードを受けます。カテゴリカルなNPYは、包括的な値スキャンを受けます。 |
94
+ | **gates** | パレットゲートは、マニフェスト自体のバンドと閾値を使用して、レンダリングごとに実行されます。失敗したレンダリングは、明確に拒否され、レポートされます。静かに受け入れられることはありません。 |
95
+
96
+ レコードは**キュレーションされていない**(`judgment: null`)状態で、`provenance.source: "asset"`とともに保存され、
97
+ 受け入れブロックを逐語的に、ファイルごとのハッシュ、カメラと派生した向き、ゲートの測定値、宣言されたスタイル登録、およびイメージごとの生成フレームとシードとともに保存されます。その後、他のすべてのレコードと同様に、同じキュレーション処理が行われます。
98
+
99
+ 取り込みは、マニフェストが*宣言しなかった*ものもレポートします。不明なスタイル登録、欠落している`identity.subject_name`、欠落している生成プロベナンスなどを**通知**として、失敗ではなくレポートします。これらは、レシートに記録され、CLIに表示されます。誰にも伝えられないギャップは、誰にも埋められないギャップです。また、マニフェストは、そのレンダリングが独自のシードを持たない決定論的な派生であると*宣言できるため、この経路は、正しいエクスポートに関するギャップをレポートすることはありません。
100
+
101
+ 完全な契約、検証ラダー、およびすべてのフィールドの背後にある理由:[docs/asset-lane-design.md](docs/asset-lane-design.md)。
67
102
 
68
103
  ## カノンオーサリング
69
104
 
70
- Before the dataset pipeline runs, the `sdlab canon *` namespace turns your project's canon entity store into the three projections training and production actually consume — and locks the entries that must not drift.
105
+ データセットパイプラインが実行される前に、`sdlab canon *`名前空間は、プロジェクトのカノンエンティティストアを、トレーニングと運用が実際に使用する3つの投影に変換し、変更してはならないエントリをロックします。
71
106
 
72
107
  ```bash
73
108
  # Build three projections from the canon entity store:
@@ -83,67 +118,69 @@ sdlab canon freeze kael_maren --project my-project --reason "prologue portrait l
83
118
  sdlab canon drift --project my-project
84
119
  ```
85
120
 
86
- `canon build`はコンテンツアドレス指定方式です。その出力は`canon_sha`をキーとしてキャッシュされ、変更されていない正当なデータは瞬時に再ビルドされます。`canon freeze`は、特定のビルドに対して各フリーズの状態を確認し、`freeze-events.jsonl`監査ログに追加します。`frozen`のエントリは再生成を完全に拒否し、`soft-advisory`のエントリはデフォルトで拒否します(`--i-know`を使用してバイパスできます)。`canon drift`は、監視対象のすべてのエントリのハッシュを再計算し、最後のクリーンビルド以降に変更されたものをフラグ付けします。
121
+ ローカルモデルもカノンをドラフトできますが、最終的な決定を下すことはできません。`sdlab canon draft <class_id> --endpoint <url> --brief "<text>" --out <path>`は、ループバック専用の、OpenAI互換のサーバーにカノンエントリとプロンプトを要求し、それらを`status: "draft"`、`judgment: null`、およびドラフトモデルとともにすべての出力に書き込みます。ドラフトは、人が承認するまで凍結できません。凍結ゲートは、人間の承認、理由、および承認された正確なドラフトのハッシュがない限り、モデルによってドラフトされたエントリを拒否します。
87
122
 
88
- 完全なワークフローについては、ハンドブックをご覧ください。[カノンビルド](handbook/canon-build/)、[カノンフリーズ](handbook/canon-freeze/)、および[Two-LoRAスタッキング](handbook/two-lora-stacking/)。
123
+ `canon build`はコンテンツアドレス指定可能です。その出力は、`canon_sha`でキーが付けられ、キャッシュされるため、変更されていないカノンは瞬時に再構築されます。`canon freeze`は、特定のビルドに対して各凍結を検証し、`freeze-events.jsonl`監査トレイルに追加します。`frozen`エントリは、再生成を完全に拒否します。`soft-advisory`エントリは、デフォルトで拒否します(`--i-know`でバイパスできます)。`canon drift`は、監視されているすべてのエントリのハッシュを再計算し、最後のクリーンビルド以降に移動したものをフラグします。
124
+
125
+ ハンドブックの完全なワークフロー:[カノンのビルド](handbook/canon-build/)、[カノンの凍結](handbook/canon-freeze/)、および[Two-LoRAスタッキング](handbook/two-lora-stacking/)。
89
126
 
90
127
  ## 生成されるもの
91
128
 
92
- 7つのデータセット成果物と完全な制作ワークベンチ。各成果物は、その先行するものにリンクされており、トレーニングレコードを承認したルールまで追跡できます。
129
+ 7つのデータセットアーティファクトと、完全な運用ワークベンチ。各アーティファクトは、その先行アーティファクトにリンクされているため、トレーニングレコードを承認したルールまで追跡できます。
93
130
 
94
- | 成果物 | 概要 |
131
+ | アーティファクト | 内容 |
95
132
  |----------|-----------|
96
- | **Snapshot** | 構成のフィンガープリントを持つフリーズされたレコード選択。すべての包含には明確な理由があります。 |
97
- | **Split** | 被験者グループが境界を越えない、トレーニング/検証/テストの分割。 |
133
+ | **Snapshot** | 構成フィンガープリントを持つ、凍結されたレコード選択。すべての包含には、明示的な理由があります。 |
134
+ | **Split** | 被験者ファミリーが境界を越えない、トレーニング/検証/テストの分割。 |
98
135
  | **Export package** | 自己完結型のデータセット:マニフェスト、メタデータ、画像、分割、データセットカード、チェックサム。 |
99
- | **Eval pack** | カノンを意識したテストタスク:レーンカバレッジ、禁止されたドリフト、アンカー/ゴールド、被験者の連続性。 |
100
- | **Training package** | アダプターを使用したトレーナー向けのレイアウト(`diffusers-lora`、`generic-image-caption`)。同じデータでも、異なる形式です。 |
101
- | **Eval scorecard** | 生成された出力を評価パックに対してスコアリングし、タスクごとの合格/不合格を判定します。 |
102
- | **Implementation pack** | プロンプト例、既知の失敗、連続性テスト、および再取り込みガイダンス。 |
136
+ | **Eval pack** | カノンを考慮したテストタスク:レーンカバレッジ、許容されないドリフト、アンカー/ゴールド、被写体の連続性。 |
137
+ | **Training package** | アダプター(`diffusers-lora`、`generic-image-caption`)を介した、トレーニングに最適なレイアウト。同じ真実、異なる形式。 |
138
+ | **Eval scorecard** | 評価パックに対して生成された出力のスコアリングに基づいた、タスクごとの合格/不合格判定。 |
139
+ | **Implementation pack** | プロンプトの例、既知の失敗例、連続性テスト、および再取り込みのガイダンス。 |
103
140
 
104
- 制作ワークベンチは以下を追加します:
141
+ 本番環境のワークベンチに追加:
105
142
 
106
- | 表面 | 機能 |
143
+ | 表面 | その機能 |
107
144
  |---------|-------------|
108
- | **Compiled brief** | ワークフロープロファイルとプロジェクトの要件からの決定的な生成指示。 |
109
- | **Run** | フリーズされた実行成果物:ブリーフィング+シード+ComfyUI出力+マニフェスト。 |
110
- | **Critique** | カノンに対する実行出力の構造化された多次元評価。 |
111
- | **Batch** | 調整されたマルチスロット制作(表現シート、環境ボード、シルエットパック)。 |
112
- | **Selection** | クリエイティブな意思決定成果物:どの出力が選択され、その理由は何で、どこから来たのか。 |
145
+ | **Compiled brief** | ワークフロープロファイルとプロジェクトの真実から生成される、決定的な生成指示。 |
146
+ | **Run** | フリーズされた実行アーティファクト:概要 + シード + ComfyUI出力 + マニフェスト。 |
147
+ | **Critique** | 実行出力とカノンの間の、構造化された多次元評価。 |
148
+ | **Batch** | 調整されたマルチスロットによる本番環境(表現シート、環境ボード、シルエットパック)。 |
149
+ | **Selection** | クリエイティブな意思決定アーティファクト:どの出力が選択されたか、その理由、およびその出力の出所。 |
113
150
  | **Re-ingest** | 選択された出力は、完全な生成の来歴とともに、候補レコードとして返されます。 |
114
151
 
115
- ## このシステムが存在する理由
152
+ ## この機能が存在する理由
116
153
 
117
- トレーニングデータは、あらゆるビジュアルAIパイプラインにおいて最も効果的な成果物です。しかし、ほとんどのトレーニングデータは、履歴も、判断の記録も、従うべきスタイルルールとの関連性もない、単なる画像のフォルダーにすぎません。
154
+ トレーニングデータは、あらゆるビジュアルAIパイプラインにおいて最も重要なアーティファクトです。しかし、ほとんどのトレーニングデータは、履歴、判断の記録、および本来従うべきスタイルルールとの関連性がない、単なる画像のフォルダーです。
118
155
 
119
- スタイルデータセットラボは、この関連性を明確にします。あなたの憲法がルールを定義します。あなたのルーブリックがスコアリングの次元を定義します。あなたのキュレーションが判断を記録します。あなたのカノンバインディングがその関連性を証明します。そして、あなたのデータセットは、それらすべてを構造化され、クエリ可能で、再現可能な情報として前進させます。
156
+ スタイルデータセットラボは、この関連性を明確にします。あなたの憲法はルールを定義します。あなたのルーブリックは、スコアリングの次元を定義します。あなたのキュレーションは、判断を記録します。あなたのカノンバインディングは、その関連性を証明します。そして、あなたのデータセットは、それらすべてを構造化され、クエリ可能で、再現可能な真実として引き継ぎます。
120
157
 
121
- 実用的な結果:LoRAがドリフトした場合、なぜそうなるのかを尋ねることができます。次のトレーニングラウンドにより良いデータが必要な場合、どのレコードがほぼ合格であり、どの単一のルールに失敗したかを正確に知ることができます。新しいチームメンバーがプロジェクトのビジュアル言語について質問した場合、答えはFigmaボードではなく、1,182件の評価された例を含む検索可能な憲法です。
158
+ 実用的な結果:あなたのLoRAがドリフトした場合、その理由を尋ねることができます。次のトレーニングラウンドでより良いデータが必要な場合、どのレコードがほぼ失敗しており、どの単一のルールに違反したかを正確に知ることができます。新しいチームメンバーが、プロジェクトのビジュアル言語について尋ねた場合、その答えはFigmaボードではなく、1,182件の評価された例を含む、検索可能な憲法です。
122
159
 
123
- ## 実運用環境で実績あり
160
+ ## 本番環境で実証済み
124
161
 
125
- これはデモ用のパイプラインではありません。2つの実際のスタイルLoRAが、最初から最後までこのパイプラインを通じて出荷されました。同じデータセットをキュレーションし、トレーニングを行い、出荷する一連のプロセスであり、その範囲はキュレーションのスペクトルの両端にあります。
162
+ これはデモパイプラインではありません。2つの実際のスタイルLoRAが、最初から最後までこれを使用して出荷されました。同じカノン→キュレーション→トレーニング→出荷のループを、キュレーションスペクトルの反対の端で実行しました。
126
163
 
127
- - **[Tallow Fen](handbook/case-study-tallow-fen/)**(クリーチャーデザイン)—最初から作成されたベストiaryデータセットで、293件のキュレーションされたレコードのうち約34%が承認されました(169件は却下され、厳格な基準で判断されます)。`tallow_fen_style_v3.safetensors`を1.5で`qwen-image`に出荷しました。
128
- - **[Rustline](handbook/case-study-rustline/)**(コンセプトデザイン)—密度が高く、事前に形成されたデータセットで、180件のレコードのうち約96%が承認されました。`rustline_v3ckpt_1500.safetensors`を1.0で`qwen-image`に出荷し、別のプロジェクトで再利用されました。
164
+ - **[Tallow Fen](handbook/case-study-tallow-fen/)**(クリーチャーデザイン)—最初から作成されたベストiaryカノン、293件のキュレーションされたレコードのうち、約34%の承認率(169件は却下—ゲートは厳しく却下します)。`tallow_fen_style_v3.safetensors`を1.5で`qwen-image`に出荷。
165
+ - **[Rustline](handbook/case-study-rustline/)**(コンセプトデザイン)—密度が高く、事前に形成されたカノン、180件のレコードのうち、約96%の承認率。`rustline_v3ckpt_1500.safetensors`を1.0で`qwen-image`に出荷し、別のプロジェクトで再利用。
129
166
 
130
- 同じパイプラインを使用し、2つの実運用環境プロファイル:キュレーションゲートは本物です(オープンなテーマについては厳格に判断します)。また、規律を守ったデータセットは高い受容率をもたらします。
167
+ 同じパイプライン、2つの本番環境プロファイル:キュレーションゲートは本物です(オープンなテーマについては厳しく却下します)。そして、厳格なカノンは高い受容率をもたらします。
131
168
 
132
169
  ## 5つのドメイン、実際のルール
133
170
 
134
- プレースホルダーテンプレートではありません。各ドメインには、実運用レベルのカノン憲法ルール、レーン定義、スコアリングルーブリック、およびグループ語彙が付属しています。
171
+ プレースホルダーのテンプレートではありません。各ドメインには、本番環境で使用できる憲法ルール、レーン定義、スコアリングルーブリック、およびグループ語彙が付属しています。
135
172
 
136
- | ドメイン | レーン | 評価対象となるもの |
173
+ | ドメイン | レーン | 評価対象 |
137
174
  |--------|-------|-----------------|
138
- | **game-art** | キャラクター、環境、小道具、UI、船、インテリア、装備 | ゲームプレイ規模でのシルエット、派閥の識別、摩耗と経年変化 |
139
- | **character-design** | ポートレート、全身像、ターンアラウンド、表現シート、アクションポーズ | プロポーション、衣装の論理、個性、ジェスチャーの明確さ |
175
+ | **game-art** | キャラクター、環境、小道具、UI、船、インテリア、装備 | ゲームプレイ規模でのシルエット、派閥の認識、摩耗と経年変化 |
176
+ | **character-design** | ポートレート、全身、ターンアラウンド、表現シート、アクションポーズ | プロポーション、衣装の論理、個性、ジェスチャーの明確さ |
140
177
  | **creature-design** | コンセプト、オルソグラフィック、詳細な研究、アクション、スケール参照、生息地 | 解剖学、進化の論理、シルエットの区別 |
141
- | **architecture** | 外観、内装、街並み、構造的な詳細、廃墟、風景 | 構造、マテリアルの整合性、視点、時代の整合性 |
178
+ | **architecture** | 外観、内観、街並み、構造的な詳細、廃墟、風景 | 構造、材質の一貫性、視点、時代の一貫性 |
142
179
  | **vehicle-mech** | 外観、コックピット、コンポーネント、図面、シルエットシート、損傷バリアント | 機械的な論理、デザイン言語、アクセスポイント、損傷の物語 |
143
180
 
144
- ## プロジェクトの構造
181
+ ## プロジェクト構造
145
182
 
146
- 各プロジェクトは独立しています。5つのJSON設定ファイルでルールを定義します。それ以外はすべてデータです。
183
+ 各プロジェクトは独立しています。5つのJSON設定ファイルがルールを定義します。それ以外はすべてデータです。
147
184
 
148
185
  ```
149
186
  projects/my-project/
@@ -165,24 +202,25 @@ projects/my-project/
165
202
  inbox/generated/ Re-ingested images awaiting review
166
203
  ```
167
204
 
168
- ## 信頼性のためのプロパティ
205
+ ## 信頼できるプロパティ
169
206
 
170
- これらは理想的なものではありません。強制的に適用されます。
207
+ これらは理想的なものではありません。これらは強制されます。
171
208
 
172
- - **Snapshots are immutable.** Config fingerprint (SHA-256) proves nothing changed. IDs are claimed atomically, so two concurrent runs cannot interleave into one directory.
173
- - **Splits prevent leakage — and the check that says so is independent.** Subject families (by identity, lineage, or normalized ID stem) never cross partition boundaries, and a second check re-derives subject identity from scratch rather than re-reading the map the split itself used. A dataset card only claims "leakage: none (verified)" when both checks ran and passed; a split predating the second check says exactly that instead.
174
- - **Manifests are frozen contracts.** Export hash + config fingerprint, and `validate` re-hashes every file `checksums.txt` lists — so replacing an image inside a finished export is caught, including for manifests created before that check existed.
175
- - **Runs pin their exact graph.** Every generation records `comfy_workflow_sha` + model/LoRA content hashes + seed policy, so a wave is byte-for-byte replayable. The JS and Python runners are held to a byte-identical hash by a test that spawns both. Model hashing is opt-in (`--hash-models`) and never fabricated — an unresolvable file records `sha256: null` with a note.
176
- - **No model verifies its own output.** Judgments record `judged_by_model` and `generator_model`; a warning fires if they are ever the same model.
177
- - **A judgment says who made it.** `eligibility audit` distinguishes judgments a person wrote from judgments a bulk script minted, so a rationale that describes a category rather than an image cannot pass as curation.
178
- - **Measurement is not verdict.** `sdlab measure` attaches numbers to a record. It never sets a judgment, a fit, or an approval — and where a measure is undefined for an image it records `null` rather than a plausible number.
179
- - **Adapters cannot mutate truth.** Different layout, same records. No additions, no removals, no reclassification.
180
- - **Generated outputs re-enter through review.** No bypass. Curate and bind like everything else. Externally-generated images enter the same way via `sdlab ingest`, uncurated.
181
- - **Failures are visible.** A missing record, an unplaceable image, or a caption that cannot be built stops an export or training package rather than quietly shrinking it.
209
+ - **スナップショットは不変です。** 設定フィンガープリント(SHA-256)は、変更がないことを証明します。IDはアトミックに割り当てられるため、2つの同時実行プロセスが1つのディレクトリに混ざることはありません。
210
+ - **分割は情報の漏洩を防ぎ、そのことを確認するチェックは独立しています。** サブジェクトファミリー(ID、系統、または正規化されたIDの接頭辞によって定義)は、決してパーティションの境界を越えません。2回目のチェックでは、分割自体で使用されたマップを再読み込みするのではなく、最初からサブジェクトIDを再導出します。データセットカードは、両方のチェックが実行され、合格した場合にのみ、「漏洩:なし(検証済み)」と主張します。2回目のチェックよりも前に作成された分割は、そのことを正確に示します。
211
+ - **マニフェストは固定された契約です。** エクスポートハッシュと設定フィンガープリントを組み合わせ、`validate`は、`checksums.txt`にリストされているすべてのファイルを再ハッシュします。したがって、完成したエクスポート内の画像を置き換えることは検出され、そのチェックが存在する前に作成されたマニフェストも同様です。
212
+ - **実行は、正確なグラフを固定します。** 各世代は、`comfy_workflow_sha` + モデル/LoRAコンテンツハッシュ + シードポリシーを記録するため、ウェーブはバイト単位で完全に再現可能です。JSとPythonのランナーは、両方を起動するテストによって、バイト単位で同一のハッシュになるように制限されます。モデルのハッシュ化はオプション(`--hash-models`)であり、偽造されることはありません。解決できないファイルは、注記とともに`sha256: null`を記録します。
213
+ - **モデルは、自身の出力を検証しません。** 評価は、`judged_by_model`と`generator_model`を記録します。これらが同じモデルである場合、警告が表示されます。
214
+ - **評価は、誰が作成したかを伝えます。** `eligibility audit`は、人が作成した評価と、一括スクリプトによって作成された評価を区別します。したがって、画像ではなくカテゴリを説明する根拠は、キュレーションとして合格しません。
215
+ - **測定は、評価ではありません。** `sdlab measure`は、レコードに数値を関連付けます。評価、適合、または承認を設定することはありません。また、画像に対して測定が定義されていない場合、妥当な数値ではなく、`null`を記録します。
216
+ - **リリースは、すべての画像の出所を証明できます。** `sdlab verify --project <name>`は、各レコードに対してオフラインでチェーンをたどります。レコードの所有者とライセンス、ハッシュによってバインドされた正典エントリ、すべてのモデルとLoRAのライセンス(SPDX ID、ライセンスURL、読み取り日時、ファイルハッシュ)、および実行マニフェスト内のワークフローハッシュです。リンクが欠落している場合、チェックは合格ではなく、失敗します。
217
+ - **アダプターは、真実を変更できません。** レイアウトは異なりますが、レコードは同じです。追加、削除、再分類はありません。
218
+ - **生成された出力は、レビューを通じて再入力されます。** バイパスはありません。他のものと同様に、キュレーションとバインドを行います。外部で生成された画像は、`sdlab ingest`を介して、キュレーションなしで同じ方法で入力されます。
219
+ - **失敗は可視化されます。** レコードが欠落している、配置できない画像がある、または作成できないキャプションがある場合、エクスポートまたはトレーニングパッケージは、静かに縮小されるのではなく、停止します。
182
220
 
183
221
  ## スター・フレイト
184
222
 
185
- このリポジトリには、完全な動作例が含まれています:1,182件のレコード、5つの派閥、7つのルート、24の憲法ルール、892個の承認済みアセット、2つのトレーニングプロファイル。洗練されたSF RPGのビジュアルカノンで、完全にキュレーションされています。
223
+ このリポジトリには、完全な動作例が含まれています。1,182件のレコード、5つの派閥、7つのレーン、24の憲法ルール、892件の承認されたアセット、2つのトレーニングプロファイル。完全にキュレーションされた、荒々しいSF RPGのビジュアルカノン。
186
224
 
187
225
  ```bash
188
226
  git clone https://github.com/mcp-tool-shop-org/style-dataset-lab
@@ -192,9 +230,9 @@ sdlab snapshot create --project star-freight # 839 eligible records
192
230
  sdlab split build --project star-freight # zero subject leakage
193
231
  ```
194
232
 
195
- ## 下流形式
233
+ ## 下流の形式
196
234
 
197
- `sdlab`がデータセットを所有します。形式変換は、[`repo-dataset`](https://github.com/mcp-tool-shop-org/repo-dataset)によって処理されます:TRL、LLaVA、Qwen2-VL、JSONL、Parquetなど。`repo-dataset`はレンダリングし、包含を決定することはありません。
235
+ `sdlab`がデータセットを所有します。形式変換は、[`repo-dataset`](https://github.com/mcp-tool-shop-org/repo-dataset)によって処理されます。TRL、LLaVA、Qwen2-VL、JSONL、Parquetなど。`repo-dataset`はレンダリングします。組み込みを決定することはありません。
198
236
 
199
237
  ## インストール
200
238
 
@@ -202,11 +240,11 @@ sdlab split build --project star-freight # zero subject leakage
202
240
  npm install -g @mcptoolshop/style-dataset-lab
203
241
  ```
204
242
 
205
- Node.js 20+と、ローカルホストの8188ポートで動作する[ComfyUI](https://github.com/comfyanonymous/ComfyUI)が必要です(生成用)。
243
+ Node.js 20+と、ローカルホストの8188で実行される[ComfyUI](https://github.com/comfyanonymous/ComfyUI)が必要です。
206
244
 
207
245
  ### ComfyUIなしで試す
208
246
 
209
- バンドルされたスター・フレイトプロジェクトを使用して、完全な非生成機能(検査、キュレーション、スナップショット、分割、エクスポート)を、ComfyUIのインストールやSDXLウェイトのダウンロードなしで探索できます。
247
+ バンドルされたスター・フレイトプロジェクトを使用して、生成以外のすべての機能(検査、キュレーション、スナップショット、分割、エクスポート)を、ComfyUIをインストールしたり、SDXLの重みをダウンロードしたりせずに探索できます。
210
248
 
211
249
  ```bash
212
250
  # Scaffold a fresh project (no ComfyUI needed)
@@ -219,13 +257,13 @@ sdlab project doctor --project test
219
257
  sdlab snapshot create --dry-run --project star-freight
220
258
  ```
221
259
 
222
- `sdlab project doctor` validates every project config (constitution, lanes, rubric, terminology) and reports eligibility without touching the GPU. Any command that mutates generated state accepts `--dry-run` to preview the effect first.
260
+ `sdlab project doctor`は、すべてのプロジェクト構成(憲法、レーン、ルーブリック、用語)を検証し、GPUに触れることなく、適格性を報告します。生成された状態を変更するコマンドは、最初に効果をプレビューするために、`--dry-run`を受け入れます。
223
261
 
224
- `--project`を忘れると、CLIは`projects/`の下で最初に見つかったプロジェクトにフォールバックし、警告を表示します。警告を抑制するには、`--project`を明示的に渡してください。
262
+ `--project`を忘れた場合、CLIは、`projects/`の下にある最初に見つかったプロジェクトにフォールバックし、警告を表示します。警告を抑制するには、`--project`を明示的に渡します。
225
263
 
226
- ### 中断された実行の再開
264
+ ### 中断された実行を再開する
227
265
 
228
- 長時間の生成実行は、完了した作業をやり直さずに再開できます。
266
+ 長い生成実行は、完了した作業をやり直さずに再開できます。
229
267
 
230
268
  ```bash
231
269
  # Skip subjects whose record + image are already on disk.
@@ -237,41 +275,43 @@ sdlab generate inputs/prompts/wave1.json --project my-project --resume
237
275
  sdlab batch generate --resume batch_2026-04-22_001 --project my-project
238
276
  ```
239
277
 
240
- 両方のコマンドが機能するのは、各スロットが完了時にマニフェストエントリをアトミックに書き込むためです。実行中にクラッシュが発生しても、部分的な状態が破損することはありません。
278
+ 両方のコマンドは、各スロットが完了時にマニフェストエントリをアトミックに書き込むため機能します。実行中にクラッシュしても、部分的な状態が破損することはありません。
241
279
 
242
280
  ## トラブルシューティング
243
281
 
244
- 一般的なエラーとその修正:
282
+ 一般的な失敗モードと修正:
245
283
 
246
- **`ECONNREFUSED 127.0.0.1:8188`(任意の`sdlab generate`/`sdlab run generate`/`sdlab batch generate`)**
284
+ **`ECONNREFUSED 127.0.0.1:8188`が、任意の`sdlab generate` / `sdlab run generate` / `sdlab batch generate`で実行されていない**
247
285
  ComfyUIが実行されていません。ComfyUI(`python main.py --listen 127.0.0.1 --port 8188`)を開始し、`curl http://127.0.0.1:8188/system_stats`で確認します。別のホスト/ポートを指定するには、`COMFY_URL=http://host:port`を設定します。
248
286
 
249
287
  **`missing checkpoint` / `LoRA weight not found`**
250
- ワークフロープロファイルで指定されたモデルファイルが、ComfyUIの`models/checkpoints/`または`models/loras/`フォルダーにありません。`projects/<project>/workflows/profiles/<profile>.json`を開き、`checkpoint`または`lora`フィールドを見つけて、参照されているウェイトをダウンロードするか、すでに持っているものと置き換えます。`sdlab project doctor --project <project>`を再実行して、修正を確認します。
288
+ ワークフロープロファイルで、ComfyUIの`models/checkpoints/`または`models/loras/`フォルダーにないモデルファイルを指定しています。`projects/<project>/workflows/profiles/<profile>.json`を開き、`checkpoint`または`lora`フィールドを見つけて、参照されている重みをダウンロードするか、すでに持っているものに置き換えます。`sdlab project doctor --project <project>`を再実行して、修正を確認します。
251
289
 
252
290
  **`sdlab project doctor`エラー**
253
- Doctorは構造化されたエラーコードを返します。一般的なもの:
254
- - `E_PROJECT_NOT_FOUND`—プロジェクトディレクトリが`projects/`の下に存在しません。スペルを確認してください。
255
- - `E_CONFIG_INVALID`—5つのJSON構成ファイルのいずれかが、スキーマ検証に失敗しました。`hint`フィールドには、問題のあるファイルとフィールドの名前が表示されます。
256
- - `E_RECORD_DRIFT`—レコードの構成フィンガープリントが、ソースと一致しなくなりました。ヒントに従って、再キュレーションまたは再バインドしてください。
291
+ ドクターは、構造化されたエラーコードを返します。一般的なもの:
292
+ - `E_PROJECT_NOT_FOUND` — プロジェクトディレクトリが、`projects/`の下に存在しません。スペルを確認してください。
293
+ - `E_CONFIG_INVALID` — 5つのJSON構成ファイルのいずれかが、スキーマ検証に失敗しました。`hint`フィールドは、問題のあるファイルとフィールドの名前を示します。
294
+ - `E_RECORD_DRIFT` — レコードの構成フィンガープリントが、ソースと一致しなくなりました。ヒントに従って、再キュレーションまたは再バインドします。
257
295
 
258
296
  **`No --project specified, falling back to <name>`**
259
- ソフトな警告です。`--project <name>`を明示的に渡して、適切なプロジェクトを選択し、警告を抑制します。
297
+ ソフトな警告。正しいプロジェクトを明示的に選択し、警告を抑制するには、`--project <name>`を渡します。
260
298
 
261
- **Painterly / VRAM out-of-memory issues**
262
- See `docs/internal/HANDOFF.md` for the painterly denoise tuning notes. In short: lower the denoise strength, reduce batch size, or switch to a smaller checkpoint in your workflow profile.
299
+ **ペインタリー / VRAMのメモリ不足の問題**
300
+ `docs/internal/HANDOFF.md`を参照して、ペインタリーのデノイズ調整に関するメモを確認してください。要するに:デノイズ強度を下げ、バッチサイズを減らすか、ワークフロープロファイルでより小さいチェックポイントに切り替えます。
263
301
 
264
- **Reporting bugs**
265
- File an issue at https://github.com/mcp-tool-shop-org/style-dataset-lab/issues with your sdlab version (`sdlab --version`), Node version (`node -v`), the full command, and the structured error output. A bug-report template prefills the fields.
302
+ **バグの報告**
303
+ https://github.com/mcp-tool-shop-org/style-dataset-lab/issuesに、sdlabバージョン(`sdlab --version`)、Nodeバージョン(`node -v`)、完全なコマンド、および構造化されたエラー出力を記載して、問題を報告してください。バグ報告テンプレートは、フィールドを事前に設定します。
266
304
 
267
305
  ## セキュリティ
268
306
 
269
- ローカルでのみ動作します。テレメトリ、分析、外部リクエストはありません。画像はGPUとファイルシステムにのみ保存されます。
307
+ デフォルトではローカルです。テレメトリ、分析はなく、`sdlab` CLIから外部リクエストもありません。画像はGPUとファイルシステムに残り、`canon draft`はループバック以外のすべてのエンドポイントを拒否します。
308
+
309
+ 唯一の例外は、オプトイン機能です。`scripts/colab/`には、お客様ご自身のGoogle Colabアカウントでレンダリングを実行したり、LoRAのトレーニングステップを実行したりするためのキットが含まれています。これらのキットは、指定されたファイルのみをアップロードし、お客様のColabアカウントの残高に基づいて設定された予算内で実行され、終了時にセッションを自動的に停止します。これらのキットは**実験段階**であり、まだ完全なテストは完了していません。
270
310
 
271
311
  ## ライセンス
272
312
 
273
- MIT
313
+ マサチューセッツ工科大学
274
314
 
275
315
  ---
276
316
 
277
- MCP Tool Shopによって作成されました。
317
+ Built by <a href="https://mcp-tool-shop.github.io/">MCP Tool Shop</a>
package/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  <p align="center">
2
- <a href="README.ja.md">日本語</a> | <a href="README.zh.md">中文</a> | <a href="README.es.md">Español</a> | <a href="README.fr.md">Français</a> | <a href="README.hi.md">हिन्दी</a> | <a href="README.it.md">Italiano</a> | <a href="README.pt-BR.md">Português (BR)</a>
2
+ <a href="README.md">English</a> | <a href="README.zh.md">中文</a> | <a href="README.es.md">Español</a> | <a href="README.fr.md">Français</a> | <a href="README.hi.md">हिन्दी</a> | <a href="README.it.md">Italiano</a> | <a href="README.pt-BR.md">Português (BR)</a>
3
3
  </p>
4
4
 
5
5
  <p align="center">
@@ -65,6 +65,57 @@ sdlab reingest selected --selection selection_2026-04-16_001
65
65
 
66
66
  That last command is the point. Selected outputs come back through the same review process as everything else. The corpus grows and the rules hold.
67
67
 
68
+ ## The asset lane — 3D exports as training data
69
+
70
+ `sdlab ingest` takes bare images on trust. `sdlab asset ingest` takes a **contract**.
71
+
72
+ When a 3D asset passes its acceptance gate, re-rendering it from N angles gives you a
73
+ turnaround that is view-consistent *by construction* — the property per-view diffusion
74
+ can't guarantee. The asset lane admits those exports as provenance-carrying training data:
75
+
76
+ ```bash
77
+ # Validate an export's manifest end to end, run the gates, write nothing
78
+ sdlab asset ingest ~/exports/dragon_dense --project my-project --dry-run
79
+
80
+ # Register it: records, candidates, masks, channels, receipt
81
+ sdlab asset ingest ~/exports/dragon_dense --project my-project
82
+ ```
83
+
84
+ The export directory carries an `asset-source.json` manifest (schema **1.3.0**) declaring
85
+ its channels, palette bands, gate thresholds, acceptance verdict, style register, how the
86
+ renders came to exist, and their generation provenance. sdlab proves every declaration
87
+ against the actual bytes and refuses the whole ingest on any violation — nothing registers
88
+ on a bad manifest.
89
+
90
+ **The seam:** sdlab supplies mechanism, the asset supplies semantics. sdlab never raycasts,
91
+ never renders, and never learns that a channel called "provenance" is special. It proves,
92
+ measures, registers and packages. What the numbers *mean* stays with the asset.
93
+
94
+ What the contract enforces:
95
+
96
+ | stage | what is proven |
97
+ |---|---|
98
+ | **schema** | shape, ids, well-formed palette bands, and an acceptance verdict that is literally `"accepted"` |
99
+ | **containment** | every referenced path resolves *inside* the export directory (it is untrusted input) and exists |
100
+ | **encoding** | a PNG's IHDR matches its declared encoding; an NPY header matches its declared dtype and shape. A manifest that "looks right" but disagrees with its bytes is the failure class this lane exists to stop |
101
+ | **categorical** | indexed PNGs prove PLTE ⊆ declared palette; `nearest`-filtered channels get an *exhaustive* pixel decode; categorical NPYs get an exhaustive value scan |
102
+ | **gates** | the palette gate runs per render, from the manifest's own bands and thresholds — a failing render is rejected loudly and reported, never quietly admitted |
103
+
104
+ Records land **uncurated** (`judgment: null`) with `provenance.source: "asset"`, carrying
105
+ the acceptance block verbatim, per-file hashes, camera and derived facing, the gate
106
+ measurements, the declared style register, and per-image generation frame + seed. They then
107
+ go through the same curation every other record does.
108
+
109
+ The ingest also reports what a manifest *didn't* declare — an unknown style register, a
110
+ missing `identity.subject_name`, absent generation provenance — as **notices** rather than
111
+ failures. They ride in the receipt and print at the CLI. A gap nobody is told about is a gap
112
+ nobody can close; and because a manifest can *declare* that its renders are deterministic
113
+ derivations with no seed of their own, the lane never reports a gap on an export that is
114
+ correct.
115
+
116
+ Full contract, the validation ladder, and the reasoning behind every field:
117
+ [docs/asset-lane-design.md](docs/asset-lane-design.md).
118
+
68
119
  ## Canon authoring
69
120
 
70
121
  Before the dataset pipeline runs, the `sdlab canon *` namespace turns your project's canon entity store into the three projections training and production actually consume — and locks the entries that must not drift.
@@ -83,6 +134,8 @@ sdlab canon freeze kael_maren --project my-project --reason "prologue portrait l
83
134
  sdlab canon drift --project my-project
84
135
  ```
85
136
 
137
+ A local model can draft canon too, but it never decides it. `sdlab canon draft <class_id> --endpoint <url> --brief "<text>" --out <path>` asks a loopback-only, OpenAI-compatible server for a canon entry and prompts, and writes them with `status: "draft"`, `judgment: null` and the drafting model stamped on every output. A draft cannot be frozen until a person ratifies it: the freeze gate refuses any model-drafted entry without a human approval, a reason, and the hash of the exact draft that was approved.
138
+
86
139
  `canon build` is content-addressable — its output is keyed by a `canon_sha` and cached, so an unchanged canon rebuilds instantly. `canon freeze` witnesses each freeze against a specific build and appends to a `freeze-events.jsonl` audit trail: `frozen` entries refuse regeneration outright, `soft-advisory` entries refuse by default (bypass with `--i-know`). `canon drift` recomputes every watched entry's hash and flags anything that moved since the last clean build.
87
140
 
88
141
  Full workflow in the handbook: [Canon build](handbook/canon-build/), [Canon freeze](handbook/canon-freeze/), and [Two-LoRA stacking](handbook/two-lora-stacking/).
@@ -176,6 +229,7 @@ These are not aspirational. They are enforced.
176
229
  - **No model verifies its own output.** Judgments record `judged_by_model` and `generator_model`; a warning fires if they are ever the same model.
177
230
  - **A judgment says who made it.** `eligibility audit` distinguishes judgments a person wrote from judgments a bulk script minted, so a rationale that describes a category rather than an image cannot pass as curation.
178
231
  - **Measurement is not verdict.** `sdlab measure` attaches numbers to a record. It never sets a judgment, a fit, or an approval — and where a measure is undefined for an image it records `null` rather than a plausible number.
232
+ - **A release can prove where every image came from.** `sdlab verify --project <name>` walks the chain offline for each record: the owner and licence on the record, the canon entry it was bound to (by hash), the licence of every model and LoRA that made it (SPDX id, licence URL, the date it was read, and the file hash), and the workflow hash in the run manifest. A missing link fails the check rather than passing it.
179
233
  - **Adapters cannot mutate truth.** Different layout, same records. No additions, no removals, no reclassification.
180
234
  - **Generated outputs re-enter through review.** No bypass. Curate and bind like everything else. Externally-generated images enter the same way via `sdlab ingest`, uncurated.
181
235
  - **Failures are visible.** A missing record, an unplaceable image, or a caption that cannot be built stops an export or training package rather than quietly shrinking it.
@@ -266,7 +320,9 @@ File an issue at https://github.com/mcp-tool-shop-org/style-dataset-lab/issues w
266
320
 
267
321
  ## Security
268
322
 
269
- Local-only. No telemetry, no analytics, no external requests. Images stay on your GPU and filesystem.
323
+ Local by default. No telemetry, no analytics, and no external requests from the `sdlab` CLI: images stay on your GPU and filesystem, and `canon draft` refuses any endpoint that isn't loopback.
324
+
325
+ The one exception is opt-in. `scripts/colab/` holds launch kits for running a render or a LoRA training step on your own Google Colab account. They upload only the files you point them at, run under a spending cap read from your live Colab balance, and stop their own session on exit. These kits are **experimental**: they have not yet completed a live window end to end.
270
326
 
271
327
  ## License
272
328