ActivityPub-federated video streaming platform using P2P directly in your web browser
location ~ ^/api/v1/users/[^/]+/imports/import-resumable$ {
blockviews.videos.ip_view_expiration
to views.videos.view_expiration
storyboards.enabled
config to disable storyboard generationservices.twitter.whitelisted
: Twitter/X doesn't seem to need this anymore. This means that PeerTube will try to inject the video player in Twitter/X by default instead of using a classic image/descriptionopen_telemetry.metrics.playback_stats_interval
config to customize how often viewers send playback stats to serverviews.videos.watching_interval.{anonymous,users}
configs to change how often the web browser sends "is watching" information to the serverstats.registration_requests.enabled
and stats.abuses.enabled
configs to hide instance registration/abuse requests public stats (average response time, total registration/abuse requests etc.)stats.total_moderators.enabled
and stats.total_admins.enabled
configs to hide total admins/moderators public statsobject_storage.streaming_playlists.store_live_streams
config to not store live stream chunks into object storage (when enabled for streaming playlists)open_telemetry.metrics.http_request_duration.enabled
to false
by default to avoid performance issues on the Prometheus backend due to high metric cardinality600x600
and 1500x1500
avatar sizes600x100
banner size/my-account
page #6218
req.rawBody
for plugin routes #6300
filter:api.user.me.get.result
#6219
peertubeHelpers.videos.loadByIdOrUUIDWithFiles
helper #6302
<peertube-instance-banner>
/<peertube-instance-avatar>
tag or on external websites/applications like the JoinPeerTube website
/api/v1/videos/:videoId/views
) endpointffprobe
calls when not needed resulting in faster live stream transcoding startup and CPU/IO reduction during video upload/importViews
events in the federation. See the commit details for more informationApplication
Actor
postingRestrictedToMods
information to channels AP objectsitunes:owner
in podcast feedvideo_channels.max_per_user
config/
character when downloading a videoVideo is not the main content of the page
error)location ~ ^/api/v1/users/[^/]+/imports/import-resumable$ {
blockviews.videos.ip_view_expiration
to views.videos.view_expiration
storyboards.enabled
config to disable storyboard generationservices.twitter.whitelisted
: Twitter/X doesn't seem to need this anymore. This means that PeerTube will try to inject the video player in Twitter/X by default instead of using a classic image/descriptionopen_telemetry.metrics.playback_stats_interval
config to customize how often viewers send playback stats to serverviews.videos.watching_interval.{anonymous,users}
configs to change how often the web browser sends "is watching" information to the serverstats.registration_requests.enabled
and stats.abuses.enabled
configs to hide instance registration/abuse requests public stats (average response time, total registration/abuse requests etc.)stats.total_moderators.enabled
and stats.total_admins.enabled
configs to hide total admins/moderators public statsobject_storage.streaming_playlists.store_live_streams
config to not store live stream chunks into object storage (when enabled for streaming playlists)open_telemetry.metrics.http_request_duration.enabled
to false
by default to avoid performance issues on the Prometheus backend due to high metric cardinality600x600
and 1500x1500
avatar sizes600x100
banner size/my-account
page #6218
req.rawBody
for plugin routes #6300
filter:api.user.me.get.result
#6219
peertubeHelpers.videos.loadByIdOrUUIDWithFiles
helper #6302
<peertube-instance-banner>
/<peertube-instance-avatar>
tag or on external websites/applications like the JoinPeerTube website
/api/v1/videos/:videoId/views
) endpointffprobe
calls when not needed resulting in faster live stream transcoding startup and CPU/IO reduction during video upload/importViews
events in the federation. See the commit details for more informationApplication
Actor
postingRestrictedToMods
information to channels AP objectsitunes:owner
in podcast feedvideo_channels.max_per_user
config/
character when downloading a videoVideo is not the main content of the page
error)202
replace location ~ ^(/static/(webseed|web-videos|streaming-playlists)/private/)|^/download {
by location ~ ^(/static/(webseed|web-videos|streaming-playlists/hls)/private/)|^/download {
)update-host
scriptlocation = /api/v1/videos/upload-resumable {
has been replaced by location ~ ^/api/v1/videos/(upload-resumable|([^/]+/source/replace-resumable))$ {
in your nginx configurationstorage.web_videos
configuration value to use web-videos/
directory namestorage.web_videos
configuration value: directory on filesystem must be renamed from videos/
to web-videos/
to represent the value of storage.web_videos
generate-video-storyboard
job type in admin jobs listAs 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
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!
Remove NodeJS 16 support (see https://nodejs.org/fr/blog/announcements/nodejs16-eol):
production.yaml
that you use 127.0.0.1
instead of localhost
for listen.hostname
, database.hostname
and redis.hostname
as Node 18 favours IPv6 for localhost
resolutionRemove WebTorrent support in player:
Configuration key that you must update in your production.yaml
if not automatically done by your upgrade script:
storage.videos
must be renamed to storage.web_videos
: https://github.com/Chocobozzz/PeerTube/blob/develop/config/production.yaml.example#L151
storage.web_videos
must have the directory name to be changed from videos/
to web-videos/
: https://github.com/Chocobozzz/PeerTube/blob/develop/config/production.yaml.example#L151
videos/
to web-videos/
to represent the value of storage.web_videos
sudo -u peertube mv '/var/www/peertube/storage/videos/' '/var/www/peertube/storage/web-videos/'
mv '/path-to-docker-installation/docker-volume/data/videos/' '/path-to-docker-installation/docker-volume/data/web-videos/'
transcoding.webtorrent
must be renamed to transcoding.web_videos
: https://github.com/Chocobozzz/PeerTube/blob/develop/config/production.yaml.example#L522
object_storage.videos
must be renamed to object_storage.web_videos
. The value of object_storage.web_videos.bucket_name
doesn't need to be changed: https://github.com/Chocobozzz/PeerTube/blob/develop/config/production.yaml.example#L223
storage.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 by chocobozzz/peertube:production-bookworm
Env configuration that your must update if you use Docker:
PEERTUBE_TRANSCODING_WEBTORRENT_ENABLED
must be renamed to PEERTUBE_TRANSCODING_WEB_VIDEOS_ENABLED
PEERTUBE_OBJECT_STORAGE_VIDEOS_BUCKET_NAME
must be renamed to PEERTUBE_OBJECT_STORAGE_WEB_VIDEOS_BUCKET_NAME
PEERTUBE_OBJECT_STORAGE_VIDEOS_PREFIX
must be renamed to PEERTUBE_OBJECT_STORAGE_WEB_VIDEOS_PREFIX
PEERTUBE_OBJECT_STORAGE_VIDEOS_BASE_URL
must be renamed to PEERTUBE_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 to location ~ ^/api/v1/videos/(upload-resumable|([^/]+/source/replace-resumable))$ {
location ~ ^(/static/(webseed|streaming-playlists)/private/)|^/download {
must be updated to location ~ ^(/static/(webseed|web-videos|streaming-playlists)/private/)|^/download {
location ~ ^/static/(webseed|redundancy|streaming-playlists)/ {
must be updated to location ~ ^/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
REST API breaking changes:
webtorrentEnabled
from user response (deprecated since 4.1 in favour of p2pEnabled
)avatar
and banner
fields from account/channel responses (deprecated since 4.2 in favour of avatars
and banners
)filter
query when listing videos (deprecated since 4.0 in favour of isLocal
and include
)/api/v1/videos/:id/webtorrent
video file routes in favour of /api/v1/videos/:id/web-videos
routeshasWebtorrentFiles
body video filter in favour of hasWebVideoFiles
when listing videoswebtorrent
transcodingType
in favour of web-video
in /api/v1/videos/{id}/transcoding
routecurrentTime
is now required to notify the user is watching the video using /api/v1/videos/{id}/views
(introduced in 4.2)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:
webtorrent
key in getFiles()
helper result. Use webVideo
insteadpeertube-import-videos
(also aliased as peertube import-videos
or peertube import
) scriptnpm run create-generate-storyboard-job
command: https://docs.joinpeertube.org/maintain/tools#generate-storyboard
plugins
, well-known
, feeds
, activity_pub
and client
endpoints)/videos/{id}/views
endpoint with many viewerssecurity.txt
well-known endpointupdate-host
script to fix out of memory errorreplaySettings.privacy
is not required anymoreERR_HTTP_HEADERS_SENT
crashLike
on Note
filter:api.video.get.result
hookPEERTUBE_OBJECT_STORAGE_UPLOAD_ACL_PUBLIC
and PEERTUBE_OBJECT_STORAGE_UPLOAD_ACL_PRIVATE
in .env
production.yaml.new
that should merge your current production.yaml
with new keys defined by PeerTubeSince v6.0.0-rc.1
production.yaml.new
that should merge your current production.yaml
with new keys defined by PeerTubescripts/upgrade.sh
path. If you upgraded to v6.0.0-rc.1 you can find the upgrade script in dist/scripts/upgrade.sh
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!
Remove NodeJS 16 support (see https://nodejs.org/fr/blog/announcements/nodejs16-eol):
production.yaml
that you use 127.0.0.1
instead of localhost
for listen.hostname
, database.hostname
and redis.hostname
as Node 18 favours IPv6 for localhost
resolutionRemove WebTorrent support in player:
Configuration key that you must update in your production.yaml
if not automatically done by your upgrade script:
storage.videos
must be renamed to storage.web_videos
. The value of this configuration doesn't need to be changed: https://github.com/Chocobozzz/PeerTube/blob/develop/config/production.yaml.example#L151
transcoding.webtorrent
must be renamed to transcoding.web_videos
: https://github.com/Chocobozzz/PeerTube/blob/develop/config/production.yaml.example#L522
object_storage.videos
must be renamed to object_storage.web_videos
. The value of this object_storage.web_videos.bucket_name
doesn't need to be changed: https://github.com/Chocobozzz/PeerTube/blob/develop/config/production.yaml.example#L223
storage.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 by chocobozzz/peertube:production-bookworm
Env configuration that your must update if you use Docker:
PEERTUBE_TRANSCODING_WEBTORRENT_ENABLED
must be renamed to PEERTUBE_TRANSCODING_WEB_VIDEOS_ENABLED
PEERTUBE_OBJECT_STORAGE_VIDEOS_BUCKET_NAME
must be renamed to PEERTUBE_OBJECT_STORAGE_WEB_VIDEOS_BUCKET_NAME
PEERTUBE_OBJECT_STORAGE_VIDEOS_PREFIX
must be renamed to PEERTUBE_OBJECT_STORAGE_WEB_VIDEOS_PREFIX
PEERTUBE_OBJECT_STORAGE_VIDEOS_BASE_URL
must be renamed to PEERTUBE_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 to location ~ ^(/static/(webseed|web-videos|streaming-playlists)/private/)|^/download {
location ~ ^/static/(webseed|redundancy|streaming-playlists)/ {
must be updated to location ~ ^/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
REST API breaking changes:
webtorrentEnabled
from user response (deprecated since 4.1 in favour of p2pEnabled
)avatar
and banner
fields from account/channel responses (deprecated since 4.2 in favour of avatars
and banners
)filter
query when listing videos (deprecated since 4.0 in favour of isLocal
and include
)/api/v1/videos/:id/webtorrent
video file routes in favour of /api/v1/videos/:id/web-videos
routeshasWebtorrentFiles
body video filter in favour of hasWebVideoFiles
when listing videoswebtorrent
transcodingType
in favour of web-video
in /api/v1/videos/{id}/transcoding
routecurrentTime
is now required to notify the user is watching the video using /api/v1/videos/{id}/views
(introduced in 4.2)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:
webtorrent
key in getFiles()
helper result. Use webVideo
insteadpeertube-import-videos
(also aliased as peertube import-videos
or peertube import
) scriptnpm run create-generate-storyboard-job
commandplugins
, well-known
, feeds
, activity_pub
and client
endpoints)/videos/{id}/views
endpoint with many viewerssecurity.txt
well-known endpointupdate-host
script to fix out of memory errorreplaySettings.privacy
is not required anymoreERR_HTTP_HEADERS_SENT
crashLike
on Note
filter:api.video.get.result
hookPEERTUBE_OBJECT_STORAGE_UPLOAD_ACL_PUBLIC
and PEERTUBE_OBJECT_STORAGE_UPLOAD_ACL_PRIVATE
in .env