Peertube-Runner: Can't get transcription to work

My dear fellow peertubers,

i successfully installed a Peertube-Runner on Ubuntu using WSL/Ubuntu on a Windows machine and transcoding processes work like a charme.

Now, i want to expand the runner’s abilities to include transcoding. For this, i used the following commands:

sudo apt install python3.12-venv

cd ~

python3.12 -m venv whisper

source whisper/bin/activate

pip install torch

pip install whisper-ctranslate2

nano ~/.bashrc

inside the bashrc i put

PATH="$PATH:$HOME/whisper/bin"

at the end.

When restarting Ubuntu, i can use whisper-ctranslate2 anywhere, but delegating a transcription task from PeerTube to the runner ends up in an error:

"errorMessage": "Command failed with ENOENT: whisper-ctranslate2 /srv/prunner/.cache/peertube-runner-nodejs/default/transcoding/xxxxxxx --model small --word_timestamps True --vad_filter true --vad_min_silence_duration_ms 5000 --output_format all --output_dir /srv/prunner/.cache/peertube-runner-nodejs/default/transcription/xxxxxxxx\nspawn whisper-ctranslate2 ENOENT",

I’m not running docker, the remote runner is directly installed on the WSL machine. What am i missing here, where’s the mistake?

EDIT:

  • peerlube-cli is installed
  • peertube-runner is registered
  • peertube-runner is visible in PeerTube backend
  • peertube-runner is performing transcoding flawlessly

I looked at the logs from the PeerTube server when delegating the job to the RemoteRunner. Without knowing the cause, the server always uses the right network IP of the runner. But just before the error appears, the server uses the TAILSCALE IP of the runner. Since the tailscale ip is the windows machine and not the virtual Ubuntu running on it, i guess this is why the job leads into an error.

WHY is the server using a TAILSCALE IP all of a sudden? How do i stop this?


[PeerTube-IP:443] 2025-09-11 12:35:14.499 info: Remote runner RemoteRunner has accepted job [job ID] (video-transcription)

[PeerTube-IP:443] 2025-09-11 12:35:14.500 info: [valid network IP of Remote Runner] - - [11/Sep/2025:10:35:14 +0000] "POST /api/v1/runners/jobs/[job ID]/accept HTTP/1.1" 200 621 "-" "-"

[PeerTube-IP:443] 2025-09-11 12:35:14.539 info: Get max quality separated audio file of video [video ID] of job [job ID] for runner RemoteRunner

[PeerTube-IP:443] 2025-09-11 12:35:14.541 info: [valid network IP of Remote Runner] - - [11/Sep/2025:10:35:14 +0000] "POST /api/v1/runners/jobs/[job ID]/update HTTP/1.1" 204 - "-" "-"

[PeerTube-IP:443] 2025-09-11 12:35:15.092 info: [valid network IP of Remote Runner] - - [11/Sep/2025:10:35:15 +0000] "POST /api/v1/runners/jobs/request HTTP/1.1" 200 20 "-" "-"

[PeerTube-IP:443] 2025-09-11 12:35:16.324 info: [valid TAILSCALE IP of Remote Runner] - - [11/Sep/2025:10:35:16 +0000] "POST /api/v1/runners/jobs/[job ID]/files/videos/[video ID]/max-quality/audio HTTP/1.1" 200 175153130 "-" "-"


[PeerTube-IP:443] 2025-09-11 12:35:16.669 error: Remote runner RemoteRunner had an error with job [job ID] (video-transcription) 
{
"errorMessage": "Command failed with ENOENT: whisper-ctranslate2 /srv/prunner/.cache/peertube-runner-nodejs/default/transcoding/**[job ID that has never been mentioned before]** --model small --word_timestamps True --vad_filter true --vad_min_silence_duration_ms 5000 --output_format all --output_dir /srv/prunner/.cache/peertube-runner-nodejs/default/transcription/neb4kSzCTxhf4LydcqxeCD\nspawn whisper-ctranslate2 ENOENT",
"totalFailures": 1
}

I made a complete overhaul of installing whisper-ctranslate2 by creating the prunner user with a nonprotected /home/prunner folder, installed the whisper-venv inside there and modified the directories inside /etc/systemd/system/prunner.service and /home/prunner/.config/peertube-runner-nodejs/default/config.toml (here i entered enginePath = « /home/prunner/whisper/bin/whisper-ctranslate2 »).

When handing over a transcription job, the RemoteRunner quits now with

[PeerTube-IP:443] 2025-09-11 17:18:01.914 error: Remote runner RyzenRunner had an error with job [job ID] (video-transcription) {
  "errorMessage": "Command was killed with SIGABRT (Aborted): /home/prunner/whisper/bin/whisper-ctranslate2 /home/prunner/.cache/peertube-runner-nodejs/default/transcoding/3e91b982-cb36-4e8c-91c7-9caf07b8e48d --model small --word_timestamps True --vad_filter true --vad_min_silence_duration_ms 5000 --output_format all --output_dir /home/prunner/.cache/peertube-runner-nodejs/default/transcription/xeggfx1GUiYFCcWNoXDcCN\n\nUnable to load any of {libcudnn_ops.so.9.1.0, libcudnn_ops.so.9.1, libcudnn_ops.so.9, libcudnn_ops.so}\nInvalid handle. Cannot load symbol cudnnCreateTensorDescriptor",
  "totalFailures": 5
}

Please note: The whole process of enabling transcriptions via RemtoeRunners is a total mess. There are no tutorials. There is no proper instruction. Yes, there are documents on joinpeertube.org, but everything is cryptic, nothing is clear. If you ask questions about it, there is nobody answering you. There are dozens of people successfully working with RemoteRunners, but nobody, just NOBODY gives a hand of help to someone trying to get this working.

I’m into open source projects for many years. But regarding this project, i’m totally frustrated about how little help this community is sharing. I’m out of ideas here. And i’m sure i read everything google has to offer regarding the simple task of starting a functional transcription runner. I hope someone will exit the shadows and help people like me, even if there is no personal benefit for them.

Hi Gekko

Did you resolve your problem since or still need help ?

Regards