# I cant download anything

If you are receiving errors like:
- "OSError: [Errno 5] I/O error"
- "OSError: [Errno 18] Cross-device link: '/tmp/random_id/name.webm' -> '/downloads/name.webm'
- "Operation not permitted: '/downloads/name.webm'

This indicates an error with your mounts and how they interact with the container. So, the basic solution is to do the following:

```yaml
services:
  ytptube:
    user: "${UID:-1000}:${UID:-1000}" # change this to your user id and group id, for example: "1000:1000"
    image: ghcr.io/arabcoders/ytptube:latest
    container_name: ytptube
    restart: unless-stopped
    environment:
      - YTP_TEMP_PATH=/downloads/tmp
      - YTP_DOWNLOAD_PATH=/downloads/files
    ports:
      - "8081:8081"
    volumes:
      - ./config:/config:rw
      - ./downloads:/downloads:rw
```

Then run the following command to create the necessary directories and start the container:

```bash
mkdir -p ./config && mkdir -p ./downloads/{tmp,files} && docker compose -f compose.yaml up -d
```

Reference: [Issue #363](https://github.com/arabcoders/ytptube/issues/363)

# I want to use link with playlist but only download the video not all the videos in the playlist?

Simply create a preset, and in the `Command options for yt-dlp` field set `--no-playlist`. Then select the preset 
whenever the link includes a playlist id.

> [!NOTE]
> You can also do the same via advanced options `Command options for yt-dlp` field, but presets are more convenient.

# Install specific yt-dlp version?

You can force specific version of `yt-dlp` by setting the `YTP_YTDLP_VERSION` environment variable for example

```env
YTP_YTDLP_VERSION=2025.07.21 or master or nightly
```

Then restart the container to apply the changes.

# How to generate POT tokens?

You need to start up a pot provider server we already have extractor `bgutil-ytdlp-pot-provider` pre-installed in the container.
You can simply do the following to enable the support for it.

```yaml
services:
  ytptube:
    user: "${UID:-1000}:${UID:-1000}" # change this to your user id and group id, for example: "1000:1000"
    image: ghcr.io/arabcoders/ytptube:latest
    container_name: ytptube
    restart: unless-stopped
    ports:
      - "8081:8081"
    volumes:
      - ./config:/config:rw
      - ./downloads:/downloads:rw
    tmpfs:
      - /tmp
    depends_on:
      - bgutil_provider
  bgutil_provider:
    init: true
    image: brainicism/bgutil-ytdlp-pot-provider:latest
    container_name: bgutil_provider
    restart: unless-stopped
    ports:
      - "127.0.0.1:4416:4416"
```

Then simply create a new preset, and in the `Command options for yt-dlp` field set the following:

```bash
--extractor-args "youtubepot-bgutilhttp:base_url=http://bgutil_provider:4416" 
--extractor-args "youtube:player-client=default,tv,mweb;formats=incomplete"
```

you and also enable the fallback by using the follow extractor args

```bash
--extractor-args "youtubepot-bgutilhttp:base_url=http://bgutil_provider:4416;disable_innertube=1"
--extractor-args "youtube:player-client=default,tv,mweb;formats=incomplete"
```

Use this settings in case the extractor fails to get the pot tokens from the bgutil provider server.

For more information please visit [bgutil-ytdlp-pot-provider](https://github.com/Brainicism/bgutil-ytdlp-pot-provider) project.
