Sepia, Peertube's mascot
Sepia, Peertube's mascot

Back when I first started posting videos, I used Vimeo. Even though YouTube was the dominant video site, I wanted to support the underdog. I even bought a Vimeo Pro account. At the time, Vimeo had higher quality video than YouTube, but nowhere near the level of discoverability. Eventually I started posting on YouTube; both new content and some reposts of my older videos. It’s 2020 and YouTube, as well as the rest of big tech, is continuing to remove content they don’t agree with from their platforms. None of my videos have ever gotten a large number of views, and none are monetized, so I might as well copy them to a PeerTube instance I control. If you do run a YouTube channel with any type of significant viewership, I highly recommend backing up your videos, in the event you may need to self-host your content in the future.

I’m not rehosting everything I’ve posted on Vimeo or YouTube. I’m starting with all the videos that are featured on my website, so I can replace the embedded clips, and point them to my self-hosted PeerTube instance on battlepenguin.video. I’m keeping links to other video platforms in the video descriptions and in my own blog posts. I’m not changing any of the descriptions for existing videos, but newer uploads to YouTube will have a link to my PeerTube mirror.

Warning on a PeerTube video embed about IP sharing
Warning on a PeerTube video embed about IP sharing

An embedded PeerTube video comes with a warning, because when you watch one of these videos using the web player, you may also be serving that video to other audience members watching it at the same time. PeerTube does this using technologies such as WebTorrent and WebRTC. In theory, this can help PeerTube scale without expensive centralized servers. As a video becomes more popular, other viewers use their web browsers and Internet connections to help distribute the content they’re consuming. This is one of the trade-offs between privacy and decentralization.

PeerTube can also communicate to other servers via ActivityPub, allowing people to subscribe to a video channel from other PeerTube instances, or other servers running Mastodon, Pleroma or other ActivityPub compatible software.

Subtitles

YouTube has a feature where you can upload a text document of a video transcription and YouTube will attempt to automatically time-code that text as subtitles. It’s important to write out transcripts whenever you can, to make content accessible for those with hearing disabilities. PeerTube supports subtitles in both the VTT and SRT. YouTube allows creators to download subtitles in several formats, or the youtube-dl application can be used to download subtitles from videos using the option --all-subs as seen below.

youtube-dl --all-subs --skip-download 'https://www.youtube.com/watch?v=<video_id>'
Download Subtitles through the YouTube Web Interface
Download Subtitles through the YouTube Web Interface

Hosting with Docker

I use the official PeerTube container published by chocobozzz. It’s provisioned using my custom Docker tool, Bee2. I adapted it from the project’s example docker-compose file. The example doesn’t contain all the configuration options that can be set, but you can find the others in the custom-environment-variables.yaml schema file.

...
peertube:
  image: chocobozzz/peertube:v2.2.0-buster
  networks:
    - public
    - database
  traefik:
    http:
      hosts:
        - battlepenguin.video
      tls: enabled
      port: 9000
  labels:
    lb.net: public
  env:
    PEERTUBE_REDIS_HOSTNAME: $peertube-redis
    PEERTUBE_DB_USERNAME: peertube
    PEERTUBE_DB_PASSWORD: _postgres^password
    POSTGRES_DB: peertube
    PEERTUBE_DB_HOSTNAME: $postgres
    PEERTUBE_WEBSERVER_HOSTNAME: battlepenguin.video
    PEERTUBE_SMTP_USERNAME: ****
    PEERTUBE_SMTP_PASSWORD: ****
    PEERTUBE_SMTP_HOSTNAME: ****
    PEERTUBE_SMTP_PORT: ****
    PEERTUBE_SMTP_TLS: true
    PEERTUBE_SMTP_FROM: ****
    PEERTUBE_ADMIN_EMAIL: ****
    PEERTUBE_SIGNUP_ENABLED: false
    PEERTUBE_TRANSCODING_ENABLED: true
    PEERTUBE_CONTACT_FORM_ENABLED: true
    PEERTUBE_INSTANCE_NAME: "BattlePenguin Studios"
    PEERTUBE_INSTANCE_DESCRIPTION: "Videos for BattlePenguin.com"
  volumes:
    - peertube_data:/data:rw
    - peertube_config:/config:rw
  db:
    - postgres
peertube-redis:
  networks:
    - database
  image: redis:6.0.5-alpine
  volumes:
    - peertube-redis:/data
...

Promotion

Since I’m still uploading videos to YouTube, there is the question of which video do I promote? Do I use a YouTube link, or a PeerTube link? I’ve been doing a mix of the two for recent videos, splitting the difference between various social media platforms. Linking to YouTube helps feed their algorithms and can help generate greater viewership outside of my sphere of influence, but it does direct more traffic towards Google services instead of my own server. I don’t post a lot of videos, my viewership is small and I don’t have any big stakes in the attention economy, so I’ll probably be experimenting with both forms of promotion for the foreseeable future.

The Big Dogs

There are some big channels that make a large chunk of of their income from YouTube ads, with other coming from paid promotion, fan support and merchandise. Besides the obvious costs of time investment and hosting, mirroring content outside of YouTube might eat up a non-trivial amount of advertising income. It makes more sense for someone just starting out to host their own content, than a creator who is entrenched in the YouTube world.

However, self-hosting might also be the only alternative, if Google decides to ban you from their platform. Content creators should have backups, and have plans ready to go, in the event their content is deemed to no longer be acceptable by YouTube. If you don’t have original copies if all your videos, youtube-dl can be used to download entire channels. PeerTube is just one of many open source tools that content creators should look at and evaluate, in order to prepare for a time when your channel, or YouTube as a whole, disappears.