Good day all! I’m starting up a Peertube instance that’ll be moderated for folks, hopefully backed by donations through my nonprofit org BT Free. I’m going to work on setting up Peertube next week. But I was thinking of setting up a moderated index.

Looking at the following link, in the “PeerTube auto follow & Global Search” section: https://framagit.org/framasoft/peertube/instances-peertube

It seems I can just create a file, put that code in there, set the hosts I want, and then any Peertube can go to Admin - Settings - Configuration - Basic - Search Index URL - and then put in https://ptindex.btfee.org/ . Is this correct?

If so, does anyone know if Peertube can refresh it’s host list or if it refreshes on a timer or something?

I’ll update if I find out the answer as well.

EDIT: Ok so already realized there’s a “Search Index URL” under the “Enable global search” for managing what servers you users can search on. Then there’s also a “Index URL” under the “Automatically follow instances of a public index” which you can follow. Awesome. I have it there, but not updated … yet?

EDIT: Still having no luck. Filed BZ: https://github.com/Chocobozzz/PeerTube/issues/7037

Then I realized, while finally finding the appropriate logs in /var/www/peertube/storage/logs that Peertube is throwing a JSON error:

peertube4.log:{“level”:“error”,“message”:“Cannot auto follow hosts of index https://ptindex.btfree.org/.",“label”:“video.firesidefedi.live:443”,“err”:{“stack”:"RequestError: Expected ‘,’ or ‘}’ after property value in JSON at position 179 (line 15 column 1) in “https://ptindex.btfree.org/?count=1000\”\n at parseBody (file:///var/www/peertube/versions/peertube-v7.1.1/node_modules/got/dist/source/core/response.js:35:15)\n at Request. (file:///var/www/peertube/versions/peertube-v7.1.1/node_modules/got/dist/source/as-promise/index.js:48:41)\n at Object.onceWrapper (node:events:622:26)\n at Request.emit (node:events:519:35)\n at Request._onResponseBase (file:///var/www/peertube/versions/peertube-v7.1.1/node_modules/got/dist/source/core/index.js:609:22)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at parse ()\n at parseBody (file:///var/www/peertube/versions/peertube-v7.1.1/node_modules/got/dist/source/core/response.js:28:48)\n at Request. (file:///var/www/peertube/versions/peertube-v7.1.1/node_modules/got/dist/source/as-promise/index.js:48:41)\n at Object.onceWrapper (node:events:622:26)\n at Request.emit (node:events:519:35)\n at Request._onResponseBase (file:///var/www/peertube/versions/peertube-v7.1.1/node_modules/got/dist/source/core/index.js:609:22)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async Request._onResponse (file:///var/www/peertube/versions/peertube-v7.1.1/node_modules/got/dist/source/core/index.js:649:13)”,“message”:“Expected ‘,’ or ‘}’ after property value in JSON at position 179 (line 15 column 1) in “https://ptindex.btfree.org/?count=1000\””,“name”:“ParseError”,“responseBody”:“{\n “total”: 1,\n “data”: [\n {\n “host”: “vods.198x.eu”\n },\n {\n “host”: “video.firesidefedi.live”\n },\n {\n “host”: “video.thepolarbear.co.uk”\n }\n]\n\n”,“responseHeaders”:{“accept-ranges”:“bytes”,“alt-svc”:“h3=”:443"; ma=2592000",“content-length”:“179”,“content-type”:“text/html; charset=utf-8”,“etag”:““d9xueyzeb69e4z””,“last-modified”:“Fri, 16 May 2025 19:47:41 GMT”,“server”:“Caddy”,“vary”:“Accept-Encoding”,“date”:“Sat, 17 May 2025 20:25:58 GMT”,“connection”:“close”},“statusCode”:200,“requestHeaders”:{“user-agent”:“PeerTube/7.1.1 (+https://video.firesidefedi.live/)”,“date”:“Sat, 17 May 2025 20:25:58 GMT”,“accept”:“application/json”,“accept-encoding”:“gzip, deflate, br”,“host”:“ptindex.btfree.org”},“requestUrl”:“https://ptindex.btfree.org/?count=1000",“requestMethod”:“GET”},“timestamp”:"2025-05-17T20:25:58.486Z”}

This seems to be due to https://framagit.org/framasoft/peertube/instances-peertube having a typo:

{
“total”: 5,
“data”: [
{
“host”: “video1.example.com
},
{
“host”: “video2.example.com
},
{
“host”: “video3.example.com
},
{
“host”: “video4.example.com
},
{
“host”: “video5.example.com
}
]

Should be:

{
“total”: 5,
“data”: [
{
“host”: “video1.example.com
},
{
“host”: “video2.example.com
},
{
“host”: “video3.example.com
},
{
“host”: “video4.example.com
},
{
“host”: “video5.example.com
}
]
}