kechiro commited on
Commit
fc3f914
·
1 Parent(s): d7211e7

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

  • SHA256: 2c867f4043903964104db3457331b702cbb3f87d3dd8778d0e3c5c12ef053647
  • Pointer size: 132 Bytes
  • Size of remote file: 1.68 MB
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