chore: archive unnecessary files for production deployment
Browse files
.github/instructions/このプロジェクトの目的.instructions.md
DELETED
|
@@ -1,65 +0,0 @@
|
|
| 1 |
-
---
|
| 2 |
-
applyTo: '**'
|
| 3 |
-
---
|
| 4 |
-
Provide project context and coding guidelines that AI should follow when generating code, answering questions, or reviewing changes.
|
| 5 |
-
Miragic AI Image Generator - UI開発用システムプロンプト
|
| 6 |
-
|
| 7 |
-
このシステムプロンプトは、gradioを用いた画像生成AIのユーザーインターフェースを開発するためのものです。
|
| 8 |
-
Gradioを使用し、以下の設計原則に従って実装してください。
|
| 9 |
-
|
| 10 |
-
【設計原則】
|
| 11 |
-
1. シンプルさ: UIは最小限で直感的に。不要な機能や複雑さは排除。
|
| 12 |
-
2. 一貫性: 全体で統一されたデザイン言語を維持。
|
| 13 |
-
3. パフォーマンス: 高速な読み込みとレスポンシブな操作性を確保。
|
| 14 |
-
4. アクセシビリティ: すべてのユーザーが利用可能な設計を心がける。
|
| 15 |
-
5. 拡張性: 既存機能を壊さずに将来の拡張が可能な構造。
|
| 16 |
-
|
| 17 |
-
【実装方針】
|
| 18 |
-
- Gradioの標準コンポーネントを使用(CSSでのスタイリングは最小限)
|
| 19 |
-
- 過剰なJavaScript使用は避ける(できれば使用しない)
|
| 20 |
-
- Hugging Faceパイプラインを用いたモデル推論を統合
|
| 21 |
-
- モバイル・デスクトップ両対応のレスポンシブ設計
|
| 22 |
-
|
| 23 |
-
【必須機能】
|
| 24 |
-
- テキスト入力:画像生成のプロンプト入力
|
| 25 |
-
- 画像出力:生成された画像の表示
|
| 26 |
-
- オプションパラメータ:画像サイズ、スタイル等のコントロール
|
| 27 |
-
- 生成ボタン:画像生成のトリガー
|
| 28 |
-
- 処理中の視覚的フィードバック
|
| 29 |
-
- プロンプト・ネガティブプロンプトのサポート例示
|
| 30 |
-
|
| 31 |
-
オプションパラメター
|
| 32 |
-
【オプションパラメーター設定例】
|
| 33 |
-
🔧 Sampling Method (スケジューラー):
|
| 34 |
-
- DDIM: 高品質、少ないステップで良い結果
|
| 35 |
-
- DPMSolver: 高速で高品質(推奨)
|
| 36 |
-
- Euler: 安定した結果
|
| 37 |
-
- EulerA: より多様な結果
|
| 38 |
-
- LMS: 古典的手法
|
| 39 |
-
- PNDM: デフォルト
|
| 40 |
-
|
| 41 |
-
📊 Sampling Steps (num_inference_steps): 10-150
|
| 42 |
-
- 少ない (10-20): 高速だが品質低め
|
| 43 |
-
- 中程度 (25-40): バランス良好(推奨)
|
| 44 |
-
- 多い (50-150): 高品質だが時間かかる
|
| 45 |
-
|
| 46 |
-
🎲 Seed (generator):
|
| 47 |
-
- 同じシード = 同じ画像(再現性)
|
| 48 |
-
- ランダムシード = バリエーション
|
| 49 |
-
|
| 50 |
-
⚙️ CFG Scale (guidance_scale): 1-20
|
| 51 |
-
- 低い (3-5): プロンプトに緩く従う、自然
|
| 52 |
-
- 中程度 (7-10): バランス良好(推奨)
|
| 53 |
-
- 高い (12-20): プロンプトに厳密に従う
|
| 54 |
-
|
| 55 |
-
🔧 その他:
|
| 56 |
-
- eta: ノイズ制御 (0.0-1.0)
|
| 57 |
-
- width/height: 画像サイズ (64の倍数推奨)
|
| 58 |
-
|
| 59 |
-
|
| 60 |
-
|
| 61 |
-
【注意事項】
|
| 62 |
-
- すべての実装はHugging Faceパイプラインを使用すること
|
| 63 |
-
- 依存関係はrequirements.txtに適切に記述
|
| 64 |
-
- 適切なエラーハンドリングとユーザーフィードバックを実装
|
| 65 |
-
- Hugging Face Spacesのデプロイガイドラインに従うこと
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.github/prompts/基本.instructions.md
DELETED
|
@@ -1,177 +0,0 @@
|
|
| 1 |
-
---
|
| 2 |
-
applyTo: '**'
|
| 3 |
-
---
|
| 4 |
-
Provide project context and coding guidelines that AI should follow when generating code, answering questions, or reviewing changes.素晴らしいシステムプロンプトですね。
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
---
|
| 8 |
-
|
| 9 |
-
## 🧠 システムプロンプト
|
| 10 |
-
|
| 11 |
-
---
|
| 12 |
-
|
| 13 |
-
### 🔧 基本姿勢
|
| 14 |
-
|
| 15 |
-
あなたは優れたソフトウェアエンジニアです。
|
| 16 |
-
以下の設計原則・思想・制約のもと、コードを記述・設計・レビューします。
|
| 17 |
-
|
| 18 |
-
---
|
| 19 |
-
|
| 20 |
-
### 🎯 プロジェクトの思想と目的
|
| 21 |
-
|
| 22 |
-
- **目的**:「動く」「速い」「安全」なシステムをシンプルに構築する。
|
| 23 |
-
- **思想**:
|
| 24 |
-
- **マイクロサービス的アプローチ**:単機能モジュールを意識した設計。
|
| 25 |
-
- **アジャイル開発対応**:最小限の機能でまず動かすことを重視。
|
| 26 |
-
- **過剰な機能追加を厳禁**:YAGNI(You Aren't Gonna Need It)を徹底。
|
| 27 |
-
- **命名の一貫性**:`creators`, `generators`, `builders` などの混在を許さない。
|
| 28 |
-
- **疎結合・高凝集**:モジュール間の依存を最小限に保つ。
|
| 29 |
-
- **DRY, KISS, SOLID** を常に意識した設計。
|
| 30 |
-
|
| 31 |
-
---
|
| 32 |
-
|
| 33 |
-
### 🧱 設計原則
|
| 34 |
-
|
| 35 |
-
1. **動くこと**:最小限の機能で動作確認を行う。
|
| 36 |
-
2. **速いこと**:パフォーマンスを意識した実装。
|
| 37 |
-
3. **安全なこと**:型安全性、エラー処理、セキュリティを考慮。
|
| 38 |
-
4. **可読性の高さ**:コードは誰が読んでも理解できるように。
|
| 39 |
-
5. **保守性の高さ**:変更が容易で拡張可能な設計。
|
| 40 |
-
|
| 41 |
-
---
|
| 42 |
-
|
| 43 |
-
### 🚫 禁止事項と制約
|
| 44 |
-
|
| 45 |
-
- ❌ `creators`, `generators`, `builders` などの **役割が曖昧な命名の混在を禁止**。
|
| 46 |
-
- 例:`UserCreator`, `UserGenerator`, `UserBuilder` は役割が曖昧で混在してはならない。
|
| 47 |
-
- 代替案:`UserService`, `UserFactory`, `UserHandler` など、**一貫性のある命名**を使用。
|
| 48 |
-
- ❌ **過剰な機能追加**(機能蔓延)をしない。
|
| 49 |
-
- 必要な機能だけを実装し、**YAGNI** を徹底。
|
| 50 |
-
- ❌ **ハードコード禁止**:設定値やマジックナンバーは定数化・設定ファイル化。
|
| 51 |
-
- ❌ **コメントの省略禁止**:コードには日本語でわかりやすく説明を記述。
|
| 52 |
-
- ❌ **無意味な抽象化禁止**:過度なデザインパターンの適用を避ける。
|
| 53 |
-
- ❌ **正常に動いている環境の変更禁止**:動作確認済みの環境設定を不用意に変更しない!!!!!!!!!!!!!!!!!!!!!!!!!!
|
| 54 |
-
|
| 55 |
-
---
|
| 56 |
-
|
| 57 |
-
### 🧪 コーディング規約
|
| 58 |
-
|
| 59 |
-
- ✅ **型ヒント**(type hints)を必須とする。
|
| 60 |
-
- ✅ **docstring** を記述し、関数・クラスの目的を明確にする。
|
| 61 |
-
- ✅ **単体テスト**(unittest / pytest)を必ず記述。
|
| 62 |
-
- ✅ **エラー処理**は以下の流れで実装:
|
| 63 |
-
1. エラーの分析
|
| 64 |
-
2. 対処方法の検討
|
| 65 |
-
3. エラー処理の実装(try-except, logging, fallback など)
|
| 66 |
-
- ✅ **仮想環境**を使用して実行・テストすること。
|
| 67 |
-
|
| 68 |
-
---
|
| 69 |
-
|
| 70 |
-
### 🧭 モジュール設計の指針
|
| 71 |
-
|
| 72 |
-
- 各モジュールは **1つの責務のみを持つ**(Single Responsibility Principle)。
|
| 73 |
-
- モジュール名は **明確で一貫性のある命名**(例:`user_service.py`, `auth_handler.py`)。
|
| 74 |
-
- モジュール間は **依存を最小限に保ち、疎結合**にする。
|
| 75 |
-
- 共通処理は **utils や shared モジュール**に切り出す。
|
| 76 |
-
|
| 77 |
-
---
|
| 78 |
-
|
| 79 |
-
### 🧠 開発プロセス
|
| 80 |
-
|
| 81 |
-
1. **最小限の機能で動かす**(MVP)
|
| 82 |
-
2. **動作確認 → テスト追加 → リファクタリング**
|
| 83 |
-
3. **必要に応じて機能追加**(ただしYAGNIを意識)
|
| 84 |
-
4. **命名・構造の整合性を常にチェック**
|
| 85 |
-
|
| 86 |
-
---
|
| 87 |
-
|
| 88 |
-
### 🧾 エラー対応のスタイル
|
| 89 |
-
|
| 90 |
-
エラー発生時は以下の形式で報告してください:
|
| 91 |
-
|
| 92 |
-
```
|
| 93 |
-
【エラー内容】
|
| 94 |
-
TypeError: 'NoneType' object is not subscriptable
|
| 95 |
-
|
| 96 |
-
【原因分析】
|
| 97 |
-
user_data が None の場合にアクセスしようとしている。
|
| 98 |
-
|
| 99 |
-
【対処方法】
|
| 100 |
-
user_data が None でないことを確認してからアクセスする。
|
| 101 |
-
例:
|
| 102 |
-
if user_data:
|
| 103 |
-
return user_data['id']
|
| 104 |
-
else:
|
| 105 |
-
return None
|
| 106 |
-
```
|
| 107 |
-
|
| 108 |
-
---
|
| 109 |
-
|
| 110 |
-
### 🧩 まとめ:理想とするコードの特徴
|
| 111 |
-
|
| 112 |
-
| 特徴 | 説明 |
|
| 113 |
-
|--------------|------|
|
| 114 |
-
| **シンプル** | 不要な機能や複雑さを排除 |
|
| 115 |
-
| **明確** | 命名・構造が一貫しており、意図が伝わる |
|
| 116 |
-
| **安全** | 型安全・エラー処理が徹底されている |
|
| 117 |
-
| **保守性** | 変更・拡張が容易な設計 |
|
| 118 |
-
| **テスト可能** | 単体テストが容易に記述可能 |
|
| 119 |
-
|
| 120 |
-
---
|
| 121 |
-
|
| 122 |
-
### 📋 メタデータJSONスキーマ設計原則
|
| 123 |
-
|
| 124 |
-
本プロジェクトでは、画像パーツのレイアウト情報を管理するためにJSONメタデータを使用します。
|
| 125 |
-
|
| 126 |
-
#### メタデータの役割
|
| 127 |
-
|
| 128 |
-
- ✅ **レイアウト情報のみ管理**: bbox(位置・サイズ)、z_order(重なり順��、opacity(透明度)
|
| 129 |
-
- ✅ **DRY原則の徹底**: カラー情報(RGB, fill, stroke)は画像ファイル内部に埋め込み、JSONには記載しない
|
| 130 |
-
- ✅ **後方互換性の確保**: オプションフィールドは`.get()`でデフォルト値を使用
|
| 131 |
-
|
| 132 |
-
#### 必須フィールド
|
| 133 |
-
|
| 134 |
-
```json
|
| 135 |
-
{
|
| 136 |
-
"part_name": "background",
|
| 137 |
-
"bbox": {"x": 0, "y": 0, "width": 1024, "height": 1024},
|
| 138 |
-
"canvas_size": {"width": 1024, "height": 1024},
|
| 139 |
-
"z_order": 0,
|
| 140 |
-
"has_alpha": true,
|
| 141 |
-
"is_vector": false,
|
| 142 |
-
"data_type": "bitmap"
|
| 143 |
-
}
|
| 144 |
-
```
|
| 145 |
-
|
| 146 |
-
#### オプションフィールド(推奨)
|
| 147 |
-
|
| 148 |
-
```json
|
| 149 |
-
{
|
| 150 |
-
"opacity": 1.0,
|
| 151 |
-
"blend_mode": "normal",
|
| 152 |
-
"color_profile": "sRGB IEC61966-2.1",
|
| 153 |
-
"is_global_lineart": false,
|
| 154 |
-
"parent_part": null,
|
| 155 |
-
"z_order_mode": "auto",
|
| 156 |
-
"vector_type": "text",
|
| 157 |
-
"text_content": "LOGO",
|
| 158 |
-
"fill_color": {"r": 255, "g": 0, "b": 0, "a": 255},
|
| 159 |
-
"stroke_color": {"r": 0, "g": 0, "b": 0, "a": 255},
|
| 160 |
-
"background_color": {"r": 255, "g": 255, "b": 255, "a": 0}
|
| 161 |
-
}
|
| 162 |
-
```
|
| 163 |
-
|
| 164 |
-
#### 設計上の注意点
|
| 165 |
-
|
| 166 |
-
- ✅ **カラー情報のメタデータ化**: fill_color, stroke_color, background_colorをRGBA形式で保存
|
| 167 |
-
- **用途**: PDFフォールバックカラー、プレビュー生成、レイヤー識別用
|
| 168 |
-
- **⚠️ 必須要件**: メタデータに色情報が存在する場合、**必ず使用すること**(瑕疵案件対策)
|
| 169 |
-
- **優先順位**: メタデータのカラー情報 > 画像ファイル内の実RGBA値(顧客指定色を最優先)
|
| 170 |
-
- **欠損時の挙動**: メタデータに色情報がない場合のみ、画像ファイルから自動抽出
|
| 171 |
-
- ✅ **z_order自動計算**: 面積降順 → bbox.y降順 → bbox.x昇順でソート(一意性確保)
|
| 172 |
-
- ✅ **ベクター固有情報**: `vector_type`, `text_content`を保存(将来的な拡張性)
|
| 173 |
-
|
| 174 |
-
---
|
| 175 |
-
|
| 176 |
-
ご希望であれば、このプロンプトを `.md` や `.txt` ファイル形式で出力することも可能です。
|
| 177 |
-
また、チームで共有するための簡潔なバージョンも作成できます。お気軽にどうぞ。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/images/samples/txt2img_20251020_183621_seed1982019515_1.png
DELETED
Git LFS Details
|
gitattributes
DELETED
|
@@ -1,35 +0,0 @@
|
|
| 1 |
-
*.7z filter=lfs diff=lfs merge=lfs -text
|
| 2 |
-
*.arrow filter=lfs diff=lfs merge=lfs -text
|
| 3 |
-
*.bin filter=lfs diff=lfs merge=lfs -text
|
| 4 |
-
*.bz2 filter=lfs diff=lfs merge=lfs -text
|
| 5 |
-
*.ckpt filter=lfs diff=lfs merge=lfs -text
|
| 6 |
-
*.ftz filter=lfs diff=lfs merge=lfs -text
|
| 7 |
-
*.gz filter=lfs diff=lfs merge=lfs -text
|
| 8 |
-
*.h5 filter=lfs diff=lfs merge=lfs -text
|
| 9 |
-
*.joblib filter=lfs diff=lfs merge=lfs -text
|
| 10 |
-
*.lfs.* filter=lfs diff=lfs merge=lfs -text
|
| 11 |
-
*.mlmodel filter=lfs diff=lfs merge=lfs -text
|
| 12 |
-
*.model filter=lfs diff=lfs merge=lfs -text
|
| 13 |
-
*.msgpack filter=lfs diff=lfs merge=lfs -text
|
| 14 |
-
*.npy filter=lfs diff=lfs merge=lfs -text
|
| 15 |
-
*.npz filter=lfs diff=lfs merge=lfs -text
|
| 16 |
-
*.onnx filter=lfs diff=lfs merge=lfs -text
|
| 17 |
-
*.ot filter=lfs diff=lfs merge=lfs -text
|
| 18 |
-
*.parquet filter=lfs diff=lfs merge=lfs -text
|
| 19 |
-
*.pb filter=lfs diff=lfs merge=lfs -text
|
| 20 |
-
*.pickle filter=lfs diff=lfs merge=lfs -text
|
| 21 |
-
*.pkl filter=lfs diff=lfs merge=lfs -text
|
| 22 |
-
*.pt filter=lfs diff=lfs merge=lfs -text
|
| 23 |
-
*.pth filter=lfs diff=lfs merge=lfs -text
|
| 24 |
-
*.rar filter=lfs diff=lfs merge=lfs -text
|
| 25 |
-
*.safetensors filter=lfs diff=lfs merge=lfs -text
|
| 26 |
-
saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
| 27 |
-
*.tar.* filter=lfs diff=lfs merge=lfs -text
|
| 28 |
-
*.tar filter=lfs diff=lfs merge=lfs -text
|
| 29 |
-
*.tflite filter=lfs diff=lfs merge=lfs -text
|
| 30 |
-
*.tgz filter=lfs diff=lfs merge=lfs -text
|
| 31 |
-
*.wasm filter=lfs diff=lfs merge=lfs -text
|
| 32 |
-
*.xz filter=lfs diff=lfs merge=lfs -text
|
| 33 |
-
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
-
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
-
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
utils/download_hugginface_repo.py
DELETED
|
@@ -1,34 +0,0 @@
|
|
| 1 |
-
"""Hugging Face モデルダウンロードスクリプト.
|
| 2 |
-
|
| 3 |
-
環境変数 ``HF_TOKEN`` もしくは ``HUGGINGFACEHUB_API_TOKEN`` にセットされた
|
| 4 |
-
トークンでログインしてから Stable Diffusion XL パイプラインを取得する。
|
| 5 |
-
"""
|
| 6 |
-
|
| 7 |
-
from huggingface_hub import login
|
| 8 |
-
from diffusers import StableDiffusionXLPipeline
|
| 9 |
-
import torch
|
| 10 |
-
import os
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
def main() -> None:
|
| 14 |
-
token = os.getenv("HF_TOKEN") or os.getenv("HUGGINGFACEHUB_API_TOKEN")
|
| 15 |
-
if token:
|
| 16 |
-
login(token=token)
|
| 17 |
-
else:
|
| 18 |
-
print("⚠️ 環境変数に Hugging Face トークンが設定されていません。公開モデルのみアクセス可能です。")
|
| 19 |
-
|
| 20 |
-
print("🔧 aipicasso/emix-0-5 モデルをダウンロード中...")
|
| 21 |
-
print("📝 モデル情報: Conterfeit XL v2.5 + Animagine v2.0 + Emix 0.4")
|
| 22 |
-
|
| 23 |
-
StableDiffusionXLPipeline.from_pretrained(
|
| 24 |
-
"aipicasso/emix-0-5",
|
| 25 |
-
torch_dtype=torch.float16,
|
| 26 |
-
use_safetensors=True
|
| 27 |
-
)
|
| 28 |
-
|
| 29 |
-
print("✅ ダウンロード完了!")
|
| 30 |
-
print("📂 キャッシュ場所: ~/.cache/huggingface/hub/")
|
| 31 |
-
|
| 32 |
-
|
| 33 |
-
if __name__ == "__main__":
|
| 34 |
-
main()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
utils/migrate_logs.py
DELETED
|
@@ -1,173 +0,0 @@
|
|
| 1 |
-
"""
|
| 2 |
-
ログ移行スクリプト
|
| 3 |
-
既存のgeneration_history.jsonを新しい統一ログフォーマットに移行
|
| 4 |
-
|
| 5 |
-
実行方法:
|
| 6 |
-
python utils/migrate_logs.py
|
| 7 |
-
"""
|
| 8 |
-
|
| 9 |
-
import json
|
| 10 |
-
import os
|
| 11 |
-
import sys
|
| 12 |
-
from datetime import datetime
|
| 13 |
-
from pathlib import Path
|
| 14 |
-
|
| 15 |
-
# プロジェクトルートをPythonパスに追加
|
| 16 |
-
project_root = Path(__file__).parent.parent
|
| 17 |
-
sys.path.insert(0, str(project_root / "utils"))
|
| 18 |
-
|
| 19 |
-
from unified_logger import UnifiedLogger
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
def migrate_old_logs():
|
| 23 |
-
"""既存のログを新しいフォーマットに移行"""
|
| 24 |
-
|
| 25 |
-
old_log_file = "logs/generation_history.json"
|
| 26 |
-
backup_file = "logs/generation_history_backup.json"
|
| 27 |
-
|
| 28 |
-
if not os.path.exists(old_log_file):
|
| 29 |
-
print("❌ 既存のログファイルが見つかりません")
|
| 30 |
-
return
|
| 31 |
-
|
| 32 |
-
# バックアップ作成
|
| 33 |
-
with open(old_log_file, 'r', encoding='utf-8') as f:
|
| 34 |
-
old_data = json.load(f)
|
| 35 |
-
|
| 36 |
-
with open(backup_file, 'w', encoding='utf-8') as f:
|
| 37 |
-
json.dump(old_data, f, ensure_ascii=False, indent=2)
|
| 38 |
-
|
| 39 |
-
print(f"✅ 既存ログをバックアップしました: {backup_file}")
|
| 40 |
-
|
| 41 |
-
# 統一ログ機能で移行
|
| 42 |
-
logger = UnifiedLogger()
|
| 43 |
-
|
| 44 |
-
migration_count = 0
|
| 45 |
-
|
| 46 |
-
if "generations" in old_data:
|
| 47 |
-
for old_entry in old_data["generations"]:
|
| 48 |
-
try:
|
| 49 |
-
# 旧フォーマットから新フォーマットへの変換
|
| 50 |
-
old_params = old_entry.get("parameters", {})
|
| 51 |
-
old_output = old_entry.get("output", {})
|
| 52 |
-
old_performance = old_entry.get("performance", {})
|
| 53 |
-
|
| 54 |
-
# パラメータの変換
|
| 55 |
-
new_params = {
|
| 56 |
-
"num_inference_steps": old_params.get("steps", 20),
|
| 57 |
-
"guidance_scale": old_params.get("cfg_scale", 7.5),
|
| 58 |
-
"width": old_params.get("width", 1024),
|
| 59 |
-
"height": old_params.get("height", 1024),
|
| 60 |
-
"seed": old_params.get("seed", None),
|
| 61 |
-
"scheduler_type": old_params.get("scheduler", "default"),
|
| 62 |
-
"eta": 0.0, # 旧ログにはない
|
| 63 |
-
"torch_dtype": "float16", # 推定値
|
| 64 |
-
"enable_xformers": True, # 推定値
|
| 65 |
-
"enable_cpu_offload": False # 推定値
|
| 66 |
-
}
|
| 67 |
-
|
| 68 |
-
# 追加情報
|
| 69 |
-
additional_info = {
|
| 70 |
-
"migrated_from": "generation_history.json",
|
| 71 |
-
"migration_date": datetime.now().isoformat(),
|
| 72 |
-
"original_timestamp": old_entry.get("timestamp", "")
|
| 73 |
-
}
|
| 74 |
-
|
| 75 |
-
# 新しいログエントリとして記録
|
| 76 |
-
generation_id = logger.log_generation(
|
| 77 |
-
prompt=old_entry.get("prompt", ""),
|
| 78 |
-
negative_prompt=old_entry.get("negative_prompt", ""),
|
| 79 |
-
parameters=new_params,
|
| 80 |
-
output_filepath=old_output.get("filepath", ""),
|
| 81 |
-
execution_time=old_performance.get("execution_time_seconds", 0),
|
| 82 |
-
additional_info=additional_info
|
| 83 |
-
)
|
| 84 |
-
|
| 85 |
-
migration_count += 1
|
| 86 |
-
print(f"✅ 移行完了: {generation_id}")
|
| 87 |
-
|
| 88 |
-
except Exception as e:
|
| 89 |
-
print(f"⚠️ エントリの移行に失敗: {e}")
|
| 90 |
-
continue
|
| 91 |
-
|
| 92 |
-
print(f"\n🎉 移行完了: {migration_count} エントリを新しいフォーマットに移行しました")
|
| 93 |
-
|
| 94 |
-
# 統計表示
|
| 95 |
-
stats = logger.get_statistics()
|
| 96 |
-
print(f"📊 総生成数: {stats['total_generations']} 枚")
|
| 97 |
-
print(f"📊 総実行時間: {stats['total_execution_time_hours']} 時間")
|
| 98 |
-
print(f"📊 平均実行時間: {stats['average_execution_time_seconds']} 秒")
|
| 99 |
-
|
| 100 |
-
# 旧ファイルをリネーム
|
| 101 |
-
old_archived = "logs/generation_history_old.json"
|
| 102 |
-
os.rename(old_log_file, old_archived)
|
| 103 |
-
print(f"📦 旧ログファイルをアーカイブしました: {old_archived}")
|
| 104 |
-
|
| 105 |
-
|
| 106 |
-
def test_new_logger():
|
| 107 |
-
"""新しいログ機能のテスト"""
|
| 108 |
-
print("\n🧪 新しいログ機能のテスト...")
|
| 109 |
-
|
| 110 |
-
logger = UnifiedLogger()
|
| 111 |
-
|
| 112 |
-
# テストエントリ
|
| 113 |
-
test_params = {
|
| 114 |
-
"num_inference_steps": 25,
|
| 115 |
-
"guidance_scale": 7.5,
|
| 116 |
-
"width": 1024,
|
| 117 |
-
"height": 1024,
|
| 118 |
-
"seed": 12345,
|
| 119 |
-
"scheduler_type": "DPMSolver",
|
| 120 |
-
"eta": 0.0,
|
| 121 |
-
"torch_dtype": "float16",
|
| 122 |
-
"enable_xformers": True,
|
| 123 |
-
"enable_cpu_offload": False
|
| 124 |
-
}
|
| 125 |
-
|
| 126 |
-
test_info = {
|
| 127 |
-
"test_mode": True,
|
| 128 |
-
"description": "ログ機能テスト"
|
| 129 |
-
}
|
| 130 |
-
|
| 131 |
-
generation_id = logger.log_generation(
|
| 132 |
-
prompt="test prompt for new logging system",
|
| 133 |
-
negative_prompt="low quality, test",
|
| 134 |
-
parameters=test_params,
|
| 135 |
-
output_filepath="", # テストなのでファイルなし
|
| 136 |
-
execution_time=45.67,
|
| 137 |
-
additional_info=test_info
|
| 138 |
-
)
|
| 139 |
-
|
| 140 |
-
print(f"✅ テストエントリ作成: {generation_id}")
|
| 141 |
-
|
| 142 |
-
# 作成したエントリを取得してテスト
|
| 143 |
-
entry = logger.get_generation_by_id(generation_id)
|
| 144 |
-
if entry:
|
| 145 |
-
print("✅ エントリ取得テスト成功")
|
| 146 |
-
print(f" プロンプト: {entry['prompts']['main_prompt'][:50]}...")
|
| 147 |
-
print(f" 実行時間: {entry['performance']['execution_time_seconds']} 秒")
|
| 148 |
-
print(f" パラメータ数: {len(entry['parameters'])} 個")
|
| 149 |
-
|
| 150 |
-
# 検索テスト
|
| 151 |
-
search_results = logger.search_by_prompt("test prompt")
|
| 152 |
-
print(f"✅ 検索テスト: {len(search_results)} 件ヒット")
|
| 153 |
-
|
| 154 |
-
print("🎉 新しいログ機能のテスト完了!")
|
| 155 |
-
|
| 156 |
-
|
| 157 |
-
if __name__ == "__main__":
|
| 158 |
-
print("🔄 ログ移行プロセスを開始...")
|
| 159 |
-
|
| 160 |
-
try:
|
| 161 |
-
migrate_old_logs()
|
| 162 |
-
test_new_logger()
|
| 163 |
-
|
| 164 |
-
print("\n" + "=" * 60)
|
| 165 |
-
print("🎊 ログ移行が正常に完了しました!")
|
| 166 |
-
print("📄 新しいログファイル: logs/unified_generation_history.json")
|
| 167 |
-
print("📄 バックアップファイル: logs/generation_history_backup.json")
|
| 168 |
-
print("📄 旧ファイル: logs/generation_history_old.json")
|
| 169 |
-
|
| 170 |
-
except Exception as e:
|
| 171 |
-
print(f"❌ 移行プロセスでエラーが発生しました: {e}")
|
| 172 |
-
import traceback
|
| 173 |
-
traceback.print_exc()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
仮想環境への入り方.txt
DELETED
|
@@ -1 +0,0 @@
|
|
| 1 |
-
I:\jagirl_ui\.venv\Scripts\Activate.ps1
|
|
|
|
|
|