PeerTube
A free, decentralized and federated video platform
Alternative to: youtube, vimeo, dailymotion
v6.0.0-rc.1
2023-11-07IMPORTANT NOTES
We have many important notes in this release. We know it’s a pain for sysadmin, but consider each one as a major step forward for PeerTube quality!
Sysadmins important notes
-
Remove NodeJS 16 support (see https://nodejs.org/fr/blog/announcements/nodejs16-eol):
- Please upgrade to NodeJS 18 before upgrading PeerTube
- If you use NodeSource repository, you may have to migrate to their new repository: https://github.com/nodesource/distributions/wiki/How-to-migrate-to-the-new-repository
- Check in
production.yamlthat you use127.0.0.1instead oflocalhostforlisten.hostname,database.hostnameandredis.hostnameas Node 18 favours IPv6 forlocalhostresolution
-
Remove WebTorrent support in player:
- “WebTorrent videos” are renamed to “Web Video”. The video format is the same, we just stop to use P2P for these videos
- There is not “Auto” quality anymore for Web Videos. The viewer has to explicitly choose the video resolution
- We still use P2P with the HLS player, which is the recommended transcoding format since several versions
- See https://github.com/Chocobozzz/PeerTube/issues/5465 for more information
-
Configuration key that you must update in your
production.yamlif not automatically done by your upgrade script:storage.videosmust be renamed tostorage.web_videos. The value of this configuration doesn’t need to be changed: https://github.com/Chocobozzz/PeerTube/blob/develop/config/production.yaml.example#L151transcoding.webtorrentmust be renamed totranscoding.web_videos: https://github.com/Chocobozzz/PeerTube/blob/develop/config/production.yaml.example#L522object_storage.videosmust be renamed toobject_storage.web_videos. The value of thisobject_storage.web_videos.bucket_namedoesn’t need to be changed: https://github.com/Chocobozzz/PeerTube/blob/develop/config/production.yaml.example#L223storage.storyboardsmust be added: https://github.com/Chocobozzz/PeerTube/blob/develop/config/production.yaml.example#L157
-
PeerTube Docker image now uses
bookworm.chocobozzz/peertube:production-bullseyeneeds to be replaced bychocobozzz/peertube:production-bookworm -
Env configuration that your must update if you use Docker:
PEERTUBE_TRANSCODING_WEBTORRENT_ENABLEDmust be renamed toPEERTUBE_TRANSCODING_WEB_VIDEOS_ENABLEDPEERTUBE_OBJECT_STORAGE_VIDEOS_BUCKET_NAMEmust be renamed toPEERTUBE_OBJECT_STORAGE_WEB_VIDEOS_BUCKET_NAMEPEERTUBE_OBJECT_STORAGE_VIDEOS_PREFIXmust be renamed toPEERTUBE_OBJECT_STORAGE_WEB_VIDEOS_PREFIXPEERTUBE_OBJECT_STORAGE_VIDEOS_BASE_URLmust be renamed toPEERTUBE_OBJECT_STORAGE_WEB_VIDEOS_BASE_URL
-
You must update nginx configuration: https://github.com/Chocobozzz/PeerTube/blob/develop/support/nginx/peertube
location ~ ^/static/(thumbnails|avatars)/ {block must be removedlocation ~ ^(/static/(webseed|streaming-playlists)/private/)|^/download {must be updated tolocation ~ ^(/static/(webseed|web-videos|streaming-playlists)/private/)|^/download {location ~ ^/static/(webseed|redundancy|streaming-playlists)/ {must be updated tolocation ~ ^/static/(webseed|web-videos|redundancy|streaming-playlists)/ {
-
Tracing requires
--experimental-loader=@opentelemetry/instrumentation/hook.mjsnode option: https://github.com/Chocobozzz/PeerTube/blob/develop/config/production.yaml.example#L263
Developers important notes
-
REST API breaking changes:
- Removed
webtorrentEnabledfrom user response (deprecated since 4.1 in favour ofp2pEnabled) - Removed
avatarandbannerfields from account/channel responses (deprecated since 4.2 in favour ofavatarsandbanners) - Removed
filterquery when listing videos (deprecated since 4.0 in favour ofisLocalandinclude) - Deprecate
/api/v1/videos/:id/webtorrentvideo file routes in favour of/api/v1/videos/:id/web-videosroutes - Deprecate
hasWebtorrentFilesbody video filter in favour ofhasWebVideoFileswhen listing videos - Deprecate
webtorrenttranscodingTypein favour ofweb-videoin/api/v1/videos/{id}/transcodingroute currentTimeis now required to notify the user is watching the video using/api/v1/videos/{id}/views(introduced in 4.2)
- Removed
-
Static server paths breaking changes:
/static/webseed/...is deprecated in favour of/static/web-videos/.../object-storage-proxy/webseed/...is deprecated in favour of/object-storage-proxy/web-videos/.../static/thumbnails/...is deprecated in favour of/static/lazy-thumbnails/...
-
Plugin API breaking changes:
- Deprecated
webtorrentkey ingetFiles()helper result. UsewebVideoinstead
- Deprecated
CLI tools
- Removed unmaintained
peertube-import-videos(also aliased aspeertube import-videosorpeertube import) script - PeerTube remote CLI is much more simpler to install using NPM: https://docs.joinpeertube.org/maintain/tools#remote-peertube-cli
Features
- :tada: Add “Password protected” video privacy #5836 :tada:
- A single password can be set using the web interface at video upload/import/update
- The REST API can store as many passwords as you want, allowing developers to use this feature to easily give or revoke access to a video on the fly
- :tada: Add video storyboard support :tada:
- PeerTube automatically generates a storyboard on video upload/import
- Viewers can see the image around the targeted timecode when hovering the progress bar
- Storyboard of videos uploaded/imported before v6 can be generated by the admin using
npm run create-generate-storyboard-jobcommand
- :tada: Add ability for users to replace their video file :tada:
- Has to be enabled by the PeerTube instance administrator
- The user can replace the video file in the Update Video page
- The re-upload date is displayed under the video player
- :tada: Add video chapters support :tada:
- Add chapters in the upload/import/update video page or let PeerTube automatically imports them from the video container/youtube-dl
- Markers are displayed in the player progress bar to symbolize a chapter
- Chapter title is displayed when hovering/touching the player progress bar
- Better video player:
- More efficient as we don’t rebuild the player every time the played video changes
- The player keeps the current player settings (playback speed, fullscreen…) when the played video changes
- Automatically adjust the player size to match video ratio
- Improve SEO and video link sharing:
- Use short video/channel/account URLs in sitemap and for canonical tags
- Add JSON-LD tag in embed page
- Embed page does not forbid indexation anymore: we use a canonical tag instead that targets the watch page
- Forbid indexation of remote videos, accounts and channels (instead of providing an invalid canonical tag)
- Truncate OpenGraph/Twitter card link description
- Fix client accessibility and keyboard navigation:
- Fix links in bootstrap alerts color
- Better input placeholder contrast
- Fix video miniature link label
- Add ability to disable hotkeys
- Improve table overall accessibility
- Wrap icons that can lead to an action inside buttons
- Fix left menu admin/my-library menu accessibility
- And many more improvements!
- Improve remote runner management:
- Add ability to remove runner jobs
- Add runner job state quick filter
- Merge registration tokens and runners tables in same page
- Add copy button to copy registration token
- Add ability for admins to force transcoding on a specific video even if it’s in broken state (stuck in To Transcode for example)
- Add an option to sign federated fetches (ActivityPub based software such as Mastodon may require it to access content)
- Download video file directly from S3 using pre signed URLs
- Lazy download remote video thumbnails to reduce storage
- Improve recommended videos when the watched video doesn’t have tags set
- Add more rate limits in configuration (
plugins,well-known,feeds,activity_pubandclientendpoints) - Add ability to reset video Originally published at attribute
- Add ability for admins to set the default user channel name #6000
- Server now uses ESM modules
- Add worker threads Prometheus metrics
- Performance:
- Process unicast HTTP job in worker threads
- Sign ActivityPub requests in worker threads
- Optimize recommended videos HTTP request
- Optimize videos SQL queries when filtering on lives or tags
- Optimize
/videos/{id}/viewsendpoint with many viewers - Add ability to disable PeerTube HTTP logs
Bug fixes
- Don’t cache upload response if the video has been deleted
- Fix broken upgrade script when using custom database port
- Prevent duplicate runner names
- Avoid runner job update error
- Notify remote runners there are available jobs when a job is aborted/errored
- Fix updating P2P settings in left menu
- Fix 500 HTTP error on invalid short UUID conversion
- Don’t display admin email in
security.txtwell-known endpoint - Optimize
update-hostscript to fix out of memory error - Fix error log when using an unconventional distribution of FFmpeg with a non-standard version string #5917
- Fix live replay REST API breaking change:
replaySettings.privacyis not required anymore - Fix broken live replay when updating replay privacy
- More robust About page when getting category from server
- Fix
ERR_HTTP_HEADERS_SENTcrash - Avoid illegal characters in torrent filename
- Avoid federation error log with remote
LikeonNote - Fix atom feed with Science & Technology category
- Support empty value returned by
filter:api.video.get.resulthook - Prevent remote subscribe on accounts (not yet supported by PeerTube)
- Fix feed audio file mimetype
- Fix video quality on high video resolution/fps
- Fix disabling Object Storage ACL using Docker env
PEERTUBE_OBJECT_STORAGE_UPLOAD_ACL_PUBLICandPEERTUBE_OBJECT_STORAGE_UPLOAD_ACL_PRIVATEin.env - Correctly end live session on ffprobe error
- Fix video stats X axis with old videos
- Fix empty master playlist upload on s3