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:
@@ -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(
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
Reference in New Issue
Block a user