PeerTube (7.1.0)

Download OpenAPI specification:Download

The PeerTube API is built on HTTP(S) and is RESTful. You can use your favorite HTTP/REST library for your programming language to use PeerTube.

See the REST API quick start for a few examples of using the PeerTube API.

Authentication

When you sign up for an account on a PeerTube instance, you are given the possibility to generate sessions on it, and authenticate there using an access token. Only one access token can currently be used at a time.

Roles

Accounts are given permissions based on their role. There are three roles on PeerTube: Administrator, Moderator, and User. See the roles guide for a detail of their permissions.

Errors

The API uses standard HTTP status codes to indicate the success or failure of the API call, completed by a RFC7807-compliant response body.

HTTP 1.1 404 Not Found
Content-Type: application/problem+json; charset=utf-8

{
  "detail": "Video not found",
  "docs": "https://docs.joinpeertube.org/api-rest-reference.html#operation/getVideo",
  "status": 404,
  "title": "Not Found",
  "type": "about:blank"
}

We provide error type (following RFC7807) and code (internal PeerTube code) values for a growing number of cases, but it is still optional. Types are used to disambiguate errors that bear the same status code and are non-obvious:

HTTP 1.1 403 Forbidden
Content-Type: application/problem+json; charset=utf-8

{
  "detail": "Cannot get this video regarding follow constraints",
  "docs": "https://docs.joinpeertube.org/api-rest-reference.html#operation/getVideo",
  "status": 403,
  "title": "Forbidden",
  "type": "https://docs.joinpeertube.org/api-rest-reference.html#section/Errors/does_not_respect_follow_constraints"
}

Here a 403 error could otherwise mean that the video is private or blocklisted.

Validation errors

Each parameter is evaluated on its own against a set of rules before the route validator proceeds with potential testing involving parameter combinations. Errors coming from validation errors appear earlier and benefit from a more detailed error description:

HTTP 1.1 400 Bad Request
Content-Type: application/problem+json; charset=utf-8

{
  "detail": "Incorrect request parameters: id",
  "docs": "https://docs.joinpeertube.org/api-rest-reference.html#operation/getVideo",
  "instance": "/api/v1/videos/9c9de5e8-0a1e-484a-b099-e80766180",
  "invalid-params": {
    "id": {
      "location": "params",
      "msg": "Invalid value",
      "param": "id",
      "value": "9c9de5e8-0a1e-484a-b099-e80766180"
    }
  },
  "status": 400,
  "title": "Bad Request",
  "type": "about:blank"
}

Where id is the name of the field concerned by the error, within the route definition. invalid-params.<field>.location can be either 'params', 'body', 'header', 'query' or 'cookies', and invalid-params.<field>.value reports the value that didn't pass validation whose invalid-params.<field>.msg is about.

Deprecated error fields

Some fields could be included with previous versions. They are still included but their use is deprecated:

  • error: superseded by detail

Rate limits

We are rate-limiting all endpoints of PeerTube's API. Custom values can be set by administrators:

Endpoint (prefix: /api/v1) Calls Time frame
/* 50 10 seconds
POST /users/token 15 5 minutes
POST /users/register 2* 5 minutes
POST /users/ask-send-verify-email 3 5 minutes

Depending on the endpoint, *failed requests are not taken into account. A service limit is announced by a 429 Too Many Requests status code.

You can get details about the current state of your rate limit by reading the following headers:

Header Description
X-RateLimit-Limit Number of max requests allowed in the current time period
X-RateLimit-Remaining Number of remaining requests in the current time period
X-RateLimit-Reset Timestamp of end of current time period as UNIX timestamp
Retry-After Seconds to delay after the first 429 is received

CORS

This API features Cross-Origin Resource Sharing (CORS), allowing cross-domain communication from the browser for some routes:

| Endpoint | |------------------------- ---| | /api/* | | /download/* | | /lazy-static/* | | /.well-known/webfinger |

In addition, all routes serving ActivityPub are CORS-enabled for all origins.

Static Video Files

Get public Web Video file

PeerTube >= 6.0

path Parameters
filename
required
string

Filename

Responses

Get private Web Video file

PeerTube >= 6.0

Authorizations:
OAuth2
path Parameters
filename
required
string

Filename

query Parameters
videoFileToken
string

Video file token generated by PeerTube so you don't need to provide an OAuth token in the request header.

Responses

Get public HLS video file

Authorizations:
OAuth2
path Parameters
filename
required
string

Filename

Responses

Get private HLS video file

Authorizations:
OAuth2
path Parameters
filename
required
string

Filename

query Parameters
reinjectVideoFileToken
boolean

Ask the server to reinject videoFileToken in URLs in m3u8 playlist

videoFileToken
string

Video file token generated by PeerTube so you don't need to provide an OAuth token in the request header.

Responses

Video Download

Download video files

Download video file

Generate a mp4 container that contains at most 1 video stream and at most 1 audio stream. Mainly used to merge the HLS audio only video file and the HLS video only resolution file.

path Parameters
videoId
required
integer >= 1
Example: 42

The video id

query Parameters
videoFileIds
required
Array of integers

streams of video files to mux in the output

videoFileToken
string

Video file token generated by PeerTube so you don't need to provide an OAuth token in the request header.

Responses

Video Feeds

Server syndication feeds of videos

Comments on videos feeds

path Parameters
format
required
string
Enum: "xml" "rss" "rss2" "atom" "atom1" "json" "json1"

format expected (we focus on making rss the most feature-rich ; it serves Media RSS)

query Parameters
accountId
string

limit listing comments to videos of a specific account

accountName
string

limit listing comments to videos of a specific account

videoChannelId
string

limit listing comments to videos of a specific video channel

videoChannelName
string

limit listing comments to videos of a specific video channel

videoId
string

limit listing comments to a specific video

Responses

Response samples

Content type
<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>PeerTube Nightly</title>
        <link>https://peertube2.cpy.re</link>
        <description>This instance is a test instance of the PeerTube project. It is updated to the latest commit in the develop branch every business day, 8pm CET.</description>
        <lastBuildDate>Fri, 12 Sep 2025 08:49:51 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>PeerTube - https://peertube2.cpy.re</generator>
        <image>
            <title>PeerTube Nightly</title>
            <url>https://peertube2.cpy.re/lazy-static/avatars/177f70c4-ddef-4bb6-bc96-b00d5e2a0e05.png</url>
            <link>https://peertube2.cpy.re</link>
        </image>
        <copyright>All rights reserved, unless otherwise specified in the terms specified at https://peertube2.cpy.re/about and potential licenses granted by each content's rightholder.</copyright>
        <atom:link href="https://peertube2.cpy.re/feeds/video-comments.xml?scope=local" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[20250911_GET_EP07_FLIC_LAUSANNE_V4 - tibo lalu]]></title>
            <link>https://peertube2.cpy.re/w/bfAbRyTxzGhUxnJT8nvC3Y;threadId=181997</link>
            <guid>https://peertube2.cpy.re/w/bfAbRyTxzGhUxnJT8nvC3Y;threadId=181997</guid>
            <pubDate>Thu, 11 Sep 2025 19:11:58 GMT</pubDate>
            <content:encoded><![CDATA[<p><span><a href="https://video.blast-info.fr/accounts/blast" class="u-url mention" target="_blank" rel="noopener noreferrer">@<span>blast</span></a></span> </p><p>toujours aussi bien</p>]]></content:encoded>
            <dc:creator>tibo lalu</dc:creator>
        </item>
        <item>
            <title><![CDATA[Testing KDE LINUX ALPHA on REAL hardware: Tuxedo Stellaris 16 Gen 7 ! - Edoardo Regni]]></title>
            <link>https://peertube2.cpy.re/w/eSYuduJSbZ9s7K4pFT3Ncd;threadId=181995</link>
            <guid>https://peertube2.cpy.re/w/eSYuduJSbZ9s7K4pFT3Ncd;threadId=181995</guid>
            <pubDate>Thu, 11 Sep 2025 18:10:17 GMT</pubDate>
            <content:encoded><![CDATA[<p>@fell@tube.tchncs.de I have no idea because I never needed that feature. Let me know the result</p>
]]></content:encoded>
            <dc:creator>Edoardo Regni</dc:creator>
        </item>
        <item>
            <title><![CDATA[Testing KDE LINUX ALPHA on REAL hardware: Tuxedo Stellaris 16 Gen 7 ! - Fell]]></title>
            <link>https://peertube2.cpy.re/w/eSYuduJSbZ9s7K4pFT3Ncd;threadId=181995</link>
            <guid>https://peertube2.cpy.re/w/eSYuduJSbZ9s7K4pFT3Ncd;threadId=181995</guid>
            <pubDate>Thu, 11 Sep 2025 13:12:50 GMT</pubDate>
            <content:encoded><![CDATA[<p>Does the keyboard backlight work when you set it to follow the accent colour in KDE?</p>
]]></content:encoded>
            <dc:creator>Fell</dc:creator>
        </item>
        <item>
            <title><![CDATA[Power up of a decsystem10's bays 1 & 2 of the CPU - smj]]></title>
            <link>https://peertube2.cpy.re/w/mZUSMmT9hGqWXXVWcSYptb;threadId=181989</link>
            <guid>https://peertube2.cpy.re/w/mZUSMmT9hGqWXXVWcSYptb;threadId=181989</guid>
            <pubDate>Wed, 10 Sep 2025 20:13:33 GMT</pubDate>
            <content:encoded><![CDATA[<p>@christianbeier@berlin.social please considering to support us and follow the progress on the blog at <a href="http://icm.museum" target="_blank" rel="noopener noreferrer">icm.museum</a></p>
]]></content:encoded>
            <dc:creator>smj</dc:creator>
        </item>
        <item>
            <title><![CDATA[10 septembre : une mobilisation sous haute répression - tif_inégalitéS.capitalisme.TTdroites.écocide.5g.pub.nuc.gafam-CRIMES]]></title>
            <link>https://peertube2.cpy.re/w/fJhFwPamAiD1jYUVGSSf3U;threadId=181991</link>
            <guid>https://peertube2.cpy.re/w/fJhFwPamAiD1jYUVGSSf3U;threadId=181991</guid>
            <pubDate>Wed, 10 Sep 2025 19:14:16 GMT</pubDate>
            <content:encoded><![CDATA[<p>.<br />
"butons le capitalisme avant qu'il n'ait tout buté !"</p>
<p>.<br />
capitalisme-patriarchisme-fascisme-écocide-biocide-génocideGlobalTotalFinal-etc-etc..._de_son_nom_plus_complet</p>
<p>.<br />
.</p>
<p>" égalitarismeS-sobriété_de_vie-tous-azimuts " _ _ _ _ _ _ _ (oui, c'est possible !)<br />
.</p>
]]></content:encoded>
            <dc:creator>tif_inégalitéS.capitalisme.TTdroites.écocide.5g.pub.nuc.gafam-CRIMES</dc:creator>
        </item>
        <item>
            <title><![CDATA[Power up of a decsystem10's bays 1 & 2 of the CPU - Christian Beier]]></title>
            <link>https://peertube2.cpy.re/w/mZUSMmT9hGqWXXVWcSYptb;threadId=181989</link>
            <guid>https://peertube2.cpy.re/w/mZUSMmT9hGqWXXVWcSYptb;threadId=181989</guid>
            <pubDate>Wed, 10 Sep 2025 17:04:33 GMT</pubDate>
            <content:encoded><![CDATA[<p><span><a href="https://toobnix.org/accounts/smj" class="u-url mention" target="_blank" rel="noopener noreferrer">@<span>smj</span></a></span> with the real in-datacenter sound would be nice!🙂</p>]]></content:encoded>
            <dc:creator>Christian Beier</dc:creator>
        </item>
        <item>
            <title><![CDATA[Power up of a decsystem10's bays 1 & 2 of the CPU - peron]]></title>
            <link>https://peertube2.cpy.re/w/mZUSMmT9hGqWXXVWcSYptb;threadId=181988</link>
            <guid>https://peertube2.cpy.re/w/mZUSMmT9hGqWXXVWcSYptb;threadId=181988</guid>
            <pubDate>Wed, 10 Sep 2025 16:47:32 GMT</pubDate>
            <content:encoded><![CDATA[<p>Those blinkenlights are insane! Which are the power requeriments on that DEC10 configuration?</p>
]]></content:encoded>
            <dc:creator>peron</dc:creator>
        </item>
        <item>
            <title><![CDATA[Google Search sucks, AI is everywhere: what should you use? - Nanook]]></title>
            <link>https://peertube2.cpy.re/w/3nfn5RgLU6b5J13rBS71HG;threadId=181985</link>
            <guid>https://peertube2.cpy.re/w/3nfn5RgLU6b5J13rBS71HG;threadId=181985</guid>
            <pubDate>Wed, 10 Sep 2025 13:11:30 GMT</pubDate>
            <content:encoded><![CDATA[<p><span><a href="https://tilvids.com/accounts/thelinuxexperiment" class="u-url mention" target="_blank" rel="noopener noreferrer">@<span>thelinuxexperiment</span></a></span> A trick that often works for getting around a paywall is <a href="http://internetarchive.org" target="_blank" rel="noopener noreferrer">internetarchive.org</a>, they manage somehow to get stuff that is paywalled and then you can get from them.</p>
]]></content:encoded>
            <dc:creator>Nanook</dc:creator>
        </item>
        <item>
            <title><![CDATA[Google Search sucks, AI is everywhere: what should you use? - Squid]]></title>
            <link>https://peertube2.cpy.re/w/3nfn5RgLU6b5J13rBS71HG;threadId=181982</link>
            <guid>https://peertube2.cpy.re/w/3nfn5RgLU6b5J13rBS71HG;threadId=181982</guid>
            <pubDate>Wed, 10 Sep 2025 10:46:53 GMT</pubDate>
            <content:encoded><![CDATA[<p>As much as I agree Google sucks and we should use alternatives, you new videos are always on YouTube first and paywalled so we can't even watch them on third party clients unfortunately. It's your decision but yeah I used to watch them and no longer do, a lot of content creators are doing the same thing too. Maybe if you had them here first it would encourage people to use alternatives. That's just how I feel about it though, you do what you want, it's your videos.</p>
]]></content:encoded>
            <dc:creator>Squid</dc:creator>
        </item>
        <item>
            <title><![CDATA[ELF Nightmares GOTs, PLTs, and Relocations Oh My by John Baldwin - Harald Eilertsen]]></title>
            <link>https://peertube2.cpy.re/w/udjSH6vkKV31ARfDESw9kv;threadId=181974</link>
            <guid>https://peertube2.cpy.re/w/udjSH6vkKV31ARfDESw9kv;threadId=181974</guid>
            <pubDate>Tue, 09 Sep 2025 18:47:05 GMT</pubDate>
            <content:encoded><![CDATA[<p>Good talk! It clears up some things I needed for one of my projects. Would be great to have this as a reference on a website or an epub or something, tbh. It's quite a few details to wrap my head around 😃</p>
]]></content:encoded>
            <dc:creator>Harald Eilertsen</dc:creator>
        </item>
        <item>
            <title><![CDATA[⚡☢️🗑️ De la centrale aux déchets radioactifs - DÉCHETS RADIOACTIFS #1 - PushTheBigRedButton]]></title>
            <link>https://peertube2.cpy.re/w/hn3wYTP6YLWQGzXVmiZpw7;threadId=181973</link>
            <guid>https://peertube2.cpy.re/w/hn3wYTP6YLWQGzXVmiZpw7;threadId=181973</guid>
            <pubDate>Tue, 09 Sep 2025 18:27:19 GMT</pubDate>
            <content:encoded><![CDATA[<p>La ref aux virus contenus dans les laboratoires a mal veillie ! 😅</p>
]]></content:encoded>
            <dc:creator>PushTheBigRedButton</dc:creator>
        </item>
        <item>
            <title><![CDATA[Linux Mint 22.2: still fixing the Linux desktop - Chriscos]]></title>
            <link>https://peertube2.cpy.re/w/x6zcE8gfYwPFHMYFr6vEwL;threadId=181972</link>
            <guid>https://peertube2.cpy.re/w/x6zcE8gfYwPFHMYFr6vEwL;threadId=181972</guid>
            <pubDate>Tue, 09 Sep 2025 16:36:49 GMT</pubDate>
            <content:encoded><![CDATA[<p>Mint is looking good!</p>
<p>This may not be the best place to ask, but with linux getting more and more marketshare and Android/Google doing some questionable things regarding sideloading apps...Is there a decent linux phone anywhere? I have an awesome fairphone, but I would like to long term find a true linux phone replacement at some point.</p>
]]></content:encoded>
            <dc:creator>Chriscos</dc:creator>
        </item>
        <item>
            <title><![CDATA[RecalStick - Makoto]]></title>
            <link>https://peertube2.cpy.re/w/w9RP67F6KGtzc3KaQyJibS;threadId=181966</link>
            <guid>https://peertube2.cpy.re/w/w9RP67F6KGtzc3KaQyJibS;threadId=181966</guid>
            <pubDate>Mon, 08 Sep 2025 19:41:35 GMT</pubDate>
            <content:encoded><![CDATA[<p>@mac_call@mastodon.xyz  Oui ^__^<br />
Billet attenant en cours de rédaction</p>
]]></content:encoded>
            <dc:creator>Makoto</dc:creator>
        </item>
        <item>
            <title><![CDATA[RecalStick - mac call]]></title>
            <link>https://peertube2.cpy.re/w/w9RP67F6KGtzc3KaQyJibS;threadId=181966</link>
            <guid>https://peertube2.cpy.re/w/w9RP67F6KGtzc3KaQyJibS;threadId=181966</guid>
            <pubDate>Mon, 08 Sep 2025 18:58:18 GMT</pubDate>
            <content:encoded><![CDATA[<p><span><a href="https://peertube.makotoworkshop.org/accounts/makoto" class="u-url mention" target="_blank" rel="noopener noreferrer">@<span>makoto</span></a></span> 
La satisfaisance :)</p>]]></content:encoded>
            <dc:creator>mac call</dc:creator>
        </item>
        <item>
            <title><![CDATA["Fake News : un danger pour nos démocraties" ? Avec Mathieu Burgalassi - Emmanuel Florac]]></title>
            <link>https://peertube2.cpy.re/w/rfq5iGphc2dyDDiYbRxHDm;threadId=181965</link>
            <guid>https://peertube2.cpy.re/w/rfq5iGphc2dyDDiYbRxHDm;threadId=181965</guid>
            <pubDate>Mon, 08 Sep 2025 11:46:55 GMT</pubDate>
            <content:encoded><![CDATA[<p>Vous savez que les fact-checkeurs sont totalement ridiculisés, hein ? Vous allez vérifier les fake news gênantes sur les vaccins Covid et Ursula par exemple?</p>
]]></content:encoded>
            <dc:creator>Emmanuel Florac</dc:creator>
        </item>
        <item>
            <title><![CDATA[10 septembre on bloque tout et c'est Nicolas qui paie - Jice]]></title>
            <link>https://peertube2.cpy.re/w/7TZWAimu3eqzz7KZgo2Evc;threadId=181950</link>
            <guid>https://peertube2.cpy.re/w/7TZWAimu3eqzz7KZgo2Evc;threadId=181950</guid>
            <pubDate>Sun, 07 Sep 2025 17:46:35 GMT</pubDate>
            <content:encoded><![CDATA[<p><span><a href="https://video.blast-info.fr/accounts/blast" class="u-url mention" target="_blank" rel="noopener noreferrer">@<span>blast</span></a></span>
Merci Nicolas 😁</p>]]></content:encoded>
            <dc:creator>Jice</dc:creator>
        </item>
        <item>
            <title><![CDATA[Mystery shower head holder doohickey [SOLVED] - ExtremeDullard]]></title>
            <link>https://peertube2.cpy.re/w/wHw9yHmvwy3UiA5bBGJqRn;threadId=181949</link>
            <guid>https://peertube2.cpy.re/w/wHw9yHmvwy3UiA5bBGJqRn;threadId=181949</guid>
            <pubDate>Sun, 07 Sep 2025 17:26:06 GMT</pubDate>
            <content:encoded><![CDATA[<p>Mystery solved! It's a pull tab for children to lower the shower head if whoever took a shower before them put it too high.</p>
<p>See <a href="https://piefed.social/post/1238298" target="_blank" rel="noopener noreferrer">here</a>.</p>
]]></content:encoded>
            <dc:creator>ExtremeDullard</dc:creator>
        </item>
        <item>
            <title><![CDATA[10 septembre on bloque tout et c'est Nicolas qui paie - InternetDev-Anti-Communicant🍉]]></title>
            <link>https://peertube2.cpy.re/w/7TZWAimu3eqzz7KZgo2Evc;threadId=181948</link>
            <guid>https://peertube2.cpy.re/w/7TZWAimu3eqzz7KZgo2Evc;threadId=181948</guid>
            <pubDate>Sun, 07 Sep 2025 16:49:20 GMT</pubDate>
            <content:encoded><![CDATA[<p><span><a href="https://video.blast-info.fr/accounts/blast" class="u-url mention" target="_blank" rel="noopener noreferrer">@<span>blast</span></a></span> </p><p>non c'est Macron qui paie  son pot de départ.</p>]]></content:encoded>
            <dc:creator>InternetDev-Anti-Communicant🍉</dc:creator>
        </item>
        <item>
            <title><![CDATA[Cosmic Desktop BETA, more SteamOS devices, GNOME keeps X11 after all - Linux Weekly News - sexy_peach]]></title>
            <link>https://peertube2.cpy.re/w/2hhAz1Ao1g5413jCngN383;threadId=181947</link>
            <guid>https://peertube2.cpy.re/w/2hhAz1Ao1g5413jCngN383;threadId=181947</guid>
            <pubDate>Sat, 06 Sep 2025 19:34:02 GMT</pubDate>
            <content:encoded><![CDATA[<p>sad to see bcachefs go</p>
]]></content:encoded>
            <dc:creator>sexy_peach</dc:creator>
        </item>
        <item>
            <title><![CDATA[Bayrou : le mépris, la nullité et la perversion - InternetDev-Anti-Communicant🍉]]></title>
            <link>https://peertube2.cpy.re/w/tFqBprygFia1ZJBqsXvLZh;threadId=181946</link>
            <guid>https://peertube2.cpy.re/w/tFqBprygFia1ZJBqsXvLZh;threadId=181946</guid>
            <pubDate>Sat, 06 Sep 2025 17:53:44 GMT</pubDate>
            <content:encoded><![CDATA[<p><span><a href="https://video.blast-info.fr/accounts/blast" class="u-url mention" target="_blank" rel="noopener noreferrer">@<span>blast</span></a></span> </p><p>Ce type a toujours été un faux derche de première.</p><p>Jamais je n'ai cru, une seconde, qu'il était même mentalement équilibré.</p><p>Ce connard sait très bien comment Sarkozy et Hollande se sont entendu, et la seule fois où a fait mine de les dénoncer il l'a fait lâchement en glissant une allusion.</p><p>Son débat pour 2012 avec Valls où il léchait le cul de Valls était édifiant.</p>]]></content:encoded>
            <dc:creator>InternetDev-Anti-Communicant🍉</dc:creator>
        </item>
    </channel>
</rss>

Common videos feeds

path Parameters
format
required
string
Enum: "xml" "rss" "rss2" "atom" "atom1" "json" "json1"

format expected (we focus on making rss the most feature-rich ; it serves Media RSS)

query Parameters
accountId
string

limit listing to a specific account

accountName
string

limit listing to a specific account

hasHLSFiles
boolean

PeerTube >= 4.0 Display only videos that have HLS files

hasWebVideoFiles
boolean

PeerTube >= 6.0 Display only videos that have Web Video files

include
integer
Enum: 0 1 2 4 8 16 32

Only administrators and moderators can use this parameter

Include additional videos in results (can be combined using bitwise or operator)

  • 0 NONE
  • 1 NOT_PUBLISHED_STATE
  • 2 BLACKLISTED
  • 4 BLOCKED_OWNER
  • 8 FILES
  • 16 CAPTIONS
  • 32 VIDEO SOURCE
isLocal
boolean

PeerTube >= 4.0 Display only local or remote objects

nsfw
string
Enum: "true" "false"

whether to include nsfw videos, if any

privacyOneOf
integer (VideoPrivacySet)
Enum: 1 2 3 4 5

PeerTube >= 4.0 Display only videos in this specific privacy/privacies

sort
string
Example: sort=-createdAt

Sort column

videoChannelId
string

limit listing to a specific video channel

videoChannelName
string

limit listing to a specific video channel

Responses

Response samples

Content type
<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:podcast="https://podcastindex.org/namespace/1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>PeerTube Nightly</title>
        <link>https://peertube2.cpy.re</link>
        <description>This instance is a test instance of the PeerTube project. It is updated to the latest commit in the develop branch every business day, 8pm CET.</description>
        <lastBuildDate>Fri, 12 Sep 2025 08:49:52 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>PeerTube - https://peertube2.cpy.re</generator>
        <image>
            <title>PeerTube Nightly</title>
            <url>https://peertube2.cpy.re/lazy-static/avatars/177f70c4-ddef-4bb6-bc96-b00d5e2a0e05.png</url>
            <link>https://peertube2.cpy.re</link>
        </image>
        <copyright>All rights reserved, unless otherwise specified in the terms specified at https://peertube2.cpy.re/about and potential licenses granted by each content's rightholder.</copyright>
        <atom:link href="https://peertube2.cpy.re/feeds/videos.xml?scope=local" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[10 septembre : pourquoi ce mouvement fait trembler le pouvoir]]></title>
            <link>https://peertube2.cpy.re/w/x34ETVswTYbccDKZfb5uGc</link>
            <guid>https://peertube2.cpy.re/w/x34ETVswTYbccDKZfb5uGc</guid>
            <pubDate>Thu, 11 Sep 2025 18:26:28 GMT</pubDate>
            <description><![CDATA[Soutenez Blast, nouveau média indépendant : https://www.blast-info.fr/soutenir Le 10 septembre 2025 était une journée particulièrement attendue par certains, redoutée par d’autres. « Flop » ou au contraire « réussite », on a entendu beaucoup d...]]></description>
            <content:encoded><![CDATA[<p>Soutenez Blast, nouveau média indépendant : <a href="https://www.blast-info.fr/soutenir" target="_blank" rel="noopener noreferrer">https://www.blast-info.fr/soutenir</a></p>
<p>Le 10 septembre 2025 était une journée particulièrement attendue par certains, redoutée par d’autres.<br />
« Flop » ou au contraire « réussite », on a entendu beaucoup d’interprétations des événements qui se sont déroulés ce mercredi.</p>
<p>Tandis que François Bayrou quittait Matignon et que Sébastien Lecornu prononçait son premier discours en tant que Premier ministre, le mouvement « Bloquons tout » prenait de l’ampleur. Dès l’aube, des centaines d’actions ont éclaté partout sur le territoire, du périphérique parisien aux lycées en passant par les ronds-points, réunissant plusieurs centaines de milliers de personnes. 175 000 selon le ministère de l’intérieur, 250 000 selon la CGT.</p>
<p>La mobilisation, tantôt festive, tantôt tendue, a été marquée par des scènes de blocages créatifs, mais aussi par une répression policière et des affrontements parfois violents. Dans les médias et dans la classe politique, les interprétations se sont multipliées, oscillant entre accusations « d’ultra-gauche », dénonciations de casse et témoignages d’une colère populaire authentique. Alors que s’est il passé exactement, comment un mouvement né en dehors des cadres syndicaux et partisans s’est-il mobilisé au point de faire trembler le gouvernement ? Blast a suivi cette journée heure par heure, et on vous la raconte dans cette nouvelle émission.</p>
<p>Journaliste : Salomé Saqué<br />
Montage : Émilie Fortun<br />
Son : Baptiste Veilhan, Théo Duchesne<br />
Graphisme : Morgane Sabouret, Margaux Simon<br />
Production : Hicham Tragha<br />
Directeur du développement des collaborations extérieures : Mathias Enthoven<br />
Co-directrice de la rédaction : Soumaya Benaïssa<br />
Directeur de la publication : Denis Robert</p>
<p>Le site : <a href="https://www.blast-info.fr/" target="_blank" rel="noopener noreferrer">https://www.blast-info.fr/</a><br />
Facebook : <a href="https://www.facebook.com/blastofficiel" target="_blank" rel="noopener noreferrer">https://www.facebook.com/blastofficiel</a><br />
Twitter : <a href="https://twitter.com/blast_france" target="_blank" rel="noopener noreferrer">https://twitter.com/blast_france</a><br />
Instagram : <a href="https://www.instagram.com/blastofficiel/" target="_blank" rel="noopener noreferrer">https://www.instagram.com/blastofficiel/</a><br />
Mastodon : <a href="https://mamot.fr/web/@blast_info" target="_blank" rel="noopener noreferrer">https://mamot.fr/web/@blast_info</a><br />
Peertube : <a href="https://video.blast-info.fr/" target="_blank" rel="noopener noreferrer">https://video.blast-info.fr/</a><br />
Twitch : <a href="https://www.twitch.tv/blastinfo" target="_blank" rel="noopener noreferrer">https://www.twitch.tv/blastinfo</a><br />
Bluesky : <a href="https://bsky.app/profile/blast-info.fr" target="_blank" rel="noopener noreferrer">https://bsky.app/profile/blast-info.fr</a></p>
<p>#10septembre<br />
#France<br />
#Macron</p>
]]></content:encoded>
            <dc:creator>blast, le souffle de l’info</dc:creator>
            <enclosure length="471046723" type="video/mp4" url="https://peertube2.cpy.re/download/videos/generate/fb550c4f-ba62-49a3-9a3b-059d79e439cb?videoFileIds=5498600&amp;videoFileIds=5498604"/>
            <media:community>
                <media:statistics views="136"/>
            </media:community>
            <media:embed url="https://peertube2.cpy.re/videos/embed/x34ETVswTYbccDKZfb5uGc"/>
            <media:player url="https://peertube2.cpy.re/w/x34ETVswTYbccDKZfb5uGc"/>
            <media:group>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/b2c4c2de-5d15-419c-9529-00d87b7eda18-1080-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/25cf727c-8d70-4da3-845b-160f08129bd4-720-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/b2d298ad-3af6-4aac-8e3d-25435a50418b-480-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/8224885f-87c1-4270-b275-999901795211-240-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/ab3be357-26a1-40a2-9f72-50707f548d6b-0-hls.torrent" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="1080" fileSize="443180435" url="https://cdn.octos3.fr/peertube-blast/streaming-playlists/hls/fb550c4f-ba62-49a3-9a3b-059d79e439cb/aa1b45ef-fb0d-4fa6-9a6a-8b28fe129dae-1080-fragmented.mp4" framerate="25" duration="1709" isDefault="true"/>
                <media:content type="video/mp4" medium="video" height="720" fileSize="240313046" url="https://cdn.octos3.fr/peertube-blast/streaming-playlists/hls/fb550c4f-ba62-49a3-9a3b-059d79e439cb/8bc3e5a1-520b-4f6b-8ac3-823c98e8b591-720-fragmented.mp4" framerate="25" duration="1709" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="480" fileSize="127841218" url="https://cdn.octos3.fr/peertube-blast/streaming-playlists/hls/fb550c4f-ba62-49a3-9a3b-059d79e439cb/c2158daf-786f-445d-b1a1-3490c8d2797c-480-fragmented.mp4" framerate="25" duration="1709" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="240" fileSize="42830503" url="https://cdn.octos3.fr/peertube-blast/streaming-playlists/hls/fb550c4f-ba62-49a3-9a3b-059d79e439cb/365e13b3-8594-45e2-9c27-904bde1f0d4f-240-fragmented.mp4" framerate="25" duration="1709" isDefault="false"/>
                <media:content type="audio/mp4" medium="video" height="0" fileSize="27866288" url="https://cdn.octos3.fr/peertube-blast/streaming-playlists/hls/fb550c4f-ba62-49a3-9a3b-059d79e439cb/6c83556d-4287-4c59-8c9a-bdc54fc03584-0-fragmented.mp4" framerate="0" duration="1709" isDefault="false"/>
            </media:group>
            <media:thumbnail url="https://peertube2.cpy.re/lazy-static/previews/4c68194a-a828-45ab-b3bc-b44ff0e4c6c2.jpg"/>
            <media:thumbnail url="https://peertube2.cpy.re/lazy-static/thumbnails/825fd359-5fb5-4eed-b715-dc106b2d808f.jpg"/>
            <media:rating>nonadult</media:rating>
            <media:title type="plain">10 septembre : pourquoi ce mouvement fait trembler le pouvoir</media:title>
            <media:description type="plain">Soutenez Blast, nouveau média indépendant : https://www.blast-info.fr/soutenir Le 10 septembre 2025 était une journée particulièrement attendue par certains, redoutée par d’autres. « Flop » ou au contraire « réussite », on a entendu beaucoup d...</media:description>
        </item>
        <item>
            <title><![CDATA[20250911_GET_EP07_FLIC_LAUSANNE_V4]]></title>
            <link>https://peertube2.cpy.re/w/bfAbRyTxzGhUxnJT8nvC3Y</link>
            <guid>https://peertube2.cpy.re/w/bfAbRyTxzGhUxnJT8nvC3Y</guid>
            <pubDate>Thu, 11 Sep 2025 18:13:51 GMT</pubDate>
            <dc:creator>blast, le souffle de l’info</dc:creator>
            <enclosure length="306408417" type="video/mp4" url="https://peertube2.cpy.re/download/videos/generate/5304de32-8996-4400-9890-206a397b9cb4?videoFileIds=5498593&amp;videoFileIds=5498597"/>
            <media:community>
                <media:statistics views="97"/>
            </media:community>
            <media:embed url="https://peertube2.cpy.re/videos/embed/bfAbRyTxzGhUxnJT8nvC3Y"/>
            <media:player url="https://peertube2.cpy.re/w/bfAbRyTxzGhUxnJT8nvC3Y"/>
            <media:group>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/aabb71fa-cd05-4d43-8f64-6cdb077ed392-1080-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/2b6fb7fb-dde2-4349-906f-7cd5b12850b8-720-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/4a2ce5e3-aedd-44ce-b864-82daacab81d0-480-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/0b022342-4e5b-423c-acb9-5dc298b7d807-240-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/5b86fb79-3275-40b3-9daf-39d32b7d2ed6-0-hls.torrent" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="1080" fileSize="293212756" url="https://cdn.octos3.fr/peertube-blast/streaming-playlists/hls/5304de32-8996-4400-9890-206a397b9cb4/878d20e1-b150-4458-ab10-1d6cd6622901-1080-fragmented.mp4" framerate="25" duration="806" isDefault="true"/>
                <media:content type="video/mp4" medium="video" height="720" fileSize="142314393" url="https://cdn.octos3.fr/peertube-blast/streaming-playlists/hls/5304de32-8996-4400-9890-206a397b9cb4/421d4ec4-272c-4159-add3-fd2cdf701f7d-720-fragmented.mp4" framerate="25" duration="806" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="480" fileSize="71282219" url="https://cdn.octos3.fr/peertube-blast/streaming-playlists/hls/5304de32-8996-4400-9890-206a397b9cb4/725a8003-7c58-42d6-9dfe-7d9e5edbc928-480-fragmented.mp4" framerate="25" duration="806" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="240" fileSize="22763378" url="https://cdn.octos3.fr/peertube-blast/streaming-playlists/hls/5304de32-8996-4400-9890-206a397b9cb4/b5cb1c97-e005-4998-989d-2feb7e59dfd4-240-fragmented.mp4" framerate="25" duration="806" isDefault="false"/>
                <media:content type="audio/mp4" medium="video" height="0" fileSize="13195661" url="https://cdn.octos3.fr/peertube-blast/streaming-playlists/hls/5304de32-8996-4400-9890-206a397b9cb4/6009d271-1ae8-452d-9c5d-b37f8351d852-0-fragmented.mp4" framerate="0" duration="806" isDefault="false"/>
            </media:group>
            <media:thumbnail url="https://peertube2.cpy.re/lazy-static/previews/273d1d63-cc11-4e33-8ebb-8a990ac2be2f.jpg"/>
            <media:thumbnail url="https://peertube2.cpy.re/lazy-static/thumbnails/52512cb4-3cbc-4847-8012-47252363a888.jpg"/>
            <media:rating>nonadult</media:rating>
            <media:title type="plain">20250911_GET_EP07_FLIC_LAUSANNE_V4</media:title>
        </item>
        <item>
            <title><![CDATA[✧ pσѕт-sυммєя 𝐸тнєяєαℓ 𝑉ι∂єσ 𝑀ιχ ✧ avec un 𝐛𝐨𝐧 𝑜ιηʝ à la ℳαιѕση ○°(≧◡≦)]]></title>
            <link>https://peertube2.cpy.re/w/rKVPh5fg225NntTruKGHDp</link>
            <guid>https://peertube2.cpy.re/w/rKVPh5fg225NntTruKGHDp</guid>
            <pubDate>Wed, 10 Sep 2025 19:19:12 GMT</pubDate>
            <description><![CDATA[Warning: Contains strong flashing/stroboscopic visual effects and images of bad taste or unusual mixed-media content.]]></description>
            <content:encoded><![CDATA[<p>Warning: Contains strong flashing/stroboscopic visual effects and images of bad taste or unusual mixed-media content.</p>
]]></content:encoded>
            <dc:creator>STVP!D</dc:creator>
            <enclosure length="1445673591" type="video/mp4" url="https://peertube2.cpy.re/download/videos/generate/d0969d04-ffcf-493a-bfe2-5b6c0b0a616d?videoFileIds=5498448"/>
            <media:community>
                <media:statistics views="16"/>
            </media:community>
            <media:embed url="https://peertube2.cpy.re/videos/embed/rKVPh5fg225NntTruKGHDp"/>
            <media:player url="https://peertube2.cpy.re/w/rKVPh5fg225NntTruKGHDp"/>
            <media:group>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/383287d0-481a-413d-8b9c-13f36b7b765b-1080-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/b214e615-59c8-4c26-acc0-bb4fc9da2a58-720-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/6d90d532-0501-4796-96a0-f6203b548359-480-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/1cb0d265-d532-4a38-bab1-4a9e821f0bc4-240-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/4ab6ff45-ae6e-4c12-ae7e-82a9b104d18f-0-hls.torrent" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="1080" fileSize="1445673591" url="https://www.yiny.org/static/streaming-playlists/hls/d0969d04-ffcf-493a-bfe2-5b6c0b0a616d/42710f22-89c3-474f-a0b4-81797c1619fe-1080-fragmented.mp4" framerate="25" duration="3822" isDefault="true"/>
                <media:content type="video/mp4" medium="video" height="720" fileSize="759685028" url="https://www.yiny.org/static/streaming-playlists/hls/d0969d04-ffcf-493a-bfe2-5b6c0b0a616d/3a56eb16-2828-4065-ba85-205421139b44-720-fragmented.mp4" framerate="25" duration="3822" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="480" fileSize="429440190" url="https://www.yiny.org/static/streaming-playlists/hls/d0969d04-ffcf-493a-bfe2-5b6c0b0a616d/d666bac5-fbfb-48a3-9e38-f9e8a91b4bc5-480-fragmented.mp4" framerate="25" duration="3822" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="240" fileSize="197830125" url="https://www.yiny.org/static/streaming-playlists/hls/d0969d04-ffcf-493a-bfe2-5b6c0b0a616d/5758fc70-3158-47b3-b6db-f93e8c6ef009-240-fragmented.mp4" framerate="25" duration="3822" isDefault="false"/>
                <media:content type="audio/mp4" medium="video" height="0" fileSize="62845367" url="https://www.yiny.org/static/streaming-playlists/hls/d0969d04-ffcf-493a-bfe2-5b6c0b0a616d/6586b8b0-788e-41f2-8f2d-22f1e08140ea-0-fragmented.mp4" framerate="0" duration="3822" isDefault="false"/>
            </media:group>
            <media:thumbnail url="https://peertube2.cpy.re/lazy-static/previews/3a1c865f-8440-444e-a2c3-01326db42065.jpg"/>
            <media:thumbnail url="https://peertube2.cpy.re/lazy-static/thumbnails/15703ceb-44e0-4393-946b-77d388346b37.jpg"/>
            <media:rating>nonadult</media:rating>
            <media:title type="plain">✧ pσѕт-sυммєя 𝐸тнєяєαℓ 𝑉ι∂єσ 𝑀ιχ ✧ avec un 𝐛𝐨𝐧 𝑜ιηʝ à la ℳαιѕση ○°(≧◡≦)</media:title>
            <media:description type="plain">Warning: Contains strong flashing/stroboscopic visual effects and images of bad taste or unusual mixed-media content.</media:description>
        </item>
        <item>
            <title><![CDATA[10 septembre : une mobilisation sous haute répression]]></title>
            <link>https://peertube2.cpy.re/w/fJhFwPamAiD1jYUVGSSf3U</link>
            <guid>https://peertube2.cpy.re/w/fJhFwPamAiD1jYUVGSSf3U</guid>
            <pubDate>Wed, 10 Sep 2025 19:00:30 GMT</pubDate>
            <description><![CDATA[Soutenez Blast, nouveau média indépendant : https://www.blast-info.fr/soutenir Le 10 septembre 2025, des rassemblements et blocages ont eu lieu dès l’aube dans plusieurs villes françaises, avec de fortes mobilisations en Île-de-France. Des affr...]]></description>
            <content:encoded><![CDATA[<p>Soutenez Blast, nouveau média indépendant : <a href="https://www.blast-info.fr/soutenir" target="_blank" rel="noopener noreferrer">https://www.blast-info.fr/soutenir</a></p>
<p>Le 10 septembre 2025, des rassemblements et blocages ont eu lieu dès l’aube dans plusieurs villes françaises, avec de fortes mobilisations en Île-de-France. Des affrontements avec les forces de l’ordre ont éclaté près du lycée Hélène Boucher, à la gare du Nord et surtout à Châtelet-les-Halles, épicentre de la journée. Malgré la mobilisation de 80 000 policiers et gendarmes, les cortèges ont exprimé un mot d’ordre commun : s’unir face à la politique austère du gouvernement. Beaucoup voient dans cette journée le point de départ d’un mouvement appelé à durer.</p>
<p>Journaliste : Hamza Chennaf<br />
Images : Jose Rexach, Thibault Izoret, Clara Menais<br />
Montage : Thibault Lauras<br />
Son : Baptiste Veilhan, Théo Duchesne<br />
Graphisme : Morgane Sabouret, Margaux Simon<br />
Production : Hicham Tragha<br />
Directeur du développement des collaborations extérieures : Mathias Enthoven<br />
Co-directrice de la rédaction : Soumaya Benaïssa<br />
Directeur de la publication : Denis Robert</p>
<p>Le site : <a href="https://www.blast-info.fr/" target="_blank" rel="noopener noreferrer">https://www.blast-info.fr/</a><br />
Facebook : <a href="https://www.facebook.com/blastofficiel" target="_blank" rel="noopener noreferrer">https://www.facebook.com/blastofficiel</a><br />
Twitter : <a href="https://twitter.com/blast_france" target="_blank" rel="noopener noreferrer">https://twitter.com/blast_france</a><br />
Instagram : <a href="https://www.instagram.com/blastofficiel/" target="_blank" rel="noopener noreferrer">https://www.instagram.com/blastofficiel/</a><br />
Mastodon : <a href="https://mamot.fr/web/@blast_info" target="_blank" rel="noopener noreferrer">https://mamot.fr/web/@blast_info</a><br />
Peertube : <a href="https://video.blast-info.fr/" target="_blank" rel="noopener noreferrer">https://video.blast-info.fr/</a><br />
Twitch : <a href="https://www.twitch.tv/blastinfo" target="_blank" rel="noopener noreferrer">https://www.twitch.tv/blastinfo</a><br />
Bluesky : <a href="https://bsky.app/profile/blast-info.fr" target="_blank" rel="noopener noreferrer">https://bsky.app/profile/blast-info.fr</a></p>
<p>#10Septembre<br />
#Macron<br />
#OnBloqueTout</p>
]]></content:encoded>
            <dc:creator>blast, le souffle de l’info</dc:creator>
            <enclosure length="220291544" type="video/mp4" url="https://peertube2.cpy.re/download/videos/generate/774775c0-4010-4762-ad05-17ec4ee6b3d0?videoFileIds=5498442&amp;videoFileIds=5498446"/>
            <media:community>
                <media:statistics views="1138"/>
            </media:community>
            <media:embed url="https://peertube2.cpy.re/videos/embed/fJhFwPamAiD1jYUVGSSf3U"/>
            <media:player url="https://peertube2.cpy.re/w/fJhFwPamAiD1jYUVGSSf3U"/>
            <media:group>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/823f025c-13ba-44ff-9ea9-c647255a77cf-1080-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/6a9f3d3d-0922-4df7-bab7-0e4c02a889b3-720-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/15e27198-c02a-4c64-976a-863af1ef0fdc-480-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/cdee8928-b25a-4415-bf30-786fe1ef8bac-240-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/abe6375a-bdb0-4fa5-afce-79335419aa4c-0-hls.torrent" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="1080" fileSize="212909214" url="https://cdn.octos3.fr/peertube-blast/streaming-playlists/hls/774775c0-4010-4762-ad05-17ec4ee6b3d0/6baaaf72-9e0f-42ff-8dc7-13cca311e4c1-1080-fragmented.mp4" framerate="25" duration="451" isDefault="true"/>
                <media:content type="video/mp4" medium="video" height="720" fileSize="110441054" url="https://cdn.octos3.fr/peertube-blast/streaming-playlists/hls/774775c0-4010-4762-ad05-17ec4ee6b3d0/8cdad619-7677-4b42-acbe-8081c11c98ac-720-fragmented.mp4" framerate="25" duration="451" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="480" fileSize="57537703" url="https://cdn.octos3.fr/peertube-blast/streaming-playlists/hls/774775c0-4010-4762-ad05-17ec4ee6b3d0/70d1f613-57da-4ce3-93fb-ea3818703951-480-fragmented.mp4" framerate="25" duration="451" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="240" fileSize="20674696" url="https://cdn.octos3.fr/peertube-blast/streaming-playlists/hls/774775c0-4010-4762-ad05-17ec4ee6b3d0/eacdad46-ce81-41f6-8d97-094f8525055a-240-fragmented.mp4" framerate="25" duration="451" isDefault="false"/>
                <media:content type="audio/mp4" medium="video" height="0" fileSize="7382330" url="https://cdn.octos3.fr/peertube-blast/streaming-playlists/hls/774775c0-4010-4762-ad05-17ec4ee6b3d0/09b347d3-6bf8-4945-9836-4a582e6dd5d6-0-fragmented.mp4" framerate="0" duration="451" isDefault="false"/>
            </media:group>
            <media:thumbnail url="https://peertube2.cpy.re/lazy-static/previews/18284612-a30a-459c-aae8-0741b0cde12e.jpg"/>
            <media:thumbnail url="https://peertube2.cpy.re/lazy-static/thumbnails/fe046f46-ac12-46c1-a282-79374dd88fbd.jpg"/>
            <media:rating>nonadult</media:rating>
            <media:title type="plain">10 septembre : une mobilisation sous haute répression</media:title>
            <media:description type="plain">Soutenez Blast, nouveau média indépendant : https://www.blast-info.fr/soutenir Le 10 septembre 2025, des rassemblements et blocages ont eu lieu dès l’aube dans plusieurs villes françaises, avec de fortes mobilisations en Île-de-France. Des affr...</media:description>
        </item>
        <item>
            <title><![CDATA[Power up of a decsystem10's bays 1 & 2 of the CPU]]></title>
            <link>https://peertube2.cpy.re/w/mZUSMmT9hGqWXXVWcSYptb</link>
            <guid>https://peertube2.cpy.re/w/mZUSMmT9hGqWXXVWcSYptb</guid>
            <pubDate>Wed, 10 Sep 2025 16:19:45 GMT</pubDate>
            <description><![CDATA[we’re restoring a 1971 decsystem10 (KI10) and powered up bays 1 &amp; 2 of the CPU today.  Check out our blog for stories along the journey and find out how to support our efforts and visit! https://icm.museum]]></description>
            <content:encoded><![CDATA[<p>we’re restoring a 1971 decsystem10 (KI10) and powered up bays 1 &amp; 2 of the CPU today.  Check out our blog for stories along the journey and find out how to support our efforts and visit!</p>
<p><a href="https://icm.museum" target="_blank" rel="noopener noreferrer">https://icm.museum</a></p>
]]></content:encoded>
            <dc:creator>random</dc:creator>
            <category>Science &amp; Technology</category>
            <enclosure length="6289723" type="video/mp4" url="https://peertube2.cpy.re/download/videos/generate/aa0cc0f9-7fc5-4f88-832f-53dbd1478b24?videoFileIds=5498402"/>
            <media:community>
                <media:statistics views="141"/>
            </media:community>
            <media:embed url="https://peertube2.cpy.re/videos/embed/mZUSMmT9hGqWXXVWcSYptb"/>
            <media:player url="https://peertube2.cpy.re/w/mZUSMmT9hGqWXXVWcSYptb"/>
            <media:group>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/fb12d83f-277f-4752-bd7d-efec24bca263-1080.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/f3976325-de52-4274-aa65-ca4e76b6ea1a-720.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/31b66c13-58a2-4c83-ba91-95f03fb9661e-480.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/3f8c252b-ea44-4d9d-b4c2-485dd96c1413-360.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/f3dc510e-ec35-4f20-85d0-211282df4f5d-240.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/a5d02e24-b38c-49a5-b8a5-e1c30d039bf5-0.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/b4993edb-3c29-4d6c-986a-e854a047ff76-1080-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/4d5dd486-d766-40e5-ba98-59cc37bab8bf-720-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/9828ced7-c398-4094-a2a0-99c3fda634a2-480-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/014ec65a-d99e-4560-a577-e19e67215d20-360-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/e5f91649-fa00-46ba-9729-c14138c6650e-240-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/83327f35-e9e0-4d30-b913-011cef0778d0-0-hls.torrent" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="1080" fileSize="6289723" url="https://toobnix.org/static/web-videos/5f8fbdf4-69fe-4eee-bdb2-1e88b85f9615-1080.mp4" framerate="30" duration="38" isDefault="true"/>
                <media:content type="video/mp4" medium="video" height="720" fileSize="3206254" url="https://toobnix.org/static/web-videos/bba05648-46e3-47b5-8a3a-dbf226e7021b-720.mp4" framerate="30" duration="38" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="480" fileSize="2024838" url="https://toobnix.org/static/web-videos/7715c8d1-9c0c-421a-b231-bb9d12e61c07-480.mp4" framerate="30" duration="38" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="360" fileSize="1541591" url="https://toobnix.org/static/web-videos/73dddd99-daa4-4a52-abf4-296b809889b3-360.mp4" framerate="30" duration="38" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="240" fileSize="1094834" url="https://toobnix.org/static/web-videos/a3ece0e8-eb03-450f-ad13-ec9bbc1229db-240.mp4" framerate="30" duration="38" isDefault="false"/>
                <media:content type="audio/mp4" medium="video" height="0" fileSize="625206" url="https://toobnix.org/static/web-videos/5c6cfd05-1bc3-4752-b4ff-d570a6fc9d38-0.mp4" framerate="0" duration="38" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="1080" fileSize="6276269" url="https://toobnix.org/static/streaming-playlists/hls/aa0cc0f9-7fc5-4f88-832f-53dbd1478b24/0f1a7b3c-5245-4bfa-a4c7-0dc246b9b91c-1080-fragmented.mp4" framerate="30" duration="38" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="720" fileSize="3192584" url="https://toobnix.org/static/streaming-playlists/hls/aa0cc0f9-7fc5-4f88-832f-53dbd1478b24/1db79543-823a-4147-bef1-90cbc2e3ddc7-720-fragmented.mp4" framerate="30" duration="38" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="480" fileSize="2011088" url="https://toobnix.org/static/streaming-playlists/hls/aa0cc0f9-7fc5-4f88-832f-53dbd1478b24/b7958552-c535-433a-9474-cde4be4aed35-480-fragmented.mp4" framerate="30" duration="38" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="360" fileSize="1527697" url="https://toobnix.org/static/streaming-playlists/hls/aa0cc0f9-7fc5-4f88-832f-53dbd1478b24/dfc11bfc-5e3f-4b39-b609-185aece1cbc4-360-fragmented.mp4" framerate="30" duration="38" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="240" fileSize="1080536" url="https://toobnix.org/static/streaming-playlists/hls/aa0cc0f9-7fc5-4f88-832f-53dbd1478b24/191dd86e-08d6-4c9f-ba48-b814971109f9-240-fragmented.mp4" framerate="30" duration="38" isDefault="false"/>
                <media:content type="audio/mp4" medium="video" height="0" fileSize="627172" url="https://toobnix.org/static/streaming-playlists/hls/aa0cc0f9-7fc5-4f88-832f-53dbd1478b24/d08b4a13-3bd1-4d33-9088-0d074bc0cfe0-0-fragmented.mp4" framerate="0" duration="38" isDefault="false"/>
            </media:group>
            <media:thumbnail url="https://peertube2.cpy.re/lazy-static/previews/b3191423-b494-40eb-9ac5-76de0116f46d.jpg"/>
            <media:thumbnail url="https://peertube2.cpy.re/lazy-static/thumbnails/9ab2c42c-13ef-48c3-9400-e7072f8581d0.jpg"/>
            <media:rating>nonadult</media:rating>
            <media:title type="plain">Power up of a decsystem10's bays 1 &amp; 2 of the CPU</media:title>
            <media:description type="plain">we’re restoring a 1971 decsystem10 (KI10) and powered up bays 1 &amp; 2 of the CPU today.  Check out our blog for stories along the journey and find out how to support our efforts and visit! https://icm.museum</media:description>
        </item>
        <item>
            <title><![CDATA[Die Toten Hosen - Halbstark + You'll Never Walk Alone - Paris - 09/09/2025]]></title>
            <link>https://peertube2.cpy.re/w/4WK5GrzS71FuShECudmJnp</link>
            <guid>https://peertube2.cpy.re/w/4WK5GrzS71FuShECudmJnp</guid>
            <pubDate>Wed, 10 Sep 2025 10:13:34 GMT</pubDate>
            <description><![CDATA[Die Toten Hosen - Halbstark (The Yankees) + You'll Never Walk Alone (Rodgers &amp; Hammerstein) - L'Élysée Montmartre, Paris - 9 septembre 2025]]></description>
            <content:encoded><![CDATA[<p>Die Toten Hosen - Halbstark (The Yankees) + You'll Never Walk Alone (Rodgers &amp; Hammerstein) - L'Élysée Montmartre, Paris - 9 septembre 2025</p>
]]></content:encoded>
            <dc:creator>flo200</dc:creator>
            <category>Music</category>
            <enclosure length="233483523" type="video/mp4" url="https://peertube2.cpy.re/download/videos/generate/1ff02110-bd4d-409c-81ac-8261040f0e21?videoFileIds=5498354"/>
            <media:community>
                <media:statistics views="13"/>
            </media:community>
            <media:embed url="https://peertube2.cpy.re/videos/embed/4WK5GrzS71FuShECudmJnp"/>
            <media:player url="https://peertube2.cpy.re/w/4WK5GrzS71FuShECudmJnp"/>
            <media:group>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/1c0fc58e-7be8-4446-8f25-6e17899e7ee9-1080-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/d3965b34-8663-4523-bd55-f5b41cfe55c7-720-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/6958e4ff-cbde-4819-8b29-8025efe9e2cc-480-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/51b0cad7-b47c-4a71-b6ca-0ebecfcf7b18-240-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/52328ca7-6d1f-4c9c-8ff5-4ecc60ca65cc-0-hls.torrent" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="1080" fileSize="233483523" url="https://www.yiny.org/static/streaming-playlists/hls/1ff02110-bd4d-409c-81ac-8261040f0e21/7c3f8752-1314-465a-944d-a7dcbecf8272-1080-fragmented.mp4" framerate="30" duration="376" isDefault="true"/>
                <media:content type="video/mp4" medium="video" height="720" fileSize="123542168" url="https://www.yiny.org/static/streaming-playlists/hls/1ff02110-bd4d-409c-81ac-8261040f0e21/49b7a49d-154f-4f04-9942-9aff0172b8f9-720-fragmented.mp4" framerate="30" duration="376" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="480" fileSize="69171408" url="https://www.yiny.org/static/streaming-playlists/hls/1ff02110-bd4d-409c-81ac-8261040f0e21/1e7a693d-b62d-45cf-9130-dcf9ff263ba1-480-fragmented.mp4" framerate="30" duration="376" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="240" fileSize="29298564" url="https://www.yiny.org/static/streaming-playlists/hls/1ff02110-bd4d-409c-81ac-8261040f0e21/ff8dfd62-7232-4262-b7c0-111a149e4fd7-240-fragmented.mp4" framerate="30" duration="376" isDefault="false"/>
                <media:content type="audio/mp4" medium="video" height="0" fileSize="6138429" url="https://www.yiny.org/static/streaming-playlists/hls/1ff02110-bd4d-409c-81ac-8261040f0e21/c06cf61b-8b17-4710-9832-943433275361-0-fragmented.mp4" framerate="0" duration="376" isDefault="false"/>
            </media:group>
            <media:thumbnail url="https://peertube2.cpy.re/lazy-static/previews/91456558-6888-447e-bc19-2963cb1259e7.jpg"/>
            <media:thumbnail url="https://peertube2.cpy.re/lazy-static/thumbnails/07f3430f-c1e9-4b75-a00b-346fd1f860bb.jpg"/>
            <media:rating>nonadult</media:rating>
            <media:title type="plain">Die Toten Hosen - Halbstark + You'll Never Walk Alone - Paris - 09/09/2025</media:title>
            <media:description type="plain">Die Toten Hosen - Halbstark (The Yankees) + You'll Never Walk Alone (Rodgers &amp; Hammerstein) - L'Élysée Montmartre, Paris - 9 septembre 2025</media:description>
        </item>
        <item>
            <title><![CDATA[Démission de Bayrou : une faillite inédite, un grand saut dans l’inconnu]]></title>
            <link>https://peertube2.cpy.re/w/gBntZoJkp1u673QjjNf2kB</link>
            <guid>https://peertube2.cpy.re/w/gBntZoJkp1u673QjjNf2kB</guid>
            <pubDate>Tue, 09 Sep 2025 16:05:29 GMT</pubDate>
            <description><![CDATA[Soutenez Blast, nouveau média indépendant : https://www.blast-info.fr/soutenir C’est un coup de tonnerre politique. Le 8 septembre 2025, pour la seconde fois en 9 mois, le gouvernement nommé par Emmanuel Macron a perdu la confiance de l’Assembl...]]></description>
            <content:encoded><![CDATA[<p>Soutenez Blast, nouveau média indépendant : <a href="https://www.blast-info.fr/soutenir" target="_blank" rel="noopener noreferrer">https://www.blast-info.fr/soutenir</a></p>
<p>C’est un coup de tonnerre politique. Le 8 septembre 2025, pour la seconde fois en 9 mois, le gouvernement nommé par Emmanuel Macron a perdu la confiance de l’Assemblée nationale. Les résultats sont sans appel et le président de la République a rapidement réagi : il a annoncé qu’il nommerait quelqu’un dans les tout prochains jours. La séquence politique est une fois de plus difficile à comprendre, depuis qu’Emmanuel Macron a dissous l’Assemblée nationale, il y a plus d’un an. L’incertitude politique et institutionnelle a rarement été aussi importante ! Alors que s’est-il passé exactement ce 8 septembre, qu’est-ce que ça veut dire pour notre pays, et surtout, qu’est-ce qui nous attend dans les prochaines semaines ? Aujourd’hui on vous propose de comprendre la situation politique de la France, dans cette émission spéciale pour Blast !</p>
<p>Une vidéo de Salomé Saqué, Camille Chastrusse et Victor-Ulysse Sultra, Doctorant en droit public<br />
Réalisation et montage : Guillaume Cage<br />
Son : Baptiste Veilhan, Théo Duchesne<br />
Graphisme : Morgane Sabouret, Margaux Simon<br />
Production : Hicham Tragha<br />
Directeur du développement des collaborations extérieures : Mathias Enthoven<br />
Co-directrice de la rédaction : Soumaya Benaïssa<br />
Directeur de la publication : Denis Robert</p>
<p>Le site : <a href="https://www.blast-info.fr/" target="_blank" rel="noopener noreferrer">https://www.blast-info.fr/</a><br />
Facebook : <a href="https://www.facebook.com/blastofficiel" target="_blank" rel="noopener noreferrer">https://www.facebook.com/blastofficiel</a><br />
Twitter : <a href="https://twitter.com/blast_france" target="_blank" rel="noopener noreferrer">https://twitter.com/blast_france</a><br />
Instagram : <a href="https://www.instagram.com/blastofficiel/" target="_blank" rel="noopener noreferrer">https://www.instagram.com/blastofficiel/</a><br />
Mastodon : <a href="https://mamot.fr/web/@blast_info" target="_blank" rel="noopener noreferrer">https://mamot.fr/web/@blast_info</a><br />
Peertube : <a href="https://video.blast-info.fr/" target="_blank" rel="noopener noreferrer">https://video.blast-info.fr/</a><br />
Twitch : <a href="https://www.twitch.tv/blastinfo" target="_blank" rel="noopener noreferrer">https://www.twitch.tv/blastinfo</a><br />
Bluesky : <a href="https://bsky.app/profile/blast-info.fr" target="_blank" rel="noopener noreferrer">https://bsky.app/profile/blast-info.fr</a></p>
<p>#Bayrou<br />
#Macron<br />
#AssembléeNationale</p>
]]></content:encoded>
            <dc:creator>blast, le souffle de l’info</dc:creator>
            <enclosure length="330791032" type="video/mp4" url="https://peertube2.cpy.re/download/videos/generate/7e6959d8-700e-4af4-ba01-1c2222251865?videoFileIds=5498234&amp;videoFileIds=5498238"/>
            <media:community>
                <media:statistics views="2407"/>
            </media:community>
            <media:embed url="https://peertube2.cpy.re/videos/embed/gBntZoJkp1u673QjjNf2kB"/>
            <media:player url="https://peertube2.cpy.re/w/gBntZoJkp1u673QjjNf2kB"/>
            <media:group>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/1fc04e53-a04f-4ed3-9997-e7807359ee97-1080-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/5ca22255-3b32-48ba-ba44-5d6263dba773-720-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/3ccd9c78-261e-4b93-849b-6100b1972e12-480-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/913dfbe3-11aa-4cdb-a282-ba75e4d2f30c-240-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/905c9c7d-30bf-4d92-8479-4fdac2a9160a-0-hls.torrent" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="1080" fileSize="308300844" url="https://cdn.octos3.fr/peertube-blast/streaming-playlists/hls/7e6959d8-700e-4af4-ba01-1c2222251865/7236c081-a884-4de6-a1ff-60868e820013-1080-fragmented.mp4" framerate="25" duration="1374" isDefault="true"/>
                <media:content type="video/mp4" medium="video" height="720" fileSize="149424525" url="https://cdn.octos3.fr/peertube-blast/streaming-playlists/hls/7e6959d8-700e-4af4-ba01-1c2222251865/fbc346e3-a489-46ac-b19a-0d771c6746c0-720-fragmented.mp4" framerate="25" duration="1374" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="480" fileSize="77710935" url="https://cdn.octos3.fr/peertube-blast/streaming-playlists/hls/7e6959d8-700e-4af4-ba01-1c2222251865/ab083c92-e299-4f6a-9717-06daf4d5c646-480-fragmented.mp4" framerate="25" duration="1374" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="240" fileSize="26999884" url="https://cdn.octos3.fr/peertube-blast/streaming-playlists/hls/7e6959d8-700e-4af4-ba01-1c2222251865/2871e3d3-c553-4b0f-849c-b654f0a06e81-240-fragmented.mp4" framerate="25" duration="1374" isDefault="false"/>
                <media:content type="audio/mp4" medium="video" height="0" fileSize="22490188" url="https://cdn.octos3.fr/peertube-blast/streaming-playlists/hls/7e6959d8-700e-4af4-ba01-1c2222251865/dfd588a5-c9a5-4e44-a825-578aa8d15a78-0-fragmented.mp4" framerate="0" duration="1374" isDefault="false"/>
            </media:group>
            <media:thumbnail url="https://peertube2.cpy.re/lazy-static/previews/1ee2a69a-5675-4a6b-99d6-6af9e5893588.jpg"/>
            <media:thumbnail url="https://peertube2.cpy.re/lazy-static/thumbnails/955ad586-50af-4491-8be3-3b01d4d7c97f.jpg"/>
            <media:rating>nonadult</media:rating>
            <media:title type="plain">Démission de Bayrou : une faillite inédite, un grand saut dans l’inconnu</media:title>
            <media:description type="plain">Soutenez Blast, nouveau média indépendant : https://www.blast-info.fr/soutenir C’est un coup de tonnerre politique. Le 8 septembre 2025, pour la seconde fois en 9 mois, le gouvernement nommé par Emmanuel Macron a perdu la confiance de l’Assembl...</media:description>
        </item>
        <item>
            <title><![CDATA[Poutine contrôle Trump? Théorie du complot mainstream ? Debunk de @leximperii]]></title>
            <link>https://peertube2.cpy.re/w/tgYb59kxEgkRN7ALQ5jrJW</link>
            <guid>https://peertube2.cpy.re/w/tgYb59kxEgkRN7ALQ5jrJW</guid>
            <pubDate>Tue, 09 Sep 2025 12:14:14 GMT</pubDate>
            <description><![CDATA[https://youtu.be/BoTODOoSVEA?si=12rehvghxhSf6hb9]]></description>
            <content:encoded><![CDATA[<p><a href="https://youtu.be/BoTODOoSVEA?si=12rehvghxhSf6hb9" target="_blank" rel="noopener noreferrer">https://youtu.be/BoTODOoSVEA?si=12rehvghxhSf6hb9</a></p>
]]></content:encoded>
            <dc:creator>a_gauche</dc:creator>
            <enclosure length="40483344" type="video/mp4" url="https://peertube2.cpy.re/download/videos/generate/dce184c3-8bf3-4e86-82c6-e7d46905e14e?videoFileIds=5498194"/>
            <media:community>
                <media:statistics views="7"/>
            </media:community>
            <media:embed url="https://peertube2.cpy.re/videos/embed/tgYb59kxEgkRN7ALQ5jrJW"/>
            <media:player url="https://peertube2.cpy.re/w/tgYb59kxEgkRN7ALQ5jrJW"/>
            <media:group>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/a054ade2-4532-42f3-970f-732a70296e47-1080-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/5c4b258f-55f9-4cf0-8d50-59a83c1c33cb-720-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/c4167e47-7f23-4c5d-9cb5-7845e92d9b9e-480-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/a131f68c-56d1-4a20-aace-3ed170d652a6-240-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/9a3bfa34-55b9-4f14-a494-c716f027bef2-0-hls.torrent" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="1080" fileSize="40483344" url="https://static.indymotion.fr/streaming-playlists/hls/dce184c3-8bf3-4e86-82c6-e7d46905e14e/eccbc92a-04aa-4f7b-99f9-51e2a050a3c8-1080-fragmented.mp4" framerate="25" duration="208" isDefault="true"/>
                <media:content type="video/mp4" medium="video" height="720" fileSize="24641591" url="https://static.indymotion.fr/streaming-playlists/hls/dce184c3-8bf3-4e86-82c6-e7d46905e14e/4ba130b9-314c-4a58-b919-117319a00f1c-720-fragmented.mp4" framerate="25" duration="208" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="480" fileSize="15000336" url="https://static.indymotion.fr/streaming-playlists/hls/dce184c3-8bf3-4e86-82c6-e7d46905e14e/f100b611-3d78-4120-b987-9797b6b224e3-480-fragmented.mp4" framerate="25" duration="208" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="240" fileSize="7655332" url="https://static.indymotion.fr/streaming-playlists/hls/dce184c3-8bf3-4e86-82c6-e7d46905e14e/d06f5819-585c-4471-a2cf-831ad2df2d46-240-fragmented.mp4" framerate="25" duration="208" isDefault="false"/>
                <media:content type="audio/mp4" medium="video" height="0" fileSize="3481745" url="https://static.indymotion.fr/streaming-playlists/hls/dce184c3-8bf3-4e86-82c6-e7d46905e14e/24bbe0f4-7b32-4d4c-9d0c-dec8e3fb5056-0-fragmented.mp4" framerate="0" duration="208" isDefault="false"/>
            </media:group>
            <media:thumbnail url="https://peertube2.cpy.re/lazy-static/previews/52f10eb4-4dd3-49e3-b246-5a594cd6d194.jpg"/>
            <media:thumbnail url="https://peertube2.cpy.re/lazy-static/thumbnails/1875b9c9-8194-4a68-afb0-7a09a37d3a0e.jpg"/>
            <media:rating>nonadult</media:rating>
            <media:title type="plain">Poutine contrôle Trump? Théorie du complot mainstream ? Debunk de @leximperii</media:title>
            <media:description type="plain">https://youtu.be/BoTODOoSVEA?si=12rehvghxhSf6hb9</media:description>
        </item>
        <item>
            <title><![CDATA[David Guiraud explose la Macronie en direct ! Les 3 moments forts]]></title>
            <link>https://peertube2.cpy.re/w/gR2kzSpNDPBkTDzZ9sXoPP</link>
            <guid>https://peertube2.cpy.re/w/gR2kzSpNDPBkTDzZ9sXoPP</guid>
            <pubDate>Tue, 09 Sep 2025 10:17:50 GMT</pubDate>
            <description><![CDATA[Le député David Guiraud (La France Insoumise) livre ses analyses dans les 3 meilleurs passages de son intervention sur le de franceinfo. Il revient sur la réforme des retraites, le projet de loi de finances, la redistribution des richesses et dén...]]></description>
            <content:encoded><![CDATA[<p>Le député David Guiraud (La France Insoumise) livre ses analyses dans les 3 meilleurs passages de son intervention sur le de franceinfo.<br />
Il revient sur la réforme des retraites, le projet de loi de finances, la redistribution des richesses et dénonce la politique d’Emmanuel Macron.<br />
Guiraud met en lumière les effets de la TVA sociale, les cadeaux fiscaux aux multinationales, la crise de la Sécurité sociale, la situation critique des hôpitaux publics, et la pauvreté à Roubaix et Wattrelos.<br />
Un condensé fort de l’actualité politique française, diffusé par la chaîne franceinfo.</p>
<p>#économie #Guiraud #Retraites #lfi #macron</p>
<p>Pour soutenir la chaîne de David Guiraud:<br />
<a href="https://www.youtube.com/@davidguiraud3214" target="_blank" rel="noopener noreferrer">https://www.youtube.com/@davidguiraud3214</a></p>
<p>Pensez à réduire la qualité de la vidéo.</p>
<p>Pour changer le système :<br />
Réclamer le RIC constituant : <a href="https://convergence.ric-france.fr/" target="_blank" rel="noopener noreferrer">https://convergence.ric-france.fr/</a><br />
Changer de banque: <a href="https://www.lanef.com/" target="_blank" rel="noopener noreferrer">https://www.lanef.com/</a> <a href="https://change-de-banque.org/particulier/" target="_blank" rel="noopener noreferrer">https://change-de-banque.org/particulier/</a><br />
Passer à l'action militante: <a href="https://extinctionrebellion.fr/" target="_blank" rel="noopener noreferrer">https://extinctionrebellion.fr/</a> <a href="https://ripostealimentaire.fr/" target="_blank" rel="noopener noreferrer">https://ripostealimentaire.fr/</a><br />
Changer de travail : <a href="https://jobs.makesense.org/fr" target="_blank" rel="noopener noreferrer">https://jobs.makesense.org/fr</a></p>
<p>Sources:<br />
<a href="https://www.youtube.com/watch?v=MAD4Uyt-tM8" target="_blank" rel="noopener noreferrer">https://www.youtube.com/watch?v=MAD4Uyt-tM8</a></p>
<p>Musique: Invisible Beauty - Aakash Gandhi</p>
<p>Montage: lakl42</p>
<p>Réponses au quiz de fin :</p>
<p>/!\ Description à ne pas lire avant d'avoir vu la vidéo entièrement<br />
/!\</p>
<p>/!\</p>
<p>/!\ <br />
/!\</p>
<p>Quelle taxe LFI a défendue sur le patrimoine des ultra-riches ?<br />
➡ 2 % au-dessus de 1 milliard d’euros.</p>
<p>Quel taux de pauvreté Guiraud évoque-t-il à Roubaix ?<br />
➡ 46 %.</p>
<p>Combien de milliards seraient payés directement par la TVA des Français ?<br />
➡ Plus de 60 milliards.</p>
]]></content:encoded>
            <dc:creator>ethique_et_tac</dc:creator>
            <enclosure length="148568587" type="video/mp4" url="https://peertube2.cpy.re/download/videos/generate/80515957-510f-40d8-9ab4-ec489766f0e5?videoFileIds=5498184"/>
            <media:community>
                <media:statistics views="9"/>
            </media:community>
            <media:embed url="https://peertube2.cpy.re/videos/embed/gR2kzSpNDPBkTDzZ9sXoPP"/>
            <media:player url="https://peertube2.cpy.re/w/gR2kzSpNDPBkTDzZ9sXoPP"/>
            <media:group>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/6cf815a1-3e41-448e-b0f2-bfff39c38043-1080-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/14d9e2cc-75fa-45cd-acb1-326509c0c42c-720-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/28e84171-6f9f-4a47-84f9-214175b3a20f-480-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/aa58b494-8247-4357-9710-0ccf034cfec0-240-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/3460899d-d1a8-490f-b541-d55b266fd5d1-0-hls.torrent" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="1080" fileSize="148568587" url="https://static.indymotion.fr/streaming-playlists/hls/80515957-510f-40d8-9ab4-ec489766f0e5/7e3afd93-ece7-446b-85e0-70c9d68d8f30-1080-fragmented.mp4" framerate="25" duration="743" isDefault="true"/>
                <media:content type="video/mp4" medium="video" height="720" fileSize="88803420" url="https://static.indymotion.fr/streaming-playlists/hls/80515957-510f-40d8-9ab4-ec489766f0e5/5245624d-9915-4781-af2d-1f002c2f5c07-720-fragmented.mp4" framerate="25" duration="743" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="480" fileSize="55883278" url="https://static.indymotion.fr/streaming-playlists/hls/80515957-510f-40d8-9ab4-ec489766f0e5/ef4b898a-2ed7-4d2d-a5d5-bc623c814969-480-fragmented.mp4" framerate="25" duration="743" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="240" fileSize="29310324" url="https://static.indymotion.fr/streaming-playlists/hls/80515957-510f-40d8-9ab4-ec489766f0e5/fa0b3b77-55a3-4de6-b560-325a745b7420-240-fragmented.mp4" framerate="25" duration="743" isDefault="false"/>
                <media:content type="audio/mp4" medium="video" height="0" fileSize="12075035" url="https://static.indymotion.fr/streaming-playlists/hls/80515957-510f-40d8-9ab4-ec489766f0e5/de098bfb-7ce2-4ca5-915b-993696024922-0-fragmented.mp4" framerate="0" duration="743" isDefault="false"/>
            </media:group>
            <media:thumbnail url="https://peertube2.cpy.re/lazy-static/previews/5966efcc-8f7f-46ec-b562-39435744db9b.jpg"/>
            <media:thumbnail url="https://peertube2.cpy.re/lazy-static/thumbnails/3547b4da-e94e-4361-aaa4-9efeede8701b.jpg"/>
            <media:rating>nonadult</media:rating>
            <media:title type="plain">David Guiraud explose la Macronie en direct ! Les 3 moments forts</media:title>
            <media:description type="plain">Le député David Guiraud (La France Insoumise) livre ses analyses dans les 3 meilleurs passages de son intervention sur le de franceinfo. Il revient sur la réforme des retraites, le projet de loi de finances, la redistribution des richesses et dén...</media:description>
        </item>
        <item>
            <title><![CDATA[Transformer le temps en or]]></title>
            <link>https://peertube2.cpy.re/w/aHFLLZm1sFw12iDXg5Gozz</link>
            <guid>https://peertube2.cpy.re/w/aHFLLZm1sFw12iDXg5Gozz</guid>
            <pubDate>Tue, 09 Sep 2025 06:03:46 GMT</pubDate>
            <description><![CDATA[Avec l'Autre voie, au Remue-Méninges.]]></description>
            <content:encoded><![CDATA[<p>Avec l'Autre voie, au Remue-Méninges.</p>
]]></content:encoded>
            <dc:creator>Extraits sociaux</dc:creator>
            <category>Entertainment</category>
            <enclosure length="177552455" type="video/mp4" url="https://peertube2.cpy.re/download/videos/generate/4eb440bc-3c07-4991-a5ee-4204533a7ed3?videoFileIds=5498140"/>
            <media:community>
                <media:statistics views="4"/>
            </media:community>
            <media:embed url="https://peertube2.cpy.re/videos/embed/aHFLLZm1sFw12iDXg5Gozz"/>
            <media:player url="https://peertube2.cpy.re/w/aHFLLZm1sFw12iDXg5Gozz"/>
            <media:group>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/20b06585-b5cc-46b2-b07f-fa2398bf5874-1080-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/cbcdcc80-688a-4c74-bcce-8c1486b394c3-720-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/97a5ebc6-91f6-4ab9-b72b-954dd4f9aea1-480-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/7b99b25d-624e-4a90-956a-383783b5744f-240-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/5ab754e6-3393-4451-9ed6-7aa4c281269c-0-hls.torrent" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="1080" fileSize="177552455" url="https://static.indymotion.fr/streaming-playlists/hls/4eb440bc-3c07-4991-a5ee-4204533a7ed3/2646f26b-a765-47da-b22a-a21878f06352-1080-fragmented.mp4" framerate="50" duration="253" isDefault="true"/>
                <media:content type="video/mp4" medium="video" height="720" fileSize="85572268" url="https://static.indymotion.fr/streaming-playlists/hls/4eb440bc-3c07-4991-a5ee-4204533a7ed3/f87e0d64-ec11-44ba-a8ec-e1a085147c85-720-fragmented.mp4" framerate="50" duration="253" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="480" fileSize="41950908" url="https://static.indymotion.fr/streaming-playlists/hls/4eb440bc-3c07-4991-a5ee-4204533a7ed3/35287f46-4884-4fac-9de9-5464a83801b4-480-fragmented.mp4" framerate="25" duration="253" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="240" fileSize="17551780" url="https://static.indymotion.fr/streaming-playlists/hls/4eb440bc-3c07-4991-a5ee-4204533a7ed3/ad1008b7-c7ba-42dc-9c78-6f5b106c6bfc-240-fragmented.mp4" framerate="25" duration="253" isDefault="false"/>
                <media:content type="audio/mp4" medium="video" height="0" fileSize="4147930" url="https://static.indymotion.fr/streaming-playlists/hls/4eb440bc-3c07-4991-a5ee-4204533a7ed3/f7cca83e-9bfe-438d-878e-4d9db5f5025c-0-fragmented.mp4" framerate="0" duration="253" isDefault="false"/>
            </media:group>
            <media:thumbnail url="https://peertube2.cpy.re/lazy-static/previews/d1539d49-0b9d-4293-9288-68f4662592b5.jpg"/>
            <media:thumbnail url="https://peertube2.cpy.re/lazy-static/thumbnails/0da2bdc4-23da-46e4-8e63-6a5ce7ac80db.jpg"/>
            <media:rating>nonadult</media:rating>
            <media:title type="plain">Transformer le temps en or</media:title>
            <media:description type="plain">Avec l'Autre voie, au Remue-Méninges.</media:description>
        </item>
        <item>
            <title><![CDATA[Adventures in porting a Wayland Compositor to NetBSD and OpenBSD by Jeff Frasca]]></title>
            <link>https://peertube2.cpy.re/w/kSPoDCGAYdE1woLRXio5Cw</link>
            <guid>https://peertube2.cpy.re/w/kSPoDCGAYdE1woLRXio5Cw</guid>
            <pubDate>Tue, 09 Sep 2025 05:30:32 GMT</pubDate>
            <description><![CDATA[Adventures in porting a Wayland Compositor to NetBSD and OpenBSD by Jeff Frasca I'm typing this in my Xuake Wayland Compositor on OpenBSD. I started this journey on the NetBSD 9.99.x branch and ended up having to dig into the guts of wscons,...]]></description>
            <content:encoded><![CDATA[<p>Adventures in porting a Wayland Compositor to NetBSD and OpenBSD by Jeff Frasca</p>
<p>I'm typing this in my Xuake Wayland Compositor on OpenBSD.</p>
<p>I started this journey on the NetBSD 9.99.x branch and ended up having to dig into the guts of wscons, mesa, libdrm, the kernel drm subsystem, the AMDGPU driver and more. I have a couple of very small, but hard fought patches in the NetBSD kernel. It's not over yet, either. I still have a few bugs around the compositor shutdown process and a lot of integration work to be able to hope to have other people try this out.</p>
<p>Topics to cover in the talk include (but are not limited to):</p>
History of Wayland and other background info

How your graphics stack and driver is organized and actually works

The actual porting journey on both NetBSD and OpenBSD

A Demo! I should be able to show it running

Current status, future work

<p>For more information, please visit:<br />
<a href="https://www.bsdcan.org/2025/" target="_blank" rel="noopener noreferrer">https://www.bsdcan.org/2025/</a></p>
<ul>
<li>and -<br />
<a href="https://www.bsdcan.org/2025/timetable/timetable-Adventures-in-porting.html" target="_blank" rel="noopener noreferrer">https://www.bsdcan.org/2025/timetable/timetable-Adventures-in-porting.html</a><br />
#wayland #runbbsd #openbsd #netbsd</li>
</ul>
]]></content:encoded>
            <dc:creator>BSDTV</dc:creator>
            <category>Science &amp; Technology</category>
            <enclosure length="300168605" type="video/mp4" url="https://peertube2.cpy.re/download/videos/generate/a0f60749-e6ef-4134-8ac9-0c80528ab1f6?videoFileIds=5498113"/>
            <media:community>
                <media:statistics views="6"/>
            </media:community>
            <media:embed url="https://peertube2.cpy.re/videos/embed/kSPoDCGAYdE1woLRXio5Cw"/>
            <media:player url="https://peertube2.cpy.re/w/kSPoDCGAYdE1woLRXio5Cw"/>
            <media:group>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/1f9b5fb6-3121-4e31-85f6-dd17f85e1058-1080.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/d0c50017-e1c9-4f3c-84dd-d9894d318411-720.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/cd113444-929a-4b5b-b61f-45e8b9191698-480.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/5d8baf4a-9fd6-4738-a969-9e1a7cafb036-360.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/7a6a90d5-d2d4-4dc8-9afe-3c1accf4f56c-240.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/fc482a01-479d-4218-bd54-25ef9e0765a3-0.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/bc2c57a3-4116-40a2-8bec-cabd77c960de-1080-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/7a7f4ad0-006e-4fff-a04a-e8c101249187-720-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/5a5d6ef0-edde-4ffa-8fa9-b28ef5ea5d9e-480-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/0b08ae41-13ff-4a08-8761-e2ce0610b0fa-360-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/e29a3a6b-8379-4f8d-b95a-064cbb025d0b-240-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/59c2459b-9948-4260-8910-38aa7ea837b6-0-hls.torrent" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="1080" fileSize="300168605" url="https://toobnix.org/static/web-videos/f867faee-ca60-451e-aa23-b9de24a68734-1080.mp4" framerate="30" duration="3728" isDefault="true"/>
                <media:content type="video/mp4" medium="video" height="720" fileSize="194613785" url="https://toobnix.org/static/web-videos/b1f27a78-0df2-4d9b-8138-674454796c80-720.mp4" framerate="30" duration="3728" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="480" fileSize="138972065" url="https://toobnix.org/static/web-videos/e93c4ef7-b09e-4d61-8f4b-e139c3cb527e-480.mp4" framerate="30" duration="3728" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="360" fileSize="114464276" url="https://toobnix.org/static/web-videos/14d84a83-900a-4ede-bef3-5f528906c6e7-360.mp4" framerate="30" duration="3728" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="240" fileSize="91960030" url="https://toobnix.org/static/web-videos/43f53a4d-08b1-471b-8e22-61ce2ab8c3b0-240.mp4" framerate="30" duration="3728" isDefault="false"/>
                <media:content type="audio/mp4" medium="video" height="0" fileSize="59725376" url="https://toobnix.org/static/web-videos/5e557e1d-2c05-4766-8747-86a460ed2523-0.mp4" framerate="0" duration="3728" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="1080" fileSize="298873947" url="https://toobnix.org/static/streaming-playlists/hls/a0f60749-e6ef-4134-8ac9-0c80528ab1f6/e6b918db-b32c-4178-928a-ca0521dbfb40-1080-fragmented.mp4" framerate="30" duration="3728" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="720" fileSize="193284439" url="https://toobnix.org/static/streaming-playlists/hls/a0f60749-e6ef-4134-8ac9-0c80528ab1f6/9eeb1e80-3fbb-4cf7-a85b-db3a4112c54e-720-fragmented.mp4" framerate="30" duration="3728" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="480" fileSize="137622235" url="https://toobnix.org/static/streaming-playlists/hls/a0f60749-e6ef-4134-8ac9-0c80528ab1f6/68ecab7c-72e9-4d3b-8a80-af396ee9570d-480-fragmented.mp4" framerate="30" duration="3728" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="360" fileSize="113093122" url="https://toobnix.org/static/streaming-playlists/hls/a0f60749-e6ef-4134-8ac9-0c80528ab1f6/f058c2b3-844b-43c1-ac89-01e9e4a52b37-360-fragmented.mp4" framerate="30" duration="3728" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="240" fileSize="90564020" url="https://toobnix.org/static/streaming-playlists/hls/a0f60749-e6ef-4134-8ac9-0c80528ab1f6/a885fd68-6d0c-4a9c-8589-64546a9e35f1-240-fragmented.mp4" framerate="30" duration="3728" isDefault="false"/>
                <media:content type="audio/mp4" medium="video" height="0" fileSize="59874222" url="https://toobnix.org/static/streaming-playlists/hls/a0f60749-e6ef-4134-8ac9-0c80528ab1f6/f094b370-6cee-4051-8405-78c87703bddc-0-fragmented.mp4" framerate="0" duration="3728" isDefault="false"/>
            </media:group>
            <media:thumbnail url="https://peertube2.cpy.re/lazy-static/previews/ee9ed299-f502-45ba-9916-3cf378247743.jpg"/>
            <media:thumbnail url="https://peertube2.cpy.re/lazy-static/thumbnails/1945ecc1-6e79-484c-94ac-db91de3b4e70.jpg"/>
            <media:rating>nonadult</media:rating>
            <media:title type="plain">Adventures in porting a Wayland Compositor to NetBSD and OpenBSD by Jeff Frasca</media:title>
            <media:description type="plain">Adventures in porting a Wayland Compositor to NetBSD and OpenBSD by Jeff Frasca I'm typing this in my Xuake Wayland Compositor on OpenBSD. I started this journey on the NetBSD 9.99.x branch and ended up having to dig into the guts of wscons,...</media:description>
        </item>
        <item>
            <title><![CDATA[Automating My FreeBSD Lab From Setup to Daily Use with Ansible & Salt by Roller Angel]]></title>
            <link>https://peertube2.cpy.re/w/2PFfRip84BVCWZHZNXjqbG</link>
            <guid>https://peertube2.cpy.re/w/2PFfRip84BVCWZHZNXjqbG</guid>
            <pubDate>Tue, 09 Sep 2025 05:17:51 GMT</pubDate>
            <description><![CDATA[Automating My FreeBSD Lab: From Setup to Daily Use with Ansible &amp; Salt by Roller Angel Automating My FreeBSD Lab: From Setup to Daily Use with Ansible &amp; Salt Abstract Managing multiple FreeBSD machines can be time-consuming, but automation ma...]]></description>
            <content:encoded><![CDATA[<p>Automating My FreeBSD Lab: From Setup to Daily Use with Ansible &amp; Salt by Roller Angel<br />
Automating My FreeBSD Lab: From Setup to Daily Use with Ansible &amp; Salt<br />
Abstract</p>
<p>Managing multiple FreeBSD machines can be time-consuming, but automation makes it effortless. In this talk, I will demonstrate how I use Ansible to set up my FreeBSD lab and Salt to maintain and scale it across multiple machines—including how I configured a second FreeBSD laptop with just SSH access.</p>
<p>Attendees will see how automation enables:</p>
Seamless FreeBSD system setup using Ansible.

Automated configuration management with Salt.

Effortless scaling to new machines, reducing manual setup to a few commands.

<p>By the end of the talk, attendees will understand how to leverage Ansible and Salt to build a reproducible and maintainable FreeBSD infrastructure.<br />
Intended Audience</p>
FreeBSD users interested in automating system setup and maintenance.

System administrators managing multiple FreeBSD machines.

Anyone curious about Ansible and Salt for FreeBSD automation.

<p>Attendees should have basic FreeBSD knowledge, but no prior experience with automation tools is required.<br />
Outline</p>
<ol>
<li>
<p>Introduction (5 min)</p>
<p>Why automate?</p>
<p>My FreeBSD lab &amp; laptop setup overview.</p>
</li>
<li>
<p>Building My FreeBSD Lab with Ansible (15 min)</p>
<p>Bootstrapping a new system.</p>
<p>Automating system installation &amp; package setup.</p>
<p>Adding a second laptop with just SSH access.</p>
</li>
<li>
<p>Maintaining &amp; Scaling with Salt (15 min)</p>
<p>Managing configs, packages, and updates.</p>
<p>Enforcing system state across multiple machines.</p>
<p>How I maintain consistency between multiple devices.</p>
</li>
<li>
<p>Lessons Learned &amp; Challenges (5 min)</p>
<p>Why this method works well for FreeBSD.</p>
<p>Troubleshooting automation quirks.</p>
</li>
<li>
<p>Q&amp;A (5 min)<br />
What Attendees Will Learn</p>
<p>How to use Ansible to set up FreeBSD machines quickly.</p>
<p>How Salt makes long-term configuration management effortless.</p>
<p>How to automate multiple FreeBSD machines with minimal manual work.</p>
</li>
</ol>
<p>For more information, please visit:<br />
<a href="https://www.bsdcan.org/2025/" target="_blank" rel="noopener noreferrer">https://www.bsdcan.org/2025/</a></p>
<ul>
<li>and -<br />
<a href="https://www.bsdcan.org/2025/timetable/timetable-Automating-My-FreeBSD.html" target="_blank" rel="noopener noreferrer">https://www.bsdcan.org/2025/timetable/timetable-Automating-My-FreeBSD.html</a></li>
</ul>
]]></content:encoded>
            <dc:creator>BSDTV</dc:creator>
            <category>Science &amp; Technology</category>
            <enclosure length="220195838" type="video/mp4" url="https://peertube2.cpy.re/download/videos/generate/0ec149ca-2620-4633-858d-c5dbc527b58c?videoFileIds=5498103"/>
            <media:community>
                <media:statistics views="2"/>
            </media:community>
            <media:embed url="https://peertube2.cpy.re/videos/embed/2PFfRip84BVCWZHZNXjqbG"/>
            <media:player url="https://peertube2.cpy.re/w/2PFfRip84BVCWZHZNXjqbG"/>
            <media:group>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/855d0d61-0acc-471d-bc24-2d419d695ee1-1080.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/25078fc6-8bab-42fd-979c-df600166471a-720.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/fde4ab9b-4df6-4529-9b19-78a30ff60b4c-480.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/90a4b966-5338-4130-945e-0c21c01db88f-360.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/ac8126e4-1cff-4097-b07e-3adc7d8c37b1-240.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/4a2e1ebe-95ba-4da9-91ca-624ef56dd0b1-0.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/6a32e7c9-dcfd-4d28-9d35-5f064dc5cbea-1080-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/391528dd-6953-4080-9f76-f085e44489a1-720-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/b7ea5a0b-4479-4ea6-beef-e20804fd55e7-480-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/f06959ef-7466-49df-bbaf-523e88ee17b8-360-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/0cb8bd32-a15c-4a2c-937f-2deb9d6a3f36-240-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/f9c7a729-b937-4eb8-98ed-1fb2d2a7b32c-0-hls.torrent" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="1080" fileSize="220195838" url="https://toobnix.org/static/web-videos/39c01add-ec6b-404f-830c-93efed001e91-1080.mp4" framerate="30" duration="2778" isDefault="true"/>
                <media:content type="video/mp4" medium="video" height="720" fileSize="147126451" url="https://toobnix.org/static/web-videos/2c6acc7d-7d56-45e7-a6d5-d8cc716a8442-720.mp4" framerate="30" duration="2778" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="480" fileSize="106714368" url="https://toobnix.org/static/web-videos/455c93c3-b91b-4ebe-a655-fd6331db952e-480.mp4" framerate="30" duration="2778" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="360" fileSize="86900139" url="https://toobnix.org/static/web-videos/277083e5-2854-4b65-bed4-ee101d0dca89-360.mp4" framerate="30" duration="2778" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="240" fileSize="70122928" url="https://toobnix.org/static/web-videos/aa468e5c-1c2a-42ac-a218-56d966134862-240.mp4" framerate="30" duration="2778" isDefault="false"/>
                <media:content type="audio/mp4" medium="video" height="0" fileSize="44659015" url="https://toobnix.org/static/web-videos/ae5ff500-e1b1-4862-802c-a30096f51716-0.mp4" framerate="0" duration="2778" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="1080" fileSize="219228656" url="https://toobnix.org/static/streaming-playlists/hls/0ec149ca-2620-4633-858d-c5dbc527b58c/31ec83aa-ecc2-4823-b803-1aeccd3e5360-1080-fragmented.mp4" framerate="30" duration="2778" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="720" fileSize="146119549" url="https://toobnix.org/static/streaming-playlists/hls/0ec149ca-2620-4633-858d-c5dbc527b58c/f570cb35-d5af-4caa-973b-498c5ef4d439-720-fragmented.mp4" framerate="30" duration="2778" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="480" fileSize="105675138" url="https://toobnix.org/static/streaming-playlists/hls/0ec149ca-2620-4633-858d-c5dbc527b58c/672c721e-127f-4628-a636-e0fba2f50c64-480-fragmented.mp4" framerate="30" duration="2778" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="360" fileSize="85831893" url="https://toobnix.org/static/streaming-playlists/hls/0ec149ca-2620-4633-858d-c5dbc527b58c/bde223af-00af-4b7c-8e8c-dc44f4891965-360-fragmented.mp4" framerate="30" duration="2778" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="240" fileSize="69000658" url="https://toobnix.org/static/streaming-playlists/hls/0ec149ca-2620-4633-858d-c5dbc527b58c/7cef7a32-e3ae-4b77-85cd-3a49a1aafdfa-240-fragmented.mp4" framerate="30" duration="2778" isDefault="false"/>
                <media:content type="audio/mp4" medium="video" height="0" fileSize="44770241" url="https://toobnix.org/static/streaming-playlists/hls/0ec149ca-2620-4633-858d-c5dbc527b58c/9c2ce99b-dfe2-421d-a7d9-417a025cc8f0-0-fragmented.mp4" framerate="0" duration="2778" isDefault="false"/>
            </media:group>
            <media:thumbnail url="https://peertube2.cpy.re/lazy-static/previews/b15e36f3-d75a-4cfd-8ee0-510e9173e890.jpg"/>
            <media:thumbnail url="https://peertube2.cpy.re/lazy-static/thumbnails/322fda50-a3f4-4159-9792-302088fec3ac.jpg"/>
            <media:rating>nonadult</media:rating>
            <media:title type="plain">Automating My FreeBSD Lab From Setup to Daily Use with Ansible &amp; Salt by Roller Angel</media:title>
            <media:description type="plain">Automating My FreeBSD Lab: From Setup to Daily Use with Ansible &amp; Salt by Roller Angel Automating My FreeBSD Lab: From Setup to Daily Use with Ansible &amp; Salt Abstract Managing multiple FreeBSD machines can be time-consuming, but automation ma...</media:description>
        </item>
        <item>
            <title><![CDATA[ZFS Direct IO Benchmarking Pitfalls by Mateusz Piotrowski]]></title>
            <link>https://peertube2.cpy.re/w/oVFD3aDydW1iqTVPPod7Co</link>
            <guid>https://peertube2.cpy.re/w/oVFD3aDydW1iqTVPPod7Co</guid>
            <pubDate>Tue, 09 Sep 2025 04:58:34 GMT</pubDate>
            <description><![CDATA[ZFS Direct IO Benchmarking Pitfalls by Mateusz Piotrowski Not too long ago, support for direct IO landed in OpenZFS after years of discussions and reviews. We truly live in the future where we can finally reject complicated caching and fully em...]]></description>
            <content:encoded><![CDATA[<p>ZFS Direct IO Benchmarking Pitfalls by Mateusz Piotrowski</p>
<p>Not too long ago, support for direct IO landed in OpenZFS after years of discussions and reviews. We truly live in the future where we can finally reject complicated caching and fully embrace the unbuffered conversations with our disks. Or can we really?</p>
<p>Those of you who know a bit about ZFS know that the ARC is actually pretty important (without one ZFS would historically stand for zzz 😴 instead of Zetta). How could it be then that skipping the ARC might improve performance?</p>
<p>During the presentation we will discuss what workloads and setups benefit from direct IO, what its limitations are, and what pitfalls to avoid during benchmarking. We will also look at the implementation to understand how all the promises of stability and compatibility were kept.</p>
<p>Direct IO is reported to deliver amazing performance boosts in some deployments. Understanding how not to hold it wrong is a great first step to potentially unlocking that speed-up on your systems too!</p>
<p>For more information, please visit:<br />
<a href="https://www.bsdcan.org/2025/" target="_blank" rel="noopener noreferrer">https://www.bsdcan.org/2025/</a></p>
<ul>
<li>and -<br />
<a href="https://www.bsdcan.org/2025/timetable/timetable-ZFS-Direct-IO.html" target="_blank" rel="noopener noreferrer">https://www.bsdcan.org/2025/timetable/timetable-ZFS-Direct-IO.html</a></li>
</ul>
<p>#zfs #benchmarking #freebsd</p>
]]></content:encoded>
            <dc:creator>BSDTV</dc:creator>
            <category>Science &amp; Technology</category>
            <enclosure length="198632820" type="video/mp4" url="https://peertube2.cpy.re/download/videos/generate/b9a7e602-19bb-4fb3-a6b9-8169421be1f6?videoFileIds=5498026"/>
            <media:community>
                <media:statistics views="0"/>
            </media:community>
            <media:embed url="https://peertube2.cpy.re/videos/embed/oVFD3aDydW1iqTVPPod7Co"/>
            <media:player url="https://peertube2.cpy.re/w/oVFD3aDydW1iqTVPPod7Co"/>
            <media:group>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/ccb82a4b-0d35-419a-9960-071a7e485bfb-1080.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/7ac37c21-963f-4836-bd0e-75135807596a-720.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/77e21d58-5f7a-4826-a329-74ad9d4cb0d5-480.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/774d1e08-45af-4784-8c68-5855a137cd52-360.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/3370aed4-0f5e-46ec-b893-6e6f977c7613-240.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/f324bc2f-6709-43c0-928c-f4f1ebbb48ed-0.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/6bdbda09-683a-4d6c-ac24-de1f610f0cef-1080-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/4df4b4a8-0323-404c-a688-5da2c7ec4dc1-720-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/555e8334-f9bc-4f32-b307-067912741674-480-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/c2051a4f-3a63-47bf-b5f8-b2b059c9cb1c-360-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/ea5e6a1f-de2d-428d-9ae2-8895d293dac0-240-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/203db19b-c74b-4ee2-88b1-24030b075fe7-0-hls.torrent" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="1080" fileSize="198632820" url="https://toobnix.org/static/web-videos/409fed8d-9275-40c6-acce-e5102b47aed1-1080.mp4" framerate="30" duration="2775" isDefault="true"/>
                <media:content type="video/mp4" medium="video" height="720" fileSize="126862204" url="https://toobnix.org/static/web-videos/725096f5-ec35-4f77-9f5d-63b0c46d68b2-720.mp4" framerate="30" duration="2775" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="480" fileSize="90418992" url="https://toobnix.org/static/web-videos/7d530a11-2abf-4e7d-8b13-12aab1e27cda-480.mp4" framerate="30" duration="2775" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="360" fileSize="76014046" url="https://toobnix.org/static/web-videos/f97b5234-edd7-4664-b8c3-2fbe0cf3de54-360.mp4" framerate="30" duration="2775" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="240" fileSize="62731328" url="https://toobnix.org/static/web-videos/349a1f4e-2c02-4b1c-b9c2-a2f429d51fd1-240.mp4" framerate="30" duration="2775" isDefault="false"/>
                <media:content type="audio/mp4" medium="video" height="0" fileSize="44428246" url="https://toobnix.org/static/web-videos/f07e0d21-bb9a-41ed-9e34-9e31fda901a4-0.mp4" framerate="0" duration="2775" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="1080" fileSize="197628502" url="https://toobnix.org/static/streaming-playlists/hls/b9a7e602-19bb-4fb3-a6b9-8169421be1f6/3ef91330-cbf5-4647-97c9-2ad444ba0b74-1080-fragmented.mp4" framerate="30" duration="2775" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="720" fileSize="125868998" url="https://toobnix.org/static/streaming-playlists/hls/b9a7e602-19bb-4fb3-a6b9-8169421be1f6/528b133d-1f2a-4ac2-9445-5ba10fbfe9a7-720-fragmented.mp4" framerate="30" duration="2775" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="480" fileSize="89419202" url="https://toobnix.org/static/streaming-playlists/hls/b9a7e602-19bb-4fb3-a6b9-8169421be1f6/c86f0297-32a2-4ed7-bdd8-715b70da2bf9-480-fragmented.mp4" framerate="30" duration="2775" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="360" fileSize="75009584" url="https://toobnix.org/static/streaming-playlists/hls/b9a7e602-19bb-4fb3-a6b9-8169421be1f6/b59254ba-1a56-4139-88f2-f499123b5058-360-fragmented.mp4" framerate="30" duration="2775" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="240" fileSize="61688546" url="https://toobnix.org/static/streaming-playlists/hls/b9a7e602-19bb-4fb3-a6b9-8169421be1f6/66d0a6cd-dc51-47c3-96a4-dd3065473321-240-fragmented.mp4" framerate="30" duration="2775" isDefault="false"/>
                <media:content type="audio/mp4" medium="video" height="0" fileSize="44539988" url="https://toobnix.org/static/streaming-playlists/hls/b9a7e602-19bb-4fb3-a6b9-8169421be1f6/a60c26f2-f292-40db-aac8-4a3008daaa2b-0-fragmented.mp4" framerate="0" duration="2775" isDefault="false"/>
            </media:group>
            <media:thumbnail url="https://peertube2.cpy.re/lazy-static/previews/59b41218-00bd-45fe-9d40-f08ead325037.jpg"/>
            <media:thumbnail url="https://peertube2.cpy.re/lazy-static/thumbnails/10a4d647-039c-4931-bee1-2e1db2f804e2.jpg"/>
            <media:rating>nonadult</media:rating>
            <media:title type="plain">ZFS Direct IO Benchmarking Pitfalls by Mateusz Piotrowski</media:title>
            <media:description type="plain">ZFS Direct IO Benchmarking Pitfalls by Mateusz Piotrowski Not too long ago, support for direct IO landed in OpenZFS after years of discussions and reviews. We truly live in the future where we can finally reject complicated caching and fully em...</media:description>
        </item>
        <item>
            <title><![CDATA[The NetBSD Packet FilterNPFby Emmanuel Nyarko]]></title>
            <link>https://peertube2.cpy.re/w/g7GLg3H1c6hN5bhDsQHKDx</link>
            <guid>https://peertube2.cpy.re/w/g7GLg3H1c6hN5bhDsQHKDx</guid>
            <pubDate>Tue, 09 Sep 2025 03:57:54 GMT</pubDate>
            <description><![CDATA[One of NetBSD's goal with network security is to upgrade NPF with lots of useful features and then be used as the primary packet filter. In this talk, As NetBSD's current primary maintainer of NPF, I will reveal the improvements I have added to Ne...]]></description>
            <content:encoded><![CDATA[<p>One of NetBSD's goal with network security is to upgrade NPF with lots of useful features and then be used as the primary packet filter. In this talk, As NetBSD's current primary maintainer of NPF, I will reveal the improvements I have added to NetBSD's NPF packet filter. I will also reveal Further improvements in relation to performance and the direction of the project to reaching completion.</p>
]]></content:encoded>
            <dc:creator>BSDTV</dc:creator>
            <category>Science &amp; Technology</category>
            <enclosure length="209565069" type="video/mp4" url="https://peertube2.cpy.re/download/videos/generate/7a68a9e6-32db-48da-b302-f9dec0543c75?videoFileIds=5498022"/>
            <media:community>
                <media:statistics views="0"/>
            </media:community>
            <media:embed url="https://peertube2.cpy.re/videos/embed/g7GLg3H1c6hN5bhDsQHKDx"/>
            <media:player url="https://peertube2.cpy.re/w/g7GLg3H1c6hN5bhDsQHKDx"/>
            <media:group>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/d9a5be3c-1c35-4562-92e9-54974de385fd-1080.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/fe2e69c3-7b47-4b2b-a6ce-fd3052cd9985-720.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/a2ee22f9-901d-4481-9ebb-5f82e1aa230a-480.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/35361908-c706-463b-98ec-ab607d019532-360.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/f0d241fc-e7aa-4939-a01c-8633e4315a01-240.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/5d09c3c0-c2fe-40ba-b355-67b91c850579-0.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/8965e0b8-28b7-4ce8-b12f-45c1075d10b9-1080-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/4ea9794c-5004-4831-94d9-324e05c0c294-720-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/e9834f4c-55c2-4501-b76e-b4d854dc3121-480-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/ff97249e-700c-44f2-8efb-4e1f5042e97c-360-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/5a37d424-1893-4b81-87fa-f5ae3ea3e12d-240-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/2e638cec-71f3-4eda-9595-27c24942b22c-0-hls.torrent" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="1080" fileSize="209565069" url="https://toobnix.org/static/web-videos/ded60b77-d148-485d-b864-a0bc4c4b31dd-1080.mp4" framerate="30" duration="3418" isDefault="true"/>
                <media:content type="video/mp4" medium="video" height="720" fileSize="145935459" url="https://toobnix.org/static/web-videos/211d9ca4-6853-47d5-9a4d-5dd19b486b70-720.mp4" framerate="30" duration="3418" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="480" fileSize="109606143" url="https://toobnix.org/static/web-videos/567d3b44-91e6-4dcc-bf93-55c5d5de7c93-480.mp4" framerate="30" duration="3418" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="360" fileSize="92579502" url="https://toobnix.org/static/web-videos/a2296fea-ad58-40d6-a0c2-39584f5f0d32-360.mp4" framerate="30" duration="3418" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="240" fileSize="78078534" url="https://toobnix.org/static/web-videos/e86383e4-0153-4e78-8f65-c1cf2fbe3f25-240.mp4" framerate="30" duration="3418" isDefault="false"/>
                <media:content type="audio/mp4" medium="video" height="0" fileSize="54640910" url="https://toobnix.org/static/web-videos/69762fbb-7319-4dc5-b1c1-c67ddba28137-0.mp4" framerate="0" duration="3418" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="1080" fileSize="208415911" url="https://toobnix.org/static/streaming-playlists/hls/7a68a9e6-32db-48da-b302-f9dec0543c75/4dbf4f63-8776-48dd-971c-1374a9d93edf-1080-fragmented.mp4" framerate="30" duration="3418" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="720" fileSize="144777829" url="https://toobnix.org/static/streaming-playlists/hls/7a68a9e6-32db-48da-b302-f9dec0543c75/f948a36a-4ea1-4b37-83b7-2f00b1a56a46-720-fragmented.mp4" framerate="30" duration="3418" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="480" fileSize="108412281" url="https://toobnix.org/static/streaming-playlists/hls/7a68a9e6-32db-48da-b302-f9dec0543c75/dd475bd3-1882-4de7-b896-45284ba523b8-480-fragmented.mp4" framerate="30" duration="3418" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="360" fileSize="91353920" url="https://toobnix.org/static/streaming-playlists/hls/7a68a9e6-32db-48da-b302-f9dec0543c75/1dab394c-68ab-42cb-ac00-5185de70b442-360-fragmented.mp4" framerate="30" duration="3418" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="240" fileSize="76788768" url="https://toobnix.org/static/streaming-playlists/hls/7a68a9e6-32db-48da-b302-f9dec0543c75/6d98eaf4-9b92-4591-9f1f-ae36610c178f-240-fragmented.mp4" framerate="30" duration="3418" isDefault="false"/>
                <media:content type="audio/mp4" medium="video" height="0" fileSize="54776852" url="https://toobnix.org/static/streaming-playlists/hls/7a68a9e6-32db-48da-b302-f9dec0543c75/191cc741-db9f-4fce-aa50-a534bd2d2f62-0-fragmented.mp4" framerate="0" duration="3418" isDefault="false"/>
            </media:group>
            <media:thumbnail url="https://peertube2.cpy.re/lazy-static/previews/6c203e1e-0a3e-4c7d-b70c-e113e66315f6.jpg"/>
            <media:thumbnail url="https://peertube2.cpy.re/lazy-static/thumbnails/144861b0-9918-4e8a-ba5f-7298a79cb916.jpg"/>
            <media:rating>nonadult</media:rating>
            <media:title type="plain">The NetBSD Packet FilterNPFby Emmanuel Nyarko</media:title>
            <media:description type="plain">One of NetBSD's goal with network security is to upgrade NPF with lots of useful features and then be used as the primary packet filter. In this talk, As NetBSD's current primary maintainer of NPF, I will reveal the improvements I have added to Ne...</media:description>
        </item>
        <item>
            <title><![CDATA[Enhancing Unix Education through Chaos Engineering and Gamification using FreeBSD by Andreas Kirchne]]></title>
            <link>https://peertube2.cpy.re/w/7ukG6jokmvHKMHQzrsoJoQ</link>
            <guid>https://peertube2.cpy.re/w/7ukG6jokmvHKMHQzrsoJoQ</guid>
            <pubDate>Tue, 09 Sep 2025 03:42:43 GMT</pubDate>
            <description><![CDATA[A new BSDCan video has been posted: Enhancing Unix Education through Chaos Engineering and Gamification using FreeBSD by Andreas Kirchner, Benedict Reuschling The misuse of AI in education for cheating purposes has created challenges in assess...]]></description>
            <content:encoded><![CDATA[<p>A new BSDCan video has been posted:<br />
Enhancing Unix Education through Chaos Engineering and Gamification using FreeBSD by Andreas Kirchner, Benedict Reuschling</p>
<p>The misuse of AI in education for cheating purposes has created challenges in assessing students' authentic contributions in the last couple of years. Another issue we identified is that University labs rarely teach problem-solving skills for a real-world scenario that students have to deal with in their post-academic working life (i.e. fixing production issues). Traditional assignments lacked real-world relevance (and were easily solved with the help of AI), leaving students unprepared for professional challenges in their later jobs. To address this, we developed as part of a master's thesis for University of Applied Sciences, Darmstadt, Germany a new teaching framework leveraging Chaos Engineering and Gamification elements to modernize Unix education on FreeBSD. With our new system, real-world problems can be simulated by instructors and allows students to use system administrator permissions to solve them. We also developed this system to make it difficult for participants to "cheat" using AI and evaluated the system towards that end with a group of students.</p>
<p>This talk will introduce our new "Chaos education system" tested in the "Unix for Software Developers" course at the University. The name stems from the chaos monkey systems that intentionally "wreak havoc" on production systems to improve their resiliency and train the sysadmins managing them to find and fix them. Our approach lets instructors inject intentional faults (error scenarios) into student-managed FreeBSD jails. The students must then identify, resolve, and prevent these issues from occurring again using standard system administration tools, including root permissions. To increase student motivation to solve these scenarios quickly (and to create artificial "production system is at stake" pressure), a global highscore list is used as a gamification element: each time an issue is solved, points are awarded to that team based on the elapsed time and an instructor-defined difficulty bonus. A post-mortem group discussion with the instructor lets students talk through various ways of solving the issue, giving the group deeper insights on possible solutions each group had used. Using the system, the students gain practical skills like troubleshooting, system recovery, and proactive system management with real-world scenarios, something that traditional "one size fits all" assignments lack.</p>
<p>We built the whole system using BSD-licensed open source components: FreeBSD, pf, VNET, bastille jails and templates. Shells scripts act as the glue to tie them together and implement the logic for the rest of the chaos monkey system. The prototype system has been tested with two student groups of 16 students each in January 2025. One group was allowed to use ChatGPT during the scenarios to see how AI-support helps them (if at all). Insights from this testing was used to enhance the system further.</p>
<p>This talk will introduce the chaos education system idea, implementation, demonstrate its functionality, and discuss future work in this area. FreeBSD proved to be an excellent building platform for this system, due to its great modularity, open source, low resource overhead, and available documentation. The system can be enhanced further and used outside of an academic environment, like employee training or workshop-style challenges at events. It is easy for instructors to construct a custom scenario for participants and inject it into the training jails. The system can scale to a number of parallel users due to the lightweight nature that FreeBSD jails provide.</p>
<p>Audience: Educators, trainers, and system administrators interested in modernizing Unix/Linux education through hands-on, interactive methods. Managers may find the system interesting for training their own employees by constructing scenarios mimicking their own environment.</p>
<p>For more information, please visit:<br />
<a href="https://www.bsdcan.org/2025/" target="_blank" rel="noopener noreferrer">https://www.bsdcan.org/2025/</a></p>
<ul>
<li>and -<br />
<a href="https://www.bsdcan.org/2025/timetable/timetable-Enhancing-Unix-Education.html" target="_blank" rel="noopener noreferrer">https://www.bsdcan.org/2025/timetable/timetable-Enhancing-Unix-Education.html</a></li>
</ul>
]]></content:encoded>
            <dc:creator>BSDTV</dc:creator>
            <category>Science &amp; Technology</category>
            <enclosure length="248403389" type="video/mp4" url="https://peertube2.cpy.re/download/videos/generate/348bcaec-c1a6-4883-a665-55217dc2a204?videoFileIds=5498024"/>
            <media:community>
                <media:statistics views="1"/>
            </media:community>
            <media:embed url="https://peertube2.cpy.re/videos/embed/7ukG6jokmvHKMHQzrsoJoQ"/>
            <media:player url="https://peertube2.cpy.re/w/7ukG6jokmvHKMHQzrsoJoQ"/>
            <media:group>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/9d99a980-c8a6-4ead-a2ee-871206f3c78a-1080.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/17591a1c-9a22-4a1a-834a-a9eb0d504080-720.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/fa500744-0053-494c-a0fe-340502d30388-480.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/b0a47297-8f5d-477a-9db6-6dbae8e36e94-360.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/f0651d72-5639-4820-9493-f877783d16bb-240.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/0d6d4644-26bb-4d2e-a50d-5def78bf103f-0.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/e90c0305-d911-4de0-ae84-5c9719f6d71a-1080-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/7a52895f-35fa-4a27-80de-2c2aafd71ec6-720-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/fe75404c-acd7-43db-93c1-7c694c78ca9a-480-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/0edacd63-cb90-49e8-bc8d-500c3757a2c0-360-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/cc454ac7-b9cb-4bfb-81f9-5fea38a4e974-240-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/da557121-7f67-498d-9691-177b41e6a466-0-hls.torrent" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="1080" fileSize="248403389" url="https://toobnix.org/static/web-videos/2e5197eb-57e2-4e3c-9abc-2d143e324778-1080.mp4" framerate="30" duration="3542" isDefault="true"/>
                <media:content type="video/mp4" medium="video" height="720" fileSize="173735849" url="https://toobnix.org/static/web-videos/df6345a4-3600-4bc0-a25e-c24a2ee2cbaf-720.mp4" framerate="30" duration="3542" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="480" fileSize="128807159" url="https://toobnix.org/static/web-videos/a3ec2ea5-affc-436a-9200-36d9379b1364-480.mp4" framerate="30" duration="3542" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="360" fileSize="105682217" url="https://toobnix.org/static/web-videos/4c8b0d0d-99a9-42a8-8c2e-aa23c09c69de-360.mp4" framerate="30" duration="3542" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="240" fileSize="85641913" url="https://toobnix.org/static/web-videos/f2f68ad0-a506-496f-b6c3-94409b498435-240.mp4" framerate="30" duration="3542" isDefault="false"/>
                <media:content type="audio/mp4" medium="video" height="0" fileSize="56683831" url="https://toobnix.org/static/web-videos/4d20a0fc-76b6-4eb8-b3af-8be2df75cc84-0.mp4" framerate="0" duration="3542" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="1080" fileSize="247201055" url="https://toobnix.org/static/streaming-playlists/hls/348bcaec-c1a6-4883-a665-55217dc2a204/9f06bdd2-4f8a-43d5-a94d-1a80c80a4996-1080-fragmented.mp4" framerate="30" duration="3542" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="720" fileSize="172519335" url="https://toobnix.org/static/streaming-playlists/hls/348bcaec-c1a6-4883-a665-55217dc2a204/efb11f8f-242a-4454-bb3c-1d432a6f2547-720-fragmented.mp4" framerate="30" duration="3542" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="480" fileSize="127566661" url="https://toobnix.org/static/streaming-playlists/hls/348bcaec-c1a6-4883-a665-55217dc2a204/0e7c788e-90cb-4dd9-944e-e2799fc76228-480-fragmented.mp4" framerate="30" duration="3542" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="360" fileSize="104422951" url="https://toobnix.org/static/streaming-playlists/hls/348bcaec-c1a6-4883-a665-55217dc2a204/aa377e89-7626-4fdf-8bc2-ac4143f11861-360-fragmented.mp4" framerate="30" duration="3542" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="240" fileSize="84344295" url="https://toobnix.org/static/streaming-playlists/hls/348bcaec-c1a6-4883-a665-55217dc2a204/d0a184b2-339e-4ab0-9e34-ccc5f5e12ac9-240-fragmented.mp4" framerate="30" duration="3542" isDefault="false"/>
                <media:content type="audio/mp4" medium="video" height="0" fileSize="56824705" url="https://toobnix.org/static/streaming-playlists/hls/348bcaec-c1a6-4883-a665-55217dc2a204/11771d11-3970-45fe-9211-6c3b762dff21-0-fragmented.mp4" framerate="0" duration="3542" isDefault="false"/>
            </media:group>
            <media:thumbnail url="https://peertube2.cpy.re/lazy-static/previews/6f1baaaa-792a-49df-bd40-a8b3a9d07b8c.jpg"/>
            <media:thumbnail url="https://peertube2.cpy.re/lazy-static/thumbnails/3ff7edd3-b69e-49ed-94c3-f18833909aca.jpg"/>
            <media:rating>nonadult</media:rating>
            <media:title type="plain">Enhancing Unix Education through Chaos Engineering and Gamification using FreeBSD by Andreas Kirchne</media:title>
            <media:description type="plain">A new BSDCan video has been posted: Enhancing Unix Education through Chaos Engineering and Gamification using FreeBSD by Andreas Kirchner, Benedict Reuschling The misuse of AI in education for cheating purposes has created challenges in assess...</media:description>
        </item>
        <item>
            <title><![CDATA[Effective Bug Reports, Code Change Requests, and Conference Proposals by  Michael Dexter]]></title>
            <link>https://peertube2.cpy.re/w/kQKyuttv2fSVBznH8oKd6Q</link>
            <guid>https://peertube2.cpy.re/w/kQKyuttv2fSVBznH8oKd6Q</guid>
            <pubDate>Tue, 09 Sep 2025 03:42:33 GMT</pubDate>
            <description><![CDATA[Effective Bug Reports, Code Change Requests, and Conference Proposals by  Michael Dexter Open Source is participatory and BSD Unix is no exception, with its own unique development workflows and events. Bug reporting, code proposing, and event...]]></description>
            <content:encoded><![CDATA[<p>Effective Bug Reports, Code Change Requests, and Conference Proposals by  Michael Dexter</p>
<p>Open Source is participatory and BSD Unix is no exception, with its own unique development workflows and events. Bug reporting, code proposing, and event participation are fundamental elements of the BSD Unix community and despite appearances, are open to anyone to participate.</p>
<p>This talk will take a pragmatic tour of effective engagement on these topics with real-world examples and tips for:</p>
Bug reports that are actionable and inspire attention

Code change requests and reviews that are more likely to review and acceptance

Conference proposals that stand out, accurately set expectations, and are more likely to be accepted

<p>The secret is that all of that all of these are fundamentally indistinguishable: You are tasked with marketing your idea to others and must show your work, justify your points, demonstrate sincerity, and ultimately convince others of your initiative, regardless of its size.</p>
<p>For more information, please visit:<br />
<a href="https://www.bsdcan.org/2025/" target="_blank" rel="noopener noreferrer">https://www.bsdcan.org/2025/</a></p>
<ul>
<li>and -<br />
<a href="https://www.bsdcan.org/2025/timetable/timetable-Effective-Bug-Reports,.html" target="_blank" rel="noopener noreferrer">https://www.bsdcan.org/2025/timetable/timetable-Effective-Bug-Reports,.html</a></li>
</ul>
]]></content:encoded>
            <dc:creator>BSDTV</dc:creator>
            <category>Science &amp; Technology</category>
            <enclosure length="243338553" type="video/mp4" url="https://peertube2.cpy.re/download/videos/generate/a0ac2e2f-fc1b-4f35-904e-0504ddae8a3a?videoFileIds=5498071"/>
            <media:community>
                <media:statistics views="2"/>
            </media:community>
            <media:embed url="https://peertube2.cpy.re/videos/embed/kQKyuttv2fSVBznH8oKd6Q"/>
            <media:player url="https://peertube2.cpy.re/w/kQKyuttv2fSVBznH8oKd6Q"/>
            <media:group>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/9a8144b7-4337-44f7-9dc6-f54bb7cfc18e-1080.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/b678b4e7-a12d-4d81-90ca-096072f1c552-720.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/8789efb8-49fa-408b-b95c-fac14cf7e03d-480.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/fc799cf3-9faf-42d8-9685-e6b44a0e142a-360.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/4e36fb78-b1dc-4a2a-a5e3-3e0ffd4f32ad-240.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/be3ce33c-13a2-4bd0-8f46-664c447b3b18-0.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/c49c6722-2135-46dd-8763-f63ffb254923-1080-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/ddc61b89-df11-4ae6-9fb4-e6ec6be96a2f-720-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/27b4b2b1-4712-40fd-8fa6-6ed3a4582e8a-480-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/63202ea6-609f-47d8-b9da-52933b188d0e-360-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/8f7aae49-b8d6-4750-b381-a5eb0af37604-240-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/c99e3385-2111-4e80-b636-f829457221d0-0-hls.torrent" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="1080" fileSize="243338553" url="https://toobnix.org/static/web-videos/a747109e-93fd-473a-88e3-7c3b0c07cf64-1080.mp4" framerate="30" duration="3443" isDefault="true"/>
                <media:content type="video/mp4" medium="video" height="720" fileSize="166216401" url="https://toobnix.org/static/web-videos/d021218c-9314-445b-8bb7-03c275bf8227-720.mp4" framerate="30" duration="3443" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="480" fileSize="122111530" url="https://toobnix.org/static/web-videos/94ca735d-f9c9-48b1-94ae-127db64b658e-480.mp4" framerate="30" duration="3443" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="360" fileSize="101115063" url="https://toobnix.org/static/web-videos/8680e929-4cb1-4798-8986-670592bbf06d-360.mp4" framerate="30" duration="3443" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="240" fileSize="83229148" url="https://toobnix.org/static/web-videos/c02c6d4f-0dae-49d3-9671-36cff1911a30-240.mp4" framerate="30" duration="3443" isDefault="false"/>
                <media:content type="audio/mp4" medium="video" height="0" fileSize="55214658" url="https://toobnix.org/static/web-videos/6dbd808f-63e6-4f07-9739-45b13652b704-0.mp4" framerate="0" duration="3443" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="1080" fileSize="242052051" url="https://toobnix.org/static/streaming-playlists/hls/a0ac2e2f-fc1b-4f35-904e-0504ddae8a3a/becdea25-b869-4255-bcb6-b5ba77a3a3c2-1080-fragmented.mp4" framerate="30" duration="3443" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="720" fileSize="164905555" url="https://toobnix.org/static/streaming-playlists/hls/a0ac2e2f-fc1b-4f35-904e-0504ddae8a3a/15bce8d3-c746-4916-8634-80eb8c63e4cd-720-fragmented.mp4" framerate="30" duration="3443" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="480" fileSize="120787732" url="https://toobnix.org/static/streaming-playlists/hls/a0ac2e2f-fc1b-4f35-904e-0504ddae8a3a/beaa88f8-a0e0-4e8d-8099-b0f3c044f70d-480-fragmented.mp4" framerate="30" duration="3443" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="360" fileSize="99811217" url="https://toobnix.org/static/streaming-playlists/hls/a0ac2e2f-fc1b-4f35-904e-0504ddae8a3a/b4b207fa-c3c9-418e-9f5e-37395a8cb505-360-fragmented.mp4" framerate="30" duration="3443" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="240" fileSize="81902142" url="https://toobnix.org/static/streaming-playlists/hls/a0ac2e2f-fc1b-4f35-904e-0504ddae8a3a/0fee6853-87a1-4927-b026-f56504ce3adb-240-fragmented.mp4" framerate="30" duration="3443" isDefault="false"/>
                <media:content type="audio/mp4" medium="video" height="0" fileSize="55352144" url="https://toobnix.org/static/streaming-playlists/hls/a0ac2e2f-fc1b-4f35-904e-0504ddae8a3a/e412ac47-2c8e-41b5-b339-5ebe64e71266-0-fragmented.mp4" framerate="0" duration="3443" isDefault="false"/>
            </media:group>
            <media:thumbnail url="https://peertube2.cpy.re/lazy-static/previews/875c044b-fcc1-4b59-9965-023a1d9a57d2.jpg"/>
            <media:thumbnail url="https://peertube2.cpy.re/lazy-static/thumbnails/e31f1845-a2fb-43b4-a078-8487a72b0b9c.jpg"/>
            <media:rating>nonadult</media:rating>
            <media:title type="plain">Effective Bug Reports, Code Change Requests, and Conference Proposals by  Michael Dexter</media:title>
            <media:description type="plain">Effective Bug Reports, Code Change Requests, and Conference Proposals by  Michael Dexter Open Source is participatory and BSD Unix is no exception, with its own unique development workflows and events. Bug reporting, code proposing, and event...</media:description>
        </item>
        <item>
            <title><![CDATA[Vox FreeBSD How sound4 works by Christos Margiolis]]></title>
            <link>https://peertube2.cpy.re/w/c636X2QDCrUCsVvgZVfMZr</link>
            <guid>https://peertube2.cpy.re/w/c636X2QDCrUCsVvgZVfMZr</guid>
            <pubDate>Tue, 09 Sep 2025 03:33:34 GMT</pubDate>
            <description><![CDATA[FreeBSD's audio subsystem, sound(4), is one of the fastest out there, but is rather unknown and until recently was largely unmaintained. This talk will go through the various components of sound(4) that make sound possible on FreeBSD, that is: ...]]></description>
            <content:encoded><![CDATA[<p>FreeBSD's audio subsystem, sound(4), is one of the fastest out there, but is rather unknown and until recently was largely unmaintained. This talk will go through the various components of sound(4) that make sound possible on FreeBSD, that is:</p>
The generic driver's structure, control flow and interaction with the device drivers.

The audio processing chain.

The user-facing interfaces for interacting with the sound system.

<p>The talk will also mention some notable recent, ongoing and future work across the whole sound system, since my taking over of its development.</p>
<p>I also intend to showcase examples of:</p>
Audio driver and application develpoment on FreeBSD.

FreeBSD being used for music production, and why a musician would consider it instead of other operating systems.

<p>(I may have to leave one or both of these out to keep the talk to the desired duration)</p>
<p>For more information, please visit:<br />
<a href="https://www.bsdcan.org/2025/" target="_blank" rel="noopener noreferrer">https://www.bsdcan.org/2025/</a></p>
<ul>
<li>and -<br />
<a href="https://www.bsdcan.org/2025/timetable/timetable-Vox-FreeBSD-How.html" target="_blank" rel="noopener noreferrer">https://www.bsdcan.org/2025/timetable/timetable-Vox-FreeBSD-How.html</a></li>
</ul>
<p>#runbsd #freebsd</p>
]]></content:encoded>
            <dc:creator>BSDTV</dc:creator>
            <category>Science &amp; Technology</category>
            <enclosure length="323397136" type="video/mp4" url="https://peertube2.cpy.re/download/videos/generate/59c88a34-6809-4ba8-96bb-1628764696b7?videoFileIds=5498048"/>
            <media:community>
                <media:statistics views="1"/>
            </media:community>
            <media:embed url="https://peertube2.cpy.re/videos/embed/c636X2QDCrUCsVvgZVfMZr"/>
            <media:player url="https://peertube2.cpy.re/w/c636X2QDCrUCsVvgZVfMZr"/>
            <media:group>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/66eb3397-9b7d-457f-999b-aa45eddaa8b1-1080.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/e253f126-c891-4109-9492-c4767222ac7b-720.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/f14499f4-82d7-4bd7-a446-49d3045360d1-480.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/5a0c32f7-952e-4fd3-b2a0-6c49c32610db-360.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/e2e507a5-4558-457e-9887-0fcf76f9df2e-240.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/688f3bcb-9827-4b04-98c0-ecbfab8d3cff-0.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/4afde2d1-8b9e-44ef-8b61-326cf6e52e0b-1080-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/9ebeac90-8a3f-4904-ac86-0d4b5663c353-720-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/a1f420f9-638d-4ff0-b713-16b27ec327d4-480-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/5b67e7d1-f855-4d6a-bfdf-ebce58aac76b-360-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/a5b2cf4c-30c3-4efc-9ce5-b18fb5f0c501-240-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/4f8a0691-cbfe-4c76-99bf-4c3dd40f0a78-0-hls.torrent" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="1080" fileSize="323397136" url="https://toobnix.org/static/web-videos/a3a78b4d-2bda-4f74-ae7f-d78112d8ae14-1080.mp4" framerate="30" duration="2726" isDefault="true"/>
                <media:content type="video/mp4" medium="video" height="720" fileSize="156424099" url="https://toobnix.org/static/web-videos/a3ad1aad-b229-491d-8e72-b50f6f5a96b7-720.mp4" framerate="30" duration="2726" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="480" fileSize="99372705" url="https://toobnix.org/static/web-videos/1b8d60cf-a28d-4eca-b232-11c9c19e5cf8-480.mp4" framerate="30" duration="2726" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="360" fileSize="78958748" url="https://toobnix.org/static/web-videos/02a5505a-f63a-4147-a7cf-419c8a49ed40-360.mp4" framerate="30" duration="2726" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="240" fileSize="62657845" url="https://toobnix.org/static/web-videos/85b57c7c-8ca9-4bf0-a15a-4fc29977d3be-240.mp4" framerate="30" duration="2726" isDefault="false"/>
                <media:content type="audio/mp4" medium="video" height="0" fileSize="43511080" url="https://toobnix.org/static/web-videos/0c58ed70-e487-4223-bd6b-b9b76055a5a8-0.mp4" framerate="0" duration="2726" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="1080" fileSize="322364798" url="https://toobnix.org/static/streaming-playlists/hls/59c88a34-6809-4ba8-96bb-1628764696b7/acc1aeba-fa56-4616-9a9b-7c2ef89b289f-1080-fragmented.mp4" framerate="30" duration="2726" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="720" fileSize="155396249" url="https://toobnix.org/static/streaming-playlists/hls/59c88a34-6809-4ba8-96bb-1628764696b7/62c69e46-11d4-4ffe-9d62-de074a9e82fc-720-fragmented.mp4" framerate="30" duration="2726" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="480" fileSize="98305679" url="https://toobnix.org/static/streaming-playlists/hls/59c88a34-6809-4ba8-96bb-1628764696b7/81e500c2-9fb4-4779-9936-6d181589fff9-480-fragmented.mp4" framerate="30" duration="2726" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="360" fileSize="77880226" url="https://toobnix.org/static/streaming-playlists/hls/59c88a34-6809-4ba8-96bb-1628764696b7/0f3d3531-6917-405e-bf88-8bb76bb1162a-360-fragmented.mp4" framerate="30" duration="2726" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="240" fileSize="61516899" url="https://toobnix.org/static/streaming-playlists/hls/59c88a34-6809-4ba8-96bb-1628764696b7/66c8002a-e7d6-421f-b8c5-008f508f3600-240-fragmented.mp4" framerate="30" duration="2726" isDefault="false"/>
                <media:content type="audio/mp4" medium="video" height="0" fileSize="43619802" url="https://toobnix.org/static/streaming-playlists/hls/59c88a34-6809-4ba8-96bb-1628764696b7/a57abfcb-d41c-4693-b492-d22a27c4061e-0-fragmented.mp4" framerate="0" duration="2726" isDefault="false"/>
            </media:group>
            <media:thumbnail url="https://peertube2.cpy.re/lazy-static/previews/91f8daa2-36bd-4d3a-85aa-36e0f9724b00.jpg"/>
            <media:thumbnail url="https://peertube2.cpy.re/lazy-static/thumbnails/77b66bfb-d983-44aa-8e5f-00550b1a83bf.jpg"/>
            <media:rating>nonadult</media:rating>
            <media:title type="plain">Vox FreeBSD How sound4 works by Christos Margiolis</media:title>
            <media:description type="plain">FreeBSD's audio subsystem, sound(4), is one of the fastest out there, but is rather unknown and until recently was largely unmaintained. This talk will go through the various components of sound(4) that make sound possible on FreeBSD, that is: ...</media:description>
        </item>
        <item>
            <title><![CDATA[Why and how we're migrating many of our servers from Linux to the BSDs by Stefano Marinelli]]></title>
            <link>https://peertube2.cpy.re/w/1HgxXNXMxEyGgzuiPrvYqR</link>
            <guid>https://peertube2.cpy.re/w/1HgxXNXMxEyGgzuiPrvYqR</guid>
            <pubDate>Tue, 09 Sep 2025 01:48:21 GMT</pubDate>
            <description><![CDATA[Why (and how) we're migrating many of our servers from Linux to the BSDs by Stefano Marinelli A few years ago, we decided to migrate many of our servers (and many of those of our clients) from Linux to the BSDs - FreeBSD, OpenBSD, NetBSD - depe...]]></description>
            <content:encoded><![CDATA[<p>Why (and how) we're migrating many of our servers from Linux to the BSDs by Stefano Marinelli</p>
<p>A few years ago, we decided to migrate many of our servers (and many of those of our clients) from Linux to the BSDs - FreeBSD, OpenBSD, NetBSD - depending on the specific services. In this presentation, I will discuss the reasons behind our decision, the technical and organizational challenges we faced, the tangible benefits we have experienced, and why we believe this migration is successful. I will provide specific examples and real-life case studies. In an increasingly complex world, relying on simple, stable, and secure solutions is becoming more and more important, and the BSDs can make a significant contribution in this direction.</p>
<p>For more information, please visit:<br />
<a href="https://www.bsdcan.org/2025/" target="_blank" rel="noopener noreferrer">https://www.bsdcan.org/2025/</a></p>
<ul>
<li>and -<br />
<a href="https://www.bsdcan.org/2025/timetable/timetable-Why-and-how.html" target="_blank" rel="noopener noreferrer">https://www.bsdcan.org/2025/timetable/timetable-Why-and-how.html</a></li>
</ul>
]]></content:encoded>
            <dc:creator>BSDTV</dc:creator>
            <category>Science &amp; Technology</category>
            <enclosure length="305068075" type="video/mp4" url="https://peertube2.cpy.re/download/videos/generate/05c31408-cc95-4cc6-9288-53ce310a3239?videoFileIds=5498012"/>
            <media:community>
                <media:statistics views="3"/>
            </media:community>
            <media:embed url="https://peertube2.cpy.re/videos/embed/1HgxXNXMxEyGgzuiPrvYqR"/>
            <media:player url="https://peertube2.cpy.re/w/1HgxXNXMxEyGgzuiPrvYqR"/>
            <media:group>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/009c2feb-5465-42e7-b34d-b0fe3bfa42d5-1080.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/bb5bb391-45b2-4247-8292-213f724d6928-720.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/8dff5145-2172-45f5-a595-8431c468f5e1-480.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/6c38995e-52fe-49f0-841f-755aa0050636-360.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/e08ce1b3-1fb3-4423-af14-0edbfc152be9-240.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/0c6ec5f2-4765-444f-a7d3-0749c69b59ae-0.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/ca48c9ba-38e9-40d5-8214-7f9bc836b557-1080-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/60f8dc63-bf17-4078-b91d-b04dc84953dd-720-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/5c6ee863-6278-4e8a-868b-112f51d83d3c-480-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/c948ad2f-045d-4deb-b8e1-bc20a7d59e26-360-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/91c811f1-c93a-481d-9bc8-caef64fd17d2-240-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/1379ba2d-5684-4c10-9e29-e90ed0077af3-0-hls.torrent" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="1080" fileSize="305068075" url="https://toobnix.org/static/web-videos/4a27dcdc-67ad-495f-9027-8873ceddada6-1080.mp4" framerate="30" duration="3606" isDefault="true"/>
                <media:content type="video/mp4" medium="video" height="720" fileSize="203402724" url="https://toobnix.org/static/web-videos/670fd423-76f9-4865-bbb4-1ae786270f02-720.mp4" framerate="30" duration="3606" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="480" fileSize="145936239" url="https://toobnix.org/static/web-videos/c577b7cf-79d4-4826-87df-33edf5647df4-480.mp4" framerate="30" duration="3606" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="360" fileSize="118363059" url="https://toobnix.org/static/web-videos/100bbb6a-9aed-41d4-8ce7-1c4a24e4e6a6-360.mp4" framerate="30" duration="3606" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="240" fileSize="93547869" url="https://toobnix.org/static/web-videos/4c6a7993-deb0-4bb5-a12d-3e4405032832-240.mp4" framerate="30" duration="3606" isDefault="false"/>
                <media:content type="audio/mp4" medium="video" height="0" fileSize="57791607" url="https://toobnix.org/static/web-videos/7da0c8b6-077b-4b1a-a1cb-990dd81e121f-0.mp4" framerate="0" duration="3606" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="1080" fileSize="303742905" url="https://toobnix.org/static/streaming-playlists/hls/05c31408-cc95-4cc6-9288-53ce310a3239/929c1653-cd19-42ce-83b4-b381a8f819ef-1080-fragmented.mp4" framerate="30" duration="3606" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="720" fileSize="202040930" url="https://toobnix.org/static/streaming-playlists/hls/05c31408-cc95-4cc6-9288-53ce310a3239/8758ca1b-e123-44cf-95c0-8507f86161b7-720-fragmented.mp4" framerate="30" duration="3606" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="480" fileSize="144508973" url="https://toobnix.org/static/streaming-playlists/hls/05c31408-cc95-4cc6-9288-53ce310a3239/2a72aee8-c64b-4086-ad87-f650ad3d5103-480-fragmented.mp4" framerate="30" duration="3606" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="360" fileSize="116881401" url="https://toobnix.org/static/streaming-playlists/hls/05c31408-cc95-4cc6-9288-53ce310a3239/bdfa1882-a7cf-4f25-8101-e2e603d39f85-360-fragmented.mp4" framerate="30" duration="3606" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="240" fileSize="92025491" url="https://toobnix.org/static/streaming-playlists/hls/05c31408-cc95-4cc6-9288-53ce310a3239/7258032e-89bb-4346-ab97-043962bc8a3d-240-fragmented.mp4" framerate="30" duration="3606" isDefault="false"/>
                <media:content type="audio/mp4" medium="video" height="0" fileSize="57935453" url="https://toobnix.org/static/streaming-playlists/hls/05c31408-cc95-4cc6-9288-53ce310a3239/f536668b-bae0-408d-8d53-9cb9b77e97e6-0-fragmented.mp4" framerate="0" duration="3606" isDefault="false"/>
            </media:group>
            <media:thumbnail url="https://peertube2.cpy.re/lazy-static/previews/02d69f39-6368-44c2-ba52-2a657d51e2b6.jpg"/>
            <media:thumbnail url="https://peertube2.cpy.re/lazy-static/thumbnails/14e11931-2987-416e-b6c9-2df1540c54f1.jpg"/>
            <media:rating>nonadult</media:rating>
            <media:title type="plain">Why and how we're migrating many of our servers from Linux to the BSDs by Stefano Marinelli</media:title>
            <media:description type="plain">Why (and how) we're migrating many of our servers from Linux to the BSDs by Stefano Marinelli A few years ago, we decided to migrate many of our servers (and many of those of our clients) from Linux to the BSDs - FreeBSD, OpenBSD, NetBSD - depe...</media:description>
        </item>
        <item>
            <title><![CDATA[ELF Nightmares GOTs, PLTs, and Relocations Oh My by John Baldwin]]></title>
            <link>https://peertube2.cpy.re/w/udjSH6vkKV31ARfDESw9kv</link>
            <guid>https://peertube2.cpy.re/w/udjSH6vkKV31ARfDESw9kv</guid>
            <pubDate>Tue, 09 Sep 2025 01:17:50 GMT</pubDate>
            <description><![CDATA[ELF Nightmares: GOTs, PLTs, and Relocations Oh My by John Baldwin Mapping abstract symbol names in source code to concrete addresses at runtime requires cooperation between the compiler, static linker, and runtime loader. This talk will talk ab...]]></description>
            <content:encoded><![CDATA[<p>ELF Nightmares: GOTs, PLTs, and Relocations Oh My by John Baldwin</p>
<p>Mapping abstract symbol names in source code to concrete addresses at runtime requires cooperation between the compiler, static linker, and runtime loader. This talk will talk about some of the practices and data structures used for this task including ELF relocations, Global Offset Tables and Procedure Linkage Tables. Depending on time, it may also cover some more advanced topics such as initialization functions ("ifuncs").</p>
<p>For more information, please visit:<br />
<a href="https://www.bsdcan.org/2025/" target="_blank" rel="noopener noreferrer">https://www.bsdcan.org/2025/</a></p>
<ul>
<li>and -<br />
<a href="https://www.bsdcan.org/2025/timetable/timetable-ELF-Nightmares-GOTs,.html" target="_blank" rel="noopener noreferrer">https://www.bsdcan.org/2025/timetable/timetable-ELF-Nightmares-GOTs,.html</a></li>
</ul>
<p>#runbsd #freebsd</p>
]]></content:encoded>
            <dc:creator>BSDTV</dc:creator>
            <category>Science &amp; Technology</category>
            <enclosure length="232719664" type="video/mp4" url="https://peertube2.cpy.re/download/videos/generate/e478707d-3faa-4d72-ad3d-3335e744205b?videoFileIds=5498002"/>
            <media:community>
                <media:statistics views="2"/>
            </media:community>
            <media:embed url="https://peertube2.cpy.re/videos/embed/udjSH6vkKV31ARfDESw9kv"/>
            <media:player url="https://peertube2.cpy.re/w/udjSH6vkKV31ARfDESw9kv"/>
            <media:group>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/d36ab2a2-71d0-493b-a512-0ab52e092012-1080.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/8ed583a9-8fd0-43a6-aa27-462b774967c1-720.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/5f2ce38f-bea9-4191-a167-fe65f04781b3-480.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/f36b716b-0eae-427f-83ff-b5b66f38f6bd-360.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/535b9ed1-b9aa-4cce-bb5a-f0d3a7a027bd-240.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/aa3352de-9684-48a8-b2c3-55ada2772c24-0.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/00d68e3a-5056-42af-a03b-0ba56f684c31-1080-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/18324651-f635-4d9c-bc46-d5b5c0fa1d68-720-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/a960e549-db09-40cd-8604-0821c52f19b3-480-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/a17b48bc-5bdb-4a2a-93e2-0d22c81b552b-360-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/b5fe56e2-aea1-4aa6-9e41-3ecab4f339b1-240-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/c21f2fa3-4b35-4a5f-b159-a73e97e9a93d-0-hls.torrent" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="1080" fileSize="232719664" url="https://toobnix.org/static/web-videos/a4ed3fca-1b95-4874-b22e-576724720124-1080.mp4" framerate="30" duration="3465" isDefault="true"/>
                <media:content type="video/mp4" medium="video" height="720" fileSize="162011975" url="https://toobnix.org/static/web-videos/d8d752d4-abc6-4c70-b5c3-dbe526c9fdfe-720.mp4" framerate="30" duration="3465" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="480" fileSize="120795382" url="https://toobnix.org/static/web-videos/fa5a4cc0-fbb0-4912-b021-25eb8558d479-480.mp4" framerate="30" duration="3465" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="360" fileSize="100562407" url="https://toobnix.org/static/web-videos/8fe0c4c8-3463-4d76-a465-99cede6c9120-360.mp4" framerate="30" duration="3465" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="240" fileSize="82725056" url="https://toobnix.org/static/web-videos/1d0ac6fe-0ad7-4157-9fcc-588638f08daf-240.mp4" framerate="30" duration="3465" isDefault="false"/>
                <media:content type="audio/mp4" medium="video" height="0" fileSize="55472879" url="https://toobnix.org/static/web-videos/2e3872e4-1b53-4020-ab22-e89ac08e1336-0.mp4" framerate="0" duration="3465" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="1080" fileSize="231478478" url="https://toobnix.org/static/streaming-playlists/hls/e478707d-3faa-4d72-ad3d-3335e744205b/ec2573db-4729-4776-ae08-d706d37f0356-1080-fragmented.mp4" framerate="30" duration="3465" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="720" fileSize="160739829" url="https://toobnix.org/static/streaming-playlists/hls/e478707d-3faa-4d72-ad3d-3335e744205b/15f0b056-c021-4d3e-97df-e71432b6cdb9-720-fragmented.mp4" framerate="30" duration="3465" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="480" fileSize="119459156" url="https://toobnix.org/static/streaming-playlists/hls/e478707d-3faa-4d72-ad3d-3335e744205b/c4df1b5f-40d8-45ae-b245-a6844f07936f-480-fragmented.mp4" framerate="30" duration="3465" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="360" fileSize="99180133" url="https://toobnix.org/static/streaming-playlists/hls/e478707d-3faa-4d72-ad3d-3335e744205b/020f436c-c236-49ff-86f9-d89bd936aad4-360-fragmented.mp4" framerate="30" duration="3465" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="240" fileSize="81292678" url="https://toobnix.org/static/streaming-playlists/hls/e478707d-3faa-4d72-ad3d-3335e744205b/7a9c5f4f-4b4c-4833-b43f-e4e57d49801e-240-fragmented.mp4" framerate="30" duration="3465" isDefault="false"/>
                <media:content type="audio/mp4" medium="video" height="0" fileSize="55611501" url="https://toobnix.org/static/streaming-playlists/hls/e478707d-3faa-4d72-ad3d-3335e744205b/13c4c615-bb61-4855-86b5-45ddff914512-0-fragmented.mp4" framerate="0" duration="3465" isDefault="false"/>
            </media:group>
            <media:thumbnail url="https://peertube2.cpy.re/lazy-static/previews/8c907c51-027a-4bd6-972b-25bb2f26ab4a.jpg"/>
            <media:thumbnail url="https://peertube2.cpy.re/lazy-static/thumbnails/d5464191-5f94-453d-b91f-97b674fe4d31.jpg"/>
            <media:rating>nonadult</media:rating>
            <media:title type="plain">ELF Nightmares GOTs, PLTs, and Relocations Oh My by John Baldwin</media:title>
            <media:description type="plain">ELF Nightmares: GOTs, PLTs, and Relocations Oh My by John Baldwin Mapping abstract symbol names in source code to concrete addresses at runtime requires cooperation between the compiler, static linker, and runtime loader. This talk will talk ab...</media:description>
        </item>
        <item>
            <title><![CDATA[Running a root DNS server on FreeBSD    from Alpha to Now by Daniel Mahoney]]></title>
            <link>https://peertube2.cpy.re/w/hL5BvuZsy5B3PSeW4YzeNa</link>
            <guid>https://peertube2.cpy.re/w/hL5BvuZsy5B3PSeW4YzeNa</guid>
            <pubDate>Tue, 09 Sep 2025 01:11:52 GMT</pubDate>
            <description><![CDATA[ISC has been proudly using FreeBSD in production for a long time, including to serve critical internet infrastructure with a global user base (including you!), from the DEC Alpha days up till now, mostly on bare-metal. In this talk I'll go over...]]></description>
            <content:encoded><![CDATA[<p>ISC has been proudly using FreeBSD in production for a long time, including to serve critical internet infrastructure with a global user base (including you!), from the DEC Alpha days up till now, mostly on bare-metal.</p>
<p>In this talk I'll go over some of how we (and I) got here, how we've managed far-away installs and upgrades without remote hands during a global pandemic, and how we believe that in a Linux-centric world, BSD gives us an advantage, not only in diversity, but from the community, and touch on how a single FreeBSD box has replaced an install that used to consist of separate routers and switches.</p>
<p>We'll cover some of our MacGyver moments, share some head-scratchers, and even cover some of the things we'd love to see in the future, both from the community as well as where we're hoping to go.</p>
<p>If the conference leaders think it wise, this talk could also include a light touch on how BGP and Anycast work, both in general, as well as how the global routing table is affected by the less-and-more specific routes to F that we announce to keep local traffic local, and how ISC works with its CDN partner. (These are not BSD-specific topics, but the maturity of reasonable routing daemons in ports have meant that we can now do this without needing an upstream router).</p>
<p>For more information, please visit:<br />
<a href="https://www.bsdcan.org/2025/" target="_blank" rel="noopener noreferrer">https://www.bsdcan.org/2025/</a></p>
<ul>
<li>and -<br />
<a href="https://www.bsdcan.org/2025/timetable/timetable-Running-a-root.html" target="_blank" rel="noopener noreferrer">https://www.bsdcan.org/2025/timetable/timetable-Running-a-root.html</a></li>
</ul>
]]></content:encoded>
            <dc:creator>BSDTV</dc:creator>
            <category>Science &amp; Technology</category>
            <enclosure length="353146448" type="video/mp4" url="https://peertube2.cpy.re/download/videos/generate/87b9c96d-0704-432d-a210-2136cd5a02d1?videoFileIds=5497937"/>
            <media:community>
                <media:statistics views="24"/>
            </media:community>
            <media:embed url="https://peertube2.cpy.re/videos/embed/hL5BvuZsy5B3PSeW4YzeNa"/>
            <media:player url="https://peertube2.cpy.re/w/hL5BvuZsy5B3PSeW4YzeNa"/>
            <media:group>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/2fb00f16-801f-4c7c-a156-c2c5444a7111-1080.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/78c3473b-482a-4693-b8f0-3b4cfb617add-720.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/6250c759-4733-4f19-8916-cb02d4fa0d72-480.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/9570a590-c587-4b01-b724-6a75213d6822-360.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/2141bf84-9b94-4ae4-9658-abc398e93e0a-240.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/38ce054a-0899-4930-866f-2da77cb822ac-0.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/70d124ec-14e1-4065-91d2-45fd12d49aef-1080-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/876e52f2-f51f-408c-8602-689a81de0734-720-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/c920cf56-a369-4307-a6e9-7e3837ddfe8c-480-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/2a3115d4-2ebe-4d55-9a35-e22acddb32cf-360-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/3097068b-bc45-4dd8-86e1-009387339757-240-hls.torrent" isDefault="false"/>
                <media:peerLink type="application/x-bittorrent" href="https://peertube2.cpy.re/lazy-static/torrents/49be3941-2e97-43ce-bebc-ab0155851723-0-hls.torrent" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="1080" fileSize="353146448" url="https://toobnix.org/static/web-videos/40a91ad6-3f2f-4710-bf00-a37e5fe8aa1f-1080.mp4" framerate="30" duration="4301" isDefault="true"/>
                <media:content type="video/mp4" medium="video" height="720" fileSize="245943365" url="https://toobnix.org/static/web-videos/18fe885f-5f73-4e7b-9ad7-4efc2068ee6e-720.mp4" framerate="30" duration="4301" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="480" fileSize="177741196" url="https://toobnix.org/static/web-videos/ff19832d-1f97-4450-86d1-fa0b8d33ab27-480.mp4" framerate="30" duration="4301" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="360" fileSize="142609422" url="https://toobnix.org/static/web-videos/424b8917-b8a9-4b72-a4bb-8d0750526cc6-360.mp4" framerate="30" duration="4301" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="240" fileSize="111205415" url="https://toobnix.org/static/web-videos/188c8251-29cc-4496-9f30-e550c898eb95-240.mp4" framerate="30" duration="4301" isDefault="false"/>
                <media:content type="audio/mp4" medium="video" height="0" fileSize="68897493" url="https://toobnix.org/static/web-videos/4f221e73-202e-41a6-b9cf-6bfe7bc7162d-0.mp4" framerate="0" duration="4301" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="1080" fileSize="351667814" url="https://toobnix.org/static/streaming-playlists/hls/87b9c96d-0704-432d-a210-2136cd5a02d1/a1918545-45d8-4ee1-ba99-69ceab00aa3b-1080-fragmented.mp4" framerate="30" duration="4301" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="720" fileSize="244415431" url="https://toobnix.org/static/streaming-playlists/hls/87b9c96d-0704-432d-a210-2136cd5a02d1/584c2b36-b0c0-4db6-936c-2e1da8a5f2d8-720-fragmented.mp4" framerate="30" duration="4301" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="480" fileSize="176164478" url="https://toobnix.org/static/streaming-playlists/hls/87b9c96d-0704-432d-a210-2136cd5a02d1/6391f1ca-35a0-4f66-81d9-5d52cb6f4713-480-fragmented.mp4" framerate="30" duration="4301" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="360" fileSize="141009468" url="https://toobnix.org/static/streaming-playlists/hls/87b9c96d-0704-432d-a210-2136cd5a02d1/de777226-eeef-48c2-be5d-7aad630cde93-360-fragmented.mp4" framerate="30" duration="4301" isDefault="false"/>
                <media:content type="video/mp4" medium="video" height="240" fileSize="109568533" url="https://toobnix.org/static/streaming-playlists/hls/87b9c96d-0704-432d-a210-2136cd5a02d1/c719b065-f946-4e8e-9d27-268d7f00724a-240-fragmented.mp4" framerate="30" duration="4301" isDefault="false"/>
                <media:content type="audio/mp4" medium="video" height="0" fileSize="69068599" url="https://toobnix.org/static/streaming-playlists/hls/87b9c96d-0704-432d-a210-2136cd5a02d1/c38faf75-6aca-49cc-ba54-062cbb2cb801-0-fragmented.mp4" framerate="0" duration="4301" isDefault="false"/>
            </media:group>
            <media:thumbnail url="https://peertube2.cpy.re/lazy-static/previews/70c07df3-53d1-4018-809d-a1379c6f8a42.jpg"/>
            <media:thumbnail url="https://peertube2.cpy.re/lazy-static/thumbnails/83123af8-c24f-4186-a8ea-fa85f890a270.jpg"/>
            <media:rating>nonadult</media:rating>
            <media:title type="plain">Running a root DNS server on FreeBSD    from Alpha to Now by Daniel Mahoney</media:title>
            <media:description type="plain">ISC has been proudly using FreeBSD in production for a long time, including to serve critical internet infrastructure with a global user base (including you!), from the DEC Alpha days up till now, mostly on bare-metal. In this talk I'll go over...</media:description>
        </item>
    </channel>
</rss>

Videos of subscriptions feeds

path Parameters
format
required
string
Enum: "xml" "rss" "rss2" "atom" "atom1" "json" "json1"

format expected (we focus on making rss the most feature-rich ; it serves Media RSS)

query Parameters
accountId
required
string

limit listing to a specific account

hasHLSFiles
boolean

PeerTube >= 4.0 Display only videos that have HLS files

hasWebVideoFiles
boolean

PeerTube >= 6.0 Display only videos that have Web Video files

include
integer
Enum: 0 1 2 4 8 16 32

Only administrators and moderators can use this parameter

Include additional videos in results (can be combined using bitwise or operator)

  • 0 NONE
  • 1 NOT_PUBLISHED_STATE
  • 2 BLACKLISTED
  • 4 BLOCKED_OWNER
  • 8 FILES
  • 16 CAPTIONS
  • 32 VIDEO SOURCE
isLocal
boolean

PeerTube >= 4.0 Display only local or remote objects

nsfw
string
Enum: "true" "false"

whether to include nsfw videos, if any

privacyOneOf
integer (VideoPrivacySet)
Enum: 1 2 3 4 5

PeerTube >= 4.0 Display only videos in this specific privacy/privacies

sort
string
Example: sort=-createdAt

Sort column

token
required
string

private token allowing access

Responses

Response samples

Content type
No sample

Videos podcast feed

query Parameters
videoChannelId
required
string

Limit listing to a specific video channel

Responses

Register

As a visitor, you can use this API to open an account (if registrations are open on that PeerTube instance). As an admin, you should use the dedicated User creation API instead.

Resend user verification link

Request Body schema: application/json
email
required
string

User email

Responses

Request samples

Content type
application/json
{
  • "email": "string"
}

Resend verification link to registration request email

Request Body schema: application/json
email
required
string

Registration email

Responses

Request samples

Content type
application/json
{
  • "email": "string"
}

Verify a user

Following a user registration, the new user will receive an email asking to click a link containing a secret. This endpoint can also be used to verify a new email set in the user account.

path Parameters
id
required
integer (id) >= 1
Example: 42

Entity id

Request Body schema: application/json
verificationString
required
string <url>
isPendingEmail
boolean

Responses

Request samples

Content type
application/json
{
  • "verificationString": "string",
  • "isPendingEmail": true
}

Verify a registration email

Following a user registration request, the user will receive an email asking to click a link containing a secret.

path Parameters
registrationId
required
integer (id) >= 1
Example: 42

Registration ID

Request Body schema: application/json
verificationString
required
string <url>

Responses

Request samples

Content type
application/json
{
  • "verificationString": "string"
}

Register a user

Signup has to be enabled and signup approval is not required

Request Body schema: application/json
required
email
required
string <email>

email of the user, used for login or service communications

password
required
string <password> (password) [ 6 .. 255 ] characters
username
required
string [ 1 .. 50 ] characters /^[a-z0-9._]+$/

immutable name of the user, used to find or mention its actor

object

channel base information used to create the first channel of the user

displayName
string [ 1 .. 120 ] characters

editable name of the user, displayed in its representations

Responses

Request samples

Content type
application/json
{
  • "username": "chocobozzz",
  • "password": "pa$$word",
  • "email": "user@example.com",
  • "displayName": "string",
  • "channel": {
    }
}

Request registration

Signup has to be enabled and require approval on the instance

Request Body schema: application/json
email
required
string <email>

email of the user, used for login or service communications

password
required
string <password> (password) [ 6 .. 255 ] characters
registrationReason
required
string

reason for the user to register on the instance

username
required
string [ 1 .. 50 ] characters /^[a-z0-9._]+$/

immutable name of the user, used to find or mention its actor

object

channel base information used to create the first channel of the user

displayName
string [ 1 .. 120 ] characters

editable name of the user, displayed in its representations

Responses

Request samples

Content type
application/json
{
  • "username": "chocobozzz",
  • "password": "pa$$word",
  • "email": "user@example.com",
  • "displayName": "string",
  • "channel": {
    },
  • "registrationReason": "string"
}

Response samples

Content type
application/json
{
  • "id": 42,
  • "state": {
    },
  • "registrationReason": "string",
  • "moderationResponse": "string",
  • "username": "string",
  • "email": "user@example.com",
  • "emailVerified": true,
  • "accountDisplayName": "string",
  • "channelHandle": "string",
  • "channelDisplayName": "string",
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z",
  • "user": {
    }
}

Accept registration

Authorizations:
OAuth2
path Parameters
registrationId
required
integer (id) >= 1
Example: 42

Registration ID

Request Body schema: application/json
moderationResponse
required
string

Moderation response to send to the user

preventEmailDelivery
boolean

Set it to true if you don't want PeerTube to send an email to the user

Responses

Request samples

Content type
application/json
{
  • "moderationResponse": "string",
  • "preventEmailDelivery": true
}

Reject registration

Authorizations:
OAuth2
path Parameters
registrationId
required
integer (id) >= 1
Example: 42

Registration ID

Request Body schema: application/json
moderationResponse
required
string

Moderation response to send to the user

preventEmailDelivery
boolean

Set it to true if you don't want PeerTube to send an email to the user

Responses

Request samples

Content type
application/json
{
  • "moderationResponse": "string",
  • "preventEmailDelivery": true
}

Delete registration

Delete the registration entry. It will not remove the user associated with this registration (if any)

Authorizations:
OAuth2
path Parameters
registrationId
required
integer (id) >= 1
Example: 42

Registration ID

Responses

List registrations

Authorizations:
OAuth2
query Parameters
count
integer [ 1 .. 100 ]
Default: 15

Number of items to return

search
string
sort
string
Enum: "-createdAt" "createdAt" "state" "-state"
start
integer >= 0

Offset used to paginate results

Responses

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

Login/Logout

Sessions deal with access tokens over time. Only one session token can currently be used at a time.

Login prerequisite

You need to retrieve a client id and secret before logging in.

Responses

Request samples

API="https://peertube2.cpy.re/api/v1"

## AUTH
curl -s "$API/oauth-clients/local"

Response samples

Content type
application/json
{
  • "client_id": "v1ikx5hnfop4mdpnci8nsqh93c45rldf",
  • "client_secret": "AjWiOapPltI6EnsWQwlFarRtLh4u8tDt"
}

Login

With your client id and secret, you can retrieve an access and refresh tokens.

header Parameters
x-peertube-otp
string

If the user enabled two factor authentication, you need to provide the OTP code in this header

Request Body schema: application/x-www-form-urlencoded
client_id
required
string = 32 characters /^[a-z0-9]$/
client_secret
required
string = 32 characters /^[a-zA-Z0-9]$/
grant_type
required
string
password
required
string <password> (password) [ 6 .. 255 ] characters
username
required
string [ 1 .. 50 ] characters /^[a-z0-9._]+$/

immutable name of the user, used to find or mention its actor

Responses

Request samples

## DEPENDENCIES: jq
API="https://peertube2.cpy.re/api/v1"
USERNAME="<your_username>"
PASSWORD="<your_password>"

## AUTH
client_id=$(curl -s "$API/oauth-clients/local" | jq -r ".client_id")
client_secret=$(curl -s "$API/oauth-clients/local" | jq -r ".client_secret")
curl -s "$API/users/token" \
  --data client_id="$client_id" \
  --data client_secret="$client_secret" \
  --data grant_type=password \
  --data username="$USERNAME" \
  --data-urlencode password="$PASSWORD" \
  | jq -r ".access_token"

Response samples

Content type
application/json
{
  • "token_type": "Bearer",
  • "access_token": "90286a0bdf0f7315d9d3fe8dabf9e1d2be9c97d0",
  • "refresh_token": "2e0d675df9fc96d2e4ec8a3ebbbf45eca9137bb7",
  • "expires_in": 14399,
  • "refresh_token_expires_in": 1209600
}

Logout

Revokes your access token and its associated refresh token, destroying your current session.

Authorizations:
OAuth2

Responses

List token sessions

Authorizations:
OAuth2
path Parameters
id
required
integer (id) >= 1
Example: 42

Entity id

Responses

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

List token sessions

Authorizations:
OAuth2
path Parameters
id
required
integer (id) >= 1
Example: 42

Entity id

tokenSessionId
required
integer (id) >= 1
Example: 42

Token session Id

Responses

Accounts

Accounts encompass remote accounts discovered across the federation, and correspond to the main Actor, along with video channels a user can create, which are also Actors. When a comment is posted, it is done with your Account's Actor.

Get an account

path Parameters
name
required
string
Example: chocobozzz | chocobozzz@example.org

The username or handle of the account

Responses

Response samples

Content type
application/json
{
  • "id": 42,
  • "url": "string",
  • "name": "chocobozzz",
  • "avatars": [
    ],
  • "host": "example.com",
  • "hostRedundancyAllowed": true,
  • "followingCount": 0,
  • "followersCount": 0,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z",
  • "userId": 42,
  • "displayName": "string",
  • "description": "string"
}

List videos of an account

path Parameters
name
required
string
Example: chocobozzz | chocobozzz@example.org

The username or handle of the account

query Parameters
string or Array of strings

PeerTube >= 6.2 Admins and moderators only filter on videos that contain one of these automatic tags

VideoCategorySet (integer) or Array of VideoCategorySet (integers)

category id of the video (see /videos/categories)

count
integer [ 1 .. 100 ]
Default: 15

Number of items to return

excludeAlreadyWatched
boolean

Whether or not to exclude videos that are in the user's video history

hasHLSFiles
boolean

PeerTube >= 4.0 Display only videos that have HLS files

hasWebVideoFiles
boolean

PeerTube >= 6.0 Display only videos that have Web Video files

host
string

Find elements owned by this host

include
integer
Enum: 0 1 2 4 8 16 32

Only administrators and moderators can use this parameter

Include additional videos in results (can be combined using bitwise or operator)

  • 0 NONE
  • 1 NOT_PUBLISHED_STATE
  • 2 BLACKLISTED
  • 4 BLOCKED_OWNER
  • 8 FILES
  • 16 CAPTIONS
  • 32 VIDEO SOURCE
includeScheduledLive
boolean

whether or not include live that are scheduled for later

isLive
boolean

whether or not the video is a live

isLocal
boolean

PeerTube >= 4.0 Display only local or remote objects

VideoLanguageSet (string) or Array of VideoLanguageSet (strings)

language id of the video (see /videos/languages). Use _unknown to filter on videos that don't have a video language

VideoLicenceSet (integer) or Array of VideoLicenceSet (integers)

licence id of the video (see /videos/licences)

nsfw
string
Enum: "true" "false"

whether to include nsfw videos, if any

nsfwFlagsExcluded
integer (NSFWFlag)
Enum: 0 1 2 4

NSFW flags (can be combined using bitwise or operator)

  • 0 NONE
  • 1 VIOLENT
  • 2 EXPLICIT_SEX
nsfwFlagsIncluded
integer (NSFWFlag)
Enum: 0 1 2 4

NSFW flags (can be combined using bitwise or operator)

  • 0 NONE
  • 1 VIOLENT
  • 2 EXPLICIT_SEX
privacyOneOf
integer (VideoPrivacySet)
Enum: 1 2 3 4 5

PeerTube >= 4.0 Display only videos in this specific privacy/privacies

search
string

Plain text search, applied to various parts of the model depending on endpoint

skipCount
string
Default: "false"
Enum: "true" "false"

if you don't need the total in the response

sort
string
Enum: "name" "-duration" "-createdAt" "-publishedAt" "-views" "-likes" "-comments" "-trending" "-hot" "-best"

Sort videos by criteria (prefixing with - means DESC order):

  • hot - Adaptation of Reddit "hot" algorithm taking into account video views, likes, dislikes and comments and publication date
  • best - Same than hot, but also takes into account user video history
  • trending - Sort videos by recent views ("recent" is defined by the admin)
  • views - Sort videos using their views counter
  • publishedAt - Sort by video publication date (when it became publicly available)
start
integer >= 0

Offset used to paginate results

string or Array of strings

tag(s) of the video, where all should be present in the video

string or Array of strings

tag(s) of the video

Responses

Request samples

fetch('https://peertube2.cpy.re/api/v1/accounts/{name}/videos')
.then(function(response) {
  return response.json()
}).then(function(data) {
  console.log(data)
})

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

List followers of an account

Authorizations:
OAuth2
path Parameters
name
required
string
Example: chocobozzz | chocobozzz@example.org

The username or handle of the account

query Parameters
count
integer [ 1 .. 100 ]
Default: 15

Number of items to return

search
string

Plain text search, applied to various parts of the model depending on endpoint

sort
string
Value: "createdAt"

Sort followers by criteria

start
integer >= 0

Offset used to paginate results

Responses

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

List accounts

query Parameters
count
integer [ 1 .. 100 ]
Default: 15

Number of items to return

sort
string
Example: sort=-createdAt

Sort column

start
integer >= 0

Offset used to paginate results

Responses

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

List playlists of an account

path Parameters
name
required
string
Example: chocobozzz | chocobozzz@example.org

The username or handle of the account

query Parameters
count
integer [ 1 .. 100 ]
Default: 15

Number of items to return

playlistType
integer (VideoPlaylistTypeSet)
Enum: 1 2

The video playlist type (Regular = 1, Watch Later = 2)

search
string

Plain text search, applied to various parts of the model depending on endpoint

sort
string
Example: sort=-createdAt

Sort column

start
integer >= 0

Offset used to paginate results

Responses

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

List video channels of an account

path Parameters
name
required
string
Example: chocobozzz | chocobozzz@example.org

The username or handle of the account

query Parameters
count
integer [ 1 .. 100 ]
Default: 15

Number of items to return

sort
string
Example: sort=-createdAt

Sort column

start
integer >= 0

Offset used to paginate results

withStats
boolean

include daily view statistics for the last 30 days and total views (only if authentified as the account user)

Responses

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

List the synchronizations of video channels of an account

path Parameters
name
required
string
Example: chocobozzz | chocobozzz@example.org

The username or handle of the account

query Parameters
count
integer [ 1 .. 100 ]
Default: 15

Number of items to return

sort
string
Example: sort=-createdAt

Sort column

start
integer >= 0

Offset used to paginate results

Responses

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

List ratings of an account

Authorizations:
OAuth2
path Parameters
name
required
string
Example: chocobozzz | chocobozzz@example.org

The username or handle of the account

query Parameters
count
integer [ 1 .. 100 ]
Default: 15

Number of items to return

rating
string
Enum: "like" "dislike"

Optionally filter which ratings to retrieve

sort
string
Example: sort=-createdAt

Sort column

start
integer >= 0

Offset used to paginate results

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Users

Using some features of PeerTube require authentication, for which User provide different levels of permission as well as associated user information. Each user has a corresponding local Account for federation.

Create a user

Authorizations:
OAuth2
Request Body schema: application/json
required

If the smtp server is configured, you can leave the password empty and an email will be sent asking the user to set it first.

email
required
string <email>

The user email

password
required
string <password> (password) [ 6 .. 255 ] characters
role
required
integer (UserRole)
Enum: 0 1 2

The user role (Admin = 0, Moderator = 1, User = 2)

username
required
string (username) [ 1 .. 50 ] characters /^[a-z0-9._]+$/

immutable name of the user, used to find or mention its actor

adminFlags
integer (UserAdminFlags)
Enum: 0 1

Admin flags for the user (None = 0, Bypass video blocklist = 1)

channelName
string (usernameChannel) [ 1 .. 50 ] characters /^[a-zA-Z0-9\\-_.:]+$/

immutable name of the channel, used to interact with its actor

videoQuota
integer

The user video quota in bytes

videoQuotaDaily
integer

The user daily video quota in bytes

Responses

Request samples

Content type
application/json
{
  • "username": "chocobozzz",
  • "password": "pa$$word",
  • "email": "user@example.com",
  • "videoQuota": -1,
  • "videoQuotaDaily": -1,
  • "channelName": "framasoft_videos",
  • "role": 2,
  • "adminFlags": 1
}

Response samples

Content type
application/json
{
  • "user": {
    }
}

List users

Authorizations:
OAuth2
query Parameters
blocked
boolean

Filter results down to (un)banned users

count
integer [ 1 .. 100 ]
Default: 15

Number of items to return

search
string

Plain text search that will match with user usernames or emails

sort
string
Enum: "-id" "-username" "-createdAt"

Sort users by criteria

start
integer >= 0

Offset used to paginate results

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Delete a user

Authorizations:
OAuth2
path Parameters
id
required
integer (id) >= 1
Example: 42

Entity id

Responses

Get a user

Authorizations:
OAuth2
path Parameters
id
required
integer (id) >= 1
Example: 42

Entity id

query Parameters
withStats
boolean

include statistics about the user (only available as a moderator/admin)

Responses

Response samples

Content type
application/json
Example
{
  • "account": {
    },
  • "autoPlayNextVideo": true,
  • "autoPlayNextVideoPlaylist": true,
  • "autoPlayVideo": true,
  • "blocked": true,
  • "blockedReason": "string",
  • "createdAt": "string",
  • "email": "user@example.com",
  • "emailVerified": true,
  • "id": 42,
  • "pluginAuth": "string",
  • "lastLoginDate": "2019-08-24T14:15:22Z",
  • "noInstanceConfigWarningModal": true,
  • "noAccountSetupWarningModal": true,
  • "noWelcomeModal": true,
  • "nsfwPolicy": "display",
  • "nsfwFlagsDisplayed": 0,
  • "nsfwFlagsHidden": 0,
  • "nsfwFlagsWarned": 0,
  • "nsfwFlagsBlurred": 0,
  • "role": {
    },
  • "theme": "string",
  • "username": "chocobozzz",
  • "videoChannels": [
    ],
  • "videoQuota": -1,
  • "videoQuotaDaily": -1,
  • "p2pEnabled": true
}

Update a user

Authorizations:
OAuth2
path Parameters
id
required
integer (id) >= 1
Example: 42

Entity id

Request Body schema: application/json
required
adminFlags
integer (UserAdminFlags)
Enum: 0 1

Admin flags for the user (None = 0, Bypass video blocklist = 1)

email
string <email>

The updated email of the user

emailVerified
boolean

Set the email as verified

password
string <password> (password) [ 6 .. 255 ] characters
pluginAuth
string or null

The auth plugin to use to authenticate the user

role
integer (UserRole)
Enum: 0 1 2

The user role (Admin = 0, Moderator = 1, User = 2)

videoQuota
integer

The updated video quota of the user in bytes

videoQuotaDaily
integer

The updated daily video quota of the user in bytes

Responses

Request samples

Content type
application/json
{
  • "email": "user@example.com",
  • "emailVerified": true,
  • "videoQuota": 0,
  • "videoQuotaDaily": 0,
  • "pluginAuth": "peertube-plugin-auth-saml2",
  • "role": 2,
  • "adminFlags": 1,
  • "password": "pa$$word"
}

Resend user verification link

Request Body schema: application/json
email
required
string

User email

Responses

Request samples

Content type
application/json
{
  • "email": "string"
}

Verify a user

Following a user registration, the new user will receive an email asking to click a link containing a secret. This endpoint can also be used to verify a new email set in the user account.

path Parameters
id
required
integer (id) >= 1
Example: 42

Entity id

Request Body schema: application/json
verificationString
required
string <url>
isPendingEmail
boolean

Responses

Request samples

Content type
application/json
{
  • "verificationString": "string",
  • "isPendingEmail": true
}

Ask to reset password

An email containing a reset password link

Request Body schema: application/json
email
required
string

User email

Responses

Request samples

Content type
application/json
{
  • "email": "string"
}

Reset password

path Parameters
id
required
integer (id) >= 1
Example: 42

Entity id

Request Body schema: application/json
password
required
string
verificationString
required
string <url>

Responses

Request samples

Content type
application/json
{
  • "verificationString": "string",
  • "password": "string"
}

Request two factor auth

Request two factor authentication for a user

Authorizations:
OAuth2
path Parameters
id
required
integer (id) >= 1
Example: 42

Entity id

Request Body schema: application/json
currentPassword
string

Password of the currently authenticated user

Responses

Request samples

Content type
application/json
{
  • "currentPassword": "string"
}

Response samples

Content type
application/json
[
  • {
    }
]

Confirm two factor auth

Confirm a two factor authentication request

Authorizations:
OAuth2
path Parameters
id
required
integer (id) >= 1
Example: 42

Entity id

Request Body schema: application/json
otpToken
required
string

OTP token generated by the app

requestToken
required
string

Token to identify the two factor request

Responses

Request samples

Content type
application/json
{
  • "requestToken": "string",
  • "otpToken": "string"
}

Disable two factor auth

Disable two factor authentication of a user

Authorizations:
OAuth2
path Parameters
id
required
integer (id) >= 1
Example: 42

Entity id

Request Body schema: application/json
currentPassword
string

Password of the currently authenticated user

Responses

Request samples

Content type
application/json
{
  • "currentPassword": "string"
}

User Exports

To create an archive of user data.

Request user export

Request an archive of user data. An email is sent when the archive is ready.

Authorizations:
OAuth2
path Parameters
userId
required
integer (id) >= 1
Example: 42

User id

Request Body schema: application/json
withVideoFiles
boolean

Whether to include video files in the archive

Responses

Request samples

Content type
application/json
{
  • "withVideoFiles": true
}

Response samples

Content type
application/json
{
  • "export": {
    }
}

List user exports

PeerTube >= 6.1

Authorizations:
OAuth2
path Parameters
userId
required
integer (id) >= 1
Example: 42

User id

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "state": {
    },
  • "size": 0,
  • "privateDownloadUrl": "string",
  • "createdAt": "2019-08-24T14:15:22Z",
  • "expiresOn": "2019-08-24T14:15:22Z"
}

Delete a user export

PeerTube >= 6.1

Authorizations:
OAuth2
path Parameters
id
required
integer (id) >= 1
Example: 42

Entity id

userId
required
integer (id) >= 1
Example: 42

User id

Responses

User Imports

To import an archive of user data.

Initialize the resumable user import

PeerTube >= 6.1 Uses a resumable protocol to initialize the import of the archive

Authorizations:
OAuth2
path Parameters
userId
required
integer (id) >= 1
Example: 42

User id

header Parameters
X-Upload-Content-Length
required
number
Example: 2469036

Number of bytes that will be uploaded in subsequent requests. Set this value to the size of the file you are uploading.

X-Upload-Content-Type
required
string <mimetype>
Example: video/mp4

MIME type of the file that you are uploading. Depending on your instance settings, acceptable values might vary.

Request Body schema: application/json
filename
string <filename>

Archive filename including extension

Responses

Request samples

Content type
application/json
{
  • "filename": "user-export-6-2024-02-09T10_12_11.682Z"
}

Send chunk for the resumable user import

PeerTube >= 6.1 Uses a resumable protocol to continue, pause or resume the import of the archive

Authorizations:
OAuth2
path Parameters
userId
required
integer (id) >= 1
Example: 42

User id

query Parameters
upload_id
required
string

Created session id to proceed with. If you didn't send chunks in the last hour, it is not valid anymore and you need to initialize a new upload.

header Parameters
Content-Length
required
number
Example: 262144

Size of the chunk that the request is sending.

Remember that larger chunks are more efficient. PeerTube's web client uses chunks varying from 1048576 bytes (~1MB) and increases or reduces size depending on connection health.

Content-Range
required
string
Example: bytes 0-262143/2469036

Specifies the bytes in the file that the request is uploading.

For example, a value of bytes 0-262143/1000000 shows that the request is sending the first 262144 bytes (256 x 1024) in a 2,469,036 byte file.

Request Body schema: application/octet-stream
string <binary>

Responses

Cancel the resumable user import

PeerTube >= 6.1 Uses a resumable protocol to cancel the resumable user import

Authorizations:
OAuth2
path Parameters
userId
required
integer (id) >= 1
Example: 42

User id

query Parameters
upload_id
required
string

Created session id to proceed with. If you didn't send chunks in the last hour, it is not valid anymore and you need to initialize a new upload.

header Parameters
Content-Length
required
number
Example: 0

Responses

Get latest user import

PeerTube >= 6.1

Authorizations:
OAuth2
path Parameters
userId
required
integer (id) >= 1
Example: 42

User id

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "state": {
    },
  • "createdAt": "2019-08-24T14:15:22Z"
}

My User

Operations related to your own User, when logged-in.

Get my user information

Authorizations:
OAuth2

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Update my user information

Authorizations:
OAuth2
Request Body schema: application/json
required
autoPlayNextVideo
boolean

new preference regarding playing following videos automatically

autoPlayNextVideoPlaylist
boolean

new preference regarding playing following playlist videos automatically

autoPlayVideo
boolean

new preference regarding playing videos automatically

currentPassword
string <password> (password) [ 6 .. 255 ] characters
displayName
string [ 3 .. 120 ] characters

new name of the user in its representations

email
string <email>

new email used for login and service communications

language
string

default language for this user

noAccountSetupWarningModal
boolean
noInstanceConfigWarningModal
boolean
noWelcomeModal
boolean
nsfwFlagsBlurred
integer (NSFWFlag)
Enum: 0 1 2 4

NSFW flags (can be combined using bitwise or operator)

  • 0 NONE
  • 1 VIOLENT
  • 2 EXPLICIT_SEX
nsfwFlagsDisplayed
integer (NSFWFlag)
Enum: 0 1 2 4

NSFW flags (can be combined using bitwise or operator)

  • 0 NONE
  • 1 VIOLENT
  • 2 EXPLICIT_SEX
nsfwFlagsHidden
integer (NSFWFlag)
Enum: 0 1 2 4

NSFW flags (can be combined using bitwise or operator)

  • 0 NONE
  • 1 VIOLENT
  • 2 EXPLICIT_SEX
nsfwFlagsWarned
integer (NSFWFlag)
Enum: 0 1 2 4

NSFW flags (can be combined using bitwise or operator)

  • 0 NONE
  • 1 VIOLENT
  • 2 EXPLICIT_SEX
nsfwPolicy
string
Enum: "true" "false" "both"

new NSFW display policy

p2pEnabled
boolean

whether to enable P2P in the player or not

password
string <password> (password) [ 6 .. 255 ] characters
theme
string
videoLanguages
Array of strings

list of languages to filter videos down to

videosHistoryEnabled
boolean

whether to keep track of watched history or not

Responses

Request samples

Content type
application/json
{
  • "password": "pa$$word",
  • "currentPassword": "pa$$word",
  • "email": "user@example.com",
  • "displayName": "string",
  • "nsfwPolicy": "true",
  • "nsfwFlagsDisplayed": 0,
  • "nsfwFlagsHidden": 0,
  • "nsfwFlagsWarned": 0,
  • "nsfwFlagsBlurred": 0,
  • "p2pEnabled": true,
  • "autoPlayVideo": true,
  • "autoPlayNextVideo": true,
  • "autoPlayNextVideoPlaylist": true,
  • "videosHistoryEnabled": true,
  • "videoLanguages": [
    ],
  • "language": "string",
  • "theme": "string",
  • "noInstanceConfigWarningModal": true,
  • "noAccountSetupWarningModal": true,
  • "noWelcomeModal": true
}

Get video imports of my user

Authorizations:
OAuth2
query Parameters
count
integer [ 1 .. 100 ]
Default: 15

Number of items to return

search
string

Search in video names

sort
string
Example: sort=-createdAt

Sort column

start
integer >= 0

Offset used to paginate results

targetUrl
string

Filter on import target URL

videoChannelSyncId
number

Filter on imports created by a specific channel synchronization

Responses

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

Get my user used quota

Authorizations:
OAuth2

Responses

Response samples

Content type
application/json
{
  • "videoQuotaUsed": 16810141515,
  • "videoQuotaUsedDaily": 1681014151
}

Get rate of my user for a video

Authorizations:
OAuth2
path Parameters
videoId
required
integer >= 1
Example: 42

The video id

Responses

Response samples

Content type
application/json
{
  • "id": 42,
  • "rating": "like"
}

List videos of my user

Authorizations:
OAuth2
query Parameters
string or Array of strings

PeerTube >= 6.2 Admins and moderators only filter on videos that contain one of these automatic tags

VideoCategorySet (integer) or Array of VideoCategorySet (integers)

category id of the video (see /videos/categories)

string or Array of strings

PeerTube >= 7.2 Filter on videos that are published by a channel with one of these names

count
integer [ 1 .. 100 ]
Default: 15

Number of items to return

excludeAlreadyWatched
boolean

Whether or not to exclude videos that are in the user's video history

hasHLSFiles
boolean

PeerTube >= 4.0 Display only videos that have HLS files

hasWebVideoFiles
boolean

PeerTube >= 6.0 Display only videos that have Web Video files

host
string

Find elements owned by this host

include
integer
Enum: 0 1 2 4 8 16 32

Only administrators and moderators can use this parameter

Include additional videos in results (can be combined using bitwise or operator)

  • 0 NONE
  • 1 NOT_PUBLISHED_STATE
  • 2 BLACKLISTED
  • 4 BLOCKED_OWNER
  • 8 FILES
  • 16 CAPTIONS
  • 32 VIDEO SOURCE
includeScheduledLive
boolean

whether or not include live that are scheduled for later

isLive
boolean

whether or not the video is a live

isLocal
boolean

PeerTube >= 4.0 Display only local or remote objects

VideoLanguageSet (string) or Array of VideoLanguageSet (strings)

language id of the video (see /videos/languages). Use _unknown to filter on videos that don't have a video language

VideoLicenceSet (integer) or Array of VideoLicenceSet (integers)

licence id of the video (see /videos/licences)

nsfw
string
Enum: "true" "false"

whether to include nsfw videos, if any

nsfwFlagsExcluded
integer (NSFWFlag)
Enum: 0 1 2 4

NSFW flags (can be combined using bitwise or operator)

  • 0 NONE
  • 1 VIOLENT
  • 2 EXPLICIT_SEX
nsfwFlagsIncluded
integer (NSFWFlag)
Enum: 0 1 2 4

NSFW flags (can be combined using bitwise or operator)

  • 0 NONE
  • 1 VIOLENT
  • 2 EXPLICIT_SEX
privacyOneOf
integer (VideoPrivacySet)
Enum: 1 2 3 4 5

PeerTube >= 4.0 Display only videos in this specific privacy/privacies

search
string

Plain text search, applied to various parts of the model depending on endpoint

skipCount
string
Default: "false"
Enum: "true" "false"

if you don't need the total in the response

sort
string
Enum: "name" "-duration" "-createdAt" "-publishedAt" "-views" "-likes" "-comments" "-trending" "-hot" "-best"

Sort videos by criteria (prefixing with - means DESC order):

  • hot - Adaptation of Reddit "hot" algorithm taking into account video views, likes, dislikes and comments and publication date
  • best - Same than hot, but also takes into account user video history
  • trending - Sort videos by recent views ("recent" is defined by the admin)
  • views - Sort videos using their views counter
  • publishedAt - Sort by video publication date (when it became publicly available)
start
integer >= 0

Offset used to paginate results

string or Array of strings

tag(s) of the video, where all should be present in the video

string or Array of strings

tag(s) of the video

Responses

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

Update my user avatar

Authorizations:
OAuth2
Request Body schema: multipart/form-data
avatarfile
string <binary>

The file to upload

Responses

Response samples

Content type
application/json
{
  • "avatars": [
    ]
}

Delete my avatar

Authorizations:
OAuth2

Responses

List my abuses

Authorizations:
OAuth2
query Parameters
count
integer [ 1 .. 100 ]
Default: 15

Number of items to return

id
integer

only list the report with this id

sort
string
Enum: "-id" "-createdAt" "-state"

Sort abuses by criteria

start
integer >= 0

Offset used to paginate results

state
integer (AbuseStateSet)
Enum: 1 2 3

The abuse state (Pending = 1, Rejected = 2, Accepted = 3)

Responses

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

My Subscriptions

Operations related to your subscriptions to video channels, their new videos, and how to keep up to date with their latest publications!

List my user subscriptions

Authorizations:
OAuth2
query Parameters
count
integer [ 1 .. 100 ]
Default: 15

Number of items to return

sort
string
Enum: "-id" "-createdAt" "-channelUpdatedAt"
start
integer >= 0

Offset used to paginate results

Responses

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

Add subscription to my user

Authorizations:
OAuth2
Request Body schema: application/json
uri
required
string <uri>

uri of the video channels to subscribe to

Responses

Request samples

Content type
application/json
{
  • "uri": "008a0e54-375d-49d0-8379-143202e24152@video.lqdn.fr"
}

Get if subscriptions exist for my user

Authorizations:
OAuth2
query Parameters
uris
required
Array of strings <uri> [ items <uri > ]

list of uris to check if each is part of the user subscriptions

Responses

Response samples

Content type
application/json
{ }

List videos of subscriptions of my user

Authorizations:
OAuth2
query Parameters
string or Array of strings

PeerTube >= 6.2 Admins and moderators only filter on videos that contain one of these automatic tags

VideoCategorySet (integer) or Array of VideoCategorySet (integers)

category id of the video (see /videos/categories)

count
integer [ 1 .. 100 ]
Default: 15

Number of items to return

excludeAlreadyWatched
boolean

Whether or not to exclude videos that are in the user's video history

hasHLSFiles
boolean

PeerTube >= 4.0 Display only videos that have HLS files

hasWebVideoFiles
boolean

PeerTube >= 6.0 Display only videos that have Web Video files

host
string

Find elements owned by this host

include
integer
Enum: 0 1 2 4 8 16 32

Only administrators and moderators can use this parameter

Include additional videos in results (can be combined using bitwise or operator)

  • 0 NONE
  • 1 NOT_PUBLISHED_STATE
  • 2 BLACKLISTED
  • 4 BLOCKED_OWNER
  • 8 FILES
  • 16 CAPTIONS
  • 32 VIDEO SOURCE
includeScheduledLive
boolean

whether or not include live that are scheduled for later

isLive
boolean

whether or not the video is a live

isLocal
boolean

PeerTube >= 4.0 Display only local or remote objects

VideoLanguageSet (string) or Array of VideoLanguageSet (strings)

language id of the video (see /videos/languages). Use _unknown to filter on videos that don't have a video language

VideoLicenceSet (integer) or Array of VideoLicenceSet (integers)

licence id of the video (see /videos/licences)

nsfw
string
Enum: "true" "false"

whether to include nsfw videos, if any

nsfwFlagsExcluded
integer (NSFWFlag)
Enum: 0 1 2 4

NSFW flags (can be combined using bitwise or operator)

  • 0 NONE
  • 1 VIOLENT
  • 2 EXPLICIT_SEX
nsfwFlagsIncluded
integer (NSFWFlag)
Enum: 0 1 2 4

NSFW flags (can be combined using bitwise or operator)

  • 0 NONE
  • 1 VIOLENT
  • 2 EXPLICIT_SEX
privacyOneOf
integer (VideoPrivacySet)
Enum: 1 2 3 4 5

PeerTube >= 4.0 Display only videos in this specific privacy/privacies

search
string

Plain text search, applied to various parts of the model depending on endpoint

skipCount
string
Default: "false"
Enum: "true" "false"

if you don't need the total in the response

sort
string
Enum: "name" "-duration" "-createdAt" "-publishedAt" "-views" "-likes" "-comments" "-trending" "-hot" "-best"

Sort videos by criteria (prefixing with - means DESC order):

  • hot - Adaptation of Reddit "hot" algorithm taking into account video views, likes, dislikes and comments and publication date
  • best - Same than hot, but also takes into account user video history
  • trending - Sort videos by recent views ("recent" is defined by the admin)
  • views - Sort videos using their views counter
  • publishedAt - Sort by video publication date (when it became publicly available)
start
integer >= 0

Offset used to paginate results

string or Array of strings

tag(s) of the video, where all should be present in the video

string or Array of strings

tag(s) of the video

Responses

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

Get subscription of my user

Authorizations:
OAuth2
path Parameters
subscriptionHandle
required
string
Example: my_username | my_username@example.com

The subscription handle

Responses

Response samples

Content type
application/json
{
  • "id": 42,
  • "url": "string",
  • "name": "chocobozzz",
  • "avatars": [
    ],
  • "host": "example.com",
  • "hostRedundancyAllowed": true,
  • "followingCount": 0,
  • "followersCount": 0,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z",
  • "displayName": "Videos of Framasoft",
  • "description": "Videos made with <3 by Framasoft",
  • "support": "Please support our work on https://soutenir.framasoft.org/en/ <3",
  • "isLocal": true,
  • "banners": [
    ],
  • "ownerAccount": {
    }
}

Delete subscription of my user

Authorizations:
OAuth2
path Parameters
subscriptionHandle
required
string
Example: my_username | my_username@example.com

The subscription handle

Responses

My Notifications

Notifications following new videos, follows or reports. They allow you to keep track of the interactions and overall important information that concerns you. You MAY set per-notification type delivery preference, to receive the info either by mail, by in-browser notification or both.

List my notifications

Authorizations:
OAuth2
query Parameters
count
integer [ 1 .. 100 ]
Default: 15

Number of items to return

sort
string
Example: sort=-createdAt

Sort column

start
integer >= 0

Offset used to paginate results

typeOneOf
Array of integers (NotificationType)
Items Enum: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

only list notifications of these types

unread
boolean

only list unread notifications

Responses

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

Mark notifications as read by their id

Authorizations:
OAuth2
Request Body schema: application/json
ids
required
Array of integers

ids of the notifications to mark as read

Responses

Request samples

Content type
application/json
{
  • "ids": [
    ]
}

Mark all my notification as read

Authorizations:
OAuth2

Responses

Update my notification settings

Authorizations:
OAuth2
Request Body schema: application/json
abuseAsModerator
integer (NotificationSettingValue)

Notification type. One of the following values, or a sum of multiple values:

  • 0 NONE
  • 1 WEB
  • 2 EMAIL
abuseNewMessage
integer (NotificationSettingValue)

Notification type. One of the following values, or a sum of multiple values:

  • 0 NONE
  • 1 WEB
  • 2 EMAIL
abuseStateChange
integer (NotificationSettingValue)

Notification type. One of the following values, or a sum of multiple values:

  • 0 NONE
  • 1 WEB
  • 2 EMAIL
autoInstanceFollowing
integer (NotificationSettingValue)

Notification type. One of the following values, or a sum of multiple values:

  • 0 NONE
  • 1 WEB
  • 2 EMAIL
blacklistOnMyVideo
integer (NotificationSettingValue)

Notification type. One of the following values, or a sum of multiple values:

  • 0 NONE
  • 1 WEB
  • 2 EMAIL
commentMention
integer (NotificationSettingValue)

Notification type. One of the following values, or a sum of multiple values:

  • 0 NONE
  • 1 WEB
  • 2 EMAIL
myVideoImportFinished
integer (NotificationSettingValue)

Notification type. One of the following values, or a sum of multiple values:

  • 0 NONE
  • 1 WEB
  • 2 EMAIL
myVideoPublished
integer (NotificationSettingValue)

Notification type. One of the following values, or a sum of multiple values:

  • 0 NONE
  • 1 WEB
  • 2 EMAIL
myVideoStudioEditionFinished
integer (NotificationSettingValue)

Notification type. One of the following values, or a sum of multiple values:

  • 0 NONE
  • 1 WEB
  • 2 EMAIL
myVideoTranscriptionGenerated
integer (NotificationSettingValue)

Notification type. One of the following values, or a sum of multiple values:

  • 0 NONE
  • 1 WEB
  • 2 EMAIL
newCommentOnMyVideo
integer (NotificationSettingValue)

Notification type. One of the following values, or a sum of multiple values:

  • 0 NONE
  • 1 WEB
  • 2 EMAIL
newFollow
integer (NotificationSettingValue)

Notification type. One of the following values, or a sum of multiple values:

  • 0 NONE
  • 1 WEB
  • 2 EMAIL
newInstanceFollower
integer (NotificationSettingValue)

Notification type. One of the following values, or a sum of multiple values:

  • 0 NONE
  • 1 WEB
  • 2 EMAIL
newPeerTubeVersion
integer (NotificationSettingValue)

Notification type. One of the following values, or a sum of multiple values:

  • 0 NONE
  • 1 WEB
  • 2 EMAIL
newPluginVersion
integer (NotificationSettingValue)

Notification type. One of the following values, or a sum of multiple values:

  • 0 NONE
  • 1 WEB
  • 2 EMAIL
newUserRegistration
integer (NotificationSettingValue)

Notification type. One of the following values, or a sum of multiple values:

  • 0 NONE
  • 1 WEB
  • 2 EMAIL
newVideoFromSubscription
integer (NotificationSettingValue)

Notification type. One of the following values, or a sum of multiple values:

  • 0 NONE
  • 1 WEB
  • 2 EMAIL
videoAutoBlacklistAsModerator
integer (NotificationSettingValue)

Notification type. One of the following values, or a sum of multiple values:

  • 0 NONE
  • 1 WEB
  • 2 EMAIL

Responses

Request samples

Content type
application/json
{
  • "abuseAsModerator": 0,
  • "videoAutoBlacklistAsModerator": 0,
  • "newUserRegistration": 0,
  • "newVideoFromSubscription": 0,
  • "blacklistOnMyVideo": 0,
  • "myVideoPublished": 0,
  • "myVideoImportFinished": 0,
  • "commentMention": 0,
  • "newCommentOnMyVideo": 0,
  • "newFollow": 0,
  • "newInstanceFollower": 0,
  • "autoInstanceFollowing": 0,
  • "abuseStateChange": 0,
  • "abuseNewMessage": 0,
  • "newPeerTubeVersion": 0,
  • "newPluginVersion": 0,
  • "myVideoStudioEditionFinished": 0,
  • "myVideoTranscriptionGenerated": 0
}

My History

Operations related to your watch history.

List watched videos history

Authorizations:
OAuth2
query Parameters
count
integer [ 1 .. 100 ]
Default: 15

Number of items to return

search
string

Plain text search, applied to various parts of the model depending on endpoint

start
integer >= 0

Offset used to paginate results

Responses

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

Delete history element

Authorizations:
OAuth2
path Parameters
videoId
required
integer >= 1
Example: 42

object id for the video

Responses

Clear video history

Authorizations:
OAuth2
Request Body schema: multipart/form-data
beforeDate
string <date-time>

history before this date will be deleted

Responses

Video

Operations dealing with listing, uploading, fetching or modifying videos.

List videos of an account

path Parameters
name
required
string
Example: chocobozzz | chocobozzz@example.org

The username or handle of the account

query Parameters
string or Array of strings

PeerTube >= 6.2 Admins and moderators only filter on videos that contain one of these automatic tags

VideoCategorySet (integer) or Array of VideoCategorySet (integers)

category id of the video (see /videos/categories)

count
integer [ 1 .. 100 ]
Default: 15

Number of items to return

excludeAlreadyWatched
boolean

Whether or not to exclude videos that are in the user's video history

hasHLSFiles
boolean

PeerTube >= 4.0 Display only videos that have HLS files

hasWebVideoFiles
boolean

PeerTube >= 6.0 Display only videos that have Web Video files

host
string

Find elements owned by this host

include
integer
Enum: 0 1 2 4 8 16 32

Only administrators and moderators can use this parameter

Include additional videos in results (can be combined using bitwise or operator)

  • 0 NONE
  • 1 NOT_PUBLISHED_STATE
  • 2 BLACKLISTED
  • 4 BLOCKED_OWNER
  • 8 FILES
  • 16 CAPTIONS
  • 32 VIDEO SOURCE
includeScheduledLive
boolean

whether or not include live that are scheduled for later

isLive
boolean

whether or not the video is a live

isLocal
boolean

PeerTube >= 4.0 Display only local or remote objects

VideoLanguageSet (string) or Array of VideoLanguageSet (strings)

language id of the video (see /videos/languages). Use _unknown to filter on videos that don't have a video language

VideoLicenceSet (integer) or Array of VideoLicenceSet (integers)

licence id of the video (see /videos/licences)

nsfw
string
Enum: "true" "false"

whether to include nsfw videos, if any

nsfwFlagsExcluded
integer (NSFWFlag)
Enum: 0 1 2 4

NSFW flags (can be combined using bitwise or operator)

  • 0 NONE
  • 1 VIOLENT
  • 2 EXPLICIT_SEX
nsfwFlagsIncluded
integer (NSFWFlag)
Enum: 0 1 2 4

NSFW flags (can be combined using bitwise or operator)

  • 0 NONE
  • 1 VIOLENT
  • 2 EXPLICIT_SEX
privacyOneOf
integer (VideoPrivacySet)
Enum: 1 2 3 4 5

PeerTube >= 4.0 Display only videos in this specific privacy/privacies

search
string

Plain text search, applied to various parts of the model depending on endpoint

skipCount
string
Default: "false"
Enum: "true" "false"

if you don't need the total in the response

sort
string
Enum: "name" "-duration" "-createdAt" "-publishedAt" "-views" "-likes" "-comments" "-trending" "-hot" "-best"

Sort videos by criteria (prefixing with - means DESC order):

  • hot - Adaptation of Reddit "hot" algorithm taking into account video views, likes, dislikes and comments and publication date
  • best - Same than hot, but also takes into account user video history
  • trending - Sort videos by recent views ("recent" is defined by the admin)
  • views - Sort videos using their views counter
  • publishedAt - Sort by video publication date (when it became publicly available)
start
integer >= 0

Offset used to paginate results

string or Array of strings

tag(s) of the video, where all should be present in the video

string or Array of strings

tag(s) of the video

Responses

Request samples

fetch('https://peertube2.cpy.re/api/v1/accounts/{name}/videos')
.then(function(response) {
  return response.json()
}).then(function(data) {
  console.log(data)
})

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

Request video token

Request special tokens that expire quickly to use them in some context (like accessing private static files)

Authorizations:
OAuth2
path Parameters
required
id (integer) or UUIDv4 (string) or shortUUID (string)

The object id, uuid or short uuid

header Parameters
x-peertube-video-password
string

Required on password protected video

Responses

Response samples

Content type
application/json
{
  • "files": {
    }
}

Create a studio task

Create a task to edit a video (cut, add intro/outro etc)

Authorizations:
OAuth2
path Parameters
required
id (integer) or UUIDv4 (string) or shortUUID (string)

The object id, uuid or short uuid

Request Body schema: multipart/form-data
required
Array
Any of
name
string
Value: "cut"
object

Responses

List videos

query Parameters
string or Array of strings

PeerTube >= 6.2 Admins and moderators only filter on videos that contain one of these automatic tags

VideoCategorySet (integer) or Array of VideoCategorySet (integers)

category id of the video (see /videos/categories)

count
integer [ 1 .. 100 ]
Default: 15

Number of items to return

excludeAlreadyWatched
boolean

Whether or not to exclude videos that are in the user's video history

hasHLSFiles
boolean

PeerTube >= 4.0 Display only videos that have HLS files

hasWebVideoFiles
boolean

PeerTube >= 6.0 Display only videos that have Web Video files

host
string

Find elements owned by this host

include
integer
Enum: 0 1 2 4 8 16 32

Only administrators and moderators can use this parameter

Include additional videos in results (can be combined using bitwise or operator)

  • 0 NONE
  • 1 NOT_PUBLISHED_STATE
  • 2 BLACKLISTED
  • 4 BLOCKED_OWNER
  • 8 FILES
  • 16 CAPTIONS
  • 32 VIDEO SOURCE
includeScheduledLive
boolean

whether or not include live that are scheduled for later

isLive
boolean

whether or not the video is a live

isLocal
boolean

PeerTube >= 4.0 Display only local or remote objects

VideoLanguageSet (string) or Array of VideoLanguageSet (strings)

language id of the video (see /videos/languages). Use _unknown to filter on videos that don't have a video language

VideoLicenceSet (integer) or Array of VideoLicenceSet (integers)

licence id of the video (see /videos/licences)

nsfw
string
Enum: "true" "false"

whether to include nsfw videos, if any

nsfwFlagsExcluded
integer (NSFWFlag)
Enum: 0 1 2 4

NSFW flags (can be combined using bitwise or operator)

  • 0 NONE
  • 1 VIOLENT
  • 2 EXPLICIT_SEX
nsfwFlagsIncluded
integer (NSFWFlag)
Enum: 0 1 2 4

NSFW flags (can be combined using bitwise or operator)

  • 0 NONE
  • 1 VIOLENT
  • 2 EXPLICIT_SEX
privacyOneOf
integer (VideoPrivacySet)
Enum: 1 2 3 4 5

PeerTube >= 4.0 Display only videos in this specific privacy/privacies

search
string

Plain text search, applied to various parts of the model depending on endpoint

skipCount
string
Default: "false"
Enum: "true" "false"

if you don't need the total in the response

sort
string
Enum: "name" "-duration" "-createdAt" "-publishedAt" "-views" "-likes" "-comments" "-trending" "-hot" "-best"

Sort videos by criteria (prefixing with - means DESC order):

  • hot - Adaptation of Reddit "hot" algorithm taking into account video views, likes, dislikes and comments and publication date
  • best - Same than hot, but also takes into account user video history
  • trending - Sort videos by recent views ("recent" is defined by the admin)
  • views - Sort videos using their views counter
  • publishedAt - Sort by video publication date (when it became publicly available)
start
integer >= 0

Offset used to paginate results

string or Array of strings

tag(s) of the video, where all should be present in the video

string or Array of strings

tag(s) of the video

Responses

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

List available video categories

Responses

Response samples

Content type
application/json
{
  • "1": "Music",
  • "2": "Films",
  • "3": "Vehicles",
  • "4": "Art",
  • "5": "Sports",
  • "6": "Travels",
  • "7": "Gaming",
  • "8": "People",
  • "9": "Comedy",
  • "10": "Entertainment",
  • "11": "News & Politics",
  • "12": "How To",
  • "13": "Education",
  • "14": "Activism",
  • "15": "Science & Technology",
  • "16": "Animals",
  • "17": "Kids",
  • "18": "Food"
}

List available video licences

Responses

Response samples

Content type
application/json
{
  • "1": "Attribution",
  • "2": "Attribution - Share Alike",
  • "3": "Attribution - No Derivatives",
  • "4": "Attribution - Non Commercial",
  • "5": "Attribution - Non Commercial - Share Alike",
  • "6": "Attribution - Non Commercial - No Derivatives",
  • "7": "Public Domain Dedication",
  • "8": "Free of known copyright restrictions",
  • "9": "Copyrighted - All Rights Reserved"
}

List available video languages

Responses

Response samples

Content type
application/json
{
  • "aa": "Afar",
  • "ab": "Abkhazian",
  • "af": "Afrikaans",
  • "ak": "Akan",
  • "am": "Amharic",
  • "ar": "Arabic",
  • "an": "Aragonese",
  • "ase": "American Sign Language",
  • "as": "Assamese",
  • "asq": "Austrian Sign Language",
  • "av": "Avaric",
  • "avk": "Kotava",
  • "ay": "Aymara",
  • "az": "Azerbaijani",
  • "ba": "Bashkir",
  • "bm": "Bambara",
  • "be": "Belarusian",
  • "bn": "Bengali",
  • "bfi": "British Sign Language",
  • "bi": "Bislama",
  • "bo": "Tibetan",
  • "bs": "Bosnian",
  • "br": "Breton",
  • "bg": "Bulgarian",
  • "bzs": "Brazilian Sign Language",
  • "ca": "Catalan",
  • "cs": "Czech",
  • "ch": "Chamorro",
  • "ce": "Chechen",
  • "cv": "Chuvash",
  • "kw": "Cornish",
  • "co": "Corsican",
  • "cr": "Cree",
  • "cse": "Czech Sign Language",
  • "csl": "Chinese Sign Language",
  • "cy": "Welsh",
  • "da": "Danish",
  • "de": "German",
  • "dv": "Dhivehi",
  • "dsl": "Danish Sign Language",
  • "dz": "Dzongkha",
  • "el": "Greek",
  • "en": "English",
  • "eo": "Esperanto",
  • "et": "Estonian",
  • "eu": "Basque",
  • "ee": "Ewe",
  • "fo": "Faroese",
  • "fa": "Persian",
  • "fj": "Fijian",
  • "fi": "Finnish",
  • "fr": "French",
  • "fy": "Western Frisian",
  • "fse": "Finnish Sign Language",
  • "fsl": "French Sign Language",
  • "ff": "Fulah",
  • "gcf": "Guadeloupean Creole French",
  • "gd": "Scottish Gaelic",
  • "ga": "Irish",
  • "gl": "Galician",
  • "gv": "Manx",
  • "gn": "Guarani",
  • "gsg": "German Sign Language",
  • "gu": "Gujarati",
  • "ht": "Haitian",
  • "ha": "Hausa",
  • "sh": "Serbo-Croatian",
  • "he": "Hebrew",
  • "hz": "Herero",
  • "hi": "Hindi",
  • "ho": "Hiri Motu",
  • "hr": "Croatian",
  • "hu": "Hungarian",
  • "hy": "Armenian",
  • "ig": "Igbo",
  • "ii": "Sichuan Yi",
  • "iu": "Inuktitut",
  • "id": "Indonesian",
  • "ik": "Inupiaq",
  • "is": "Icelandic",
  • "it": "Italian",
  • "jv": "Javanese",
  • "jbo": "Lojban",
  • "ja": "Japanese",
  • "jsl": "Japanese Sign Language",
  • "kab": "Kabyle",
  • "kl": "Kalaallisut",
  • "kn": "Kannada",
  • "ks": "Kashmiri",
  • "ka": "Georgian",
  • "kr": "Kanuri",
  • "kk": "Kazakh",
  • "km": "Khmer",
  • "ki": "Kikuyu",
  • "rw": "Kinyarwanda",
  • "ky": "Kirghiz",
  • "kv": "Komi",
  • "kg": "Kongo",
  • "ko": "Korean",
  • "kj": "Kuanyama",
  • "ku": "Kurdish",
  • "lo": "Lao",
  • "la": "Latin",
  • "lv": "Latvian",
  • "li": "Limburgan",
  • "ln": "Lingala",
  • "lt": "Lithuanian",
  • "lb": "Luxembourgish",
  • "lu": "Luba-Katanga",
  • "lg": "Ganda",
  • "mh": "Marshallese",
  • "ml": "Malayalam",
  • "mr": "Marathi",
  • "mk": "Macedonian",
  • "mg": "Malagasy",
  • "mt": "Maltese",
  • "mn": "Mongolian",
  • "mi": "Maori",
  • "ms": "Malay (macrolanguage)",
  • "my": "Burmese",
  • "na": "Nauru",
  • "nv": "Navajo",
  • "nr": "South Ndebele",
  • "nd": "North Ndebele",
  • "ng": "Ndonga",
  • "ne": "Nepali (macrolanguage)",
  • "nl": "Dutch",
  • "nn": "Norwegian Nynorsk",
  • "nb": "Norwegian Bokmål",
  • "no": "Norwegian",
  • "ny": "Nyanja",
  • "oc": "Occitan",
  • "oj": "Ojibwa",
  • "or": "Oriya (macrolanguage)",
  • "om": "Oromo",
  • "os": "Ossetian",
  • "pa": "Panjabi",
  • "pks": "Pakistan Sign Language",
  • "pl": "Polish",
  • "pt": "Portuguese (Brazilian)",
  • "ps": "Pushto",
  • "qu": "Quechua",
  • "rm": "Romansh",
  • "ro": "Romanian",
  • "rsl": "Russian Sign Language",
  • "rn": "Rundi",
  • "ru": "Russian",
  • "sg": "Sango",
  • "sdl": "Saudi Arabian Sign Language",
  • "sfs": "South African Sign Language",
  • "si": "Sinhala",
  • "sk": "Slovak",
  • "sl": "Slovenian",
  • "se": "Northern Sami",
  • "sm": "Samoan",
  • "sn": "Shona",
  • "sd": "Sindhi",
  • "so": "Somali",
  • "st": "Southern Sotho",
  • "es": "Spanish (Spain)",
  • "sq": "Albanian",
  • "sc": "Sardinian",
  • "sr": "Serbian",
  • "ss": "Swati",
  • "su": "Sundanese",
  • "sw": "Swahili (macrolanguage)",
  • "sv": "Swedish",
  • "swl": "Swedish Sign Language",
  • "ty": "Tahitian",
  • "ta": "Tamil",
  • "tt": "Tatar",
  • "te": "Telugu",
  • "tg": "Tajik",
  • "tl": "Tagalog",
  • "th": "Thai",
  • "ti": "Tigrinya",
  • "tlh": "Klingon",
  • "to": "Tonga (Tonga Islands)",
  • "tn": "Tswana",
  • "ts": "Tsonga",
  • "tk": "Turkmen",
  • "tr": "Turkish",
  • "tw": "Twi",
  • "ug": "Uighur",
  • "uk": "Ukrainian",
  • "ur": "Urdu",
  • "uz": "Uzbek",
  • "ve": "Venda",
  • "vi": "Vietnamese",
  • "wa": "Walloon",
  • "wo": "Wolof",
  • "xh": "Xhosa",
  • "yi": "Yiddish",
  • "yo": "Yoruba",
  • "za": "Zhuang",
  • "zh": "Chinese",
  • "zu": "Zulu",
  • "zxx": "No linguistic content",
  • "tok": "Toki Pona",
  • "pt-PT": "Portuguese (Portugal)",
  • "es-419": "Spanish (Latin America)",
  • "zh-Hans": "Simplified Chinese",
  • "zh-Hant": "Traditional Chinese",
  • "ca-valencia": "Valencian",
  • "rcf": "Réunion Creole French",
  • "gcr": "Guianese Creole French"
}

List available video privacy policies

Responses

Response samples

Content type
application/json
{
  • "1": "Public",
  • "2": "Unlisted",
  • "3": "Private",
  • "4": "Internal",
  • "5": "Password protected"
}

Update a video

Authorizations:
OAuth2
path Parameters
required
id (integer) or UUIDv4 (string) or shortUUID (string)

The object id, uuid or short uuid

Request Body schema: multipart/form-data
category
integer (VideoCategorySet)

category id of the video (see /videos/categories)

channelId
integer

New channel of the video. The channel must be owned by the same account as the previous one. Use the "change ownership" endpoints to give a video to a channel owned by another account on the local PeerTube instance.

commentsEnabled
boolean
Deprecated

Deprecated in 6.2, use commentsPolicy instead

commentsPolicy
integer (VideoCommentsPolicySet)
Enum: 1 2 3

Comments policy of the video (Enabled = 1, Disabled = 2, Requires Approval = 3)

description
string

Video description

downloadEnabled
boolean

Enable or disable downloading for this video

language
string (VideoLanguageSet)

language id of the video (see /videos/languages)

licence
integer (VideoLicenceSet)

licence id of the video (see /videos/licences)

name
string [ 3 .. 120 ] characters

Video name

nsfw
boolean

Whether or not this video contains sensitive content

nsfwFlags
integer (NSFWFlag)
Enum: 0 1 2 4

NSFW flags (can be combined using bitwise or operator)

  • 0 NONE
  • 1 VIOLENT
  • 2 EXPLICIT_SEX
nsfwSummary
any

More information about the sensitive content of the video

originallyPublishedAt
string or null <date-time>

Date when the content was originally published

previewfile
string <binary>

Video preview file

privacy
integer (VideoPrivacySet)
Enum: 1 2 3 4 5

privacy id of the video (see /videos/privacies)

object (VideoScheduledUpdate)
support
string

A text tell the audience how to support the video creator

tags
Array of strings [ 1 .. 5 ] items [ items [ 2 .. 30 ] characters ]

Video tags (maximum 5 tags each between 2 and 30 characters)

thumbnailfile
string <binary>

Video thumbnail file

videoPasswords
Array of strings (AddVideoPasswords) unique [ items >= 2 characters ]
waitTranscoding
string

Whether or not we wait transcoding before publish the video

Responses

Get a video

path Parameters
required
id (integer) or UUIDv4 (string) or shortUUID (string)

The object id, uuid or short uuid

header Parameters
x-peertube-video-password
string

Required on password protected video

Responses

Response samples

Content type
application/json
{
  • "id": 42,
  • "uuid": "9c9de5e8-0a1e-484a-b099-e80766180a6d",
  • "shortUUID": "2y84q2MQUMWPbiEcxNXMgC",
  • "isLive": true,
  • "liveSchedules": [
    ],
  • "createdAt": "2017-10-01T10:52:46.396Z",
  • "publishedAt": "2018-10-01T10:52:46.396Z",
  • "updatedAt": "2021-05-04T08:01:01.502Z",
  • "originallyPublishedAt": "2010-10-01T10:52:46.396Z",
  • "category": {
    },
  • "licence": {
    },
  • "language": {
    },
  • "privacy": {
    },
  • "truncatedDescription": "**[Want to help to translate this video?](https://weblate.framasoft.org/projects/what-is-peertube-video/)**\\r\\n\\r\\n\n**Take back the control of your videos! [#JoinPeertube](https://joinpeertube.org)**\\r\\n*A decentralized video hosting network, based on fr...\n",
  • "duration": 1419,
  • "aspectRatio": 1.778,
  • "isLocal": true,
  • "name": "What is PeerTube?",
  • "thumbnailPath": "/lazy-static/thumbnails/a65bc12f-9383-462e-81ae-8207e8b434ee.jpg",
  • "previewPath": "/lazy-static/previews/a65bc12f-9383-462e-81ae-8207e8b434ee.jpg",
  • "embedPath": "/videos/embed/a65bc12f-9383-462e-81ae-8207e8b434ee",
  • "views": 1337,
  • "likes": 42,
  • "dislikes": 7,
  • "comments": 0,
  • "nsfw": true,
  • "nsfwFlags": 0,
  • "nsfwSummary": "string",
  • "waitTranscoding": true,
  • "state": {
    },
  • "scheduledUpdate": {
    },
  • "blacklisted": true,
  • "blacklistedReason": "string",
  • "account": {
    },
  • "channel": {
    },
  • "userHistory": {
    },
  • "viewers": 0,
  • "description": "\"**[Want to help to translate this video?](https://weblate.framasoft.org/projects/what-is-peertube-video/)**\\r\\n\\r\\n\n**Take back the control of your videos! [#JoinPeertube](https://joinpeertube.org)**\\r\\n*A decentralized video hosting network,\nbased on free/libre software!*\\r\\n\\r\\n**Animation Produced by:** [LILA](https://libreart.info) - [ZeMarmot Team](https://film.zemarmot.net)\\r\\n\n*Directed by* Aryeom\\r\\n*Assistant* Jehan\\r\\n**Licence**: [CC-By-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)\\r\\n\\r\\n\n**Sponsored by** [Framasoft](https://framasoft.org)\\r\\n\\r\\n**Music**: [Red Step Forward](http://play.dogmazic.net/song.php?song_id=52491) - CC-By Ken Bushima\\r\\n\\r\\n\n**Movie Clip**: [Caminades 3: Llamigos](http://www.caminandes.com/) CC-By Blender Institute\\r\\n\\r\\n**Video sources**: https://gitlab.gnome.org/Jehan/what-is-peertube/\"\n",
  • "support": "Please support our work on https://soutenir.framasoft.org/en/ <3",
  • "tags": [
    ],
  • "commentsEnabled": true,
  • "commentsPolicy": {
    },
  • "downloadEnabled": true,
  • "inputFileUpdatedAt": "2019-08-24T14:15:22Z",
  • "trackerUrls": [],
  • "files": [
    ],
  • "streamingPlaylists": [
    ]
}

Delete a video

Authorizations:
OAuth2
path Parameters
required
id (integer) or UUIDv4 (string) or shortUUID (string)

The object id, uuid or short uuid

Responses

Get complete video description

path Parameters
required
id (integer) or UUIDv4 (string) or shortUUID (string)

The object id, uuid or short uuid

header Parameters
x-peertube-video-password
string

Required on password protected video

Responses

Response samples

Content type
application/json
"**[Want to help to translate this video?](https://weblate.framasoft.org/projects/what-is-peertube-video/)**\\r\\n\\r\\n**Take back the control of your videos! [#JoinPeertube](https://joinpeertube.org)**\n"

Notify user is watching a video

Call this endpoint regularly (every 5-10 seconds for example) to notify the server the user is watching the video. After a while, PeerTube will increase video's viewers counter. If the user is authenticated, PeerTube will also store the current player time.

path Parameters
required
id (integer) or UUIDv4 (string) or shortUUID (string)

The object id, uuid or short uuid

Request Body schema: application/json
required
currentTime
required
integer <seconds>

timestamp within the video, in seconds

client
string

Client software used to watch the video. For example "Firefox", "PeerTube Approval Android", etc.

device
any
Enum: "console" "embedded" "mobile" "smarttv" "tablet" "wearable" "xr" "desktop"

Device used to watch the video. For example "desktop", "mobile", "smarttv", etc.

operatingSystem
string

Operating system used to watch the video. For example "Windows", "Ubuntu", etc.

sessionId
string

Optional param to represent the current viewer session. Used by the backend to properly count one view per session per video. PeerTube admin can configure the server to not trust this sessionId parameter but use the request IP address instead to identify a viewer.

viewEvent
string
Value: "seek"

Event since last viewing call:

  • seek - If the user seeked the video

Responses

Request samples

Content type
application/json
{
  • "currentTime": 5,
  • "viewEvent": "seek",
  • "sessionId": "string",
  • "client": "string",
  • "device": "console",
  • "operatingSystem": "string"
}

Set watching progress of a video Deprecated

This endpoint has been deprecated. Use /videos/{id}/views instead

Authorizations:
OAuth2
path Parameters
required
id (integer) or UUIDv4 (string) or shortUUID (string)

The object id, uuid or short uuid

Request Body schema: application/json
required
currentTime
required
integer <seconds>

timestamp within the video, in seconds

client
string

Client software used to watch the video. For example "Firefox", "PeerTube Approval Android", etc.

device
any
Enum: "console" "embedded" "mobile" "smarttv" "tablet" "wearable" "xr" "desktop"

Device used to watch the video. For example "desktop", "mobile", "smarttv", etc.

operatingSystem
string

Operating system used to watch the video. For example "Windows", "Ubuntu", etc.

sessionId
string

Optional param to represent the current viewer session. Used by the backend to properly count one view per session per video. PeerTube admin can configure the server to not trust this sessionId parameter but use the request IP address instead to identify a viewer.

viewEvent
string
Value: "seek"

Event since last viewing call:

  • seek - If the user seeked the video

Responses

Request samples

Content type
application/json
{
  • "currentTime": 5,
  • "viewEvent": "seek",
  • "sessionId": "string",
  • "client": "string",
  • "device": "console",
  • "operatingSystem": "string"
}

Upload a video

Uses a single request to upload a video.

Authorizations:
OAuth2
Request Body schema: multipart/form-data
channelId
required
integer >= 1

Channel id that will contain this video

name
required
string [ 3 .. 120 ] characters

Video name

videofile
required
string <binary>

Video file

category
integer (VideoCategorySet)

category id of the video (see /videos/categories)

commentsEnabled
boolean
Deprecated

Deprecated in 6.2, use commentsPolicy instead

commentsPolicy
integer (VideoCommentsPolicySet)
Enum: 1 2 3

Comments policy of the video (Enabled = 1, Disabled = 2, Requires Approval = 3)

description
string

Video description

downloadEnabled
boolean

Enable or disable downloading for this video

generateTranscription
boolean

PeerTube >= 6.2 If enabled by the admin, automatically generate a subtitle of the video

language
string (VideoLanguageSet)

language id of the video (see /videos/languages)

licence
integer (VideoLicenceSet)

licence id of the video (see /videos/licences)

nsfw
boolean

Whether or not this video contains sensitive content

nsfwFlags
integer (NSFWFlag)
Enum: 0 1 2 4

NSFW flags (can be combined using bitwise or operator)

  • 0 NONE
  • 1 VIOLENT
  • 2 EXPLICIT_SEX
nsfwSummary
any

More information about the sensitive content of the video

originallyPublishedAt
string <date-time>

Date when the content was originally published

previewfile
string <binary>

Video preview file

privacy
integer (VideoPrivacySet)
Enum: 1 2 3 4 5

privacy id of the video (see /videos/privacies)

object (VideoScheduledUpdate)
support
string

A text tell the audience how to support the video creator

tags
Array of strings [ 1 .. 5 ] items unique [ items [ 2 .. 30 ] characters ]

Video tags (maximum 5 tags each between 2 and 30 characters)

thumbnailfile
string <binary>

Video thumbnail file

videoPasswords
Array of strings (AddVideoPasswords) unique [ items >= 2 characters ]
waitTranscoding
boolean

Whether or not we wait transcoding before publish the video

Responses

Request samples

## DEPENDENCIES: jq
USERNAME="<your_username>"
PASSWORD="<your_password>"
FILE_PATH="<your_file_path>"
CHANNEL_ID="<your_channel_id>"
NAME="<video_name>"
API="https://peertube2.cpy.re/api/v1"

## AUTH
client_id=$(curl -s "$API/oauth-clients/local" | jq -r ".client_id")
client_secret=$(curl -s "$API/oauth-clients/local" | jq -r ".client_secret")
token=$(curl -s "$API/users/token" \
  --data client_id="$client_id" \
  --data client_secret="$client_secret" \
  --data grant_type=password \
  --data username="$USERNAME" \
  --data password="$PASSWORD" \
  | jq -r ".access_token")

## VIDEO UPLOAD
curl -s "$API/videos/upload" \
  -H "Authorization: Bearer $token" \
  --max-time 600 \
  --form videofile=@"$FILE_PATH" \
  --form channelId=$CHANNEL_ID \
  --form name="$NAME"

Response samples

Content type
application/json
{
  • "video": {
    }
}

Initialize the resumable upload of a video

Uses a resumable protocol to initialize the upload of a video

Authorizations:
OAuth2
header Parameters
X-Upload-Content-Length
required
number
Example: 2469036

Number of bytes that will be uploaded in subsequent requests. Set this value to the size of the file you are uploading.

X-Upload-Content-Type
required
string <mimetype>
Example: video/mp4

MIME type of the file that you are uploading. Depending on your instance settings, acceptable values might vary.

Request Body schema: application/json
channelId
required
integer >= 1

Channel id that will contain this video

filename
required
string <filename>

Video filename including extension

name
required
string [ 3 .. 120 ] characters

Video name

category
integer (VideoCategorySet)

category id of the video (see /videos/categories)

commentsEnabled
boolean
Deprecated

Deprecated in 6.2, use commentsPolicy instead

commentsPolicy
integer (VideoCommentsPolicySet)
Enum: 1 2 3

Comments policy of the video (Enabled = 1, Disabled = 2, Requires Approval = 3)

description
string

Video description

downloadEnabled
boolean

Enable or disable downloading for this video

generateTranscription
boolean

PeerTube >= 6.2 If enabled by the admin, automatically generate a subtitle of the video

language
string (VideoLanguageSet)

language id of the video (see /videos/languages)

licence
integer (VideoLicenceSet)

licence id of the video (see /videos/licences)

nsfw
boolean

Whether or not this video contains sensitive content

nsfwFlags
integer (NSFWFlag)
Enum: 0 1 2 4

NSFW flags (can be combined using bitwise or operator)

  • 0 NONE
  • 1 VIOLENT
  • 2 EXPLICIT_SEX
nsfwSummary
any

More information about the sensitive content of the video

originallyPublishedAt
string <date-time>

Date when the content was originally published

previewfile
string <binary>

Video preview file

privacy
integer (VideoPrivacySet)
Enum: 1 2 3 4 5

privacy id of the video (see /videos/privacies)

object (VideoScheduledUpdate)
support
string

A text tell the audience how to support the video creator

tags
Array of strings [ 1 .. 5 ] items unique [ items [ 2 .. 30 ] characters ]

Video tags (maximum 5 tags each between 2 and 30 characters)

thumbnailfile
string <binary>

Video thumbnail file

videoPasswords
Array of strings (AddVideoPasswords) unique [ items >= 2 characters ]
waitTranscoding
boolean

Whether or not we wait transcoding before publish the video

Responses

Request samples

Content type
application/json
{
  • "name": "What is PeerTube?",
  • "channelId": 3,
  • "privacy": 1,
  • "category": 15,
  • "licence": 2,
  • "language": "en",
  • "description": "**[Want to help to translate this video?](https://weblate.framasoft.org/projects/what-is-peertube-video/)**\\r\\n\\r\\n**Take back the control of your videos! [#JoinPeertube](https://joinpeertube.org)**\n",
  • "waitTranscoding": true,
  • "generateTranscription": true,
  • "support": "Please support our work on https://soutenir.framasoft.org/en/ <3",
  • "nsfw": true,
  • "nsfwSummary": null,
  • "nsfwFlags": 0,
  • "tags": [
    ],
  • "commentsEnabled": true,
  • "commentsPolicy": 1,
  • "downloadEnabled": true,
  • "originallyPublishedAt": "2019-08-24T14:15:22Z",
  • "scheduleUpdate": {
    },
  • "thumbnailfile": "string",
  • "previewfile": "string",
  • "videoPasswords": [
    ],
  • "filename": "what_is_peertube.mp4"
}

Send chunk for the resumable upload of a video

Uses a resumable protocol to continue, pause or resume the upload of a video

Authorizations:
OAuth2
query Parameters
upload_id
required
string

Created session id to proceed with. If you didn't send chunks in the last hour, it is not valid anymore and you need to initialize a new upload.

header Parameters
Content-Length
required
number
Example: 262144

Size of the chunk that the request is sending.

Remember that larger chunks are more efficient. PeerTube's web client uses chunks varying from 1048576 bytes (~1MB) and increases or reduces size depending on connection health.

Content-Range
required
string
Example: bytes 0-262143/2469036

Specifies the bytes in the file that the request is uploading.

For example, a value of bytes 0-262143/1000000 shows that the request is sending the first 262144 bytes (256 x 1024) in a 2,469,036 byte file.

Request Body schema: application/octet-stream
string <binary>

Responses

Response samples

Content type
application/json
{
  • "video": {
    }
}

Cancel the resumable upload of a video, deleting any data uploaded so far

Uses a resumable protocol to cancel the upload of a video

Authorizations:
OAuth2
query Parameters
upload_id
required
string

Created session id to proceed with. If you didn't send chunks in the last hour, it is not valid anymore and you need to initialize a new upload.

header Parameters
Content-Length
required
number
Example: 0

Responses

Create a live

Authorizations:
OAuth2
Request Body schema: multipart/form-data
channelId
required
integer

Channel id that will contain this live video

name
required
string [ 3 .. 120 ] characters

Live video/replay name

category
integer (VideoCategorySet)

category id of the video (see /videos/categories)

commentsEnabled
boolean
Deprecated

Deprecated in 6.2, use commentsPolicy instead

commentsPolicy
integer (VideoCommentsPolicySet)
Enum: 1 2 3

Comments policy of the video (Enabled = 1, Disabled = 2, Requires Approval = 3)

description
string

Live video/replay description

downloadEnabled
boolean

Enable or disable downloading for the replay of this live video

language
string (VideoLanguageSet)

language id of the video (see /videos/languages)

latencyMode
integer
Enum: 1 2 3

User can select live latency mode if enabled by the instance

licence
integer (VideoLicenceSet)

licence id of the video (see /videos/licences)

nsfw
boolean

Whether or not this live video/replay contains sensitive content

nsfwFlags
integer (NSFWFlag)
Enum: 0 1 2 4

NSFW flags (can be combined using bitwise or operator)

  • 0 NONE
  • 1 VIOLENT
  • 2 EXPLICIT_SEX
nsfwSummary
any

More information about the sensitive content of the video

permanentLive
boolean

User can stream multiple times in a permanent live

previewfile
string <binary>

Live video/replay preview file

privacy
integer (VideoPrivacySet)
Enum: 1 2 3 4 5

privacy id of the video (see /videos/privacies)

object (LiveVideoReplaySettings)
saveReplay
boolean
Array of objects (LiveSchedule)
support
string

A text tell the audience how to support the creator

tags
Array of strings [ 1 .. 5 ] items [ items [ 2 .. 30 ] characters ]

Live video/replay tags (maximum 5 tags each between 2 and 30 characters)

thumbnailfile
string <binary>

Live video/replay thumbnail file

Responses

Response samples

Content type
application/json
{
  • "video": {
    }
}

Get information about a live

Authorizations:
OAuth2
path Parameters
required
id (integer) or UUIDv4 (string) or shortUUID (string)

The object id, uuid or short uuid

Responses

Response samples

Content type
application/json
{
  • "rtmpUrl": "string",
  • "rtmpsUrl": "string",
  • "streamKey": "string",
  • "saveReplay": true,
  • "replaySettings": {
    },
  • "permanentLive": true,
  • "latencyMode": 1,
  • "schedules": [
    ]
}

Update information about a live

Authorizations:
OAuth2
path Parameters
required
id (integer) or UUIDv4 (string) or shortUUID (string)

The object id, uuid or short uuid

Request Body schema: application/json
latencyMode
integer
Enum: 1 2 3

User can select live latency mode if enabled by the instance

permanentLive
boolean

User can stream multiple times in a permanent live

object (LiveVideoReplaySettings)
saveReplay
boolean
Array of objects (LiveSchedule)

Responses

Request samples

Content type
application/json
{
  • "saveReplay": true,
  • "replaySettings": {
    },
  • "permanentLive": true,
  • "latencyMode": 1,
  • "schedules": [
    ]
}

Get video source file metadata

Get metadata and download link of original video file

Authorizations:
OAuth2
path Parameters
required
id (integer) or UUIDv4 (string) or shortUUID (string)

The object id, uuid or short uuid

Responses

Response samples

Content type
application/json
{
  • "filename": "string",
  • "inputFilename": "string",
  • "fileDownloadUrl": "string",
  • "resolution": {
    },
  • "size": 0,
  • "fps": 0,
  • "width": 0,
  • "height": 0,
  • "createdAt": "2019-08-24T14:15:22Z"
}

Delete video source file

Authorizations:
OAuth2
path Parameters
required
id (integer) or UUIDv4 (string) or shortUUID (string)

The object id, uuid or short uuid

Responses

Initialize the resumable replacement of a video

PeerTube >= 6.0 Uses a resumable protocol to initialize the replacement of a video

Authorizations:
OAuth2
path Parameters
required
id (integer) or UUIDv4 (string) or shortUUID (string)

The object id, uuid or short uuid

header Parameters
X-Upload-Content-Length
required
number
Example: 2469036

Number of bytes that will be uploaded in subsequent requests. Set this value to the size of the file you are uploading.

X-Upload-Content-Type
required
string <mimetype>
Example: video/mp4

MIME type of the file that you are uploading. Depending on your instance settings, acceptable values might vary.

Request Body schema: application/json
filename
string <filename>

Video filename including extension

Responses

Request samples

Content type
application/json
{
  • "filename": "what_is_peertube.mp4"
}

Send chunk for the resumable replacement of a video

PeerTube >= 6.0 Uses a resumable protocol to continue, pause or resume the replacement of a video

Authorizations:
OAuth2
path Parameters
required
id (integer) or UUIDv4 (string) or shortUUID (string)

The object id, uuid or short uuid

query Parameters
upload_id
required
string

Created session id to proceed with. If you didn't send chunks in the last hour, it is not valid anymore and you need to initialize a new upload.

header Parameters
Content-Length
required
number
Example: 262144

Size of the chunk that the request is sending.

Remember that larger chunks are more efficient. PeerTube's web client uses chunks varying from 1048576 bytes (~1MB) and increases or reduces size depending on connection health.

Content-Range
required
string
Example: bytes 0-262143/2469036

Specifies the bytes in the file that the request is uploading.

For example, a value of bytes 0-262143/1000000 shows that the request is sending the first 262144 bytes (256 x 1024) in a 2,469,036 byte file.

Request Body schema: application/octet-stream
string <binary>

Responses

Cancel the resumable replacement of a video

PeerTube >= 6.0 Uses a resumable protocol to cancel the replacement of a video

Authorizations:
OAuth2
path Parameters
required
id (integer) or UUIDv4 (string) or shortUUID (string)

The object id, uuid or short uuid

query Parameters
upload_id
required
string

Created session id to proceed with. If you didn't send chunks in the last hour, it is not valid anymore and you need to initialize a new upload.

header Parameters
Content-Length
required
number
Example: 0

Responses

List storyboards of a video

PeerTube >= 6.0

path Parameters
required
id (integer) or UUIDv4 (string) or shortUUID (string)

The object id, uuid or short uuid

Responses

Response samples

Content type
application/json
{
  • "storyboards": [
    ]
}

List videos of a video channel

path Parameters
channelHandle
required
string
Example: my_username | my_username@example.com

The video channel handle

query Parameters
string or Array of strings

PeerTube >= 6.2 Admins and moderators only filter on videos that contain one of these automatic tags

VideoCategorySet (integer) or Array of VideoCategorySet (integers)

category id of the video (see /videos/categories)

count
integer [ 1 .. 100 ]
Default: 15

Number of items to return

excludeAlreadyWatched
boolean

Whether or not to exclude videos that are in the user's video history

hasHLSFiles
boolean

PeerTube >= 4.0 Display only videos that have HLS files

hasWebVideoFiles
boolean

PeerTube >= 6.0 Display only videos that have Web Video files

host
string

Find elements owned by this host

include
integer
Enum: 0 1 2 4 8 16 32

Only administrators and moderators can use this parameter

Include additional videos in results (can be combined using bitwise or operator)

  • 0 NONE
  • 1 NOT_PUBLISHED_STATE
  • 2 BLACKLISTED
  • 4 BLOCKED_OWNER
  • 8 FILES
  • 16 CAPTIONS
  • 32 VIDEO SOURCE
includeScheduledLive
boolean

whether or not include live that are scheduled for later

isLive
boolean

whether or not the video is a live

isLocal
boolean

PeerTube >= 4.0 Display only local or remote objects

VideoLanguageSet (string) or Array of VideoLanguageSet (strings)

language id of the video (see /videos/languages). Use _unknown to filter on videos that don't have a video language

VideoLicenceSet (integer) or Array of VideoLicenceSet (integers)

licence id of the video (see /videos/licences)

nsfw
string
Enum: "true" "false"

whether to include nsfw videos, if any

nsfwFlagsExcluded
integer (NSFWFlag)
Enum: 0 1 2 4

NSFW flags (can be combined using bitwise or operator)

  • 0 NONE
  • 1 VIOLENT
  • 2 EXPLICIT_SEX
nsfwFlagsIncluded
integer (NSFWFlag)
Enum: 0 1 2 4

NSFW flags (can be combined using bitwise or operator)

  • 0 NONE
  • 1 VIOLENT
  • 2 EXPLICIT_SEX
privacyOneOf
integer (VideoPrivacySet)
Enum: 1 2 3 4 5

PeerTube >= 4.0 Display only videos in this specific privacy/privacies

search
string

Plain text search, applied to various parts of the model depending on endpoint

skipCount
string
Default: "false"
Enum: "true" "false"

if you don't need the total in the response

sort
string
Enum: "name" "-duration" "-createdAt" "-publishedAt" "-views" "-likes" "-comments" "-trending" "-hot" "-best"

Sort videos by criteria (prefixing with - means DESC order):

  • hot - Adaptation of Reddit "hot" algorithm taking into account video views, likes, dislikes and comments and publication date
  • best - Same than hot, but also takes into account user video history
  • trending - Sort videos by recent views ("recent" is defined by the admin)
  • views - Sort videos using their views counter
  • publishedAt - Sort by video publication date (when it became publicly available)
start
integer >= 0

Offset used to paginate results

string or Array of strings

tag(s) of the video, where all should be present in the video

string or Array of strings

tag(s) of the video

Responses

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

Search videos

query Parameters
string or Array of strings

PeerTube >= 6.2 Admins and moderators only filter on videos that contain one of these automatic tags

VideoCategorySet (integer) or Array of VideoCategorySet (integers)

category id of the video (see /videos/categories)

count
integer [ 1 .. 100 ]
Default: 15

Number of items to return

durationMax
integer

Get videos that have this maximum duration

durationMin
integer

Get videos that have this minimum duration

endDate
string <date-time>

Get videos that are published before this date

excludeAlreadyWatched
boolean

Whether or not to exclude videos that are in the user's video history

hasHLSFiles
boolean

PeerTube >= 4.0 Display only videos that have HLS files

hasWebVideoFiles
boolean

PeerTube >= 6.0 Display only videos that have Web Video files

host
string

Find elements owned by this host

include
integer
Enum: 0 1 2 4 8 16 32

Only administrators and moderators can use this parameter

Include additional videos in results (can be combined using bitwise or operator)

  • 0 NONE
  • 1 NOT_PUBLISHED_STATE
  • 2 BLACKLISTED
  • 4 BLOCKED_OWNER
  • 8 FILES
  • 16 CAPTIONS
  • 32 VIDEO SOURCE
includeScheduledLive
boolean

whether or not include live that are scheduled for later

isLive
boolean

whether or not the video is a live

isLocal
boolean

PeerTube >= 4.0 Display only local or remote objects

VideoLanguageSet (string) or Array of VideoLanguageSet (strings)

language id of the video (see /videos/languages). Use _unknown to filter on videos that don't have a video language

VideoLicenceSet (integer) or Array of VideoLicenceSet (integers)

licence id of the video (see /videos/licences)

nsfw
string
Enum: "true" "false"

whether to include nsfw videos, if any

nsfwFlagsExcluded
integer (NSFWFlag)
Enum: 0 1 2 4

NSFW flags (can be combined using bitwise or operator)

  • 0 NONE
  • 1 VIOLENT
  • 2 EXPLICIT_SEX
nsfwFlagsIncluded
integer (NSFWFlag)
Enum: 0 1 2 4

NSFW flags (can be combined using bitwise or operator)

  • 0 NONE
  • 1 VIOLENT
  • 2 EXPLICIT_SEX
originallyPublishedEndDate
string <date-time>

Get videos that are originally published before this date

originallyPublishedStartDate
string <date-time>

Get videos that are originally published after this date

privacyOneOf
integer (VideoPrivacySet)
Enum: 1 2 3 4 5

PeerTube >= 4.0 Display only videos in this specific privacy/privacies

search
required
string

String to search. If the user can make a remote URI search, and the string is an URI then the PeerTube instance will fetch the remote object and add it to its database. Then, you can use the REST API to fetch the complete video information and interact with it.

searchTarget
string
Enum: "local" "search-index"

If the administrator enabled search index support, you can override the default search target.

Warning: If you choose to make an index search, PeerTube will get results from a third party service. It means the instance may not yet know the objects you fetched. If you want to load video/channel information:

  • If the current user has the ability to make a remote URI search (this information is available in the config endpoint), then reuse the search API to make a search using the object URI so PeerTube instance fetches the remote object and fill its database. After that, you can use the classic REST API endpoints to fetch the complete object or interact with it
  • If the current user doesn't have the ability to make a remote URI search, then redirect the user on the origin instance or fetch the data from the origin instance API
skipCount
string
Default: "false"
Enum: "true" "false"

if you don't need the total in the response

sort
string
Enum: "name" "-duration" "-createdAt" "-publishedAt" "-views" "-likes" "-comments" "-trending" "-hot" "-best"

Sort videos by criteria (prefixing with - means DESC order):

  • hot - Adaptation of Reddit "hot" algorithm taking into account video views, likes, dislikes and comments and publication date
  • best - Same than hot, but also takes into account user video history
  • trending - Sort videos by recent views ("recent" is defined by the admin)
  • views - Sort videos using their views counter
  • publishedAt - Sort by video publication date (when it became publicly available)
start
integer >= 0

Offset used to paginate results

startDate
string <date-time>

Get videos that are published after this date

string or Array of strings

tag(s) of the video, where all should be present in the video

string or Array of strings

tag(s) of the video

uuids
Array of strings

Find elements with specific UUIDs

Responses

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

Video Upload

Operations dealing with adding video or audio. PeerTube supports two upload modes, and three import modes.

Upload

  • legacy, where the video file is sent in a single request
  • resumable, where the video file is sent in chunks

You can upload videos more reliably by using the resumable variant. Its protocol lets you resume an upload operation after a network interruption or other transmission failure, saving time and bandwidth in the event of network failures.

Favor using resumable uploads in any of the following cases:

  • You are transferring large files
  • The likelihood of a network interruption is high
  • Uploads are originating from a device with a low-bandwidth or unstable Internet connection, such as a mobile device

Import

  • URL-based: where the URL points to any service supported by youtube-dl
  • magnet-based: where the URI resolves to a BitTorrent resource containing a single supported video file
  • torrent-based: where the metainfo file resolves to a BitTorrent resource containing a single supported video file

The import function is practical when the desired video/audio is available online. It makes PeerTube download it for you, saving you as much bandwidth and avoiding any instability or limitation your network might have.

Upload a video

Uses a single request to upload a video.

Authorizations:
OAuth2
Request Body schema: multipart/form-data
channelId
required
integer >= 1

Channel id that will contain this video

name
required
string [ 3 .. 120 ] characters

Video name

videofile
required
string <binary>

Video file

category
integer (VideoCategorySet)

category id of the video (see /videos/categories)

commentsEnabled
boolean
Deprecated

Deprecated in 6.2, use commentsPolicy instead

commentsPolicy
integer (VideoCommentsPolicySet)
Enum: 1 2 3

Comments policy of the video (Enabled = 1, Disabled = 2, Requires Approval = 3)

description
string

Video description

downloadEnabled
boolean

Enable or disable downloading for this video

generateTranscription
boolean

PeerTube >= 6.2 If enabled by the admin, automatically generate a subtitle of the video

language
string (VideoLanguageSet)

language id of the video (see /videos/languages)

licence
integer (VideoLicenceSet)

licence id of the video (see /videos/licences)

nsfw
boolean

Whether or not this video contains sensitive content

nsfwFlags
integer (NSFWFlag)
Enum: 0 1 2 4

NSFW flags (can be combined using bitwise or operator)

  • 0 NONE
  • 1 VIOLENT
  • 2 EXPLICIT_SEX
nsfwSummary
any

More information about the sensitive content of the video

originallyPublishedAt
string <date-time>

Date when the content was originally published

previewfile
string <binary>

Video preview file

privacy
integer (VideoPrivacySet)
Enum: 1 2 3 4 5

privacy id of the video (see /videos/privacies)

object (VideoScheduledUpdate)
support
string

A text tell the audience how to support the video creator

tags
Array of strings [ 1 .. 5 ] items unique [ items [ 2 .. 30 ] characters ]

Video tags (maximum 5 tags each between 2 and 30 characters)

thumbnailfile
string <binary>

Video thumbnail file

videoPasswords
Array of strings (AddVideoPasswords) unique [ items >= 2 characters ]
waitTranscoding
boolean

Whether or not we wait transcoding before publish the video

Responses

Request samples

## DEPENDENCIES: jq
USERNAME="<your_username>"
PASSWORD="<your_password>"
FILE_PATH="<your_file_path>"
CHANNEL_ID="<your_channel_id>"
NAME="<video_name>"
API="https://peertube2.cpy.re/api/v1"

## AUTH
client_id=$(curl -s "$API/oauth-clients/local" | jq -r ".client_id")
client_secret=$(curl -s "$API/oauth-clients/local" | jq -r ".client_secret")
token=$(curl -s "$API/users/token" \
  --data client_id="$client_id" \
  --data client_secret="$client_secret" \
  --data grant_type=password \
  --data username="$USERNAME" \
  --data password="$PASSWORD" \
  | jq -r ".access_token")

## VIDEO UPLOAD
curl -s "$API/videos/upload" \
  -H "Authorization: Bearer $token" \
  --max-time 600 \
  --form videofile=@"$FILE_PATH" \
  --form channelId=$CHANNEL_ID \
  --form name="$NAME"

Response samples

Content type
application/json
{
  • "video": {
    }
}

Initialize the resumable upload of a video

Uses a resumable protocol to initialize the upload of a video

Authorizations:
OAuth2
header Parameters
X-Upload-Content-Length
required
number
Example: 2469036

Number of bytes that will be uploaded in subsequent requests. Set this value to the size of the file you are uploading.

X-Upload-Content-Type
required
string <mimetype>
Example: video/mp4

MIME type of the file that you are uploading. Depending on your instance settings, acceptable values might vary.

Request Body schema: application/json
channelId
required
integer >= 1

Channel id that will contain this video

filename
required
string <filename>

Video filename including extension

name
required
string [ 3 .. 120 ] characters

Video name

category
integer (VideoCategorySet)

category id of the video (see /videos/categories)

commentsEnabled
boolean
Deprecated

Deprecated in 6.2, use commentsPolicy instead

commentsPolicy
integer (VideoCommentsPolicySet)
Enum: 1 2 3

Comments policy of the video (Enabled = 1, Disabled = 2, Requires Approval = 3)

description
string

Video description

downloadEnabled
boolean

Enable or disable downloading for this video

generateTranscription
boolean

PeerTube >= 6.2 If enabled by the admin, automatically generate a subtitle of the video

language
string (VideoLanguageSet)

language id of the video (see /videos/languages)

licence
integer (VideoLicenceSet)

licence id of the video (see /videos/licences)

nsfw
boolean

Whether or not this video contains sensitive content

nsfwFlags
integer (NSFWFlag)
Enum: 0 1 2 4

NSFW flags (can be combined using bitwise or operator)

  • 0 NONE
  • 1 VIOLENT
  • 2 EXPLICIT_SEX
nsfwSummary
any

More information about the sensitive content of the video

originallyPublishedAt
string <date-time>

Date when the content was originally published

previewfile
string <binary>

Video preview file

privacy
integer (VideoPrivacySet)
Enum: 1 2 3 4 5

privacy id of the video (see /videos/privacies)

object (VideoScheduledUpdate)
support
string

A text tell the audience how to support the video creator

tags
Array of strings [ 1 .. 5 ] items unique [ items [ 2 .. 30 ] characters ]

Video tags (maximum 5 tags each between 2 and 30 characters)

thumbnailfile
string <binary>

Video thumbnail file

videoPasswords
Array of strings (AddVideoPasswords) unique [ items >= 2 characters ]
waitTranscoding
boolean

Whether or not we wait transcoding before publish the video

Responses

Request samples

Content type
application/json
{
  • "name": "What is PeerTube?",
  • "channelId": 3,
  • "privacy": 1,
  • "category": 15,
  • "licence": 2,
  • "language": "en",
  • "description": "**[Want to help to translate this video?](https://weblate.framasoft.org/projects/what-is-peertube-video/)**\\r\\n\\r\\n**Take back the control of your videos! [#JoinPeertube](https://joinpeertube.org)**\n",
  • "waitTranscoding": true,
  • "generateTranscription": true,
  • "support": "Please support our work on https://soutenir.framasoft.org/en/ <3",
  • "nsfw": true,
  • "nsfwSummary": null,
  • "nsfwFlags": 0,
  • "tags": [
    ],
  • "commentsEnabled": true,
  • "commentsPolicy": 1,
  • "downloadEnabled": true,
  • "originallyPublishedAt": "2019-08-24T14:15:22Z",
  • "scheduleUpdate": {
    },
  • "thumbnailfile": "string",
  • "previewfile": "string",
  • "videoPasswords": [
    ],
  • "filename": "what_is_peertube.mp4"
}

Send chunk for the resumable upload of a video

Uses a resumable protocol to continue, pause or resume the upload of a video

Authorizations:
OAuth2
query Parameters
upload_id
required
string

Created session id to proceed with. If you didn't send chunks in the last hour, it is not valid anymore and you need to initialize a new upload.

header Parameters
Content-Length
required
number
Example: 262144

Size of the chunk that the request is sending.

Remember that larger chunks are more efficient. PeerTube's web client uses chunks varying from 1048576 bytes (~1MB) and increases or reduces size depending on connection health.

Content-Range
required
string
Example: bytes 0-262143/2469036

Specifies the bytes in the file that the request is uploading.

For example, a value of bytes 0-262143/1000000 shows that the request is sending the first 262144 bytes (256 x 1024) in a 2,469,036 byte file.

Request Body schema: application/octet-stream
string <binary>

Responses

Response samples

Content type
application/json
{
  • "video": {
    }
}

Cancel the resumable upload of a video, deleting any data uploaded so far

Uses a resumable protocol to cancel the upload of a video

Authorizations:
OAuth2
query Parameters
upload_id
required
string

Created session id to proceed with. If you didn't send chunks in the last hour, it is not valid anymore and you need to initialize a new upload.

header Parameters
Content-Length
required
number
Example: 0

Responses

Import a video

Import a torrent or magnetURI or HTTP resource (if enabled by the instance administrator)

Authorizations:
OAuth2
Request Body schema: multipart/form-data
One of
channelId
required
integer >= 1

Channel id that will contain this video

name
required
string [ 3 .. 120 ] characters

Video name

targetUrl
required
string <url>

remote URL where to find the import's source video

category
integer (VideoCategorySet)

category id of the video (see /videos/categories)

commentsEnabled
boolean
Deprecated

Deprecated in 6.2, use commentsPolicy instead

commentsPolicy
integer (VideoCommentsPolicySet)
Enum: 1 2 3

Comments policy of the video (Enabled = 1, Disabled = 2, Requires Approval = 3)

description
string

Video description

downloadEnabled
boolean

Enable or disable downloading for this video

generateTranscription
boolean

PeerTube >= 6.2 If enabled by the admin, automatically generate a subtitle of the video

language
string (VideoLanguageSet)

language id of the video (see /videos/languages)

licence
integer (VideoLicenceSet)

licence id of the video (see /videos/licences)

nsfw
boolean

Whether or not this video contains sensitive content

nsfwFlags
integer (NSFWFlag)
Enum: 0 1 2 4

NSFW flags (can be combined using bitwise or operator)

  • 0 NONE
  • 1 VIOLENT
  • 2 EXPLICIT_SEX
nsfwSummary
any

More information about the sensitive content of the video

originallyPublishedAt
string <date-time>

Date when the content was originally published

previewfile
string <binary>

Video preview file

privacy
integer (VideoPrivacySet)
Enum: 1 2 3 4 5

privacy id of the video (see /videos/privacies)

object (VideoScheduledUpdate)
support
string

A text tell the audience how to support the video creator

tags
Array of strings [ 1 .. 5 ] items unique [ items [ 2 .. 30 ] characters ]

Video tags (maximum 5 tags each between 2 and 30 characters)

thumbnailfile
string <binary>

Video thumbnail file

videoPasswords
Array of strings (AddVideoPasswords) unique [ items >= 2 characters ]
waitTranscoding
boolean

Whether or not we wait transcoding before publish the video

Responses

Response samples

Content type
application/json
{
  • "video": {
    }
}

Initialize the resumable replacement of a video

PeerTube >= 6.0 Uses a resumable protocol to initialize the replacement of a video

Authorizations:
OAuth2
path Parameters
required
id (integer) or UUIDv4 (string) or shortUUID (string)

The object id, uuid or short uuid

header Parameters
X-Upload-Content-Length
required
number
Example: 2469036

Number of bytes that will be uploaded in subsequent requests. Set this value to the size of the file you are uploading.

X-Upload-Content-Type
required
string <mimetype>
Example: video/mp4

MIME type of the file that you are uploading. Depending on your instance settings, acceptable values might vary.

Request Body schema: application/json
filename
string <filename>

Video filename including extension

Responses

Request samples

Content type
application/json
{
  • "filename": "what_is_peertube.mp4"
}

Send chunk for the resumable replacement of a video

PeerTube >= 6.0 Uses a resumable protocol to continue, pause or resume the replacement of a video

Authorizations:
OAuth2
path Parameters
required
id (integer) or UUIDv4 (string) or shortUUID (string)

The object id, uuid or short uuid

query Parameters
upload_id
required
string

Created session id to proceed with. If you didn't send chunks in the last hour, it is not valid anymore and you need to initialize a new upload.

header Parameters
Content-Length
required
number
Example: 262144

Size of the chunk that the request is sending.

Remember that larger chunks are more efficient. PeerTube's web client uses chunks varying from 1048576 bytes (~1MB) and increases or reduces size depending on connection health.

Content-Range
required
string
Example: bytes 0-262143/2469036

Specifies the bytes in the file that the request is uploading.

For example, a value of bytes 0-262143/1000000 shows that the request is sending the first 262144 bytes (256 x 1024) in a 2,469,036 byte file.

Request Body schema: application/octet-stream
string <binary>

Responses

Cancel the resumable replacement of a video

PeerTube >= 6.0 Uses a resumable protocol to cancel the replacement of a video

Authorizations:
OAuth2
path Parameters
required
id (integer) or UUIDv4 (string) or shortUUID (string)

The object id, uuid or short uuid

query Parameters
upload_id
required
string

Created session id to proceed with. If you didn't send chunks in the last hour, it is not valid anymore and you need to initialize a new upload.

header Parameters
Content-Length
required
number
Example: 0

Responses

Video Imports

Operations dealing with listing, adding and removing video imports.

Import a video

Import a torrent or magnetURI or HTTP resource (if enabled by the instance administrator)

Authorizations:
OAuth2
Request Body schema: multipart/form-data
One of
channelId
required
integer >= 1

Channel id that will contain this video

name
required
string [ 3 .. 120 ] characters

Video name

targetUrl
required
string <url>

remote URL where to find the import's source video

category
integer (VideoCategorySet)

category id of the video (see /videos/categories)

commentsEnabled
boolean
Deprecated

Deprecated in 6.2, use commentsPolicy instead

commentsPolicy
integer (VideoCommentsPolicySet)
Enum: 1 2 3

Comments policy of the video (Enabled = 1, Disabled = 2, Requires Approval = 3)

description
string

Video description

downloadEnabled
boolean

Enable or disable downloading for this video

generateTranscription
boolean

PeerTube >= 6.2 If enabled by the admin, automatically generate a subtitle of the video

language
string (VideoLanguageSet)

language id of the video (see /videos/languages)

licence
integer (VideoLicenceSet)

licence id of the video (see /videos/licences)

nsfw
boolean

Whether or not this video contains sensitive content

nsfwFlags
integer (NSFWFlag)
Enum: 0 1 2 4

NSFW flags (can be combined using bitwise or operator)

  • 0 NONE
  • 1 VIOLENT
  • 2 EXPLICIT_SEX
nsfwSummary
any

More information about the sensitive content of the video

originallyPublishedAt
string <date-time>

Date when the content was originally published

previewfile
string <binary>

Video preview file

privacy
integer (VideoPrivacySet)
Enum: 1 2 3 4 5

privacy id of the video (see /videos/privacies)

object (VideoScheduledUpdate)
support
string

A text tell the audience how to support the video creator

tags
Array of strings [ 1 .. 5 ] items unique [ items [ 2 .. 30 ] characters ]

Video tags (maximum 5 tags each between 2 and 30 characters)

thumbnailfile
string <binary>

Video thumbnail file

videoPasswords
Array of strings (AddVideoPasswords) unique [ items >= 2 characters ]
waitTranscoding
boolean

Whether or not we wait transcoding before publish the video

Responses

Response samples

Content type
application/json
{
  • "video": {
    }
}

Cancel video import

Cancel a pending video import

Authorizations:
OAuth2
path Parameters
id
required
integer (id) >= 1
Example: 42

Entity id

Responses

Delete video import

Delete ended video import

Authorizations:
OAuth2
path Parameters
id
required
integer (id) >= 1
Example: 42

Entity id

Responses

Video Captions

Operations dealing with listing, adding and removing closed captions of a video.

List captions of a video

path Parameters
required
id (integer) or UUIDv4 (string) or shortUUID (string)

The object id, uuid or short uuid

header Parameters
x-peertube-video-password
string

Required on password protected video

Responses

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

Generate a video caption

PeerTube >= 6.2 This feature has to be enabled by the administrator

Authorizations:
OAuth2
path Parameters
required
id (integer) or UUIDv4 (string) or shortUUID (string)

The object id, uuid or short uuid

Request Body schema: application/json
forceTranscription
boolean
Default: false

Responses

Request samples

Content type
application/json
{
  • "forceTranscription": false
}

Add or replace a video caption

Authorizations:
OAuth2
path Parameters
captionLanguage
required
string (VideoLanguageSet)
Example: en

The caption language

required
id (integer) or UUIDv4 (string) or shortUUID (string)

The object id, uuid or short uuid

Request Body schema: multipart/form-data
captionfile
string <binary>

The file to upload.

Responses

Delete a video caption

Authorizations:
OAuth2
path Parameters
captionLanguage
required
string (VideoLanguageSet)
Example: en

The caption language

required
id (integer) or UUIDv4 (string) or shortUUID (string)

The object id, uuid or short uuid

Responses

Video Chapters

Operations dealing with managing chapters of a video.

Get chapters of a video

PeerTube >= 6.0

path Parameters
required
id (integer) or UUIDv4 (string) or shortUUID (string)

The object id, uuid or short uuid

header Parameters
x-peertube-video-password
string

Required on password protected video

Responses

Response samples

Content type
application/json
{
  • "chapters": {
    }
}

Replace video chapters

PeerTube >= 6.0

Authorizations:
OAuth2
path Parameters
required
id (integer) or UUIDv4 (string) or shortUUID (string)

The object id, uuid or short uuid

Request Body schema: application/json
Array of objects

Responses

Request samples

Content type
application/json
{
  • "chapters": [
    ]
}

Video Channels

Operations dealing with the creation, modification and listing of videos within a channel.

List video channels

query Parameters
count
integer [ 1 .. 100 ]
Default: 15

Number of items to return

sort
string
Example: sort=-createdAt

Sort column

start
integer >= 0

Offset used to paginate results

Responses

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

Create a video channel

Authorizations:
OAuth2
Request Body schema: application/json
displayName
required
any

Channel display name

name
required
string [ 1 .. 50 ] characters /^[a-zA-Z0-9\\-_.:]+$/

username of the channel to create

description
any

Channel description

support
any

How to support/fund the channel

Responses

Request samples

Content type
application/json
{
  • "displayName": null,
  • "description": null,
  • "support": null,
  • "name": "framasoft_videos"
}

Response samples

Content type
application/json
{
  • "videoChannel": {
    }
}

Get a video channel

path Parameters
channelHandle
required
string
Example: my_username | my_username@example.com

The video channel handle

Responses

Response samples

Content type
application/json
{
  • "id": 42,
  • "url": "string",
  • "name": "chocobozzz",
  • "avatars": [
    ],
  • "host": "example.com",
  • "hostRedundancyAllowed": true,
  • "followingCount": 0,
  • "followersCount": 0,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z",
  • "displayName": "Videos of Framasoft",
  • "description": "Videos made with <3 by Framasoft",
  • "support": "Please support our work on https://soutenir.framasoft.org/en/ <3",
  • "isLocal": true,
  • "banners": [
    ],
  • "ownerAccount": {
    }
}

Update a video channel

Authorizations:
OAuth2
path Parameters
channelHandle
required
string
Example: my_username | my_username@example.com

The video channel handle

Request Body schema: application/json
bulkVideosSupportUpdate
boolean

Update the support field for all videos of this channel

description
any

Channel description

displayName
any

Channel display name

support
any

How to support/fund the channel

Responses

Request samples

Content type
application/json
{
  • "displayName": null,
  • "description": null,
  • "support": null,
  • "bulkVideosSupportUpdate": true
}

Delete a video channel

Authorizations:
OAuth2
path Parameters
channelHandle
required
string
Example: my_username | my_username@example.com

The video channel handle

Responses

List videos of a video channel

path Parameters
channelHandle
required
string
Example: my_username | my_username@example.com

The video channel handle

query Parameters
string or Array of strings

PeerTube >= 6.2 Admins and moderators only filter on videos that contain one of these automatic tags

VideoCategorySet (integer) or Array of VideoCategorySet (integers)

category id of the video (see /videos/categories)

count
integer [ 1 .. 100 ]
Default: 15

Number of items to return

excludeAlreadyWatched
boolean

Whether or not to exclude videos that are in the user's video history

hasHLSFiles
boolean

PeerTube >= 4.0 Display only videos that have HLS files

hasWebVideoFiles
boolean

PeerTube >= 6.0 Display only videos that have Web Video files

host
string

Find elements owned by this host

include
integer
Enum: 0 1 2 4 8 16 32

Only administrators and moderators can use this parameter

Include additional videos in results (can be combined using bitwise or operator)

  • 0 NONE
  • 1 NOT_PUBLISHED_STATE
  • 2 BLACKLISTED
  • 4 BLOCKED_OWNER
  • 8 FILES
  • 16 CAPTIONS
  • 32 VIDEO SOURCE
includeScheduledLive
boolean

whether or not include live that are scheduled for later

isLive
boolean

whether or not the video is a live

isLocal
boolean

PeerTube >= 4.0 Display only local or remote objects

VideoLanguageSet (string) or Array of VideoLanguageSet (strings)

language id of the video (see /videos/languages). Use _unknown to filter on videos that don't have a video language

VideoLicenceSet (integer) or Array of VideoLicenceSet (integers)

licence id of the video (see /videos/licences)

nsfw
string
Enum: "true" "false"

whether to include nsfw videos, if any

nsfwFlagsExcluded
integer (NSFWFlag)
Enum: 0 1 2 4

NSFW flags (can be combined using bitwise or operator)

  • 0 NONE
  • 1 VIOLENT
  • 2 EXPLICIT_SEX
nsfwFlagsIncluded
integer (NSFWFlag)
Enum: 0 1 2 4

NSFW flags (can be combined using bitwise or operator)

  • 0 NONE
  • 1 VIOLENT
  • 2 EXPLICIT_SEX
privacyOneOf
integer (VideoPrivacySet)
Enum: 1 2 3 4 5

PeerTube >= 4.0 Display only videos in this specific privacy/privacies

search
string

Plain text search, applied to various parts of the model depending on endpoint

skipCount
string
Default: "false"
Enum: "true" "false"

if you don't need the total in the response

sort
string
Enum: "name" "-duration" "-createdAt" "-publishedAt" "-views" "-likes" "-comments" "-trending" "-hot" "-best"

Sort videos by criteria (prefixing with - means DESC order):

  • hot - Adaptation of Reddit "hot" algorithm taking into account video views, likes, dislikes and comments and publication date
  • best - Same than hot, but also takes into account user video history
  • trending - Sort videos by recent views ("recent" is defined by the admin)
  • views - Sort videos using their views counter
  • publishedAt - Sort by video publication date (when it became publicly available)
start
integer >= 0

Offset used to paginate results

string or Array of strings

tag(s) of the video, where all should be present in the video

string or Array of strings

tag(s) of the video

Responses

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

List playlists of a channel

path Parameters
channelHandle
required
string
Example: my_username | my_username@example.com

The video channel handle

query Parameters
count
integer [ 1 .. 100 ]
Default: 15

Number of items to return

playlistType
integer (VideoPlaylistTypeSet)
Enum: 1 2

The video playlist type (Regular = 1, Watch Later = 2)

sort
string
Example: sort=-createdAt

Sort column

start
integer >= 0

Offset used to paginate results

Responses

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

Reorder channel playlists

Authorizations:
OAuth2
path Parameters
channelHandle
required
string
Example: my_username | my_username@example.com

The video channel handle

Request Body schema: application/json
insertAfterPosition
required
integer >= 0

New position for the block to reorder, to add the block before the first element

startPosition
required
integer >= 1

Start position of the element to reorder

reorderLength
integer >= 1

How many element from startPosition to reorder

Responses

Request samples

Content type
application/json
{
  • "startPosition": 1,
  • "insertAfterPosition": 0,
  • "reorderLength": 1
}

List followers of a video channel

Authorizations:
OAuth2
path Parameters
channelHandle
required
string
Example: my_username | my_username@example.com

The video channel handle

query Parameters
count
integer [ 1 .. 100 ]
Default: 15

Number of items to return

search
string

Plain text search, applied to various parts of the model depending on endpoint

sort
string
Value: "createdAt"

Sort followers by criteria

start
integer >= 0

Offset used to paginate results

Responses

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

Update channel avatar

Authorizations:
OAuth2
path Parameters
channelHandle
required
string
Example: my_username | my_username@example.com

The video channel handle

Request Body schema: multipart/form-data
avatarfile
string <binary>

The file to upload.

Responses

Response samples

Content type
application/json
{
  • "avatars": [
    ]
}

Delete channel avatar

Authorizations:
OAuth2
path Parameters
channelHandle
required
string
Example: my_username | my_username@example.com

The video channel handle

Responses

Update channel banner

Authorizations:
OAuth2
path Parameters
channelHandle
required
string
Example: my_username | my_username@example.com

The video channel handle

Request Body schema: multipart/form-data
bannerfile
string <binary>

The file to upload.

Responses

Response samples

Content type
application/json
{
  • "banners": [
    ]
}

Delete channel banner

Authorizations:
OAuth2
path Parameters
channelHandle
required
string
Example: my_username | my_username@example.com

The video channel handle

Responses

Import videos in channel

Import a remote channel/playlist videos into a channel

Authorizations:
OAuth2
path Parameters
channelHandle
required
string
Example: my_username | my_username@example.com

The video channel handle

Request Body schema: application/json
externalChannelUrl
required
string
videoChannelSyncId
integer

If part of a channel sync process, specify its id to assign video imports to this channel synchronization

Responses

Request samples

Content type
application/json
{}

List video channels of an account

path Parameters
name
required
string
Example: chocobozzz | chocobozzz@example.org

The username or handle of the account

query Parameters
count
integer [ 1 .. 100 ]
Default: 15

Number of items to return

sort
string
Example: sort=-createdAt

Sort column

start
integer >= 0

Offset used to paginate results

withStats
boolean

include daily view statistics for the last 30 days and total views (only if authentified as the account user)

Responses

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

List the synchronizations of video channels of an account

path Parameters
name
required
string
Example: chocobozzz | chocobozzz@example.org

The username or handle of the account

query Parameters
count
integer [ 1 .. 100 ]
Default: 15

Number of items to return

sort
string
Example: sort=-createdAt

Sort column

start
integer >= 0

Offset used to paginate results

Responses

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

Search channels

query Parameters
count
integer [ 1 .. 100 ]
Default: 15

Number of items to return

handles
Array of strings

Find elements with these handles

host
string

Find elements owned by this host

search
required
string

String to search. If the user can make a remote URI search, and the string is an URI then the PeerTube instance will fetch the remote object and add it to its database. Then, you can use the REST API to fetch the complete channel information and interact with it.

searchTarget
string
Enum: "local" "search-index"

If the administrator enabled search index support, you can override the default search target.

Warning: If you choose to make an index search, PeerTube will get results from a third party service. It means the instance may not yet know the objects you fetched. If you want to load video/channel information:

  • If the current user has the ability to make a remote URI search (this information is available in the config endpoint), then reuse the search API to make a search using the object URI so PeerTube instance fetches the remote object and fill its database. After that, you can use the classic REST API endpoints to fetch the complete object or interact with it
  • If the current user doesn't have the ability to make a remote URI search, then redirect the user on the origin instance or fetch the data from the origin instance API
sort
string
Example: sort=-createdAt

Sort column

start
integer >= 0

Offset used to paginate results

Responses

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

Video Comments

Operations dealing with comments to a video. Comments are organized in threads: adding a comment in response to the video starts a thread, adding a reply to a comment adds it to its root comment thread.

List comments on user's videos

PeerTube >= 6.2

Authorizations:
OAuth2
query Parameters
string or Array of strings

PeerTube >= 6.2 filter on comments that contain one of these automatic tags

isHeldForReview
boolean

only display comments that are held for review

search
string

Plain text search, applied to various parts of the model depending on endpoint

searchAccount
string

Filter comments by searching on the account

searchVideo
string

Filter comments by searching on the video

videoChannelId
integer

Limit results on this specific video channel

videoId
integer

Limit results on this specific video

Responses

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

List threads of a video

path Parameters
required
id (integer) or UUIDv4 (string) or shortUUID (string)

The object id, uuid or short uuid

query Parameters
count
integer [ 1 .. 100 ]
Default: 15

Number of items to return

sort
string
Enum: "-createdAt" "-totalReplies"

Sort comments by criteria

start
integer >= 0

Offset used to paginate results

header Parameters
x-peertube-video-password
string

Required on password protected video

Responses

Response samples

Content type
application/json
{
  • "total": 0,
  • "totalNotDeletedComments": 0,
  • "data": [
    ]
}

Create a thread

Authorizations:
OAuth2
path Parameters
required
id (integer) or UUIDv4 (string) or shortUUID (string)

The object id, uuid or short uuid

Request Body schema: application/json
text
required
string <html> [ 1 .. 10000 ] characters

Text of the comment

Responses

Request samples

Content type
application/json
{
  • "text": "This video is wonderful!"
}

Response samples

Content type
application/json
{
  • "comment": {
    }
}

Get a thread

path Parameters
required
id (integer) or UUIDv4 (string) or shortUUID (string)

The object id, uuid or short uuid

threadId
required
integer

The thread id (root comment id)

header Parameters
x-peertube-video-password
string

Required on password protected video

Responses

Response samples

Content type
application/json
{
  • "comment": {
    },
  • "children": [
    ]
}

List instance comments

Authorizations:
OAuth2
query Parameters
string or Array of strings

PeerTube >= 6.2 filter on comments that contain one of these automatic tags

isLocal
boolean

PeerTube >= 4.0 Display only local or remote objects

onLocalVideo
boolean

Display only objects of local or remote videos

search
string

Plain text search, applied to various parts of the model depending on endpoint

searchAccount
string

Filter comments by searching on the account

searchVideo
string

Filter comments by searching on the video

videoChannelId
integer

Limit results on this specific video channel

videoId
integer

Limit results on this specific video

Responses

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

Reply to a thread of a video

Authorizations:
OAuth2
path Parameters
commentId
required
integer >= 1
Example: 42

The comment id

required
id (integer) or UUIDv4 (string) or shortUUID (string)

The object id, uuid or short uuid

header Parameters
x-peertube-video-password
string

Required on password protected video

Request Body schema: application/json
text
required
string <html> [ 1 .. 10000 ] characters

Text of the comment

Responses

Request samples

Content type
application/json
{
  • "text": "This video is wonderful!"
}

Response samples

Content type
application/json
{
  • "comment": {
    }
}

Delete a comment or a reply

Authorizations:
OAuth2
path Parameters
commentId
required
integer >= 1
Example: 42

The comment id

required
id (integer) or UUIDv4 (string) or shortUUID (string)

The object id, uuid or short uuid

Responses

Approve a comment

PeerTube >= 6.2 Approve a comment that requires a review

Authorizations:
OAuth2
path Parameters
commentId
required
integer >= 1
Example: 42

The comment id

required
id (integer) or UUIDv4 (string) or shortUUID (string)

The object id, uuid or short uuid

Responses

Video Rates

Like/dislike a video.

Get rate of my user for a video

Authorizations:
OAuth2
path Parameters
videoId
required
integer >= 1
Example: 42

The video id

Responses

Response samples

Content type
application/json
{
  • "id": 42,
  • "rating": "like"
}

Like/dislike a video

Authorizations:
OAuth2
path Parameters
required
id (integer) or UUIDv4 (string) or shortUUID (string)

The object id, uuid or short uuid

header Parameters
x-peertube-video-password
string

Required on password protected video

Request Body schema: application/json
rating
required
string
Enum: "like" "dislike"

Responses

Request samples

Content type
application/json
{
  • "rating": "like"
}

Video Playlists

Operations dealing with playlists of videos. Playlists are bound to users and/or channels.

List playlists of a channel

path Parameters
channelHandle
required
string
Example: my_username | my_username@example.com

The video channel handle

query Parameters
count
integer [ 1 .. 100 ]
Default: 15

Number of items to return

playlistType
integer (VideoPlaylistTypeSet)
Enum: 1 2

The video playlist type (Regular = 1, Watch Later = 2)

sort
string
Example: sort=-createdAt

Sort column

start
integer >= 0

Offset used to paginate results

Responses

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

Reorder channel playlists

Authorizations:
OAuth2
path Parameters
channelHandle
required
string
Example: my_username | my_username@example.com

The video channel handle

Request Body schema: application/json
insertAfterPosition
required
integer >= 0

New position for the block to reorder, to add the block before the first element

startPosition
required
integer >= 1

Start position of the element to reorder

reorderLength
integer >= 1

How many element from startPosition to reorder

Responses

Request samples

Content type
application/json
{
  • "startPosition": 1,
  • "insertAfterPosition": 0,
  • "reorderLength": 1
}

List available playlist privacy policies

Responses

Response samples

Content type
application/json
{
  • "1": "Public",
  • "2": "Unlisted",
  • "3": "Private"
}

List video playlists

query Parameters
count
integer [ 1 .. 100 ]
Default: 15

Number of items to return

playlistType
integer (VideoPlaylistTypeSet)
Enum: 1 2

The video playlist type (Regular = 1, Watch Later = 2)

sort
string
Example: sort=-createdAt

Sort column

start
integer >= 0

Offset used to paginate results

Responses

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

Create a video playlist

If the video playlist is set as public, videoChannelId is mandatory.

Authorizations:
OAuth2
Request Body schema: multipart/form-data
displayName
required
string [ 1 .. 120 ] characters

Video playlist display name

description
string [ 3 .. 1000 ] characters

Video playlist description

privacy
integer (VideoPlaylistPrivacySet)
Enum: 1 2 3

Video playlist privacy policy (see /video-playlists/privacies)

thumbnailfile
string <binary>

Video playlist thumbnail file

videoChannelId
integer >= 1

Video channel in which the playlist will be published

Responses

Response samples

Content type
application/json
{
  • "videoPlaylist": {
    }
}

Get a video playlist

path Parameters
playlistId
required
integer >= 1
Example: 42

Playlist id

Responses

Response samples

Content type
application/json
{
  • "id": 42,
  • "uuid": "9c9de5e8-0a1e-484a-b099-e80766180a6d",
  • "shortUUID": "2y84q2MQUMWPbiEcxNXMgC",
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z",
  • "description": "string",
  • "displayName": "string",
  • "isLocal": true,
  • "videoLength": 0,
  • "thumbnailPath": "string",
  • "privacy": {
    },
  • "type": {
    },
  • "ownerAccount": {
    },
  • "videoChannel": {
    },
  • "videoChannelPosition": 1
}

Update a video playlist

If the video playlist is set as public, the playlist must have a assigned channel.

Authorizations:
OAuth2
path Parameters
playlistId
required
integer >= 1
Example: 42

Playlist id

Request Body schema: multipart/form-data
description
string

Video playlist description

displayName
string [ 1 .. 120 ] characters

Video playlist display name

privacy
integer (VideoPlaylistPrivacySet)
Enum: 1 2 3

Video playlist privacy policy (see /video-playlists/privacies)

thumbnailfile
string <binary>

Video playlist thumbnail file

videoChannelId
integer >= 1

Video channel in which the playlist will be published

Responses

Delete a video playlist

Authorizations:
OAuth2
path Parameters
playlistId
required
integer >= 1
Example: 42

Playlist id

Responses

List videos of a playlist

path Parameters
playlistId
required
integer >= 1
Example: 42

Playlist id

query Parameters
count
integer [ 1 .. 100 ]
Default: 15

Number of items to return

start
integer >= 0

Offset used to paginate results

Responses

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

Add a video in a playlist

Authorizations:
OAuth2
path Parameters
playlistId
required
integer >= 1
Example: 42

Playlist id

Request Body schema: application/json
required
string or integer

Video to add in the playlist

startTimestamp
integer <seconds>

Start the video at this specific timestamp

stopTimestamp
integer <seconds>

Stop the video at this specific timestamp

Responses

Request samples

Content type
application/json
{
  • "videoId": "9c9de5e8-0a1e-484a-b099-e80766180a6d",
  • "startTimestamp": 0,
  • "stopTimestamp": 0
}

Response samples

Content type
application/json
{
  • "videoPlaylistElement": {
    }
}

Reorder playlist elements

Authorizations:
OAuth2
path Parameters
playlistId
required
integer >= 1
Example: 42

Playlist id

Request Body schema: application/json
insertAfterPosition
required
integer >= 0

New position for the block to reorder, to add the block before the first element

startPosition
required
integer >= 1

Start position of the element to reorder

reorderLength
integer >= 1

How many element from startPosition to reorder

Responses

Request samples

Content type
application/json
{
  • "startPosition": 1,
  • "insertAfterPosition": 0,
  • "reorderLength": 1
}

Update a playlist element

Authorizations:
OAuth2
path Parameters
playlistElementId
required
integer (id) >= 1
Example: 42

Playlist element id

playlistId
required
integer >= 1
Example: 42

Playlist id

Request Body schema: application/json
startTimestamp
integer <seconds>

Start the video at this specific timestamp

stopTimestamp
integer <seconds>

Stop the video at this specific timestamp

Responses

Request samples

Content type
application/json
{
  • "startTimestamp": 0,
  • "stopTimestamp": 0
}

Delete an element from a playlist

Authorizations:
OAuth2
path Parameters
playlistElementId
required
integer (id) >= 1
Example: 42

Playlist element id

playlistId
required
integer >= 1
Example: 42

Playlist id

Responses

Check video exists in my playlists

Authorizations:
OAuth2
query Parameters
videoIds
required
Array of integers[ items >= 1 ]
Example: videoIds=42

The video ids to check

Responses

Response samples

Content type
application/json
{
  • "videoId": [
    ]
}

List playlists of an account

path Parameters
name
required
string
Example: chocobozzz | chocobozzz@example.org

The username or handle of the account

query Parameters
count
integer [ 1 .. 100 ]
Default: 15

Number of items to return

playlistType
integer (VideoPlaylistTypeSet)
Enum: 1 2

The video playlist type (Regular = 1, Watch Later = 2)

search
string

Plain text search, applied to various parts of the model depending on endpoint

sort
string
Example: sort=-createdAt

Sort column

start
integer >= 0

Offset used to paginate results

Responses

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

Search playlists

query Parameters
count
integer [ 1 .. 100 ]
Default: 15

Number of items to return

host
string

Find elements owned by this host

search
required
string

String to search. If the user can make a remote URI search, and the string is an URI then the PeerTube instance will fetch the remote object and add it to its database. Then, you can use the REST API to fetch the complete playlist information and interact with it.

searchTarget
string
Enum: "local" "search-index"

If the administrator enabled search index support, you can override the default search target.

Warning: If you choose to make an index search, PeerTube will get results from a third party service. It means the instance may not yet know the objects you fetched. If you want to load video/channel information:

  • If the current user has the ability to make a remote URI search (this information is available in the config endpoint), then reuse the search API to make a search using the object URI so PeerTube instance fetches the remote object and fill its database. After that, you can use the classic REST API endpoints to fetch the complete object or interact with it
  • If the current user doesn't have the ability to make a remote URI search, then redirect the user on the origin instance or fetch the data from the origin instance API
sort
string
Example: sort=-createdAt

Sort column

start
integer >= 0

Offset used to paginate results

uuids
Array of strings

Find elements with specific UUIDs

Responses

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

Video Stats

Video statistics

Get overall stats of a video

Authorizations:
OAuth2
path Parameters
required
id (integer) or UUIDv4 (string) or shortUUID (string)

The object id, uuid or short uuid

query Parameters
endDate
string <date-time>

Filter stats by end date

startDate
string <date-time>

Filter stats by start date

Responses

Response samples

Content type
application/json
{
  • "averageWatchTime": 0,
  • "totalWatchTime": 0,
  • "viewersPeak": 0,
  • "totalViewers": 0,
  • "viewersPeakDate": "2019-08-24T14:15:22Z",
  • "countries": [
    ],
  • "subdivisions": [
    ]
}

Get user agent stats of a video

Authorizations:
OAuth2
path Parameters
required
id (integer) or UUIDv4 (string) or shortUUID (string)

The object id, uuid or short uuid

query Parameters
endDate
string <date-time>

Filter stats by end date

startDate
string <date-time>

Filter stats by start date

Responses

Response samples

Content type
application/json
{
  • "clients": [
    ],
  • "devices": [
    ],
  • "operatingSystem": [
    ]
}

Get retention stats of a video

Authorizations:
OAuth2
path Parameters
required
id (integer) or UUIDv4 (string) or shortUUID (string)

The object id, uuid or short uuid

Responses

Response samples

Content type
application/json
{
  • "data": [
    ]
}

Get timeserie stats of a video

Authorizations:
OAuth2
path Parameters
required
id (integer) or UUIDv4 (string) or shortUUID (string)

The object id, uuid or short uuid

metric
required
string
Enum: "viewers" "aggregateWatchTime"

The metric to get

query Parameters
endDate
string <date-time>

Filter stats by end date

startDate
string <date-time>

Filter stats by start date

Responses

Response samples

Content type
application/json
{
  • "data": [
    ]
}

Video Ownership Change

List video ownership changes

Authorizations:
OAuth2

Responses

Accept ownership change request

Authorizations:
OAuth2
path Parameters
required
id (integer) or UUIDv4 (string) or shortUUID (string)

The object id, uuid or short uuid

Responses

Refuse ownership change request

Authorizations:
OAuth2
path Parameters
required
id (integer) or UUIDv4 (string) or shortUUID (string)

The object id, uuid or short uuid

Responses

Request ownership change

Authorizations:
OAuth2
path Parameters
required
id (integer) or UUIDv4 (string) or shortUUID (string)

The object id, uuid or short uuid

Request Body schema: application/json
required
username
required
string

Responses

Request samples

Content type
application/json
{
  • "username": "string"
}

Video Mirroring

PeerTube instances can mirror videos from one another, and help distribute some videos.

For importing videos as your own, refer to video imports.

List videos being mirrored

Authorizations:
OAuth2
query Parameters
count
integer [ 1 .. 100 ]
Default: 15

Number of items to return

sort
string
Value: "name"

Sort abuses by criteria

start
integer >= 0

Offset used to paginate results

target
required
string
Enum: "my-videos" "remote-videos"

direction of the mirror

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Mirror a video

Authorizations:
OAuth2
Request Body schema: application/json
videoId
required
integer >= 1

object id for the video

Responses

Request samples

Content type
application/json
{
  • "videoId": 42
}

Delete a mirror done on a video

Authorizations:
OAuth2
path Parameters
redundancyId
required
string

id of an existing redundancy on a video

Responses

Video Files

Operations on video files

Delete video HLS files

Authorizations:
OAuth2
path Parameters
required
id (integer) or UUIDv4 (string) or shortUUID (string)

The object id, uuid or short uuid

Responses

Delete video Web Video files

PeerTube >= 6.0

Authorizations:
OAuth2
path Parameters
required
id (integer) or UUIDv4 (string) or shortUUID (string)

The object id, uuid or short uuid

Responses

Video Transcoding

Video transcoding related operations

Create a studio task

Create a task to edit a video (cut, add intro/outro etc)

Authorizations:
OAuth2
path Parameters
required
id (integer) or UUIDv4 (string) or shortUUID (string)

The object id, uuid or short uuid

Request Body schema: multipart/form-data
required
Array
Any of
name
string
Value: "cut"
object

Responses

Create a transcoding job

Authorizations:
OAuth2
path Parameters
required
id (integer) or UUIDv4 (string) or shortUUID (string)

The object id, uuid or short uuid

Request Body schema: application/json
transcodingType
required
string
Enum: "hls" "web-video"
forceTranscoding
boolean
Default: false

If the video is stuck in transcoding state, do it anyway

Responses

Request samples

Content type
application/json
{
  • "transcodingType": "hls",
  • "forceTranscoding": false
}

Live Videos

Create a live

Authorizations:
OAuth2
Request Body schema: multipart/form-data
channelId
required
integer

Channel id that will contain this live video

name
required
string [ 3 .. 120 ] characters

Live video/replay name

category
integer (VideoCategorySet)

category id of the video (see /videos/categories)

commentsEnabled
boolean
Deprecated

Deprecated in 6.2, use commentsPolicy instead

commentsPolicy
integer (VideoCommentsPolicySet)
Enum: 1 2 3

Comments policy of the video (Enabled = 1, Disabled = 2, Requires Approval = 3)

description
string

Live video/replay description

downloadEnabled
boolean

Enable or disable downloading for the replay of this live video

language
string (VideoLanguageSet)

language id of the video (see /videos/languages)

latencyMode
integer
Enum: 1 2 3

User can select live latency mode if enabled by the instance

licence
integer (VideoLicenceSet)

licence id of the video (see /videos/licences)

nsfw
boolean

Whether or not this live video/replay contains sensitive content

nsfwFlags
integer (NSFWFlag)
Enum: 0 1 2 4

NSFW flags (can be combined using bitwise or operator)

  • 0 NONE
  • 1 VIOLENT
  • 2 EXPLICIT_SEX
nsfwSummary
any

More information about the sensitive content of the video

permanentLive
boolean

User can stream multiple times in a permanent live

previewfile
string <binary>

Live video/replay preview file

privacy
integer (VideoPrivacySet)
Enum: 1 2 3 4 5

privacy id of the video (see /videos/privacies)

object (LiveVideoReplaySettings)
saveReplay
boolean
Array of objects (LiveSchedule)
support
string

A text tell the audience how to support the creator

tags
Array of strings [ 1 .. 5 ] items [ items [ 2 .. 30 ] characters ]

Live video/replay tags (maximum 5 tags each between 2 and 30 characters)

thumbnailfile
string <binary>

Live video/replay thumbnail file

Responses

Response samples

Content type
application/json
{
  • "video": {
    }
}

Get information about a live

Authorizations:
OAuth2
path Parameters
required
id (integer) or UUIDv4 (string) or shortUUID (string)

The object id, uuid or short uuid

Responses

Response samples

Content type
application/json
{
  • "rtmpUrl": "string",
  • "rtmpsUrl": "string",
  • "streamKey": "string",
  • "saveReplay": true,
  • "replaySettings": {
    },
  • "permanentLive": true,
  • "latencyMode": 1,
  • "schedules": [
    ]
}

Update information about a live

Authorizations:
OAuth2
path Parameters
required
id (integer) or UUIDv4 (string) or shortUUID (string)

The object id, uuid or short uuid

Request Body schema: application/json
latencyMode
integer
Enum: 1 2 3

User can select live latency mode if enabled by the instance

permanentLive
boolean

User can stream multiple times in a permanent live

object (LiveVideoReplaySettings)
saveReplay
boolean
Array of objects (LiveSchedule)

Responses

Request samples

Content type
application/json
{
  • "saveReplay": true,
  • "replaySettings": {
    },
  • "permanentLive": true,
  • "latencyMode": 1,
  • "schedules": [
    ]
}

List live sessions

List all sessions created in a particular live

Authorizations:
OAuth2
path Parameters
required
id (integer) or UUIDv4 (string) or shortUUID (string)

The object id, uuid or short uuid

Responses

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

Get live session of a replay

If the video is a replay of a live, you can find the associated live session using this endpoint

Authorizations:
OAuth2
path Parameters
required
id (integer) or UUIDv4 (string) or shortUUID (string)

The object id, uuid or short uuid

header Parameters
x-peertube-video-password
string

Required on password protected video

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "startDate": "2019-08-24T14:15:22Z",
  • "endDate": "2019-08-24T14:15:22Z",
  • "error": 1,
  • "replayVideo": {
    }
}

Channels Sync

Operations dealing with synchronizing PeerTube user's channel with channels of other platforms

Import videos in channel

Import a remote channel/playlist videos into a channel

Authorizations:
OAuth2
path Parameters
channelHandle
required
string
Example: my_username | my_username@example.com

The video channel handle

Request Body schema: application/json
externalChannelUrl
required
string
videoChannelSyncId
integer

If part of a channel sync process, specify its id to assign video imports to this channel synchronization

Responses

Request samples

Content type
application/json
{}

Create a synchronization for a video channel

Authorizations:
OAuth2
Request Body schema: application/json
externalChannelUrl
string
videoChannelId
integer (id) >= 1

Responses

Request samples

Content type
application/json
{}

Response samples

Content type
application/json
{
  • "videoChannelSync": {
    }
}

Delete a video channel synchronization

Authorizations:
OAuth2
path Parameters
channelSyncId
required
integer >= 1
Example: 42

Channel Sync id

Responses

Triggers the channel synchronization job, fetching all the videos from the remote channel

Authorizations:
OAuth2
path Parameters
channelSyncId
required
integer >= 1
Example: 42

Channel Sync id

Responses

List the synchronizations of video channels of an account

path Parameters
name
required
string
Example: chocobozzz | chocobozzz@example.org

The username or handle of the account

query Parameters
count
integer [ 1 .. 100 ]
Default: 15

Number of items to return

sort
string
Example: sort=-createdAt

Sort column

start
integer >= 0

Offset used to paginate results

Responses

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

Video Passwords

Operation on video passwords

List video passwords

PeerTube >= 6.0

Authorizations:
OAuth2
path Parameters
required
id (integer) or UUIDv4 (string) or shortUUID (string)

The object id, uuid or short uuid

query Parameters
count
integer [ 1 .. 100 ]
Default: 15

Number of items to return

sort
string
Example: sort=-createdAt

Sort column

start
integer >= 0

Offset used to paginate results

Responses

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

Update video passwords

PeerTube >= 6.0

Authorizations:
OAuth2
path Parameters
required
id (integer) or UUIDv4 (string) or shortUUID (string)

The object id, uuid or short uuid

Request Body schema: application/json
passwords
Array of strings (AddVideoPasswords) unique [ items >= 2 characters ]

Responses

Request samples

Content type
application/json
{
  • "passwords": [
    ]
}

Delete a video password

PeerTube >= 6.0

Authorizations:
OAuth2
path Parameters
required
id (integer) or UUIDv4 (string) or shortUUID (string)

The object id, uuid or short uuid

videoPasswordId
required
integer (id) >= 1
Example: 42

The video password id

Responses

Search

The search helps to find videos or channels from within the instance and beyond. Videos from other instances federated by the instance (that is, instances followed by the instance) can be found via keywords and other criteria of the advanced search.

Administrators can also enable the use of a remote search system, indexing videos and channels not could be not federated by the instance.

Search videos

query Parameters
string or Array of strings

PeerTube >= 6.2 Admins and moderators only filter on videos that contain one of these automatic tags

VideoCategorySet (integer) or Array of VideoCategorySet (integers)

category id of the video (see /videos/categories)

count
integer [ 1 .. 100 ]
Default: 15

Number of items to return

durationMax
integer

Get videos that have this maximum duration

durationMin
integer

Get videos that have this minimum duration

endDate
string <date-time>

Get videos that are published before this date

excludeAlreadyWatched
boolean

Whether or not to exclude videos that are in the user's video history

hasHLSFiles
boolean

PeerTube >= 4.0 Display only videos that have HLS files

hasWebVideoFiles
boolean

PeerTube >= 6.0 Display only videos that have Web Video files

host
string

Find elements owned by this host

include
integer
Enum: 0 1 2 4 8 16 32

Only administrators and moderators can use this parameter

Include additional videos in results (can be combined using bitwise or operator)

  • 0 NONE
  • 1 NOT_PUBLISHED_STATE
  • 2 BLACKLISTED
  • 4 BLOCKED_OWNER
  • 8 FILES
  • 16 CAPTIONS
  • 32 VIDEO SOURCE
includeScheduledLive
boolean

whether or not include live that are scheduled for later

isLive
boolean

whether or not the video is a live

isLocal
boolean

PeerTube >= 4.0 Display only local or remote objects

VideoLanguageSet (string) or Array of VideoLanguageSet (strings)

language id of the video (see /videos/languages). Use _unknown to filter on videos that don't have a video language

VideoLicenceSet (integer) or Array of VideoLicenceSet (integers)

licence id of the video (see /videos/licences)

nsfw
string
Enum: "true" "false"

whether to include nsfw videos, if any

nsfwFlagsExcluded
integer (NSFWFlag)
Enum: 0 1 2 4

NSFW flags (can be combined using bitwise or operator)

  • 0 NONE
  • 1 VIOLENT
  • 2 EXPLICIT_SEX
nsfwFlagsIncluded
integer (NSFWFlag)
Enum: 0 1 2 4

NSFW flags (can be combined using bitwise or operator)

  • 0 NONE
  • 1 VIOLENT
  • 2 EXPLICIT_SEX
originallyPublishedEndDate
string <date-time>

Get videos that are originally published before this date

originallyPublishedStartDate
string <date-time>

Get videos that are originally published after this date

privacyOneOf
integer (VideoPrivacySet)
Enum: 1 2 3 4 5

PeerTube >= 4.0 Display only videos in this specific privacy/privacies

search
required
string

String to search. If the user can make a remote URI search, and the string is an URI then the PeerTube instance will fetch the remote object and add it to its database. Then, you can use the REST API to fetch the complete video information and interact with it.

searchTarget
string
Enum: "local" "search-index"

If the administrator enabled search index support, you can override the default search target.

Warning: If you choose to make an index search, PeerTube will get results from a third party service. It means the instance may not yet know the objects you fetched. If you want to load video/channel information:

  • If the current user has the ability to make a remote URI search (this information is available in the config endpoint), then reuse the search API to make a search using the object URI so PeerTube instance fetches the remote object and fill its database. After that, you can use the classic REST API endpoints to fetch the complete object or interact with it
  • If the current user doesn't have the ability to make a remote URI search, then redirect the user on the origin instance or fetch the data from the origin instance API
skipCount
string
Default: "false"
Enum: "true" "false"

if you don't need the total in the response

sort
string
Enum: "name" "-duration" "-createdAt" "-publishedAt" "-views" "-likes" "-comments" "-trending" "-hot" "-best"

Sort videos by criteria (prefixing with - means DESC order):

  • hot - Adaptation of Reddit "hot" algorithm taking into account video views, likes, dislikes and comments and publication date
  • best - Same than hot, but also takes into account user video history
  • trending - Sort videos by recent views ("recent" is defined by the admin)
  • views - Sort videos using their views counter
  • publishedAt - Sort by video publication date (when it became publicly available)
start
integer >= 0

Offset used to paginate results

startDate
string <date-time>

Get videos that are published after this date

string or Array of strings

tag(s) of the video, where all should be present in the video

string or Array of strings

tag(s) of the video

uuids
Array of strings

Find elements with specific UUIDs

Responses

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

Search channels

query Parameters
count
integer [ 1 .. 100 ]
Default: 15

Number of items to return

handles
Array of strings

Find elements with these handles

host
string

Find elements owned by this host

search
required
string

String to search. If the user can make a remote URI search, and the string is an URI then the PeerTube instance will fetch the remote object and add it to its database. Then, you can use the REST API to fetch the complete channel information and interact with it.

searchTarget
string
Enum: "local" "search-index"

If the administrator enabled search index support, you can override the default search target.

Warning: If you choose to make an index search, PeerTube will get results from a third party service. It means the instance may not yet know the objects you fetched. If you want to load video/channel information:

  • If the current user has the ability to make a remote URI search (this information is available in the config endpoint), then reuse the search API to make a search using the object URI so PeerTube instance fetches the remote object and fill its database. After that, you can use the classic REST API endpoints to fetch the complete object or interact with it
  • If the current user doesn't have the ability to make a remote URI search, then redirect the user on the origin instance or fetch the data from the origin instance API
sort
string
Example: sort=-createdAt

Sort column

start
integer >= 0

Offset used to paginate results

Responses

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

Search playlists

query Parameters
count
integer [ 1 .. 100 ]
Default: 15

Number of items to return

host
string

Find elements owned by this host

search
required
string

String to search. If the user can make a remote URI search, and the string is an URI then the PeerTube instance will fetch the remote object and add it to its database. Then, you can use the REST API to fetch the complete playlist information and interact with it.

searchTarget
string
Enum: "local" "search-index"

If the administrator enabled search index support, you can override the default search target.

Warning: If you choose to make an index search, PeerTube will get results from a third party service. It means the instance may not yet know the objects you fetched. If you want to load video/channel information:

  • If the current user has the ability to make a remote URI search (this information is available in the config endpoint), then reuse the search API to make a search using the object URI so PeerTube instance fetches the remote object and fill its database. After that, you can use the classic REST API endpoints to fetch the complete object or interact with it
  • If the current user doesn't have the ability to make a remote URI search, then redirect the user on the origin instance or fetch the data from the origin instance API
sort
string
Example: sort=-createdAt

Sort column

start
integer >= 0

Offset used to paginate results

uuids
Array of strings

Find elements with specific UUIDs

Responses

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

Abuses

Abuses deal with reports of local or remote videos/comments/accounts alike.

List my abuses

Authorizations:
OAuth2
query Parameters
count
integer [ 1 .. 100 ]
Default: 15

Number of items to return

id
integer

only list the report with this id

sort
string
Enum: "-id" "-createdAt" "-state"

Sort abuses by criteria

start
integer >= 0

Offset used to paginate results

state
integer (AbuseStateSet)
Enum: 1 2 3

The abuse state (Pending = 1, Rejected = 2, Accepted = 3)

Responses

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

List abuses

Authorizations:
OAuth2
query Parameters
count
integer [ 1 .. 100 ]
Default: 15

Number of items to return

filter
string
Enum: "video" "comment" "account"

only list account, comment or video reports

id
integer

only list the report with this id

predefinedReason
Array of strings (PredefinedAbuseReasons) <= 8 items
Items Enum: "violentOrAbusive" "hatefulOrAbusive" "spamOrMisleading" "privacy" "rights" "serverRules" "thumbnails" "captions"

predefined reason the listed reports should contain

search
string

plain search that will match with video titles, reporter names and more

searchReportee
string

only list reports of a specific reportee

searchReporter
string

only list reports of a specific reporter

searchVideo
string

only list reports of a specific video

searchVideoChannel
string

only list reports of a specific video channel

sort
string
Enum: "-id" "-createdAt" "-state"

Sort abuses by criteria

start
integer >= 0

Offset used to paginate results

state
integer (AbuseStateSet)
Enum: 1 2 3

The abuse state (Pending = 1, Rejected = 2, Accepted = 3)

videoIs
string
Enum: "deleted" "blacklisted"

only list deleted or blocklisted videos

Responses

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

Report an abuse

Authorizations:
OAuth2
Request Body schema: application/json
required
reason
required
string [ 2 .. 3000 ] characters

Reason why the user reports this video

object
object
predefinedReasons
Array of strings (PredefinedAbuseReasons) <= 8 items
Items Enum: "violentOrAbusive" "hatefulOrAbusive" "spamOrMisleading" "privacy" "rights" "serverRules" "thumbnails" "captions"

Reason categories that help triage reports

object

Responses

Request samples

Content type
application/json
{
  • "reason": "string",
  • "predefinedReasons": [
    ],
  • "video": {
    },
  • "comment": {
    },
  • "account": {
    }
}

Response samples

Content type
application/json
{
  • "abuse": {
    }
}

Update an abuse

Authorizations:
OAuth2
path Parameters
abuseId
required
integer >= 1
Example: 42

Abuse id

Request Body schema: application/json
moderationComment
string [ 2 .. 3000 ] characters

Update the report comment visible only to the moderation team

state
integer (AbuseStateSet)
Enum: 1 2 3

The abuse state (Pending = 1, Rejected = 2, Accepted = 3)

Responses

Request samples

Content type
application/json
{
  • "state": 1,
  • "moderationComment": "string"
}

Delete an abuse

Authorizations:
OAuth2
path Parameters
abuseId
required
integer >= 1
Example: 42

Abuse id

Responses

List messages of an abuse

Authorizations:
OAuth2
path Parameters
abuseId
required
integer >= 1
Example: 42

Abuse id

Responses

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

Add message to an abuse

Authorizations:
OAuth2
path Parameters
abuseId
required
integer >= 1
Example: 42

Abuse id

Request Body schema: application/json
required
message
required
string [ 2 .. 3000 ] characters

Message to send

Responses

Request samples

Content type
application/json
{
  • "message": "string"
}

Delete an abuse message

Authorizations:
OAuth2
path Parameters
abuseId
required
integer >= 1
Example: 42

Abuse id

abuseMessageId
required
integer >= 1
Example: 42

Abuse message id

Responses

Video Blocks

Operations dealing with blocking videos (removing them from view and preventing interactions).

Block a video

Authorizations:
OAuth2
path Parameters
required
id (integer) or UUIDv4 (string) or shortUUID (string)

The object id, uuid or short uuid

Responses

Unblock a video by its id

Authorizations:
OAuth2
path Parameters
required
id (integer) or UUIDv4 (string) or shortUUID (string)

The object id, uuid or short uuid

Responses

List video blocks

Authorizations:
OAuth2
query Parameters
count
integer [ 1 .. 100 ]
Default: 15

Number of items to return

search
string

plain search that will match with video titles, and more

sort
string
Enum: "-id" "name" "-duration" "-views" "-likes" "-dislikes" "-uuid" "-createdAt"

Sort blocklists by criteria

start
integer >= 0

Offset used to paginate results

type
integer
Enum: 1 2

list only blocks that match this type:

  • 1: manual block
  • 2: automatic block that needs review

Responses

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

Account Blocks

Get block status of accounts/hosts

query Parameters
accounts
Array of strings
Example: accounts=goofy@example.com&accounts=donald@example.com

Check if these accounts are blocked

hosts
Array of strings
Example: hosts=example.com

Check if these hosts are blocked

Responses

Response samples

Content type
application/json
{
  • "accounts": {
    },
  • "hosts": {
    }
}

List account blocks

Authorizations:
OAuth2
query Parameters
count
integer [ 1 .. 100 ]
Default: 15

Number of items to return

sort
string
Example: sort=-createdAt

Sort column

start
integer >= 0

Offset used to paginate results

Responses

Block an account

Authorizations:
OAuth2
Request Body schema: application/json
accountName
required
string

account to block, in the form username@domain

Responses

Request samples

Content type
application/json
{
  • "accountName": "chocobozzz@example.org"
}

Unblock an account by its handle

Authorizations:
OAuth2
path Parameters
accountName
required
string

account to unblock, in the form username@domain

Responses

Server Blocks

Get block status of accounts/hosts

query Parameters
accounts
Array of strings
Example: accounts=goofy@example.com&accounts=donald@example.com

Check if these accounts are blocked

hosts
Array of strings
Example: hosts=example.com

Check if these hosts are blocked

Responses

Response samples

Content type
application/json
{
  • "accounts": {
    },
  • "hosts": {
    }
}

List server blocks

Authorizations:
OAuth2
query Parameters
count
integer [ 1 .. 100 ]
Default: 15

Number of items to return

sort
string
Example: sort=-createdAt

Sort column

start
integer >= 0

Offset used to paginate results

Responses

Block a server

Authorizations:
OAuth2
Request Body schema: application/json
host
required
string <hostname>

server domain to block

Responses

Request samples

Content type
application/json
{
  • "host": "example.com"
}

Unblock a server by its domain

Authorizations:
OAuth2
path Parameters
host
required
string <hostname>

server domain to unblock

Responses

Automatic Tags

Automatic tags set on objects (like comments or videos) by specific rules (external link, watched words, etc.)

Get account auto tag policies on comments

PeerTube >= 6.2

Authorizations:
OAuth2
path Parameters
accountName
required
string

account name to get auto tag policies

Responses

Response samples

Content type
application/json
{
  • "review": [
    ]
}

Update account auto tag policies on comments

PeerTube >= 6.2

Authorizations:
OAuth2
path Parameters
accountName
required
string

account name to update auto tag policies

Request Body schema: application/json
review
Array of strings

Auto tags that automatically set the comment in review state

Responses

Request samples

Content type
application/json
{
  • "review": [
    ]
}

Get account available auto tags

PeerTube >= 6.2

Authorizations:
OAuth2
path Parameters
accountName
required
string

account name to get auto tag policies

Responses

Response samples

Content type
application/json
{
  • "available": [
    ]
}

Get server available auto tags

PeerTube >= 6.2

Authorizations:
OAuth2

Responses

Response samples

Content type
application/json
{
  • "available": [
    ]
}

Watched Words

Manage list of watched words to detect patterns on objects (like comments of videos)

List account watched words

PeerTube >= 6.2

Authorizations:
OAuth2
path Parameters
accountName
required
string

account name to list watched words

Responses

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

Add account watched words

PeerTube >= 6.2

Authorizations:
OAuth2
path Parameters
accountName
required
string
Request Body schema: application/json
listName
string
words
Array of strings

Responses

Request samples

Content type
application/json
{
  • "listName": "string",
  • "words": [
    ]
}

Response samples

Content type
application/json
{
  • "watchedWordsList": {
    }
}

Update account watched words

PeerTube >= 6.2

Authorizations:
OAuth2
path Parameters
accountName
required
string
listId
required
string

list of watched words to update

Request Body schema: application/json
listName
string
words
Array of strings

Responses

Request samples

Content type
application/json
{
  • "listName": "string",
  • "words": [
    ]
}

Delete account watched words

PeerTube >= 6.2

Authorizations:
OAuth2
path Parameters
accountName
required
string
listId
required
string

list of watched words to delete

Responses

List server watched words

PeerTube >= 6.2

Authorizations:
OAuth2

Responses

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

Add server watched words

PeerTube >= 6.2

Authorizations:
OAuth2
Request Body schema: application/json
listName
string
words
Array of strings

Responses

Request samples

Content type
application/json
{
  • "listName": "string",
  • "words": [
    ]
}

Response samples

Content type
application/json
{
  • "watchedWordsList": {
    }
}

Update server watched words

PeerTube >= 6.2

Authorizations:
OAuth2
path Parameters
listId
required
string

list of watched words to update

Request Body schema: application/json
listName
string
words
Array of strings

Responses

Request samples

Content type
application/json
{
  • "listName": "string",
  • "words": [
    ]
}

Delete server watched words

PeerTube >= 6.2

Authorizations:
OAuth2
path Parameters
listId
required
string

list of watched words to delete

Responses

Config

Each server exposes public information regarding supported videos and options.

Get instance public configuration

Responses

Response samples

Content type
application/json
{
  • "client": {
    },
  • "defaults": {
    },
  • "webadmin": {
    },
  • "instance": {},
  • "search": {
    },
  • "plugin": {
    },
  • "theme": {
    },
  • "email": {
    },
  • "contactForm": {
    },
  • "serverVersion": "7.3.0-nightly-2025-09-12",
  • "serverCommit": "",
  • "transcoding": {
    },
  • "live": {
    },
  • "videoStudio": {
    },
  • "videoFile": {
    },
  • "videoTranscription": {
    },
  • "import": {
    },
  • "export": {
    },
  • "autoBlacklist": {
    },
  • "avatar": {
    },
  • "banner": {
    },
  • "video": {
    },
  • "videoCaption": {
    },
  • "user": {
    },
  • "videoChannels": {
    },
  • "trending": {
    },
  • "tracker": {
    },
  • "followings": {},
  • "federation": {
    },
  • "broadcastMessage": {
    },
  • "homepage": {
    },
  • "openTelemetry": {
    },
  • "views": {
    },
  • "storyboards": {
    },
  • "webrtc": {
    },
  • "nsfwFlagsSettings": {
    },
  • "fieldsConstraints": {
    },
  • "signup": {
    }
}

Get instance "About" information

Responses

Response samples

Content type
application/json
{}

Get instance runtime configuration

Authorizations:
OAuth2

Responses

Response samples

Content type
application/json
{
  • "instance": {
    },
  • "theme": {
    },
  • "services": {
    },
  • "cache": {
    },
  • "signup": {
    },
  • "admin": {
    },
  • "contactForm": {
    },
  • "user": {
    },
  • "transcoding": {
    },
  • "import": {
    },
  • "autoBlacklist": {
    },
  • "followers": {
    },
  • "storyboard": {
    },
  • "defaults": {
    }
}

Set instance runtime configuration

Authorizations:
OAuth2

Responses

Delete instance runtime configuration

Authorizations:
OAuth2

Responses

Update instance banner

Authorizations:
OAuth2
Request Body schema: multipart/form-data
bannerfile
string <binary>

The file to upload.

Responses

Delete instance banner

Authorizations:
OAuth2

Responses

Update instance avatar

Authorizations:
OAuth2
Request Body schema: multipart/form-data
avatarfile
string <binary>

The file to upload.

Responses

Delete instance avatar

Authorizations:
OAuth2

Responses

Update instance logo

Authorizations:
OAuth2
path Parameters
logoType
required
string
Enum: "favicon" "header-wide" "header-square" "opengraph"
Request Body schema: multipart/form-data
logofile
string <binary>

The file to upload.

Responses

Delete instance logo

Authorizations:
OAuth2
path Parameters
logoType
required
string
Enum: "favicon" "header-wide" "header-square" "opengraph"

Responses

Client Config

Configuration of the web client

Update client language

Set a cookie so that, the next time the client refreshes the HTML of the web interface, PeerTube will use the next language

Request Body schema: application/json
language
required
string

Language code to set

Responses

Request samples

Content type
application/json
{
  • "language": "en-US"
}

Homepage

Get and update the custom homepage

Get instance custom homepage

Responses

Response samples

Content type
application/json
{
  • "content": "string"
}

Set instance custom homepage

Authorizations:
OAuth2
Request Body schema: application/json
content
string

content of the homepage, that will be injected in the client

Responses

Request samples

Content type
application/json
{
  • "content": "string"
}

Instance Follows

Managing servers which the instance interacts with is crucial to the concept of federation in PeerTube and external video indexation. The PeerTube server then deals with inter-server ActivityPub operations and propagates information across its social graph by posting activities to actors' inbox endpoints.

List instances following the server

query Parameters
actorType
string
Enum: "Person" "Application" "Group" "Service" "Organization"
count
integer [ 1 .. 100 ]
Default: 15

Number of items to return

sort
string
Example: sort=-createdAt

Sort column

start
integer >= 0

Offset used to paginate results

state
string
Enum: "pending" "accepted"

Responses

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

Remove or reject a follower to your server

Authorizations:
OAuth2
path Parameters
handle
required
string <email>

The remote actor handle to remove from your followers

Responses

Reject a pending follower to your server

Authorizations:
OAuth2
path Parameters
handle
required
string <email>

The remote actor handle to remove from your followers

Responses

Accept a pending follower to your server

Authorizations:
OAuth2
path Parameters
handle
required
string <email>

The remote actor handle to remove from your followers

Responses

List instances followed by the server

query Parameters
actorType
string
Enum: "Person" "Application" "Group" "Service" "Organization"
count
integer [ 1 .. 100 ]
Default: 15

Number of items to return

sort
string
Example: sort=-createdAt

Sort column

start
integer >= 0

Offset used to paginate results

state
string
Enum: "pending" "accepted"

Responses

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

Follow a list of actors (PeerTube instance, channel or account)

Authorizations:
OAuth2
Request Body schema: application/json
handles
Array of strings unique
hosts
Array of strings <hostname> unique [ items <hostname > ]

Responses

Request samples

Content type
application/json
{
  • "hosts": [
    ],
  • "handles": [
    ]
}

Unfollow an actor (PeerTube instance, channel or account)

Authorizations:
OAuth2
path Parameters
hostOrHandle
required
string

The hostOrHandle to unfollow

Responses

Instance Redundancy

Redundancy is part of the inter-server solidarity that PeerTube fosters. Manage the list of instances you wish to help by seeding their videos according to the policy of video selection of your choice. Note that you have a similar functionality to mirror individual videos, see video mirroring.

Update a server redundancy policy

Authorizations:
OAuth2
path Parameters
host
required
string <hostname>

server domain to mirror

Request Body schema: application/json
redundancyAllowed
required
boolean

allow mirroring of the host's local videos

Responses

Request samples

Content type
application/json
{
  • "redundancyAllowed": true
}

Plugins

Managing plugins installed from a local path or from NPM, or search for new ones.

List plugins

Authorizations:
OAuth2
query Parameters
count
integer [ 1 .. 100 ]
Default: 15

Number of items to return

pluginType
integer
sort
string
Example: sort=-createdAt

Sort column

start
integer >= 0

Offset used to paginate results

uninstalled
boolean

Responses

Response samples

Content type
application/json
{}

List available plugins

Authorizations:
OAuth2
query Parameters
count
integer [ 1 .. 100 ]
Default: 15

Number of items to return

currentPeerTubeEngine
string
pluginType
integer
search
string
sort
string
Example: sort=-createdAt

Sort column

start
integer >= 0

Offset used to paginate results

Responses

Response samples

Content type
application/json
{}

Install a plugin

Authorizations:
OAuth2
Request Body schema: application/json
One of
npmName
required
string

Responses

Request samples

Content type
application/json
{
  • "path": "string"
}

Update a plugin

Authorizations:
OAuth2
Request Body schema: application/json
One of
npmName
required
string

Responses

Request samples

Content type
application/json
{
  • "path": "string"
}

Uninstall a plugin

Authorizations:
OAuth2
Request Body schema: application/json
npmName
required
string

name of the plugin/theme in its package.json

Responses

Request samples

Content type
application/json
{
  • "npmName": "peertube-plugin-auth-ldap"
}

Get a plugin

Authorizations:
OAuth2
path Parameters
npmName
required
string
Example: peertube-plugin-auth-ldap

name of the plugin/theme on npmjs.com or in its package.json

Responses

Response samples

Content type
application/json
{}

Set a plugin's settings

Authorizations:
OAuth2
path Parameters
npmName
required
string
Example: peertube-plugin-auth-ldap

name of the plugin/theme on npmjs.com or in its package.json

Request Body schema: application/json
object

Responses

Request samples

Content type
application/json
{
  • "settings": { }
}

Get a plugin's public settings

path Parameters
npmName
required
string
Example: peertube-plugin-auth-ldap

name of the plugin/theme on npmjs.com or in its package.json

Responses

Response samples

Content type
application/json
{ }

Get a plugin's registered settings

Authorizations:
OAuth2
path Parameters
npmName
required
string
Example: peertube-plugin-auth-ldap

name of the plugin/theme on npmjs.com or in its package.json

Responses

Response samples

Content type
application/json
{ }

Stats

Statistics

Get instance stats

Get instance public statistics. This endpoint is cached.

Responses

Response samples

Content type
application/json
{
  • "totalUsers": 0,
  • "totalDailyActiveUsers": 0,
  • "totalWeeklyActiveUsers": 0,
  • "totalMonthlyActiveUsers": 0,
  • "totalModerators": 0,
  • "totalAdmins": 0,
  • "totalLocalVideos": 0,
  • "totalLocalVideoViews": 0,
  • "totalLocalVideoComments": 0,
  • "totalLocalVideoFilesSize": 0,
  • "totalVideos": 0,
  • "totalVideoComments": 0,
  • "totalLocalVideoChannels": 0,
  • "totalLocalDailyActiveVideoChannels": 0,
  • "totalLocalWeeklyActiveVideoChannels": 0,
  • "totalLocalMonthlyActiveVideoChannels": 0,
  • "totalLocalPlaylists": 0,
  • "totalInstanceFollowers": 0,
  • "totalInstanceFollowing": 0,
  • "videosRedundancy": [
    ],
  • "totalActivityPubMessagesProcessed": 0,
  • "totalActivityPubMessagesSuccesses": 0,
  • "totalActivityPubMessagesErrors": 0,
  • "activityPubMessagesProcessedPerSecond": 0,
  • "totalActivityPubMessagesWaiting": 0,
  • "averageRegistrationRequestResponseTimeMs": 0,
  • "totalRegistrationRequestsProcessed": 0,
  • "totalRegistrationRequests": 0,
  • "averageAbuseResponseTimeMs": 0,
  • "totalAbusesProcessed": 0,
  • "totalAbuses": 0
}

Create playback metrics

These metrics are exposed by OpenTelemetry metrics exporter if enabled.

Request Body schema: application/json
downloadedBytesHTTP
required
number

How many bytes were downloaded with HTTP since the last metric creation

downloadedBytesP2P
required
number

How many bytes were downloaded with P2P since the last metric creation

errors
required
number

How many errors occurred since the last metric creation

p2pEnabled
required
boolean
playerMode
required
string
Enum: "p2p-media-loader" "web-video"
resolutionChanges
required
number

How many resolution changes occurred since the last metric creation

uploadedBytesP2P
required
number

How many bytes were uploaded with P2P since the last metric creation

required
id (integer) or UUIDv4 (string) or shortUUID (string)
bufferStalled
number

How many times buffer has been stalled since the last metric creation

fps
number

Current player video fps

p2pPeers
number

P2P peers connected (doesn't include WebSeed peers)

resolution
number

Current player video resolution

Responses

Request samples

Content type
application/json
{
  • "playerMode": "p2p-media-loader",
  • "resolution": 0,
  • "fps": 0,
  • "p2pEnabled": true,
  • "p2pPeers": 0,
  • "resolutionChanges": 0,
  • "bufferStalled": 0,
  • "errors": 0,
  • "downloadedBytesP2P": 0,
  • "downloadedBytesHTTP": 0,
  • "uploadedBytesP2P": 0,
  • "videoId": 42
}

Logs

Send client log

Request Body schema: application/json
level
required
any
Enum: "error" "warn"
message
required
string
url
required
string

URL of the current user page

meta
string

Additional information regarding this log

stackTrace
string

Stack trace of the error if there is one

userAgent
string

User agent of the web browser that sends the message

Responses

Request samples

Content type
application/json
{
  • "message": "string",
  • "url": "string",
  • "level": "error",
  • "stackTrace": "string",
  • "userAgent": "string",
  • "meta": "string"
}

Get instance logs

Authorizations:
OAuth2

Responses

Response samples

Content type
application/json
[
  • "string"
]

Get instance audit logs

Authorizations:
OAuth2

Responses

Response samples

Content type
application/json
[
  • "string"
]

Job

Jobs are long-running tasks enqueued and processed by the instance itself. No additional worker registration is currently available.

Pause job queue

Authorizations:
OAuth2

Responses

Resume job queue

Authorizations:
OAuth2

Responses

List instance jobs

Authorizations:
OAuth2
path Parameters
state
required
string
Enum: "" "active" "completed" "failed" "waiting" "delayed"

The state of the job ('' for for no filter)

query Parameters
count
integer [ 1 .. 100 ]
Default: 15

Number of items to return

jobType
string
Enum: "activitypub-follow" "activitypub-http-broadcast" "activitypub-http-fetcher" "activitypub-http-unicast" "email" "video-transcoding" "video-file-import" "video-import" "videos-views-stats" "activitypub-refresher" "video-redundancy" "video-live-ending" "video-channel-import"

job type

sort
string
Example: sort=-createdAt

Sort column

start
integer >= 0

Offset used to paginate results

Responses

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

Runner Registration Token

Manage runner registration token

Generate registration token

Generate a new runner registration token

Authorizations:
OAuth2

Responses

Remove registration token

Remove a registration token. Runners that used this token for their registration are automatically removed.

Authorizations:
OAuth2
path Parameters
registrationTokenId
required
integer

Responses

List registration tokens

Authorizations:
OAuth2
query Parameters
count
integer [ 1 .. 100 ]
Default: 15

Number of items to return

sort
string
Value: "createdAt"

Sort registration tokens by criteria

start
integer >= 0

Offset used to paginate results

Responses

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

Runner Jobs

Request a new job

API used by PeerTube runners

Request Body schema: application/json
runnerToken
required
string
jobTypes
Array of strings

Filter jobs depending on their types

Responses

Request samples

Content type
application/json
{
  • "runnerToken": "string",
  • "jobTypes": [
    ]
}

Response samples

Content type
application/json
{
  • "availableJobs": [
    ]
}

Accept job

API used by PeerTube runners

path Parameters
jobUUID
required
string <uuid> (UUIDv4) = 36 characters ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]...
Example: 9c9de5e8-0a1e-484a-b099-e80766180a6d
Request Body schema: application/json
runnerToken
required
string

Responses

Request samples

Content type
application/json
{
  • "runnerToken": "string"
}

Response samples

Content type
application/json
{
  • "job": {
    }
}

Abort job

API used by PeerTube runners

path Parameters
jobUUID
required
string <uuid> (UUIDv4) = 36 characters ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]...
Example: 9c9de5e8-0a1e-484a-b099-e80766180a6d
Request Body schema: application/json
jobToken
required
string
reason
required
string

Why the runner aborts this job

runnerToken
required
string

Responses

Request samples

Content type
application/json
{
  • "runnerToken": "string",
  • "jobToken": "string",
  • "reason": "string"
}

Update job

API used by PeerTube runners

path Parameters
jobUUID
required
string <uuid> (UUIDv4) = 36 characters ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]...
Example: 9c9de5e8-0a1e-484a-b099-e80766180a6d
Request Body schema: application/json
jobToken
required
string
runnerToken
required
string
object
progress
integer

Update job progression percentage (optional)

Responses

Request samples

Content type
application/json
{
  • "runnerToken": "string",
  • "jobToken": "string",
  • "progress": 0,
  • "payload": {
    }
}

Post job error

API used by PeerTube runners

path Parameters
jobUUID
required
string <uuid> (UUIDv4) = 36 characters ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]...
Example: 9c9de5e8-0a1e-484a-b099-e80766180a6d
Request Body schema: application/json
jobToken
required
string
message
required
string

Why the runner failed to process this job

runnerToken
required
string

Responses

Request samples

Content type
application/json
{
  • "runnerToken": "string",
  • "jobToken": "string",
  • "message": "string"
}

Post job success

API used by PeerTube runners

path Parameters
jobUUID
required
string <uuid> (UUIDv4) = 36 characters ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]...
Example: 9c9de5e8-0a1e-484a-b099-e80766180a6d
Request Body schema: application/json
jobToken
required
string
required
VOD web video transcoding (object) or VOD HLS transcoding (object) or VOD audio merge transcoding (object) or Live RTMP to HLS transcoding (object)
runnerToken
required
string

Responses

Request samples

Content type
application/json
{
  • "runnerToken": "string",
  • "jobToken": "string",
  • "payload": {
    }
}

Cancel a job

Authorizations:
OAuth2
path Parameters
jobUUID
required
string <uuid> (UUIDv4) = 36 characters ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]...
Example: 9c9de5e8-0a1e-484a-b099-e80766180a6d

Responses

Delete a job

The endpoint will first cancel the job if needed, and then remove it from the database. Children jobs will also be removed

Authorizations:
OAuth2
path Parameters
jobUUID
required
string <uuid> (UUIDv4) = 36 characters ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]...
Example: 9c9de5e8-0a1e-484a-b099-e80766180a6d

Responses

List jobs

Authorizations:
OAuth2
query Parameters
count
integer [ 1 .. 100 ]
Default: 15

Number of items to return

search
string

Plain text search, applied to various parts of the model depending on endpoint

sort
string
Enum: "updatedAt" "createdAt" "priority" "state" "progress"

Sort runner jobs by criteria

start
integer >= 0

Offset used to paginate results

stateOneOf
Array of integers (RunnerJobState)
Items Enum: 1 2 3 4 5 6 7 8

Responses

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

Runners

Register a new runner

API used by PeerTube runners

Request Body schema: application/json
name
required
string
registrationToken
required
string
description
string

Responses

Request samples

Content type
application/json
{
  • "registrationToken": "string",
  • "name": "string",
  • "description": "string"
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "runnerToken": "string"
}

Unregister a runner

API used by PeerTube runners

Request Body schema: application/json
runnerToken
required
string

Responses

Request samples

Content type
application/json
{
  • "runnerToken": "string"
}

Delete a runner

Authorizations:
OAuth2
path Parameters
runnerId
required
integer
Request Body schema: application/json
runnerToken
required
string

Responses

Request samples

Content type
application/json
{
  • "runnerToken": "string"
}

List runners

Authorizations:
OAuth2
query Parameters
count
integer [ 1 .. 100 ]
Default: 15

Number of items to return

sort
string
Value: "createdAt"

Sort runners by criteria

start
integer >= 0

Offset used to paginate results

Responses

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}