tomo2chin2 commited on
Commit
0f85143
·
verified ·
1 Parent(s): 3af8464

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +54 -44
app.py CHANGED
@@ -8,6 +8,7 @@ from huggingface_hub import HfApi, create_repo
8
  # 環境変数から取得
9
  HF_TOKEN = os.environ.get("HF_TOKEN", None)
10
  MODEL_REPO_USER = os.environ.get("MODEL_REPO", None) # ユーザー名
 
11
  CIVITAI_TOKEN = os.environ.get("CIVITAI_TOKEN", None) # Civitai用トークン
12
 
13
  api = HfApi()
@@ -16,41 +17,33 @@ def download_and_upload(model_id, repo_type, model_name=None):
16
  if not model_id or not repo_type or (repo_type == "model" and not model_name):
17
  return "モデルIDまたはタイプ、モデル名が未指定です。"
18
 
19
- # ①クローン元リポジトリの定義
20
- source_repo = "John6666/pony-realism-v21main-sdxl"
21
- print(f"クローン元リポジトリ: {source_repo}")
22
-
23
- # ②新規リポジトリの定義
24
- target_repo = f"{MODEL_REPO_USER}/{model_name}"
25
- print(f"新規リポジトリ: {target_repo}")
26
-
27
- # 新規リポジトリを作成
28
- try:
29
- print(f"新規リポジトリを作成します: {target_repo}")
30
- create_repo(repo_id=target_repo, token=HF_TOKEN, private=False)
31
- print(f"新規リポジトリを作成しました: {target_repo}")
32
- except Exception as e:
33
- print(f"新規リポジトリの作成に失敗しました: {e}")
34
- return f"新規リポジトリの作成に失敗しました: {e}"
35
-
36
- # クローン元リポジトリをクローン
37
- try:
38
- print(f"クローン元リポジトリをクローン中: {source_repo}")
39
- subprocess.run(["git", "clone", f"https://huggingface.co/{source_repo}"], check=True)
40
- print(f"クローン元リポジトリをクローンしました: {source_repo}")
41
- except Exception as e:
42
- print(f"クローン元リポジトリのクローンに失敗しました: {e}")
43
- return f"クローン元リポジトリのクローンに失敗しました: {e}"
44
-
45
- # クローンしたリポジトリをコピー先として使用
46
- source_repo_name = source_repo.split("/")[-1]
47
- os.chdir(source_repo_name)
48
- print(f"現在の作業ディレクトリ: {os.getcwd()}")
49
-
50
- # CIVITAIからファイルをダウンロード
51
  headers = {}
52
  if CIVITAI_TOKEN:
53
  headers["Authorization"] = f"Bearer {CIVITAI_TOKEN}"
 
54
  try:
55
  response = requests.get(f"https://civitai.com/api/v1/models/{model_id}", headers=headers)
56
  response.raise_for_status()
@@ -74,38 +67,55 @@ def download_and_upload(model_id, repo_type, model_name=None):
74
  print(f"Civitaiモデルファイルのダウンロードに失敗しました: {e}")
75
  return f"Civitaiモデルファイルのダウンロードに失敗しました: {e}"
76
 
77
- # ファイルを移動してGit操作
78
  try:
79
- subprocess.run(["git", "add", "."], check=True)
80
- subprocess.run(["git", "commit", "-m", f"Add {filename}"], check=True)
81
- subprocess.run(["git", "push"], check=True)
82
- print(f"ファイルを新規リポジトリ '{target_repo}' にアップロードしました。")
83
- return f"ファイルを新規リポジトリ '{target_repo}' にアップロードしました。"
 
 
 
 
 
 
84
  except Exception as e:
85
- print(f"Git操作中にエラーが発生しました: {e}")
86
- return f"Git操作中にエラーが発生しました: {e}"
87
 
88
  # Gradio UI構築
89
  with gr.Blocks() as demo:
90
  gr.Markdown("## CivitaiモデルIDからファイルダウンロード&アップロードツール")
91
- gr.Markdown("CivitaiのモデルIDを指定して、新規モデルリポジトリを作成します。")
92
 
93
  model_id_input = gr.Textbox(
94
  label="CivitaiモデルID",
95
  placeholder="例: 918104"
96
  )
97
  repo_choice = gr.Radio(
98
- choices=["model"],
99
  label="アップロード先タイプの選択",
100
  value="model"
101
  )
102
  model_name_input = gr.Textbox(
103
- label="新規リポジトリ名",
104
- placeholder="例: my-awesome-model"
 
105
  )
106
  run_button = gr.Button("実行")
107
  output = gr.Textbox(label="結果メッセージ", interactive=False)
108
 
 
 
 
 
 
 
 
 
 
 
109
  run_button.click(
110
  download_and_upload,
111
  inputs=[model_id_input, repo_choice, model_name_input],
 
8
  # 環境変数から取得
9
  HF_TOKEN = os.environ.get("HF_TOKEN", None)
10
  MODEL_REPO_USER = os.environ.get("MODEL_REPO", None) # ユーザー名
11
+ LORA_REPO = os.environ.get("LORA_REPO", None) # LoRA用リポジトリ
12
  CIVITAI_TOKEN = os.environ.get("CIVITAI_TOKEN", None) # Civitai用トークン
13
 
14
  api = HfApi()
 
17
  if not model_id or not repo_type or (repo_type == "model" and not model_name):
18
  return "モデルIDまたはタイプ、モデル名が未指定です。"
19
 
20
+ # LoRAの場合
21
+ if repo_type == "lora":
22
+ if not LORA_REPO:
23
+ return "LoRA用リポジトリが環境変数で設定されていません。"
24
+ target_repo = LORA_REPO
25
+ print(f"LoRAファイルのアップロード先リポジトリ: {target_repo}")
26
+
27
+ # モデルの場合
28
+ else:
29
+ # 新規リポジトリを定義
30
+ target_repo = f"{MODEL_REPO_USER}/{model_name}"
31
+ print(f"モデルファイルのアップロード先リポジトリ: {target_repo}")
32
+
33
+ # 新規リポジトリを作成
34
+ try:
35
+ print(f"新規リポジトリを作成します: {target_repo}")
36
+ create_repo(repo_id=target_repo, token=HF_TOKEN, private=False)
37
+ print(f"新規リポジトリを作成しました: {target_repo}")
38
+ except Exception as e:
39
+ print(f"新規リポジトリの作成に失敗しました: {e}")
40
+ return f"新規リポジトリの作成に失敗しました: {e}"
41
+
42
+ # Civitaiからファイルをダウンロード
 
 
 
 
 
 
 
 
 
43
  headers = {}
44
  if CIVITAI_TOKEN:
45
  headers["Authorization"] = f"Bearer {CIVITAI_TOKEN}"
46
+
47
  try:
48
  response = requests.get(f"https://civitai.com/api/v1/models/{model_id}", headers=headers)
49
  response.raise_for_status()
 
67
  print(f"Civitaiモデルファイルのダウンロードに失敗しました: {e}")
68
  return f"Civitaiモデルファイルのダウンロードに失敗しました: {e}"
69
 
70
+ # LoRAまたはモデルリポジトリにファイルをアップロード
71
  try:
72
+ # ファイルアップロード
73
+ api.upload_file(
74
+ path_or_fileobj=filename,
75
+ path_in_repo=filename,
76
+ repo_id=target_repo,
77
+ token=HF_TOKEN,
78
+ repo_type="model" if repo_type == "model" else "dataset",
79
+ commit_message=f"Add {filename} from model ID {model_id}"
80
+ )
81
+ print(f"ファイルをアップロードしました: {filename}")
82
+ return f"ファイル '{filename}' をリポジトリ '{target_repo}' にアップロードしました。"
83
  except Exception as e:
84
+ print(f"アップロード中���エラーが発生しました: {e}")
85
+ return f"アップロード中にエラーが発生しました: {e}"
86
 
87
  # Gradio UI構築
88
  with gr.Blocks() as demo:
89
  gr.Markdown("## CivitaiモデルIDからファイルダウンロード&アップロードツール")
90
+ gr.Markdown("CivitaiのモデルIDを指定して、新規モデルまたはLoRAリポジトリへアップロードします。")
91
 
92
  model_id_input = gr.Textbox(
93
  label="CivitaiモデルID",
94
  placeholder="例: 918104"
95
  )
96
  repo_choice = gr.Radio(
97
+ choices=["model", "lora"],
98
  label="アップロード先タイプの選択",
99
  value="model"
100
  )
101
  model_name_input = gr.Textbox(
102
+ label="新規モデルリポジトリ名(modelを選択した場合に必須)",
103
+ placeholder="例: my-awesome-model",
104
+ visible=False
105
  )
106
  run_button = gr.Button("実行")
107
  output = gr.Textbox(label="結果メッセージ", interactive=False)
108
 
109
+ # モデルが選択された場合にモデル名入力を表示
110
+ def toggle_model_name(repo_type):
111
+ return gr.update(visible=(repo_type == "model"))
112
+
113
+ repo_choice.change(
114
+ toggle_model_name,
115
+ inputs=[repo_choice],
116
+ outputs=[model_name_input]
117
+ )
118
+
119
  run_button.click(
120
  download_and_upload,
121
  inputs=[model_id_input, repo_choice, model_name_input],