hi there,
coming back to this issue.
I am trying to upload a video, in private first, and publish it at a later date.
I installed a local dev server (v8.1.5) to figure out why it wasn’t working.
when I upload a .mp3 file w/o a thumbnail (nor a legacy previewfile), the scheduling works:
2026/04/10 18:00:55 >>>>> /api/v1/videos/upload-resumable
REQ: POST /api/v1/videos/upload-resumable HTTP/1.1
Host: localhost:9000
Accept-Encoding: gzip
Authorization: Bearer 195e70dfe06f492a2affd58dee3abd231efbc0a4
Content-Length: 471
Content-Type: application/json
User-Agent: Go-http-client/1.1
X-Forwarded-For: 127.0.0.1
X-Upload-Content-Length: 81128
X-Upload-Content-Type: audio/mpeg
{
"category": 4,
"channelId": 1,
"commentsEnabled": true,
"description": "**Title**\n\nnot a lengthy description.\n",
"downloadEnabled": true,
"filename": "blank-5s.mp3",
"language": "eo",
"licence": 7,
"name": "5 seconds of silence",
"privacy": 3,
"scheduleUpdate": {
"updateAt": "2026-04-10T18:01:15.171219404+02:00",
"privacy": 1
},
"support": "please consider donating or contributing to the PeerTube project at https://joinpeertube.org",
"tags": [
"go",
"golang",
"peertube"
],
"waitTranscoding": true
}
and in the « my videos » panel, I do get Scheduled as a privacy field.
and later on:
[peertube] | [localhost:9000] 2026-04-10 16:01:51.017 info: Executing scheduled video update on 01262017-89a8-457b-b597-215aaf47a053
[peertube] | [localhost:9000] 2026-04-10 16:01:51.036 info: Moving web video files of 01262017-89a8-457b-b597-215aaf47a053 after privacy change (/data/web-videos/private/40591655-fff3-4f9e-96ec-4a9c6309b2e8-0.mp4 -> /data/web-videos/40591655-fff3-4f9e-96ec-4a9c6309b2e8-0.mp4).
and the video is Published+Public in the « my videos » panel.
but when I upload the same file with a thumbnailfile:
2026/04/10 18:05:25 >>>>> /api/v1/videos/upload-resumable
REQ: POST /api/v1/videos/upload-resumable HTTP/1.1
Host: localhost:9000
Accept-Encoding: gzip
Authorization: Bearer 350bc692f9d3e789c1036dd6ca37b1d7104a852f
Content-Length: 12436
Content-Type: multipart/form-data; boundary=bdc0b4900458b7b6c4847a3d4eb83eab3467208ba65b04eb0f5135421021
User-Agent: Go-http-client/1.1
X-Forwarded-For: 127.0.0.1
X-Upload-Content-Length: 81128
X-Upload-Content-Type: audio/mpeg
--bdc0b4900458b7b6c4847a3d4eb83eab3467208ba65b04eb0f5135421021
Content-Disposition: form-data; name="channelId"
1
--bdc0b4900458b7b6c4847a3d4eb83eab3467208ba65b04eb0f5135421021
Content-Disposition: form-data; name="name"
5 seconds of silence
--bdc0b4900458b7b6c4847a3d4eb83eab3467208ba65b04eb0f5135421021
Content-Disposition: form-data; name="filename"
blank-5s.mp3
--bdc0b4900458b7b6c4847a3d4eb83eab3467208ba65b04eb0f5135421021
Content-Disposition: form-data; name="mimeType"
audio/mpeg
--bdc0b4900458b7b6c4847a3d4eb83eab3467208ba65b04eb0f5135421021
Content-Disposition: form-data; name="lastModified"
1712308662866
--bdc0b4900458b7b6c4847a3d4eb83eab3467208ba65b04eb0f5135421021
Content-Disposition: form-data; name="size"
81128
--bdc0b4900458b7b6c4847a3d4eb83eab3467208ba65b04eb0f5135421021
Content-Disposition: form-data; name="thumbnailfile"; filename="peertube-logo.png"
Content-Type: image/png
PNG
<snip binary data>
--bdc0b4900458b7b6c4847a3d4eb83eab3467208ba65b04eb0f5135421021
Content-Disposition: form-data; name="category"
4
--bdc0b4900458b7b6c4847a3d4eb83eab3467208ba65b04eb0f5135421021
Content-Disposition: form-data; name="downloadEnabled"
true
--bdc0b4900458b7b6c4847a3d4eb83eab3467208ba65b04eb0f5135421021
Content-Disposition: form-data; name="licence"
7
--bdc0b4900458b7b6c4847a3d4eb83eab3467208ba65b04eb0f5135421021
Content-Disposition: form-data; name="privacy"
3
--bdc0b4900458b7b6c4847a3d4eb83eab3467208ba65b04eb0f5135421021
Content-Disposition: form-data; name="waitTranscoding"
true
--bdc0b4900458b7b6c4847a3d4eb83eab3467208ba65b04eb0f5135421021
Content-Disposition: form-data; name="commentsEnabled"
true
--bdc0b4900458b7b6c4847a3d4eb83eab3467208ba65b04eb0f5135421021
Content-Disposition: form-data; name="description"
**Title**
not a lengthy description.
--bdc0b4900458b7b6c4847a3d4eb83eab3467208ba65b04eb0f5135421021
Content-Disposition: form-data; name="language"
eo
--bdc0b4900458b7b6c4847a3d4eb83eab3467208ba65b04eb0f5135421021
Content-Disposition: form-data; name="nsfw"
false
--bdc0b4900458b7b6c4847a3d4eb83eab3467208ba65b04eb0f5135421021
Content-Disposition: form-data; name="support"
please consider donating or contributing to the PeerTube project at https://joinpeertube.org
--bdc0b4900458b7b6c4847a3d4eb83eab3467208ba65b04eb0f5135421021
Content-Disposition: form-data; name="tags[0]"
go
--bdc0b4900458b7b6c4847a3d4eb83eab3467208ba65b04eb0f5135421021
Content-Disposition: form-data; name="tags[1]"
golang
--bdc0b4900458b7b6c4847a3d4eb83eab3467208ba65b04eb0f5135421021
Content-Disposition: form-data; name="tags[2]"
peertube
--bdc0b4900458b7b6c4847a3d4eb83eab3467208ba65b04eb0f5135421021--
RESP: HTTP/1.1 201 Created
and in the « my videos » panel, I only get Private as a privacy field.
and the scheduling job never pops up.
is this kind of scheduling supported or am I doing something wrong ?