Spaces:
Running
Running
cockolo terada
commited on
Update gradio_tabs/single.py
Browse files- gradio_tabs/single.py +9 -16
gradio_tabs/single.py
CHANGED
|
@@ -450,16 +450,18 @@ def create_synthesis_app(model_holder: TTSModelHolder) -> gr.Blocks:
|
|
| 450 |
]
|
| 451 |
FN_MODE_MODEL_ORDER = [f"FN{i}" for i in range(1, 11)] # FN1, FN2, ... FN10 の順
|
| 452 |
|
|
|
|
| 453 |
custom_css = """
|
| 454 |
.audio-output-row { display: flex !important; flex-wrap: wrap !important; gap: 10px !important; }
|
| 455 |
.audio-item-column { flex-grow: 0 !important; flex-shrink: 0 !important; width: var(--audio-width, 250px) !important; background-color: #f8f9fa; padding: 8px; border-radius: 8px; border: 1px solid #dee2e6; }
|
| 456 |
.dummy-column { border: none !important; background: none !important; padding: 0 !important; margin: 0 !important; }
|
| 457 |
.compact-audio .wrap.svelte-1w9aqb2 { min-height: 40px !important; }
|
| 458 |
.compact-audio audio.svelte-1w9aqb2 { height: 40px !important; }
|
| 459 |
-
.workbench-item-row { border-bottom: 1px solid #dee2e6; padding: 8px 5px; }
|
| 460 |
.workbench-item-row .gr-form { flex-wrap: nowrap !important; align-items: center !important; gap: 8px !important;}
|
| 461 |
.text-center { text-align: center; }
|
| 462 |
"""
|
|
|
|
| 463 |
|
| 464 |
with gr.Blocks(css=custom_css) as app:
|
| 465 |
MAX_AUDIO_OUTPUTS = 4
|
|
@@ -604,34 +606,24 @@ def create_synthesis_app(model_holder: TTSModelHolder) -> gr.Blocks:
|
|
| 604 |
for i in range(MAX_WORKBENCH_ITEMS):
|
| 605 |
parent_column = left_workbench_col if i < ITEMS_PER_COLUMN else right_workbench_col
|
| 606 |
with parent_column:
|
| 607 |
-
# ▼▼▼ 変更:
|
| 608 |
-
with gr.Row(visible=False, elem_classes="workbench-item-row"
|
| 609 |
-
|
| 610 |
item_num_display = gr.Markdown(f"**{i+1}**", elem_classes=["text-center"], scale=0)
|
| 611 |
-
|
| 612 |
-
# 音声プレーヤー (左側)
|
| 613 |
audio = gr.Audio(label=f"音声 {i+1}", interactive=False, type="filepath", scale=2)
|
| 614 |
-
|
| 615 |
-
# 情報とボタンをまとめるカラム (右側)
|
| 616 |
with gr.Column(scale=3):
|
| 617 |
-
info = gr.Markdown()
|
| 618 |
with gr.Row():
|
| 619 |
download = gr.DownloadButton("ダウンロード", size="sm", visible=False)
|
| 620 |
delete_btn = gr.Button("削除", variant="primary")
|
| 621 |
-
# ▲▲▲ 変更 ▲▲▲
|
| 622 |
|
| 623 |
workbench_items.append({"row": item_row, "item_num_display": item_num_display, "audio": audio, "download": download, "info": info, "delete_btn": delete_btn})
|
| 624 |
|
| 625 |
for item in workbench_items:
|
| 626 |
-
# all_workbench_ui_componentsのリストには、update_workbench_uiで更新するコンポーネントのみ含める
|
| 627 |
all_workbench_ui_components.extend([item["row"], item["item_num_display"], item["audio"], item["download"], item["info"]])
|
| 628 |
|
| 629 |
|
| 630 |
-
# --- UIイベントハンドラ関数 (
|
| 631 |
-
# (load_styles_for_ui, action_refresh_model_list, on_model_select_change, on_style_dropdown_select,
|
| 632 |
-
# action_run_synthesis, add_to_workbench, remove_from_workbench, action_merge_preview,
|
| 633 |
-
# action_add_merged_to_workbench など、ロジック関数は変更の必要がないため、省略します)
|
| 634 |
-
|
| 635 |
def load_styles_for_ui(selected_model_name: Optional[str]):
|
| 636 |
if not selected_model_name: return gr.update(choices=[], value=None), gr.update(value=DEFAULT_STYLE_WEIGHT), {}
|
| 637 |
model_path = assets_root_path / selected_model_name
|
|
@@ -1034,6 +1026,7 @@ def create_synthesis_app(model_holder: TTSModelHolder) -> gr.Blocks:
|
|
| 1034 |
final_status = (current_status + "\n" + "\n".join(log_messages)).strip()
|
| 1035 |
return (final_status, final_workbench_list) + ui_updates
|
| 1036 |
|
|
|
|
| 1037 |
# --- イベントリスナー接続 (変更なし) ---
|
| 1038 |
def on_fn_mode_change(is_fn_mode_on: bool) -> gr.Checkbox:
|
| 1039 |
if is_fn_mode_on: return gr.update(value=False)
|
|
|
|
| 450 |
]
|
| 451 |
FN_MODE_MODEL_ORDER = [f"FN{i}" for i in range(1, 11)] # FN1, FN2, ... FN10 の順
|
| 452 |
|
| 453 |
+
# ▼▼▼ 変更: `align`引数と互換性のあるCSSを追加 ▼▼▼
|
| 454 |
custom_css = """
|
| 455 |
.audio-output-row { display: flex !important; flex-wrap: wrap !important; gap: 10px !important; }
|
| 456 |
.audio-item-column { flex-grow: 0 !important; flex-shrink: 0 !important; width: var(--audio-width, 250px) !important; background-color: #f8f9fa; padding: 8px; border-radius: 8px; border: 1px solid #dee2e6; }
|
| 457 |
.dummy-column { border: none !important; background: none !important; padding: 0 !important; margin: 0 !important; }
|
| 458 |
.compact-audio .wrap.svelte-1w9aqb2 { min-height: 40px !important; }
|
| 459 |
.compact-audio audio.svelte-1w9aqb2 { height: 40px !important; }
|
| 460 |
+
.workbench-item-row { border-bottom: 1px solid #dee2e6; padding: 8px 5px; align-items: flex-start !important; }
|
| 461 |
.workbench-item-row .gr-form { flex-wrap: nowrap !important; align-items: center !important; gap: 8px !important;}
|
| 462 |
.text-center { text-align: center; }
|
| 463 |
"""
|
| 464 |
+
# ▲▲▲ 変更 ▲▲▲
|
| 465 |
|
| 466 |
with gr.Blocks(css=custom_css) as app:
|
| 467 |
MAX_AUDIO_OUTPUTS = 4
|
|
|
|
| 606 |
for i in range(MAX_WORKBENCH_ITEMS):
|
| 607 |
parent_column = left_workbench_col if i < ITEMS_PER_COLUMN else right_workbench_col
|
| 608 |
with parent_column:
|
| 609 |
+
# ▼▼▼ 変更: `align`引数を削除 ▼▼▼
|
| 610 |
+
with gr.Row(visible=False, elem_classes="workbench-item-row") as item_row:
|
| 611 |
+
# ▲▲▲ 変更 ▲▲▲
|
| 612 |
item_num_display = gr.Markdown(f"**{i+1}**", elem_classes=["text-center"], scale=0)
|
|
|
|
|
|
|
| 613 |
audio = gr.Audio(label=f"音声 {i+1}", interactive=False, type="filepath", scale=2)
|
|
|
|
|
|
|
| 614 |
with gr.Column(scale=3):
|
| 615 |
+
info = gr.Markdown()
|
| 616 |
with gr.Row():
|
| 617 |
download = gr.DownloadButton("ダウンロード", size="sm", visible=False)
|
| 618 |
delete_btn = gr.Button("削除", variant="primary")
|
|
|
|
| 619 |
|
| 620 |
workbench_items.append({"row": item_row, "item_num_display": item_num_display, "audio": audio, "download": download, "info": info, "delete_btn": delete_btn})
|
| 621 |
|
| 622 |
for item in workbench_items:
|
|
|
|
| 623 |
all_workbench_ui_components.extend([item["row"], item["item_num_display"], item["audio"], item["download"], item["info"]])
|
| 624 |
|
| 625 |
|
| 626 |
+
# --- UIイベントハンドラ関数 (変更なしのため省略) ---
|
|
|
|
|
|
|
|
|
|
|
|
|
| 627 |
def load_styles_for_ui(selected_model_name: Optional[str]):
|
| 628 |
if not selected_model_name: return gr.update(choices=[], value=None), gr.update(value=DEFAULT_STYLE_WEIGHT), {}
|
| 629 |
model_path = assets_root_path / selected_model_name
|
|
|
|
| 1026 |
final_status = (current_status + "\n" + "\n".join(log_messages)).strip()
|
| 1027 |
return (final_status, final_workbench_list) + ui_updates
|
| 1028 |
|
| 1029 |
+
|
| 1030 |
# --- イベントリスナー接続 (変更なし) ---
|
| 1031 |
def on_fn_mode_change(is_fn_mode_on: bool) -> gr.Checkbox:
|
| 1032 |
if is_fn_mode_on: return gr.update(value=False)
|