scheduledUpdate doesn't work w/ thumbnail/preview

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 ?

fixed by: