+ * **/!\ VERY IMPORTANT /!\\** We added a unique index on actors usernames to fix some federation bugs.
+ Please check now if you have conflicts:
+ * Go inside your database using `sudo -u postgres psql peertube_prod` and run `select "preferredUsername" from actor where "serverId" is null group by "preferredUsername" having count(*) > 1;`
+ * If you have some results, it seems you have duplicate channels/accounts.
+ For every entry, you'll have to change the preferredUsername of the entry you want (so they are unique).
+ The updated actors could have some federations issues
+ * Changed `auto_follow_index` setting configuration: you now have to use the complete URL in `index_url`.
+ If you used the default one, you now need to use `https://instances.joinpeertube.org/api/v1/instances/hosts`.
+ This way, you can also use a direct raw URL (Gitlab, Github, pastebin, etc.) using [a simple text format](https://framagit.org/framasoft/peertube/instances-peertube#peertube-auto-follow) and easily maintain small communities or instance recommendation lists.
+ * PeerTube requires NodeJS v10 or v12
+
+### CLI tools
+
+ * Add redundancy CLI: https://docs.joinpeertube.org/maintain-tools?id=peertube-redundancyjs
+ * Add ability to pass remaining options to youtube-dl binary in peertube-import script ([@drzraf](https://github.com/drzraf))
+
+### Docker
+
+ * **Important:** Fix HLS storage configuration ([@xcffl](https://github.com/xcffl)): https://github.com/Chocobozzz/PeerTube/blob/develop/support/docker/production/config/production.yaml#L48
+ * Add DKIM support to Docker ([@kimsible](https://github.com/kimsible))
+
+### Maintenance
+
+ * Add nginx configuration to redirect videos to an S3 bucket ([@rigelk](https://github.com/rigelk)) and update of the [corresponding documentation](https://docs.joinpeertube.org/admin-remote-storage).
+
+### Plugins/Themes/Embed API
+
+ * Add embed API (https://docs.joinpeertube.org/api-embed-player):
+ * `playbackState` can be `ended`
+ * `playbackStatusUpdate` has a `duration` field
+ * `setCaption` and `getCaptions` methods
+ * Add client plugin hooks (https://docs.joinpeertube.org/api-plugins):
+ * `action:login.init`
+ * `action:video-watch.video-threads.loaded`
+ * `action:video-watch.video-thread-replies.loaded` ([@ipbc-dev](https://github.com/ipbc-dev))
+ * Add server plugin hooks (https://docs.joinpeertube.org/api-plugins):
+ * `filter:api.video.pre-import-url.accept.result`
+ * `filter:api.video.pre-import-torrent.accept.result`
+ * `filter:api.video.post-import-url.accept.result`
+ * `filter:api.video.post-import-torrent.accept.result`
+ * Add server helpers:
+ * `database.query` to do SQL queries
+ * `videos.removeVideo`
+ * `config.getWebserverUrl`
+ * `moderation.blockServer`, `moderation.unblockServer`, `moderation.blockAccount`, `moderation.unblockAccount`, `moderation.blacklistVideo`, `moderation.unblacklistVideo`
+ * Add client helpers:
+ * `notifier` to notify users using the toast component ([@kimsible](https://github.com/kimsible))
+ * `showModal` to show a modal ([@kimsible](https://github.com/kimsible))
+ * `markdownRenderer` to render markdown ([@kimsible](https://github.com/kimsible))
+ * Add ability for plugins to define custom routes
+ * Add ability for plugins to remove video/playlist privacies
+ * Add ability for plugins to support additional auth methods
+ * Add `onSettingsChange` support
+
+### Official PeerTube plugins
+
+ * [OpenID Connect](https://framagit.org/framasoft/peertube/official-plugins/-/tree/master/peertube-plugin-auth-openid-connect)
+ * [LDAP](https://framagit.org/framasoft/peertube/official-plugins/-/tree/master/peertube-plugin-auth-ldap)
+ * [SAML2](https://framagit.org/framasoft/peertube/official-plugins/-/tree/master/peertube-plugin-auth-saml2)
+ * [Auto mute accounts/instances (alpha)](https://framagit.org/framasoft/peertube/official-plugins/-/tree/master/peertube-plugin-auto-mute)
+
+## Features
+
+ * :tada: Add HTML support in PeerTube emails, improve text-only version ([@rigelk](https://github.com/rigelk))
+ * :tada: Add settings panel for anonymous users so they can change NSFW/P2P/autoplay/displayed videos policy ([@rigelk](https://github.com/rigelk))
+ * :tada: Improve redundancy management:
+ * Add quick action on video miniature to mirror a specific video using the web interface
+ * Add admin dashboard to list remote and local redundancies
+ * Add ability for admins to define remote redundancies policy (accept/reject)
+ * :tada: Many responsive & UI improvements:
+ * Add maximized mode to markdown textarea ([@kimsible](https://github.com/kimsible))
+ * Detect and prevent sub menu overflow on small screens using a dropdown or a modal ([@rigelk](https://github.com/rigelk))
+ * Use a typeahead component for the search bar ([@rigelk](https://github.com/rigelk))
+ * Use a modal instead of a dropdown menu in small/mobile views ([@kimsible](https://github.com/kimsible))
+ * Improve display of accounts and channel pages on small and medium screens ([@rigelk](https://github.com/rigelk))
+ * Improve forms layout ([@rigelk](https://github.com/rigelk))
+ * Replace helpers icons with descriptions in admin configuration ([@rigelk](https://github.com/rigelk))
+ * Improve tables on mobile devices to prevent layout breakage ([@kimsible](https://github.com/kimsible))
+ * Fix multiple broken views on small screens ([@kimsible](https://github.com/kimsible))
+ * Make video add tabs scrollable on small devices ([@kimsible](https://github.com/kimsible))
+ * Better use of space and icons in the plugin administration interface ([@rigelk](https://github.com/rigelk))
+ * Restyle toast notifications to tone down colors ([@rigelk](https://github.com/rigelk))
+ * Add/move links at the bottom of the left menu ([@rigelk](https://github.com/rigelk))
+ * Improve avatar upload UI ([@rigelk](https://github.com/rigelk))
+ * Use progress bars for quota used in my account ([@rigelk](https://github.com/rigelk))
+ * Add variable pagination size to all tables ([@rigelk](https://github.com/rigelk))
+ * Add empty states to all tables ([@rigelk](https://github.com/rigelk))
+ * Add generic text filter to all admin tables ([@rigelk](https://github.com/rigelk))
+ * Fix `z-index` for tooltips, modals and their button to prevent overlaps ([@rigelk](https://github.com/rigelk))
+ * And many others!
+ * :tada: Improve video abuses admin table ([@rigelk](https://github.com/rigelk)):
+ * Add in-text specific search filters
+ * Reports can be linked to directly
+ * Rich reporter field
+ * Add video thumbnail with abuse count for the video and position of the abuse in that list
+ * Expand row to see more information about the video, the reporter and the reportee
+ * Add many actions (on the video, on the reporter)
+ * Don't remove a report when a video is deleted
+ * Add information on a video abuse within its notification email ([@rigelk](https://github.com/rigelk))
+ * Add ability for video owners to delete comments
+ * Add filter inputs for blacklisted videos and muted accounts/servers ([@rigelk](https://github.com/rigelk))
+ * Video import improvements:
+ * Support subtitles when importing a video ([@kimsible](https://github.com/kimsible))
+ * Generate thumbnail/preview from URL and inject them in the video edit form ([@kimsible](https://github.com/kimsible))
+ * Support `licence` and `language` fields
+ * Support audio file imports
+ * Support WMA and WAV audio files upload
+ * Support drag and drop for video upload/torrent import ([@rigelk](https://github.com/rigelk))
+ * Add video file metadata to download modal ([@rigelk](https://github.com/rigelk))
+ * Add views stats for channels ([@rigelk](https://github.com/rigelk))
+ * Add more information about the user in the edit form ([@rigelk](https://github.com/rigelk))
+ * Server optimizations:
+ * Add cache for some immutable models
+ * Don't refresh videos when processing a view
+ * Optimize view endpoint
+ * Completely rewritten SQL query to list videos
+ * Optimize SQL request when broadcasting an activity
+ * Support infinite scrolling in the discover page
+ * Add ability for admins to create a user without a password. PeerTube will send a reset password link to the user ([@JohnXLivingston](https://github.com/JohnXLivingston))
+ * Improve embed title background opacity
+ * Add origin instance URL in watch page
+ * Clearer description of advanced search options
+ * Always copy full actor handle in video channels view ([@rigelk](https://github.com/rigelk))
+ * Add `sendmail` support ([@immae](https://github.com/immae)) to `smtp` configuration
+ * Support `rel="me"` links in markdown
+ * Use `originallyPublishedAt` from body on import if it exists
+ * Sort outbox by *DESC createdAt* order
+ * Increase video comment max length limit
+
+### Bug fixes
+
+ * Update default user theme to `instance-default` (Jorge Silva)
+ * Fix user dropdown menu with long texts ([@rigelk](https://github.com/rigelk))
+ * Fix load more comments on infinite scroll ([@ipbc-dev](https://github.com/ipbc-dev))
+ * Fix CSP issue on WebFinger service ([@ZanyMonk](https://github.com/ZanyMonk))
+ * Fix federation with Pleroma
+ * Fix Safari and iOS video play
+ * Fix broken HLS player on old Edge
+ * Fix running HLS transcoding on existing HLS video
+ * Fix user role edition
+ * Fix video duration display
+ * Fix error when adding a video in a playlist that does not have a thumbnail
+ * Fix internal video display in playlists
+ * Fix add comment in threads with deleted comments
+ * Fix video codec in HLS playlist resulting in a broken video
+ * Fix torrent import on Windows
+ * Respect browser autoplay policy: don't autoplay videos in mute mode
+ * Fix playlist videos autoplay/next play ([@rigelk](https://github.com/rigelk))
+ * Fix admin table column invalid sort error
+ * Fix outbox crawling max page/timeout (when an admin follows an instance with many videos)
+ * Add CORS to ActivityPub routes
+ * Fix my video imports table display when a video gets deleted ([@rigelk](https://github.com/rigelk))
+ * Fix peertube/import scripts `comment-enabled`, `wait-transcoding` and `download-enabled` options
+ * Don't leak unlisted videos in comments feed
+ * Do not display deleted comments or muted accounts/instances in RSS feed
+ * Fix HLS audio only transcoding
+ * Fix playlist creation/update with a long description
+ * Fix links of same instance in video description
+ * Fix REPL script
+ * Fix broken client when cookies are disabled
+ * Fix upload button color in dark mode
+ * Explicit theme colors for inputs and textarea
+ * Fix input/textarea themes
+ * Fix action button icons theme
+ * Fix grey color theme
+ * Fix regression scrollbar bgcolor mdtextarea maximized-mode ([@kimsible](https://github.com/kimsible))
+
+
+**since v2.2.0-rc.1**
+
+### Bug fixes
+
+ * Fix broken migration introduced in 2.2.0-rc.1 in docker
+ * Fix sort icons in tables
+ * Fix action button overflow in tables
+ * Fix broken client when cookies are disabled
+ * Fix upload button color in dark mode
+ * Explicit theme colors for inputs and textarea
+ * Fix input/textarea themes
+ * Fix dropdown menu overflow
+ * Fix notifications with dark theme
+ * Fix action button icons theme
+ * Fix grey color theme
+ * Fix regression scrollbar bgcolor mdtextarea maximized-mode ([@kimsible](https://github.com/kimsible))
+ * Fix broken emails
+
+
+
+## v2.1.1
+
+### Bug fixes
+
+ * Fix youtube-dl in docker image
+ * Fix playlist creation/update
+ * Fix fetch of instance config in client
+ * Manual approves followers only for the instance (and not accounts/channels)
+ * Fix avatar update
+ * Fix CSP for embeds
+ * Fix scroll of the menu on mobile
+ * Fix CPU usage of PostgreSQL
+ * Fix embed for iOS
+
+
+## v2.1.0
+
+**Since v2.0.0**
+
+### IMPORTANT NOTES
+
+ * **/!\ VERY IMPORTANT /!\\** You need to execute manually a script (can be executed after your upgrade, while your PeerTube instance is running) to create HLS video torrents:
+ * `cd /var/www/peertube/peertube-latest && sudo -u peertube NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production node dist/scripts/migrations/peertube-2.1.js`
+ * **/!\ VERY IMPORTANT /!\\** In the next PeerTube release (v2.2.0), we'll add a unique index on actors usernames to fix some federation bugs.
+ Please check now if you have conflicts using:
+ * Go inside your database using `sudo -u postgres psql peertube_prod` and run `select "preferredUsername" from actor where "serverId" is null group by "preferredUsername" having count(*) > 1;`
+ * If you have some results, it seems you have duplicate channels/accounts.
+ For every entry, you'll have to change the preferredUsername of the entry you want (so they are unique).
+ The updated actors could have some federations issues
+ * We now use Buster for the docker image, so the image name changed:
+ * `production-stretch` becomes `production-buster`
+ * `v2.x.x-stretch` becomes `v2.x.x-buster`
+ * Users cannot create more than 20 channels now to avoid UX and actor name squatting issues
+ * We added a warning if the `videos` directory is the same than the `redundancy` one in your configuration file: it can create some bugs
+
+### Documentation
+
+We added some sections in the documentation website:
+
+ * S3 remote storage: https://docs.joinpeertube.org/admin-remote-storage
+ * Instances redundancy: https://docs.joinpeertube.org/admin-following-instances
+ * Moderate your instance: https://docs.joinpeertube.org/admin-moderation
+ * Customize your instance (install plugins & themes): https://docs.joinpeertube.org/admin-customize-instance
+ * PeerTube logs (standard log/audit log): https://docs.joinpeertube.org/admin-logs
+ * Mute accounts/instances: https://docs.joinpeertube.org/use-mute
+ * Controlled player embed API: https://docs.joinpeertube.org/api-embed-player
+
+### Docker
+
+ * Sticking to one env-var management system ([@Leopere](https://github.com/Leopere)) (See https://github.com/Chocobozzz/PeerTube/pull/2247)
+ * Simplify Dockerfile and slim Docker image ([@Nutomic](https://github.com/nutomic))
+ * Add HLS support in Docker container by using the latest Debian stable (Buster) image
+
+### Plugins/Themes API
+
+ * Add checkbox and textarea as possible input types for settings ([@rigelk](https://github.com/rigelk))
+ * Add `isLoggedIn` helper to client plugins ([@rigelk](https://github.com/rigelk))
+ * Add client plugin hooks:
+ * `action:video-watch.player.loaded` with player instance
+ * `action:video-watch.video.loaded` with a videojs instance
+ * `action:signup.register.init` ([@rigelk](https://github.com/rigelk))
+ * `filter:api.signup.registration.create.params` ([@rigelk](https://github.com/rigelk))
+ * `filter:internal.video-watch.player.build-options.params`
+ * `filter:internal.video-watch.player.build-options.result`
+ * `filter:internal.common.svg-icons.get-content.params`
+ * `filter:internal.common.svg-icons.get-content.result`
+ * Add server plugins hooks:
+ * `action:api.user.blocked`
+ * `action:api.user.unblocked`
+ * `action:api.user.registered`
+ * `action:api.user.created`
+ * `action:api.user.deleted`
+ * `action:api.user.updated`
+ * `action:api.user.oauth2-got-token`
+ * Accept `.` `_` and `0-9` characters in plugin names
+
+### Maintenance
+
+ * PeerTube moved translations from Zanata to Weblate. Here is the new translations website URL: https://weblate.framasoft.org/projects/peertube/
+ * We now provide a JavaScript library to control a PeerTube embed: https://www.npmjs.com/package/@peertube/embed-api
+ * Add ability to generate HLS videos using `create-transcoding-job` script (see [the documentation](https://docs.joinpeertube.org/maintain-tools?id=create-transcoding-jobjs))
+ * Update nginx template: (you need to [update manually](https://github.com/Chocobozzz/PeerTube/blob/develop/support/doc/production.md#nginx))
+ * Add streaming playlists endpoint
+ * Add `client_body_temp_path` hint
+ * Relax TLS/SSL ciphers hardening to allow Android 4.4.2 to use the PeerTube instance API
+ * Add `maxFileSize`, `maxFiles` and `anonymizeIP` log options in configuration file
+
+### Features
+
+ * :tada: Add *internal* video privacy mode. *Internal* videos are only available to other logged in users of your instance, and are not federated
+ * :tada: Add hyperlink video timestamps in comments & video descriptions ([@Lesterpig](https://github.com/lesterpig) & [@rigelk](https://github.com/rigelk))
+ * :tada: Comments improvements:
+ * Support basic markdown
+ * Soft delete video comments instead of destroying them ([@alcalyn](https://github.com/alcalyn))
+ * Add commentator name alongside fid for video comments ([@rigelk](https://github.com/rigelk))
+ * Add a cancel button in comment form ([@rigelk](https://github.com/rigelk))
+ * Show number of comments under a video in watch page ([@rigelk](https://github.com/rigelk))
+ * Add user moderation dropdown ([@rigelk](https://github.com/rigelk))
+ * Add ability to sort comments by *total replies* or *created date* ([@rigelk](https://github.com/rigelk))
+ * Add *total replies from video author* indicator ([@rigelk](https://github.com/rigelk))
+ * Comment name emphasis for video author ([@rigelk](https://github.com/rigelk))
+ * Add "Watch later" button in video miniature overlay ([@rigelk](https://github.com/rigelk))
+ * Add ability to transcode videos in an audio only video container ([@Yetangitu](https://github.com/Yetangitu))
+ * Add playlist search input in *add to playlist* dropdown ([@rigelk](https://github.com/rigelk))
+ * Add search bars for a user's videos and playlists ([@rigelk](https://github.com/rigelk))
+ * Support playlists in share modal
+ * Better UI for a better world:
+ * Add play/pause bezels to the video player ([@rigelk](https://github.com/rigelk))
+ * Use icons instead of buttons in watch page (like/dislike, support...) ([@rigelk](https://github.com/rigelk))
+ * Improve *PeerTube* section in About page and add links to the documentation
+ * Improve comment tree in Watch page
+ * Improve dropdown box shadow ([@rigelk](https://github.com/rigelk))
+ * Add channel avatar to watch view ([@rigelk](https://github.com/rigelk))
+ * Improve likes-dislikes bar usability
+ * Alter titles section header style ([@rigelk](https://github.com/rigelk))
+ * Enhance jobs list display on smaller screens ([@alcalyn](https://github.com/alcalyn))
+ * Add a button in the videos from subscriptions page to manage subscriptions ([@rigelk](https://github.com/rigelk))
+ * Add duration to video attributes in watch view ([@rigelk](https://github.com/rigelk))
+ * Add a message in the login form when signup is disabled for people that are looking for an account ([@rigelk](https://github.com/rigelk))
+ * Add "Manage" button in owned account and channels pages ([@rigelk](https://github.com/rigelk))
+ * Improve password input accessibility ([@rigelk](https://github.com/rigelk))
+ * Add descriptions in moderation dropdown ([@rigelk](https://github.com/rigelk))
+ * Performances improvements:
+ * Lazy load categories, licences, languages and video/playlist privacies in the client
+ * Only update remote actor avatar if the filename changed
+ * Optimize transcoding by using the lowest resolution as input file
+ * Speedup embed first paint
+ * Optimize videos list SQL query
+ * Optimize local videos list SQL query
+ * Cache `peertube` instance actor SQL result
+ * Cache HLS/WebTorrent InfoHash SQL result
+ * Optimize notification endpoint on specific cases
+ * Optimize "list my playlists" SQL query
+ * Improve search filters: ([@rigelk](https://github.com/rigelk))
+ * Add ability to sort results
+ * Improve tags filter inputs
+ * Add a button to reset filters
+ * Improve autoplay: ([@rigelk](https://github.com/rigelk))
+ * Autoplay next video switch for both user and visitors
+ * Add *up next* screen on autoplay
+ * Autoplay next video support for playlists
+ * Add *next* video button to the player
+ * Add loop setting when watching a playlist
+ * Add option to download subtitles in download modal ([@rigelk](https://github.com/rigelk))
+ * Add a button in account page to follow all account channels ([@rigelk](https://github.com/rigelk))
+ * Add ability to search a video directly by its UUID
+ * Case insensitive tags search
+ * Add ability to disable WebTorrent (and only enable HLS) (**experimental and breaks federation with PeerTube instances < 2.1**)
+ * Don't seed if the client is on a cellular network in the HLS player
+ * Load HLS player in embed by default if enabled
+ * Admin panels:
+ * Add ability to sort by *state*, *score* and *redundancy allowed* columns in following/followers admin table
+ * Add ability to filter per job type in admin
+ * Add *Audit logs* section in admin Logs panel
+ * Improve Media-RSS support ([@rigelk](https://github.com/rigelk))
+ * Explicit the tag limit in video form ([@bikepunk](https://github.com/bikepunk))
+ * Add a warning when uploading videos using root
+ * Clearer video quota label in user settings
+ * Pause the video when the user opens a modal
+ * Handle basic HTML in account descriptions
+ * Support `m4v` videos
+ * Improve 4k resolution bitrate
+ * Add missing hotkeys documentation in the watch page
+ * Add a button to copy the channel handle ([@rigelk](https://github.com/rigelk))
+ * Add server config to the nodeinfo metadata ([@rigelk](https://github.com/rigelk))
+ * Improve notification popup interactivity ([@rigelk](https://github.com/rigelk))
+
+### Bug fixes
+
+ * Don't notify if the account in on a muted instance
+ * Don't leak other notified addresses in notification emails
+ * Allow the embed iframe to open links
+ * Add missing button roles for the language chooser and keyboard shortcut menu items [@MarcoZehe](https://github.com/MarcoZehe)
+ * Fix overflow when creating a channel
+ * Fix "copy magnet URI" in player
+ * Fix text overflow in menu
+ * Fix player focus
+ * Only display accepted followers/followings instances in about page
+ * Fix brackets truncation in video description
+ * Fix channel playlist miniatures overflow
+ * Fix background color on some screens
+ * Fix captions upload issue depending on the caption name
+ * Fix file download when the video is private
+ * Fix dropdown on video miniature for unlogged users
+ * Fix video support field in update form
+ * Fix video import having a long thumbnail url (Facebook for example)
+ * Add correct HTTP status on not found video
+ * Fix bug on login when username has a special character (`_` for example)
+ * Fix plugin unregistration that did not remove properly its hooks ([@JohnXLivingston](https://github.com/JohnXLivingston))
+ * Fix wrong audio only resolution label for hls
+ * Fix AP icon URL for imported videos
+ * Fix octet stream fallback for video ext
+
+**since v2.1.0-rc.1**
+
+### Bug fixes
+
+ * Fix wrong audio only resolution label for hls
+ * Fix AP icon URL for imported videos
+ * Fix embed on mastodon
+ * Fix octet stream fallback for video ext
+
+
+## v2.0.0
+
+**Since v1.4.1**