Only for a few routes, that consumes postgresql CPU
Re-implement sequelize connection routing mechanism, to support:
* Replica lag monitoring (to not select replicas that are too far
behind the primary)
* Be opt-in instead of opt-out (primary is used by default, a context
must be marked to use replicas)
* Handle "read-you-writes" mechanism (ensure that reads after writes
see the latest data, using the user ID to track recent writes)
* feat(videos/browse): make it configurable to show scheduled lives
closes#5235
* Consistency
---------
Co-authored-by: Chocobozzz <me@florianbigard.com>
* initial commit for filters
* lint fix
* lint update .5 -> 0.5
* Use same behaviour as user video language settings
* Reorganize content filters and settings
---------
Co-authored-by: Chocobozzz <me@florianbigard.com>
* Constrain PyAV when installing whisper-ctranslate2
PyAV 19 (2026-09-29, Python 3.12+) removed the metadata_errors argument of
av.open(). faster-whisper 1.2.1, which whisper-ctranslate2 0.4.4 installs,
still passes it, so a freshly auto-installed engine fails every
transcription and no transcript file is written.
* Prefer upgrading to latest whisper ctranslate
---------
Co-authored-by: Chocobozzz <me@florianbigard.com>
* Keep the 3D packing of videos that declare it in their container
A video with the packing declared in its container lost it in the web video and HLS files: the copy path writes an MP4 without it (seen with Matroska's StereoMode; the check reads the stream's stereo side data, so MP4's st3d box goes the same way), and libx264 only writes the frame packing SEI for the left eye first, as FFmpeg tells it "Inverted mode is not supported by x264".
Do not copy such a video, so that libx264 writes the SEI from the packing of the input, and when the right eye comes first put the left eye first with the stereo3d filter and give the packing to libx264 as frame-packing (the frames keep the inverted side data otherwise, and libx264 would drop the packing again).
Assisted-by: Claude Sonnet via Claude Code
* Handle rotation and move 3d to transcoding profile
---------
Co-authored-by: Chocobozzz <me@florianbigard.com>
* feat: add support for playlistId in peertube-videos-list element
closes#5391
* Throw on param conflict and hide nsfw videos
---------
Co-authored-by: Chocobozzz <me@florianbigard.com>
Add an `onLocalVideo` query parameter to the video comments feed to
only list comments made on local (or remote) videos.
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
plugins install copies the plugin directory into the instance storage
(pnpm add file:), so rebuilding the source does not change what the
instance runs and re-running install reinstalls the same copy.
Point at plugins update --path and the required version bump, and link
the CLI tools guide from the plugin development section.
* Add ability to disable audit logs
Add a `log.audit.enabled` configuration option, mirroring the existing
`log.rotation.enabled` shape.
The guard lives in `auditLoggerWrapper`, which every `create`/`update`/
`delete` audit call routes through, so the 13 `auditLoggerFactory`
consumers need no change.
Closes#2686
* Add sort option to channel miniature markup
* Styling
---------
Co-authored-by: Chocobozzz <me@florianbigard.com>
Mirroring a big video could not take longer than 3 hours, and the HLS
download budget was taken from `import.videos.timeout`, so raising it to
let a mirror finish also changed video import behaviour.
Add `redundancy.videos.timeout`, feeding both the `video-redundancy` job
TTL and the HLS download budget, the same way `import.videos.timeout`
already feeds `video-import`.
Closes#5519