> ## Documentation Index
> Fetch the complete documentation index at: https://mintlify.com/gradio-app/gradio/llms.txt
> Use this file to discover all available pages before exploring further.

# Progress indicators

> Display custom progress bars to keep users informed during long-running operations

Gradio supports the ability to create custom progress bars so that you have customizability and control over the progress update that you show to the user.

## Basic usage

To enable progress bars, add an argument to your function that has a default value of a `gr.Progress` instance. Then you can update the progress levels by calling this instance directly with a float between 0 and 1.

```python theme={null}
import gradio as gr
import time

def slowly_reverse(word, progress=gr.Progress()):
    progress(0, desc="Starting")
    time.sleep(1)
    progress(0.05)
    new_string = ""
    for letter in progress.tqdm(word, desc="Reversing"):
        time.sleep(0.25)
        new_string = letter + new_string
    return new_string

demo = gr.Interface(slowly_reverse, gr.Text(), gr.Text())
demo.launch()
```

In this example, the progress bar will:

1. Start at 0% with the description "Starting"
2. Update to 5% after a brief pause
3. Show incremental progress with the description "Reversing" as it processes each letter

## Using the tqdm method

The `Progress` instance provides a `tqdm()` method that makes it easy to track progress over an iterable. This method works similarly to the popular `tqdm` library:

```python theme={null}
import gradio as gr
import time

def process_items(items, progress=gr.Progress()):
    results = []
    for item in progress.tqdm(items, desc="Processing items"):
        time.sleep(0.1)
        results.append(item * 2)
    return results

demo = gr.Interface(
    process_items,
    gr.Textbox(lines=5, placeholder="Enter items, one per line"),
    gr.Textbox()
)
demo.launch()
```

## Automatic tqdm integration

If you use the `tqdm` library, you can even report progress updates automatically from any `tqdm.tqdm` that already exists within your function by setting the default argument as `gr.Progress(track_tqdm=True)`:

```python theme={null}
import gradio as gr
import time
from tqdm import tqdm

def process_with_tqdm(n, progress=gr.Progress(track_tqdm=True)):
    results = []
    for i in tqdm(range(n)):
        time.sleep(0.1)
        results.append(i ** 2)
    return sum(results)

demo = gr.Interface(process_with_tqdm, gr.Slider(1, 100, step=1), gr.Number())
demo.launch()
```

<Tip>
  With `track_tqdm=True`, you don't need to manually update the progress - Gradio automatically tracks any `tqdm` progress bars in your function.
</Tip>

## Progress bar parameters

When calling the `Progress` instance, you can provide:

* **Float value (0-1)**: The progress level as a decimal between 0 and 1
* **`desc` parameter**: A description string to display with the progress bar

```python theme={null}
def my_function(data, progress=gr.Progress()):
    progress(0.25, desc="Loading data")
    # Load data...
    progress(0.50, desc="Processing data")
    # Process data...
    progress(0.75, desc="Generating results")
    # Generate results...
    progress(1.0, desc="Complete")
    return results
```

## Multi-step progress tracking

For complex operations with multiple stages, you can combine direct progress updates with the `tqdm()` method:

```python theme={null}
import gradio as gr
import time

def multi_step_process(items, progress=gr.Progress()):
    # Step 1: Validation
    progress(0, desc="Validating input")
    time.sleep(1)
    progress(0.1)
    
    # Step 2: Processing
    results = []
    for item in progress.tqdm(items[:len(items)//2], desc="Phase 1"):
        time.sleep(0.1)
        results.append(item)
    
    # Step 3: Final processing
    for item in progress.tqdm(items[len(items)//2:], desc="Phase 2"):
        time.sleep(0.1)
        results.append(item * 2)
    
    progress(1.0, desc="Complete")
    return results

demo = gr.Interface(multi_step_process, gr.Textbox(), gr.Textbox())
demo.launch()
```

<Note>
  Progress bars provide valuable feedback to users during long-running operations, improving the overall user experience of your Gradio app.
</Note>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.