guysss/ACE-Step
0
1"""2ACE-Step: A Step Towards Music Generation Foundation Model3 4https://github.com/ace-step/ACE-Step5 6Apache 2.0 License7"""8 9import gradio as gr10import librosa11import os12 13 14TAG_DEFAULT = "funk, pop, soul, rock, melodic, guitar, drums, bass, keyboard, percussion, 105 BPM, energetic, upbeat, groovy, vibrant, dynamic"15LYRIC_DEFAULT = """[verse]16Neon lights they flicker bright17City hums in dead of night18Rhythms pulse through concrete veins19Lost in echoes of refrains20 21[verse]22Bassline groovin' in my chest23Heartbeats match the city's zest24Electric whispers fill the air25Synthesized dreams everywhere26 27[chorus]28Turn it up and let it flow29Feel the fire let it grow30In this rhythm we belong31Hear the night sing out our song32 33[verse]34Guitar strings they start to weep35Wake the soul from silent sleep36Every note a story told37In this night we’re bold and gold38 39[bridge]40Voices blend in harmony41Lost in pure cacophony42Timeless echoes timeless cries43Soulful shouts beneath the skies44 45[verse]46Keyboard dances on the keys47Melodies on evening breeze48Catch the tune and hold it tight49In this moment we take flight50"""51 52# First, let's define the presets at the top of the file, after the imports53GENRE_PRESETS = {54 "Modern Pop": "pop, synth, drums, guitar, 120 bpm, upbeat, catchy, vibrant, female vocals, polished vocals",55 "Rock": "rock, electric guitar, drums, bass, 130 bpm, energetic, rebellious, gritty, male vocals, raw vocals",56 "Hip Hop": "hip hop, 808 bass, hi-hats, synth, 90 bpm, bold, urban, intense, male vocals, rhythmic vocals",57 "Country": "country, acoustic guitar, steel guitar, fiddle, 100 bpm, heartfelt, rustic, warm, male vocals, twangy vocals",58 "EDM": "edm, synth, bass, kick drum, 128 bpm, euphoric, pulsating, energetic, instrumental",59 "Reggae": "reggae, guitar, bass, drums, 80 bpm, chill, soulful, positive, male vocals, smooth vocals",60 "Classical": "classical, orchestral, strings, piano, 60 bpm, elegant, emotive, timeless, instrumental",61 "Jazz": "jazz, saxophone, piano, double bass, 110 bpm, smooth, improvisational, soulful, male vocals, crooning vocals",62 "Metal": "metal, electric guitar, double kick drum, bass, 160 bpm, aggressive, intense, heavy, male vocals, screamed vocals",63 "R&B": "r&b, synth, bass, drums, 85 bpm, sultry, groovy, romantic, female vocals, silky vocals"64}65 66# Add this function to handle preset selection67def update_tags_from_preset(preset_name):68 if preset_name == "Custom":69 return ""70 return GENRE_PRESETS.get(preset_name, "")71 72 73def create_output_ui(task_name="Text2Music"):74 # For many consumer-grade GPU devices, only one batch can be run75 output_audio1 = gr.Audio(type="filepath", label=f"{task_name} Generated Audio 1")76 # output_audio2 = gr.Audio(type="filepath", label="Generated Audio 2")77 with gr.Accordion(f"{task_name} Parameters", open=False):78 input_params_json = gr.JSON(label=f"{task_name} Parameters")79 # outputs = [output_audio1, output_audio2]80 outputs = [output_audio1]81 return outputs, input_params_json82 83 84def dump_func(*args):85 print(args)86 return []87 88 89def create_text2music_ui(90 gr,91 text2music_process_func,92 sample_data_func=None,93 load_data_func=None,94):95 96 with gr.Row():97 with gr.Column():98 with gr.Row(equal_height=True):99 # add markdown, tags and lyrics examples are from ai music generation community100 audio_duration = gr.Slider(101 -1,102 240.0,103 step=0.00001,104 value=-1,105 label="Audio Duration",106 interactive=True,107 info="-1 means random duration (30 ~ 240).",108 scale=9,109 )110 sample_bnt = gr.Button("Sample", variant="secondary", scale=1)111 112 # audio2audio113 with gr.Row(equal_height=True):114 audio2audio_enable = gr.Checkbox(label="Enable Audio2Audio", value=False, info="Check to enable Audio-to-Audio generation using a reference audio.", elem_id="audio2audio_checkbox")115 lora_name_or_path = gr.Dropdown(116 label="Lora Name or Path",117 choices=["ACE-Step/ACE-Step-v1-chinese-rap-LoRA", "none"],118 value="none",119 allow_custom_value=True,120 )121 122 ref_audio_input = gr.Audio(type="filepath", label="Reference Audio (for Audio2Audio)", visible=False, elem_id="ref_audio_input", show_download_button=True)123 ref_audio_strength = gr.Slider(124 label="Refer audio strength",125 minimum=0.0,126 maximum=1.0,127 step=0.01,128 value=0.5,129 elem_id="ref_audio_strength",130 visible=False,131 interactive=True,132 )133 134 def toggle_ref_audio_visibility(is_checked):135 return (136 gr.update(visible=is_checked, elem_id="ref_audio_input"),137 gr.update(visible=is_checked, elem_id="ref_audio_strength"),138 )139 140 audio2audio_enable.change(141 fn=toggle_ref_audio_visibility,142 inputs=[audio2audio_enable],143 outputs=[ref_audio_input, ref_audio_strength],144 )145 146 with gr.Column(scale=2):147 with gr.Group():148 gr.Markdown("""<center>Support tags, descriptions, and scene. Use commas to separate different tags.<br>Tags and lyrics examples are from AI music generation community.</center>""")149 with gr.Row():150 genre_preset = gr.Dropdown(151 choices=["Custom"] + list(GENRE_PRESETS.keys()),152 value="Custom",153 label="Preset",154 scale=1,155 )156 prompt = gr.Textbox(157 lines=1,158 label="Tags",159 max_lines=4,160 value=TAG_DEFAULT,161 scale=9,162 )163 164 # Add the change event for the preset dropdown165 genre_preset.change(166 fn=update_tags_from_preset,167 inputs=[genre_preset],168 outputs=[prompt]169 )170 with gr.Group():171 gr.Markdown("""<center>Support lyric structure tags like [verse], [chorus], and [bridge] to separate different parts of the lyrics.<br>Use [instrumental] or [inst] to generate instrumental music. Not support genre structure tag in lyrics</center>""")172 lyrics = gr.Textbox(173 lines=9,174 label="Lyrics",175 max_lines=13,176 value=LYRIC_DEFAULT,177 )178 179 with gr.Accordion("Basic Settings", open=False):180 infer_step = gr.Slider(181 minimum=1,182 maximum=200,183 step=1,184 value=60,185 label="Infer Steps",186 interactive=True,187 )188 guidance_scale = gr.Slider(189 minimum=0.0,190 maximum=30.0,191 step=0.1,192 value=15.0,193 label="Guidance Scale",194 interactive=True,195 info="When guidance_scale_lyric > 1 and guidance_scale_text > 1, the guidance scale will not be applied.",196 )197 guidance_scale_text = gr.Slider(198 minimum=0.0,199 maximum=10.0,200 step=0.1,201 value=0.0,202 label="Guidance Scale Text",203 interactive=True,204 info="Guidance scale for text condition. It can only apply to cfg. set guidance_scale_text=5.0, guidance_scale_lyric=1.5 for start",205 )206 guidance_scale_lyric = gr.Slider(207 minimum=0.0,208 maximum=10.0,209 step=0.1,210 value=0.0,211 label="Guidance Scale Lyric",212 interactive=True,213 )214 215 manual_seeds = gr.Textbox(216 label="manual seeds (default None)",217 placeholder="1,2,3,4",218 value=None,219 info="Seed for the generation",220 )221 222 with gr.Accordion("Advanced Settings", open=False):223 scheduler_type = gr.Radio(224 ["euler", "heun"],225 value="euler",226 label="Scheduler Type",227 elem_id="scheduler_type",228 info="Scheduler type for the generation. euler is recommended. heun will take more time.",229 )230 cfg_type = gr.Radio(231 ["cfg", "apg", "cfg_star"],232 value="apg",233 label="CFG Type",234 elem_id="cfg_type",235 info="CFG type for the generation. apg is recommended. cfg and cfg_star are almost the same.",236 )237 use_erg_tag = gr.Checkbox(238 label="use ERG for tag",239 value=True,240 info="Use Entropy Rectifying Guidance for tag. It will multiple a temperature to the attention to make a weaker tag condition and make better diversity.",241 )242 use_erg_lyric = gr.Checkbox(243 label="use ERG for lyric",244 value=False,245 info="The same but apply to lyric encoder's attention.",246 )247 use_erg_diffusion = gr.Checkbox(248 label="use ERG for diffusion",249 value=True,250 info="The same but apply to diffusion model's attention.",251 )252 253 omega_scale = gr.Slider(254 minimum=-100.0,255 maximum=100.0,256 step=0.1,257 value=10.0,258 label="Granularity Scale",259 interactive=True,260 info="Granularity scale for the generation. Higher values can reduce artifacts",261 )262 263 guidance_interval = gr.Slider(264 minimum=0.0,265 maximum=1.0,266 step=0.01,267 value=0.5,268 label="Guidance Interval",269 interactive=True,270 info="Guidance interval for the generation. 0.5 means only apply guidance in the middle steps (0.25 * infer_steps to 0.75 * infer_steps)",271 )272 guidance_interval_decay = gr.Slider(273 minimum=0.0,274 maximum=1.0,275 step=0.01,276 value=0.0,277 label="Guidance Interval Decay",278 interactive=True,279 info="Guidance interval decay for the generation. Guidance scale will decay from guidance_scale to min_guidance_scale in the interval. 0.0 means no decay.",280 )281 min_guidance_scale = gr.Slider(282 minimum=0.0,283 maximum=200.0,284 step=0.1,285 value=3.0,286 label="Min Guidance Scale",287 interactive=True,288 info="Min guidance scale for guidance interval decay's end scale",289 )290 oss_steps = gr.Textbox(291 label="OSS Steps",292 placeholder="16, 29, 52, 96, 129, 158, 172, 183, 189, 200",293 value=None,294 info="Optimal Steps for the generation. But not test well",295 )296 297 text2music_bnt = gr.Button("Generate", variant="primary")298 299 with gr.Column():300 outputs, input_params_json = create_output_ui()301 with gr.Tab("retake"):302 retake_variance = gr.Slider(303 minimum=0.0, maximum=1.0, step=0.01, value=0.2, label="variance"304 )305 retake_seeds = gr.Textbox(306 label="retake seeds (default None)", placeholder="", value=None307 )308 retake_bnt = gr.Button("Retake", variant="primary")309 retake_outputs, retake_input_params_json = create_output_ui("Retake")310 311 def retake_process_func(json_data, retake_variance, retake_seeds):312 return text2music_process_func(313 json_data["audio_duration"],314 json_data["prompt"],315 json_data["lyrics"],316 json_data["infer_step"],317 json_data["guidance_scale"],318 json_data["scheduler_type"],319 json_data["cfg_type"],320 json_data["omega_scale"],321 ", ".join(map(str, json_data["actual_seeds"])),322 json_data["guidance_interval"],323 json_data["guidance_interval_decay"],324 json_data["min_guidance_scale"],325 json_data["use_erg_tag"],326 json_data["use_erg_lyric"],327 json_data["use_erg_diffusion"],328 ", ".join(map(str, json_data["oss_steps"])),329 (330 json_data["guidance_scale_text"]331 if "guidance_scale_text" in json_data332 else 0.0333 ),334 (335 json_data["guidance_scale_lyric"]336 if "guidance_scale_lyric" in json_data337 else 0.0338 ),339 retake_seeds=retake_seeds,340 retake_variance=retake_variance,341 task="retake",342 lora_name_or_path="none" if "lora_name_or_path" not in json_data else json_data["lora_name_or_path"]343 )344 345 retake_bnt.click(346 fn=retake_process_func,347 inputs=[348 input_params_json,349 retake_variance,350 retake_seeds,351 ],352 outputs=retake_outputs + [retake_input_params_json],353 )354 with gr.Tab("repainting"):355 retake_variance = gr.Slider(356 minimum=0.0, maximum=1.0, step=0.01, value=0.2, label="variance"357 )358 retake_seeds = gr.Textbox(359 label="repaint seeds (default None)", placeholder="", value=None360 )361 repaint_start = gr.Slider(362 minimum=0.0,363 maximum=240.0,364 step=0.01,365 value=0.0,366 label="Repaint Start Time",367 interactive=True,368 )369 repaint_end = gr.Slider(370 minimum=0.0,371 maximum=240.0,372 step=0.01,373 value=30.0,374 label="Repaint End Time",375 interactive=True,376 )377 repaint_source = gr.Radio(378 ["text2music", "last_repaint", "upload"],379 value="text2music",380 label="Repaint Source",381 elem_id="repaint_source",382 )383 384 repaint_source_audio_upload = gr.Audio(385 label="Upload Audio",386 type="filepath",387 visible=False,388 elem_id="repaint_source_audio_upload",389 show_download_button=True,390 )391 repaint_source.change(392 fn=lambda x: gr.update(393 visible=x == "upload", elem_id="repaint_source_audio_upload"394 ),395 inputs=[repaint_source],396 outputs=[repaint_source_audio_upload],397 )398 399 repaint_bnt = gr.Button("Repaint", variant="primary")400 repaint_outputs, repaint_input_params_json = create_output_ui("Repaint")401 402 def repaint_process_func(403 text2music_json_data,404 repaint_json_data,405 retake_variance,406 retake_seeds,407 repaint_start,408 repaint_end,409 repaint_source,410 repaint_source_audio_upload,411 prompt,412 lyrics,413 infer_step,414 guidance_scale,415 scheduler_type,416 cfg_type,417 omega_scale,418 manual_seeds,419 guidance_interval,420 guidance_interval_decay,421 min_guidance_scale,422 use_erg_tag,423 use_erg_lyric,424 use_erg_diffusion,425 oss_steps,426 guidance_scale_text,427 guidance_scale_lyric,428 ):429 if repaint_source == "upload":430 src_audio_path = repaint_source_audio_upload431 audio_duration = librosa.get_duration(filename=src_audio_path)432 json_data = {"audio_duration": audio_duration}433 elif repaint_source == "text2music":434 json_data = text2music_json_data435 src_audio_path = json_data["audio_path"]436 elif repaint_source == "last_repaint":437 json_data = repaint_json_data438 src_audio_path = json_data["audio_path"]439 440 return text2music_process_func(441 json_data["audio_duration"],442 prompt,443 lyrics,444 infer_step,445 guidance_scale,446 scheduler_type,447 cfg_type,448 omega_scale,449 manual_seeds,450 guidance_interval,451 guidance_interval_decay,452 min_guidance_scale,453 use_erg_tag,454 use_erg_lyric,455 use_erg_diffusion,456 oss_steps,457 guidance_scale_text,458 guidance_scale_lyric,459 retake_seeds=retake_seeds,460 retake_variance=retake_variance,461 task="repaint",462 repaint_start=repaint_start,463 repaint_end=repaint_end,464 src_audio_path=src_audio_path,465 lora_name_or_path="none" if "lora_name_or_path" not in json_data else json_data["lora_name_or_path"]466 )467 468 repaint_bnt.click(469 fn=repaint_process_func,470 inputs=[471 input_params_json,472 repaint_input_params_json,473 retake_variance,474 retake_seeds,475 repaint_start,476 repaint_end,477 repaint_source,478 repaint_source_audio_upload,479 prompt,480 lyrics,481 infer_step,482 guidance_scale,483 scheduler_type,484 cfg_type,485 omega_scale,486 manual_seeds,487 guidance_interval,488 guidance_interval_decay,489 min_guidance_scale,490 use_erg_tag,491 use_erg_lyric,492 use_erg_diffusion,493 oss_steps,494 guidance_scale_text,495 guidance_scale_lyric,496 ],497 outputs=repaint_outputs + [repaint_input_params_json],498 )499 with gr.Tab("edit"):500 edit_prompt = gr.Textbox(lines=2, label="Edit Tags", max_lines=4)501 edit_lyrics = gr.Textbox(lines=9, label="Edit Lyrics", max_lines=13)502 retake_seeds = gr.Textbox(503 label="edit seeds (default None)", placeholder="", value=None504 )505 506 edit_type = gr.Radio(507 ["only_lyrics", "remix"],508 value="only_lyrics",509 label="Edit Type",510 elem_id="edit_type",511 info="`only_lyrics` will keep the whole song the same except lyrics difference. Make your diffrence smaller, e.g. one lyrc line change.\nremix can change the song melody and genre",512 )513 edit_n_min = gr.Slider(514 minimum=0.0,515 maximum=1.0,516 step=0.01,517 value=0.6,518 label="edit_n_min",519 interactive=True,520 )521 edit_n_max = gr.Slider(522 minimum=0.0,523 maximum=1.0,524 step=0.01,525 value=1.0,526 label="edit_n_max",527 interactive=True,528 )529 530 def edit_type_change_func(edit_type):531 if edit_type == "only_lyrics":532 n_min = 0.6533 n_max = 1.0534 elif edit_type == "remix":535 n_min = 0.2536 n_max = 0.4537 return n_min, n_max538 539 edit_type.change(540 edit_type_change_func,541 inputs=[edit_type],542 outputs=[edit_n_min, edit_n_max],543 )544 545 edit_source = gr.Radio(546 ["text2music", "last_edit", "upload"],547 value="text2music",548 label="Edit Source",549 elem_id="edit_source",550 )551 edit_source_audio_upload = gr.Audio(552 label="Upload Audio",553 type="filepath",554 visible=False,555 elem_id="edit_source_audio_upload",556 show_download_button=True,557 )558 edit_source.change(559 fn=lambda x: gr.update(560 visible=x == "upload", elem_id="edit_source_audio_upload"561 ),562 inputs=[edit_source],563 outputs=[edit_source_audio_upload],564 )565 566 edit_bnt = gr.Button("Edit", variant="primary")567 edit_outputs, edit_input_params_json = create_output_ui("Edit")568 569 def edit_process_func(570 text2music_json_data,571 edit_input_params_json,572 edit_source,573 edit_source_audio_upload,574 prompt,575 lyrics,576 edit_prompt,577 edit_lyrics,578 edit_n_min,579 edit_n_max,580 infer_step,581 guidance_scale,582 scheduler_type,583 cfg_type,584 omega_scale,585 manual_seeds,586 guidance_interval,587 guidance_interval_decay,588 min_guidance_scale,589 use_erg_tag,590 use_erg_lyric,591 use_erg_diffusion,592 oss_steps,593 guidance_scale_text,594 guidance_scale_lyric,595 retake_seeds,596 ):597 if edit_source == "upload":598 src_audio_path = edit_source_audio_upload599 audio_duration = librosa.get_duration(filename=src_audio_path)600 json_data = {"audio_duration": audio_duration}601 elif edit_source == "text2music":602 json_data = text2music_json_data603 src_audio_path = json_data["audio_path"]604 elif edit_source == "last_edit":605 json_data = edit_input_params_json606 src_audio_path = json_data["audio_path"]607 608 if not edit_prompt:609 edit_prompt = prompt610 if not edit_lyrics:611 edit_lyrics = lyrics612 613 return text2music_process_func(614 json_data["audio_duration"],615 prompt,616 lyrics,617 infer_step,618 guidance_scale,619 scheduler_type,620 cfg_type,621 omega_scale,622 manual_seeds,623 guidance_interval,624 guidance_interval_decay,625 min_guidance_scale,626 use_erg_tag,627 use_erg_lyric,628 use_erg_diffusion,629 oss_steps,630 guidance_scale_text,631 guidance_scale_lyric,632 task="edit",633 src_audio_path=src_audio_path,634 edit_target_prompt=edit_prompt,635 edit_target_lyrics=edit_lyrics,636 edit_n_min=edit_n_min,637 edit_n_max=edit_n_max,638 retake_seeds=retake_seeds,639 lora_name_or_path="none" if "lora_name_or_path" not in json_data else json_data["lora_name_or_path"]640 )641 642 edit_bnt.click(643 fn=edit_process_func,644 inputs=[645 input_params_json,646 edit_input_params_json,647 edit_source,648 edit_source_audio_upload,649 prompt,650 lyrics,651 edit_prompt,652 edit_lyrics,653 edit_n_min,654 edit_n_max,655 infer_step,656 guidance_scale,657 scheduler_type,658 cfg_type,659 omega_scale,660 manual_seeds,661 guidance_interval,662 guidance_interval_decay,663 min_guidance_scale,664 use_erg_tag,665 use_erg_lyric,666 use_erg_diffusion,667 oss_steps,668 guidance_scale_text,669 guidance_scale_lyric,670 retake_seeds,671 ],672 outputs=edit_outputs + [edit_input_params_json],673 )674 with gr.Tab("extend"):675 extend_seeds = gr.Textbox(676 label="extend seeds (default None)", placeholder="", value=None677 )678 left_extend_length = gr.Slider(679 minimum=0.0,680 maximum=240.0,681 step=0.01,682 value=0.0,683 label="Left Extend Length",684 interactive=True,685 )686 right_extend_length = gr.Slider(687 minimum=0.0,688 maximum=240.0,689 step=0.01,690 value=30.0,691 label="Right Extend Length",692 interactive=True,693 )694 extend_source = gr.Radio(695 ["text2music", "last_extend", "upload"],696 value="text2music",697 label="Extend Source",698 elem_id="extend_source",699 )700 701 extend_source_audio_upload = gr.Audio(702 label="Upload Audio",703 type="filepath",704 visible=False,705 elem_id="extend_source_audio_upload",706 show_download_button=True,707 )708 extend_source.change(709 fn=lambda x: gr.update(710 visible=x == "upload", elem_id="extend_source_audio_upload"711 ),712 inputs=[extend_source],713 outputs=[extend_source_audio_upload],714 )715 716 extend_bnt = gr.Button("Extend", variant="primary")717 extend_outputs, extend_input_params_json = create_output_ui("Extend")718 719 def extend_process_func(720 text2music_json_data,721 extend_input_params_json,722 extend_seeds,723 left_extend_length,724 right_extend_length,725 extend_source,726 extend_source_audio_upload,727 prompt,728 lyrics,729 infer_step,730 guidance_scale,731 scheduler_type,732 cfg_type,733 omega_scale,734 manual_seeds,735 guidance_interval,736 guidance_interval_decay,737 min_guidance_scale,738 use_erg_tag,739 use_erg_lyric,740 use_erg_diffusion,741 oss_steps,742 guidance_scale_text,743 guidance_scale_lyric,744 ):745 if extend_source == "upload":746 src_audio_path = extend_source_audio_upload747 # get audio duration748 audio_duration = librosa.get_duration(filename=src_audio_path)749 json_data = {"audio_duration": audio_duration}750 elif extend_source == "text2music":751 json_data = text2music_json_data752 src_audio_path = json_data["audio_path"]753 elif extend_source == "last_extend":754 json_data = extend_input_params_json755 src_audio_path = json_data["audio_path"]756 757 repaint_start = -left_extend_length758 repaint_end = json_data["audio_duration"] + right_extend_length759 return text2music_process_func(760 json_data["audio_duration"],761 prompt,762 lyrics,763 infer_step,764 guidance_scale,765 scheduler_type,766 cfg_type,767 omega_scale,768 manual_seeds,769 guidance_interval,770 guidance_interval_decay,771 min_guidance_scale,772 use_erg_tag,773 use_erg_lyric,774 use_erg_diffusion,775 oss_steps,776 guidance_scale_text,777 guidance_scale_lyric,778 retake_seeds=extend_seeds,779 retake_variance=1.0,780 task="extend",781 repaint_start=repaint_start,782 repaint_end=repaint_end,783 src_audio_path=src_audio_path,784 lora_name_or_path="none" if "lora_name_or_path" not in json_data else json_data["lora_name_or_path"]785 )786 787 extend_bnt.click(788 fn=extend_process_func,789 inputs=[790 input_params_json,791 extend_input_params_json,792 extend_seeds,793 left_extend_length,794 right_extend_length,795 extend_source,796 extend_source_audio_upload,797 prompt,798 lyrics,799 infer_step,800 guidance_scale,801 scheduler_type,802 cfg_type,803 omega_scale,804 manual_seeds,805 guidance_interval,806 guidance_interval_decay,807 min_guidance_scale,808 use_erg_tag,809 use_erg_lyric,810 use_erg_diffusion,811 oss_steps,812 guidance_scale_text,813 guidance_scale_lyric,814 ],815 outputs=extend_outputs + [extend_input_params_json],816 )817 818 def json2output(json_data):819 return (820 json_data["audio_duration"],821 json_data["prompt"],822 json_data["lyrics"],823 json_data["infer_step"],824 json_data["guidance_scale"],825 json_data["scheduler_type"],826 json_data["cfg_type"],827 json_data["omega_scale"],828 ", ".join(map(str, json_data["actual_seeds"])),829 json_data["guidance_interval"],830 json_data["guidance_interval_decay"],831 json_data["min_guidance_scale"],832 json_data["use_erg_tag"],833 json_data["use_erg_lyric"],834 json_data["use_erg_diffusion"],835 ", ".join(map(str, json_data["oss_steps"])),836 (837 json_data["guidance_scale_text"]838 if "guidance_scale_text" in json_data839 else 0.0840 ),841 (842 json_data["guidance_scale_lyric"]843 if "guidance_scale_lyric" in json_data844 else 0.0845 ),846 (847 json_data["audio2audio_enable"]848 if "audio2audio_enable" in json_data849 else False850 ),851 (852 json_data["ref_audio_strength"]853 if "ref_audio_strength" in json_data854 else 0.5855 ),856 (857 json_data["ref_audio_input"]858 if "ref_audio_input" in json_data859 else None860 ),861 )862 863 def sample_data(lora_name_or_path_):864 json_data = sample_data_func(lora_name_or_path_)865 return json2output(json_data)866 867 sample_bnt.click(868 sample_data,869 inputs=[lora_name_or_path],870 outputs=[871 audio_duration,872 prompt,873 lyrics,874 infer_step,875 guidance_scale,876 scheduler_type,877 cfg_type,878 omega_scale,879 manual_seeds,880 guidance_interval,881 guidance_interval_decay,882 min_guidance_scale,883 use_erg_tag,884 use_erg_lyric,885 use_erg_diffusion,886 oss_steps,887 guidance_scale_text,888 guidance_scale_lyric,889 audio2audio_enable,890 ref_audio_strength,891 ref_audio_input,892 ],893 )894 895 text2music_bnt.click(896 fn=text2music_process_func,897 inputs=[898 audio_duration,899 prompt,900 lyrics,901 infer_step,902 guidance_scale,903 scheduler_type,904 cfg_type,905 omega_scale,906 manual_seeds,907 guidance_interval,908 guidance_interval_decay,909 min_guidance_scale,910 use_erg_tag,911 use_erg_lyric,912 use_erg_diffusion,913 oss_steps,914 guidance_scale_text,915 guidance_scale_lyric,916 audio2audio_enable,917 ref_audio_strength,918 ref_audio_input,919 lora_name_or_path,920 ],921 outputs=outputs + [input_params_json],922 )923 924 925def create_main_demo_ui(926 text2music_process_func=dump_func,927 sample_data_func=dump_func,928 load_data_func=dump_func,929):930 with gr.Blocks(931 title="ACE-Step Model 1.0 DEMO",932 ) as demo:933 gr.Markdown(934 """935 <h1 style="text-align: center;">ACE-Step: A Step Towards Music Generation Foundation Model</h1>936 <p>937 <a href="https://ace-step.github.io/" target='_blank'>Project</a> |938 <a href="https://huggingface.co/ACE-Step/ACE-Step-v1-3.5B">Checkpoints</a> |939 <a href="https://discord.gg/rjAZz2xBdG" target='_blank'>Discord</a> 940 </p>941 """942 )943 with gr.Tab("text2music"):944 create_text2music_ui(945 gr=gr,946 text2music_process_func=text2music_process_func,947 sample_data_func=sample_data_func,948 load_data_func=load_data_func,949 )950 return demo951 952 953if __name__ == "__main__":954 demo = create_main_demo_ui()955 demo.launch(956 server_name="0.0.0.0",957 server_port=7860,958 )959 