PeerTube is developed by a not-for profit: Framasoft
As such, our main source of fundings are donations, usually from the French-speaking FOSS community.
Dear PeerTube admins, please help us spread the word that Framasoft is raising donations until the end of the year to fund and secure its 2024 budget, on our support page : https://soutenir.framasoft.org
IMPORTANT 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.yaml
that you use127.0.0.1
instead oflocalhost
forlisten.hostname
,database.hostname
andredis.hostname
as Node 18 favours IPv6 forlocalhost
resolution
-
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 no "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 #5465 for more information
-
Configuration key that you must update in your
production.yaml
if not automatically done by your upgrade script:storage.videos
must be renamed tostorage.web_videos
: https://github.com/Chocobozzz/PeerTube/blob/develop/config/production.yaml.example#L151- Configuration value of
storage.web_videos
must have the directory name to be changed fromvideos/
toweb-videos/
: https://github.com/Chocobozzz/PeerTube/blob/develop/config/production.yaml.example#L151 - Directory on filesystem must be renamed from
videos/
toweb-videos/
to represent the value ofstorage.web_videos
- Classic installation:
sudo -u peertube mv '/var/www/peertube/storage/videos/' '/var/www/peertube/storage/web-videos/'
- Docker installation:
mv '/path-to-docker-installation/docker-volume/data/videos/' '/path-to-docker-installation/docker-volume/data/web-videos/'
- Classic installation:
transcoding.webtorrent
must be renamed totranscoding.web_videos
: https://github.com/Chocobozzz/PeerTube/blob/develop/config/production.yaml.example#L522object_storage.videos
must be renamed toobject_storage.web_videos
. The value ofobject_storage.web_videos.bucket_name
doesn't need to be changed: https://github.com/Chocobozzz/PeerTube/blob/develop/config/production.yaml.example#L223storage.storyboards
must be added: https://github.com/Chocobozzz/PeerTube/blob/develop/config/production.yaml.example#L157
-
PeerTube Docker image now uses
bookworm
.chocobozzz/peertube:production-bullseye
needs to be replaced bychocobozzz/peertube:production-bookworm
-
Env configuration that your must update if you use Docker:
PEERTUBE_TRANSCODING_WEBTORRENT_ENABLED
must be renamed toPEERTUBE_TRANSCODING_WEB_VIDEOS_ENABLED
PEERTUBE_OBJECT_STORAGE_VIDEOS_BUCKET_NAME
must be renamed toPEERTUBE_OBJECT_STORAGE_WEB_VIDEOS_BUCKET_NAME
PEERTUBE_OBJECT_STORAGE_VIDEOS_PREFIX
must be renamed toPEERTUBE_OBJECT_STORAGE_WEB_VIDEOS_PREFIX
PEERTUBE_OBJECT_STORAGE_VIDEOS_BASE_URL
must 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 = /api/v1/videos/upload-resumable {
must be updated tolocation ~ ^/api/v1/videos/(upload-resumable|([^/]+/source/replace-resumable))$ {
location ~ ^(/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.mjs
node option: https://github.com/Chocobozzz/PeerTube/blob/develop/config/production.yaml.example#L263
Developers important notes
-
REST API breaking changes:
- Removed
webtorrentEnabled
from user response (deprecated since 4.1 in favour ofp2pEnabled
) - Removed
avatar
andbanner
fields from account/channel responses (deprecated since 4.2 in favour ofavatars
andbanners
) - Removed
filter
query when listing videos (deprecated since 4.0 in favour ofisLocal
andinclude
) - Deprecate
/api/v1/videos/:id/webtorrent
video file routes in favour of/api/v1/videos/:id/web-videos
routes - Deprecate
hasWebtorrentFiles
body video filter in favour ofhasWebVideoFiles
when listing videos - Deprecate
webtorrent
transcodingType
in favour ofweb-video
in/api/v1/videos/{id}/transcoding
route currentTime
is 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
webtorrent
key ingetFiles()
helper result. UsewebVideo
instead
- Deprecated
CLI tools
- Removed unmaintained
peertube-import-videos
(also aliased aspeertube import-videos
orpeertube import
) script - PeerTube remote CLI is much more simpler to install using NPM: https://docs.joinpeertube.org/maintain/tools#remote-peertube-cli
- Support moving video files from object storage to filesystem: https://docs.joinpeertube.org/maintain/tools#move-video-files-from-object-storage-to-filesystem
Features
- 🎉 Add "Password protected" video privacy #5836 🎉
- 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
- Developers that use PeerTube embeds can set the video password using the embed API
- 🎉 Add video storyboard support 🎉
- 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-job
command: https://docs.joinpeertube.org/maintain/tools#generate-storyboard
- 🎉 Add ability for users to replace their video file 🎉
- 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
- 🎉 Add video chapters support 🎉
- 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_pub
andclient
endpoints) - 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}/views
endpoint with many viewers - Add ability to disable PeerTube HTTP logs
- Optimize homepage videos HTTP queries
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.txt
well-known endpoint - Optimize
update-host
script 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.privacy
is not required anymore - Fix broken live replay when updating replay privacy
- More robust About page when getting category from server
- Fix
ERR_HTTP_HEADERS_SENT
crash - Avoid illegal characters in torrent filename
- Avoid federation error log with remote
Like
onNote
- Fix atom feed with Science & Technology category
- Support empty value returned by
filter:api.video.get.result
hook - 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_PUBLIC
andPEERTUBE_OBJECT_STORAGE_UPLOAD_ACL_PRIVATE
in.env
- Correctly end live session on ffprobe error
- Fix video stats X axis with old videos
- Fix empty master playlist upload on s3
- Correctly generate
production.yaml.new
that should merge your currentproduction.yaml
with new keys defined by PeerTube - Fix card font color theme
- Respect "transcode original resolution" setting when using remote runners
- Prevent player mobile buttons flickering
- Fix graph zooming end date