Fix audio AbortError race condition in all generation tabs

Use gr.skip() instead of gr.update() for audio/waveform/duration/seed
outputs during the initial "Generating..." status yield. This prevents
Gradio's StaticAudio component from starting a fetch that gets aborted
when the actual audio path arrives in the second yield.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-11-27 17:04:55 +01:00
parent 1935bae594
commit f5030245e5
5 changed files with 66 additions and 66 deletions

View File

@@ -163,21 +163,21 @@ def create_audiogen_tab(
if not prompt: if not prompt:
yield ( yield (
gr.update(value="Please enter a prompt"), gr.update(value="Please enter a prompt"),
gr.update(), gr.skip(),
gr.update(), gr.skip(),
gr.update(), gr.skip(),
gr.update(), gr.skip(),
gr.update(), gr.skip(),
) )
return return
yield ( yield (
gr.update(value="🔄 Generating..."), gr.update(value="🔄 Generating..."),
gr.update(visible=True, value=0), gr.update(visible=True, value=0),
gr.update(), gr.skip(), # Don't update audio yet
gr.update(), gr.skip(), # Don't update waveform
gr.update(), gr.skip(), # Don't update duration
gr.update(), gr.skip(), # Don't update seed
) )
try: try:
@@ -206,10 +206,10 @@ def create_audiogen_tab(
yield ( yield (
gr.update(value=f"❌ Error: {str(e)}"), gr.update(value=f"❌ Error: {str(e)}"),
gr.update(visible=False), gr.update(visible=False),
gr.update(), gr.skip(),
gr.update(), gr.skip(),
gr.update(), gr.skip(),
gr.update(), gr.skip(),
) )
generate_btn.click( generate_btn.click(

View File

@@ -219,21 +219,21 @@ def create_jasco_tab(
if not chords: if not chords:
yield ( yield (
gr.update(value="Please enter a chord progression"), gr.update(value="Please enter a chord progression"),
gr.update(), gr.skip(),
gr.update(), gr.skip(),
gr.update(), gr.skip(),
gr.update(), gr.skip(),
gr.update(), gr.skip(),
) )
return return
yield ( yield (
gr.update(value="🔄 Generating..."), gr.update(value="🔄 Generating..."),
gr.update(visible=True, value=0), gr.update(visible=True, value=0),
gr.update(), gr.skip(), # Don't update audio yet
gr.update(), gr.skip(), # Don't update waveform
gr.update(), gr.skip(), # Don't update duration
gr.update(), gr.skip(), # Don't update seed
) )
try: try:
@@ -270,10 +270,10 @@ def create_jasco_tab(
yield ( yield (
gr.update(value=f"❌ Error: {str(e)}"), gr.update(value=f"❌ Error: {str(e)}"),
gr.update(visible=False), gr.update(visible=False),
gr.update(), gr.skip(),
gr.update(), gr.skip(),
gr.update(), gr.skip(),
gr.update(), gr.skip(),
) )
generate_btn.click( generate_btn.click(

View File

@@ -186,21 +186,21 @@ def create_magnet_tab(
if not prompt: if not prompt:
yield ( yield (
gr.update(value="Please enter a prompt"), gr.update(value="Please enter a prompt"),
gr.update(), gr.skip(),
gr.update(), gr.skip(),
gr.update(), gr.skip(),
gr.update(), gr.skip(),
gr.update(), gr.skip(),
) )
return return
yield ( yield (
gr.update(value="🔄 Generating..."), gr.update(value="🔄 Generating..."),
gr.update(visible=True, value=0), gr.update(visible=True, value=0),
gr.update(), gr.skip(), # Don't update audio yet
gr.update(), gr.skip(), # Don't update waveform
gr.update(), gr.skip(), # Don't update duration
gr.update(), gr.skip(), # Don't update seed
) )
try: try:
@@ -231,10 +231,10 @@ def create_magnet_tab(
yield ( yield (
gr.update(value=f"❌ Error: {str(e)}"), gr.update(value=f"❌ Error: {str(e)}"),
gr.update(visible=False), gr.update(visible=False),
gr.update(), gr.skip(),
gr.update(), gr.skip(),
gr.update(), gr.skip(),
gr.update(), gr.skip(),
) )
generate_btn.click( generate_btn.click(

View File

@@ -224,11 +224,11 @@ def create_musicgen_tab(
if not prompt: if not prompt:
yield ( yield (
gr.update(value="Please enter a prompt"), gr.update(value="Please enter a prompt"),
gr.update(), gr.skip(),
gr.update(), gr.skip(),
gr.update(), gr.skip(),
gr.update(), gr.skip(),
gr.update(), gr.skip(),
) )
return return
@@ -237,14 +237,14 @@ def create_musicgen_tab(
if long_form and duration > 30: if long_form and duration > 30:
status_msg = f"🔄 Long-form generation ({duration}s, may take several minutes)..." status_msg = f"🔄 Long-form generation ({duration}s, may take several minutes)..."
# Update status # Update status - use gr.skip() for audio to prevent race condition
yield ( yield (
gr.update(value=status_msg), gr.update(value=status_msg),
gr.update(visible=True, value=0), gr.update(visible=True, value=0),
gr.update(), gr.skip(), # Don't update audio yet
gr.update(), gr.skip(), # Don't update waveform
gr.update(), gr.skip(), # Don't update duration
gr.update(), gr.skip(), # Don't update seed
) )
try: try:
@@ -279,10 +279,10 @@ def create_musicgen_tab(
yield ( yield (
gr.update(value=f"❌ Error: {str(e)}"), gr.update(value=f"❌ Error: {str(e)}"),
gr.update(visible=False), gr.update(visible=False),
gr.update(), gr.skip(), # Don't update audio
gr.update(), gr.skip(), # Don't update waveform
gr.update(), gr.skip(), # Don't update duration
gr.update(), gr.skip(), # Don't update seed
) )
generate_btn.click( generate_btn.click(

View File

@@ -163,21 +163,21 @@ def create_style_tab(
if not style_audio: if not style_audio:
yield ( yield (
gr.update(value="Please upload a style reference audio"), gr.update(value="Please upload a style reference audio"),
gr.update(), gr.skip(),
gr.update(), gr.skip(),
gr.update(), gr.skip(),
gr.update(), gr.skip(),
gr.update(), gr.skip(),
) )
return return
yield ( yield (
gr.update(value="🔄 Generating..."), gr.update(value="🔄 Generating..."),
gr.update(visible=True, value=0), gr.update(visible=True, value=0),
gr.update(), gr.skip(), # Don't update audio yet
gr.update(), gr.skip(), # Don't update waveform
gr.update(), gr.skip(), # Don't update duration
gr.update(), gr.skip(), # Don't update seed
) )
try: try:
@@ -209,10 +209,10 @@ def create_style_tab(
yield ( yield (
gr.update(value=f"❌ Error: {str(e)}"), gr.update(value=f"❌ Error: {str(e)}"),
gr.update(visible=False), gr.update(visible=False),
gr.update(), gr.skip(),
gr.update(), gr.skip(),
gr.update(), gr.skip(),
gr.update(), gr.skip(),
) )
generate_btn.click( generate_btn.click(