Feat: download model from hf
This commit is contained in:
3
app.py
3
app.py
@@ -10,6 +10,7 @@ from gradio_tabs.inference import create_inference_app
|
|||||||
from gradio_tabs.merge import create_merge_app
|
from gradio_tabs.merge import create_merge_app
|
||||||
from gradio_tabs.style_vectors import create_style_vectors_app
|
from gradio_tabs.style_vectors import create_style_vectors_app
|
||||||
from gradio_tabs.train import create_train_app
|
from gradio_tabs.train import create_train_app
|
||||||
|
from gradio_tabs.download_tab import create_download_app
|
||||||
from style_bert_vits2.constants import GRADIO_THEME, VERSION
|
from style_bert_vits2.constants import GRADIO_THEME, VERSION
|
||||||
from style_bert_vits2.nlp.japanese import pyopenjtalk_worker
|
from style_bert_vits2.nlp.japanese import pyopenjtalk_worker
|
||||||
from style_bert_vits2.nlp.japanese.user_dict import update_dict
|
from style_bert_vits2.nlp.japanese.user_dict import update_dict
|
||||||
@@ -51,6 +52,8 @@ with gr.Blocks(theme=GRADIO_THEME) as app:
|
|||||||
create_style_vectors_app()
|
create_style_vectors_app()
|
||||||
with gr.Tab("マージ"):
|
with gr.Tab("マージ"):
|
||||||
create_merge_app(model_holder=model_holder)
|
create_merge_app(model_holder=model_holder)
|
||||||
|
with gr.Tab("モデルダウンロード"):
|
||||||
|
create_download_app()
|
||||||
|
|
||||||
|
|
||||||
app.launch(
|
app.launch(
|
||||||
|
|||||||
67
gradio_tabs/download_tab.py
Normal file
67
gradio_tabs/download_tab.py
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
import gradio as gr
|
||||||
|
from huggingface_hub import hf_hub_download, snapshot_download
|
||||||
|
|
||||||
|
from config import get_path_config
|
||||||
|
|
||||||
|
|
||||||
|
assets_root = get_path_config().assets_root
|
||||||
|
|
||||||
|
how_to_md = """
|
||||||
|
## 使い方
|
||||||
|
|
||||||
|
Hugging Face 🤗 に公開されているモデルをダウンロードして音声合成で使えるようにします。
|
||||||
|
|
||||||
|
例:
|
||||||
|
|
||||||
|
- `https://huggingface.co/username/my_sbv2_model`を指定すると、`model_assets/username-my_sbv2_model`に全体がダウンロードされます。
|
||||||
|
- `https://huggingface.co/username/my_sbv2_models/tree/main/model1`を指定すると、`model_assets/username-my_sbv2_models/model1`に`model1`フォルダのみがダウンロードされます。
|
||||||
|
|
||||||
|
**注意**
|
||||||
|
|
||||||
|
- 音声合成で使うには、`model_assets/{model_name}`の**直下**に`*.safetensors`ファイルと`config.json`ファイルと`style_vectors.npy`ファイルが必要です。特にリポジトリの構成は確認しないので、ダウンロード後に必要ならば再配置等を行ってください。
|
||||||
|
- リポジトリの内容はチェックしませんので、ダウンロードする前にURLにアクセスしてリポジトリの内容を確認してください。怪しいURLは入力しないでください。
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
def download_model(url: str):
|
||||||
|
# Parse url like: https://huggingface.co/username/myrepo/tree/main/jvnv-F1-jp
|
||||||
|
# or like: https://huggingface.co/username/myrepo
|
||||||
|
|
||||||
|
# repo_id = "username/myrepo"
|
||||||
|
repo_id = url.split("https://huggingface.co/")[1].split("/tree/main")[0]
|
||||||
|
if len(repo_id.split("/")) != 2:
|
||||||
|
return "Error: URLが不正です。"
|
||||||
|
# repo_folder = "jvnv-F1-jp"
|
||||||
|
repo_folder = url.split("/tree/main/")[-1] if "/tree/main/" in url else ""
|
||||||
|
# remove last / if exists
|
||||||
|
if repo_folder.endswith("/"):
|
||||||
|
repo_folder = repo_folder[:-1]
|
||||||
|
if repo_folder == "":
|
||||||
|
model_name = repo_id.replace("/", "-")
|
||||||
|
result = snapshot_download(repo_id, local_dir=assets_root / model_name)
|
||||||
|
else:
|
||||||
|
model_name = repo_id.replace("/", "-")
|
||||||
|
result = snapshot_download(
|
||||||
|
repo_id,
|
||||||
|
local_dir=assets_root / model_name,
|
||||||
|
allow_patterns=[repo_folder + "/*"],
|
||||||
|
)
|
||||||
|
return f"ダウンロード完了: {result}"
|
||||||
|
|
||||||
|
|
||||||
|
def create_download_app() -> gr.Blocks:
|
||||||
|
with gr.Blocks() as app:
|
||||||
|
gr.Markdown(how_to_md)
|
||||||
|
url = gr.Textbox(
|
||||||
|
label="URL", placeholder="https://huggingface.co/username/myrepo"
|
||||||
|
)
|
||||||
|
btn = gr.Button("ダウンロード")
|
||||||
|
info = gr.Textbox(label="情報", value="")
|
||||||
|
btn.click(download_model, inputs=[url], outputs=[info])
|
||||||
|
|
||||||
|
return app
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
app = create_download_app()
|
||||||
|
app.launch()
|
||||||
Reference in New Issue
Block a user