<?xml version="1.0" encoding="UTF-8"?><rss 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" version="2.0"><channel><title><![CDATA[PeerTube: failed migration, broken Whisper (Python 3.14) and private video playback]]></title><description><![CDATA[<p dir="auto">Hi,</p>
<p dir="auto">I ran into three issues when trying to upload a video to my peertube channel (I hadn't uploaded a video for over 6 months so I'm not sure when the issue really started).<br />
I used Claude to try to find out what was going on, but I can provide more details upon request.</p>
<p dir="auto">Running PeerTube 8.3.2 on Cloudron 10.1.6.</p>
<ol>
<li>HLS transcoding failed: column left over from an old migration<br />
All new-resolution-to-hls jobs failed with:</li>
</ol>
<pre><code>null value in column "p2pMediaLoaderInfohashes" of relation "videoStreamingPlaylist"
violates not-null constraint
</code></pre>
<p dir="auto">The current code no longer writes this column, but it still exists with a NOT NULL constraint. I did the following change (trusting Claude) and it fixed the transcoding issue:</p>
<pre><code>sql
ALTER TABLE "videoStreamingPlaylist" ALTER COLUMN "p2pMediaLoaderInfohashes" DROP NOT NULL;
</code></pre>
<ol start="2">
<li>Automatic transcription (Whisper) broken<br />
whisper-ctranslate2 in /app/data/storage/bin/pip was built for Python 3.12, but the image now ships Python 3.14:</li>
</ol>
<pre><code>ImportError: ... _multiarray_umath.cpython-312-x86_64-linux-gnu.so incompatible with cpython-314
</code></pre>
<p dir="auto">pip isn’t available in the image (/usr/bin/python3: No module named pip), so I can’t reinstall it myself.</p>
<ol start="3">
<li>Private videos don’t play<br />
HLS segments of private videos (/static/streaming-playlists/hls/private/...) are aborted in a loop by the player (NS_BINDING_ABORTED in Firefox), and far more data is transferred than the requested byte ranges. The same video set to Unlisted plays fine. It looks like Range requests aren’t handled correctly on private files.</li>
</ol>
<p dir="auto">Thanks!</p>
]]></description><link>https://forum.cloudron.io/topic/16242/peertube-failed-migration-broken-whisper-python-3.14-and-private-video-playback</link><generator>RSS for Node</generator><lastBuildDate>Wed, 04 Nov 2026 09:49:04 GMT</lastBuildDate><atom:link href="https://forum.cloudron.io/topic/16242.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 03 Nov 2026 21:45:29 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to PeerTube: failed migration, broken Whisper (Python 3.14) and private video playback on Wed, 04 Nov 2026 08:40:33 GMT]]></title><description><![CDATA[<p dir="auto">Hi,</p>
<p dir="auto">Adding to the note above about the <code>DROP NOT NULL</code> change — might not be it, but we ran into a similar error on two Cloudron instances. 8.3 requires a manual migration script that has to be run after the upgrade; it's in the IMPORTANT NOTES of the v8.3.0 release. <code>DROP NOT NULL</code> only silences the error, the script also moves the infohashes into the new table and fills <code>videoSearch</code>.</p>
<p dir="auto">Take a backup first, it does <code>DROP COLUMN</code>. With PeerTube running, in the container:</p>
<pre><code class="language-bash">cd /app/code/server
gosu cloudron:cloudron env HOME=/home/cloudron NODE_ENV=production node dist/scripts/migrations/peertube-8.3.js
</code></pre>
<p dir="auto">Expected output:</p>
<pre><code>Filling videoSearch table with existing videos...
videoSearch table filled.

Migrating video infohashes...
Video infohashes migrated.
</code></pre>
<p dir="auto">Check, should return 0 rows:</p>
<pre><code class="language-sql">SELECT column_name FROM information_schema.columns
WHERE table_name IN ('videoStreamingPlaylist','videoFile')
  AND column_name IN ('p2pMediaLoaderInfohashes','infoHash');
</code></pre>
<p dir="auto">Then restart the app and re-encode the affected videos. But you may have done this already.</p>
]]></description><link>https://forum.cloudron.io/post/132378</link><guid isPermaLink="true">https://forum.cloudron.io/post/132378</guid><dc:creator><![CDATA[archos]]></dc:creator><pubDate>Wed, 04 Nov 2026 08:40:33 GMT</pubDate></item><item><title><![CDATA[Reply to PeerTube: failed migration, broken Whisper (Python 3.14) and private video playback on Wed, 04 Nov 2026 08:36:27 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/ikalou" aria-label="Profile: ikalou">@<bdi>ikalou</bdi></a>, the Bunny CDN detail might be particularly useful for narrowing down the private video playback problem.</p>
<p dir="auto">PeerTube handles private video files differently from public ones. Access to private files goes through PeerTube's authentication checks, so a CDN or reverse proxy in front of those requests can complicate things.</p>
<p dir="auto">I'd try isolating that part before changing the Range handling.</p>
<p dir="auto">In Firefox's Network tab, compare a working Unlisted video with the same video set to Private. For the failing HLS requests, check the actual response status, the <code>Range</code> request header (if present), and the <code>Content-Range</code>, <code>Content-Length</code> and <code>Cache-Control</code> response headers.</p>
<p dir="auto">A <code>206 Partial Content</code> response should describe the requested byte range. But <code>NS_BINDING_ABORTED</code> alone doesn't establish a Range bug — Firefox can also cancel requests when the player retries or changes its playback strategy.</p>
<p dir="auto">The most useful test might be to temporarily bypass Bunny for an authenticated private-video request, without making the video publicly accessible. If playback works through the Cloudron origin but fails through Bunny, that would narrow the issue down considerably.</p>
<p dir="auto">Bunny supports Range requests, but its cache and origin-fetch behaviour may differ depending on Cache Slicing settings. I'd also make sure protected HLS paths aren't being cached and served across different users without proper authorization.</p>
<p dir="auto">The other two problems seem worth tracking separately. In particular, I'd avoid treating the manual PostgreSQL <code>DROP NOT NULL</code> change as a permanent migration fix without checking the schema history and taking a backup.</p>
<p dir="auto">Could you confirm whether Bunny is proxying the PeerTube application domain itself, or only the video storage/CDN URLs?</p>
]]></description><link>https://forum.cloudron.io/post/132377</link><guid isPermaLink="true">https://forum.cloudron.io/post/132377</guid><dc:creator><![CDATA[whitescreendev]]></dc:creator><pubDate>Wed, 04 Nov 2026 08:36:27 GMT</pubDate></item><item><title><![CDATA[Reply to PeerTube: failed migration, broken Whisper (Python 3.14) and private video playback on Wed, 04 Nov 2026 07:47:53 GMT]]></title><description><![CDATA[<p dir="auto">I precise also I use Bunny as a CDN.</p>
]]></description><link>https://forum.cloudron.io/post/132376</link><guid isPermaLink="true">https://forum.cloudron.io/post/132376</guid><dc:creator><![CDATA[ikalou]]></dc:creator><pubDate>Wed, 04 Nov 2026 07:47:53 GMT</pubDate></item></channel></rss>