# Where Does ReClip Store Downloaded Files?

> Discover where ReClip stores downloaded files. ReClip saves all media in the downloads folder at the repository root, created dynamically in app.py. Find your ReClip downloads easily.

- Repository: [Avery Gan/reclip](https://github.com/averygan/reclip)
- Tags: how-to-guide
- Published: 2026-09-05

---

**ReClip saves all downloaded media in a dedicated `downloads` folder located in the repository root, constructed at runtime in [`app.py`](https://github.com/averygan/reclip/blob/main/app.py) using `os.path.dirname(__file__)`.**

ReClip is an open-source media download service that automatically organizes fetched content into a predictable directory structure alongside the application code. Understanding exactly where ReClip downloaded files are stored is critical for file management, backup automation, and container volume mapping. In the `averygan/reclip` repository, the storage location is hardcoded relative to the main application file to ensure consistency across deployments.

## Downloads Directory Configuration

In [`app.py`](https://github.com/averygan/reclip/blob/main/app.py) at line 10, the application defines a constant that resolves to the absolute path of the storage folder:

```python
DOWNLOAD_DIR = os.path.join(os.path.dirname(__file__), "downloads")

```

The `os.path.dirname(__file__)` call returns the directory containing [`app.py`](https://github.com/averygan/reclip/blob/main/app.py), making the full path resolve to `<repo-root>/downloads`. All download-related operations—including `run_download` and `download_file`—reference this `DOWNLOAD_DIR` constant, ensuring every file fetched by the service lands in this specific location automatically.

## Locating Downloaded Files Programmatically

When building integrations or administrative tools, you can resolve the download directory using the same logic as the core application. The following example uses `pathlib` to list all files currently stored in the ReClip downloads folder:

```python
import os
from pathlib import Path

# Resolve the download directory (same logic as the app)

download_dir = Path(__file__).parent / "downloads"

# Print all downloaded filenames

for file_path in download_dir.iterdir():
    if file_path.is_file():
        print(file_path.name)

```

This approach mirrors the internal path resolution used by the service, making it safe for maintenance scripts and external automation.

## Serving Files to Clients

The Flask application serves downloaded content directly from the `downloads` folder. As implemented in `averygan/reclip`, the `download_file` route retrieves the stored path from the job metadata and streams the file back to the client:

```python
from flask import send_file

@app.route("/api/download/<job_id>")
def download_file(job_id):
    job = jobs[job_id]
    # `job["file"]` is a full path inside the downloads folder

    return send_file(
        job["file"],
        as_attachment=True,
        download_name=job["filename"]
    )

```

Here, `job["file"]` contains the absolute path constructed during the initial download operation, guaranteeing the file is served from the correct `downloads` subdirectory.

## Docker Volume Persistence

When deploying via [`docker-compose.yml`](https://github.com/averygan/reclip/blob/main/docker-compose.yml), the `downloads` directory is configured as a persistent volume to prevent data loss during container restarts. The compose file ensures that the `<repo-root>/downloads` path on the host remains mapped to the container's internal filesystem, maintaining the ReClip downloaded files location across deployments.

## Summary

- ReClip stores downloads in a `downloads` folder co-located with [`app.py`](https://github.com/averygan/reclip/blob/main/app.py) in the repository root, defined at line 10 of [`app.py`](https://github.com/averygan/reclip/blob/main/app.py).
- The path is constructed dynamically using `os.path.dirname(__file__)` to ensure portability across different execution environments.
- Core functions like `run_download` and `download_file` automatically write files to this directory without manual path configuration.
- The Flask API serves files directly from this location using absolute paths stored in job metadata under the `"file"` key.
- Docker deployments persist this folder using volume mappings in [`docker-compose.yml`](https://github.com/averygan/reclip/blob/main/docker-compose.yml), ensuring downloads survive container rebuilds.

## Frequently Asked Questions

### Can I change the default ReClip download directory location?

The download path is hardcoded in [`app.py`](https://github.com/averygan/reclip/blob/main/app.py) via the `DOWNLOAD_DIR` constant defined at line 10. To use a different location, you must modify this constant and update the volume mappings in [`docker-compose.yml`](https://github.com/averygan/reclip/blob/main/docker-compose.yml) to point to your preferred host directory. The application does not currently support environment variable configuration for the storage path.

### How do I list all downloaded files currently stored in ReClip?

You can list files by resolving the `downloads` directory relative to [`app.py`](https://github.com/averygan/reclip/blob/main/app.py) using either `os.path` or `pathlib`. Iterate through `download_dir.iterdir()` and filter with `is_file()` to retrieve valid filenames, exactly as the internal listing logic operates.

### Are downloaded files persisted when running ReClip in Docker?

Yes. The [`docker-compose.yml`](https://github.com/averygan/reclip/blob/main/docker-compose.yml) file in the repository maps the `downloads` folder as a named volume, ensuring that files remain on the host filesystem even if the container stops or is rebuilt. This configuration prevents accidental data loss during routine maintenance and updates.

### How does ReClip handle file naming for downloaded content?

Each download job stores metadata in a dictionary where the original filename is preserved under the `filename` key, while the absolute storage path is stored under the `file` key. When serving content via the `/api/download/<job_id>` endpoint, the `send_file` function uses these values to set the `download_name` parameter, delivering the file to the client with its original name intact.