Inconsistency in uploading mts/ts files #6468

Open
opened 2026-02-22 12:56:51 -05:00 by deekerman · 0 comments
Owner

Originally created by @matthijskooijman on GitHub (Feb 20, 2026).

Describe the current behavior

When uploading MPEG Transport Stream files, I'm seeing inconsistent behavior:

  1. Uploading via the WebUI allows me to pick ".mts" files but not ".ts" files. If I override the picker and use "All files" then a .ts file is uploaded but then rejected by peertube (in the upload screen already).
  2. Uploading via peertube-cli works with ".ts" files as expected, but with ".mts" files it failse with 415 / "Unsupported Media Type" (full response below).

I noticed that the error message is a bit weird, it shows:

This file is not supported. Please, make sure it is of the following type: .webm, .ogv, .ogg, .mp4, .mkv, .mov, .qt, .mqv, .m4v, .flv, .f4v, .wmv, .avi, .3gp, .3gpp, .3g2, .3gpp2, .nut, .mts, ts, .m2ts, .mpv, .m2v, .m1v, .mpg, .mpe, .mpeg, .vob, .mxf, .mp3, .wma, .wav, .flac, .aac, .m4a, .ac3"

So that has ts instead of .ts?

I think this is caused by a typo here: github.com/Chocobozzz/PeerTube@0234ece61c/server/core/initializers/constants.ts (L1481)

Maybe this is also the source of this inconsistency (at least could explain why the web upload rejects the file)?

The full failing peertube-cli response is shown below:

❯ for file in Meetkoppel\ 2024/*.mts Koppelting\ 2024/*.mts; do peertube-cli upload --video-name "$file" --file "$(pwd)/$file"; done
Uploading Meetkoppel 2024/2024-01-27_10-09-56.mts video...
Error: Expected status 200, got 415.
The server responded: "{"type":"about:blank","title":"Unsupported Media Type","detail":"This file is not supported. Please, make sure it is of the following type: .webm, .ogv, .ogg, .mp4, .mkv, .mov, .qt, .mqv, .m4v, .flv, .f4v, .wmv, .avi, .3gp, .3gpp, .3g2, .3gpp2, .nut, .mts, ts, .m2ts, .mpv, .m2v, .m1v, .mpg, .mpe, .mpeg, .vob, .mxf, .mp3, .wma, .wav, .flac, .aac, .m4a, .ac3","status":415,"docs":"https://docs.joinpeertube.org/api-rest-reference.html#operation/uploadLegacy"}".
You may take a closer look at the logs. To see how to do so, check out this page: https://github.com/Chocobozzz/PeerTube/blob/develop/support/doc/development/tests.md#debug-server-logs
    at buildRequest (file:///home/matthijs/.npm-packages/lib/node_modules/@peertube/peertube-cli/dist/peertube.js:76560:14)
    at makeUploadRequest (file:///home/matthijs/.npm-packages/lib/node_modules/@peertube/peertube-cli/dist/peertube.js:76482:9)
    at VideosCommand.postUploadRequest (file:///home/matthijs/.npm-packages/lib/node_modules/@peertube/peertube-cli/dist/peertube.js:76634:12)
    at VideosCommand.buildLegacyUpload (file:///home/matthijs/.npm-packages/lib/node_modules/@peertube/peertube-cli/dist/peertube.js:84905:28)
    at VideosCommand.upload (file:///home/matthijs/.npm-packages/lib/node_modules/@peertube/peertube-cli/dist/peertube.js:84892:52)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async run (file:///home/matthijs/.npm-packages/lib/node_modules/@peertube/peertube-cli/dist/peertube.js:85850:5)
    at async _Command.<anonymous> (file:///home/matthijs/.npm-packages/lib/node_modules/@peertube/peertube-cli/dist/peertube.js:85824:7)
----
    at file:///home/matthijs/.npm-packages/lib/node_modules/@peertube/peertube-cli/dist/peertube.js:76563:19
    at file:///home/matthijs/.npm-packages/lib/node_modules/@peertube/peertube-cli/dist/peertube.js:46891:17
    at Test._assertFunction (file:///home/matthijs/.npm-packages/lib/node_modules/@peertube/peertube-cli/dist/peertube.js:46878:17)
    at Test.assert (file:///home/matthijs/.npm-packages/lib/node_modules/@peertube/peertube-cli/dist/peertube.js:46769:27)
    at localAssert (file:///home/matthijs/.npm-packages/lib/node_modules/@peertube/peertube-cli/dist/peertube.js:46738:18)
    at file:///home/matthijs/.npm-packages/lib/node_modules/@peertube/peertube-cli/dist/peertube.js:46741:11
    at Request3.callback (file:///home/matthijs/.npm-packages/lib/node_modules/@peertube/peertube-cli/dist/peertube.js:46296:7)
    at file:///home/matthijs/.npm-packages/lib/node_modules/@peertube/peertube-cli/dist/peertube.js:46470:22
    at IncomingMessage.<anonymous> (file:///home/matthijs/.npm-packages/lib/node_modules/@peertube/peertube-cli/dist/peertube.js:45814:11)
    at IncomingMessage.emit (node:events:530:35) {
  res: <ref *1> Response2 {
    _events: [Object: null prototype] {},
    _eventsCount: 0,
    _maxListeners: undefined,
    res: IncomingMessage {
      _events: [Object],
      _readableState: [ReadableState],
      _maxListeners: undefined,
      socket: [TLSSocket],
      httpVersionMajor: 1,
      httpVersionMinor: 1,
      httpVersion: '1.1',
      complete: true,
      rawHeaders: [Array],
      rawTrailers: [],
      joinDuplicateHeaders: undefined,
      aborted: false,
      upgrade: false,
      url: '',
      method: null,
      statusCode: 415,
      statusMessage: 'Unsupported Media Type',
      client: [TLSSocket],
      _consuming: false,
      _dumped: false,
      req: [ClientRequest],
      _eventsCount: 4,
      text: '{"type":"about:blank","title":"Unsupported Media Type","detail":"This file is not supported. Please, make sure it is of the following type: .webm, .ogv, .ogg, .mp4, .mkv, .mov, .qt, .mqv, .m4v, .flv, .f4v, .wmv, .avi, .3gp, .3gpp, .3g2, .3gpp2, .nut, .mts, ts, .m2ts, .mpv, .m2v, .m1v, .mpg, .mpe, .mpeg, .vob, .mxf, .mp3, .wma, .wav, .flac, .aac, .m4a, .ac3","status":415,"docs":"https://docs.joinpeertube.org/api-rest-reference.html#operation/uploadLegacy"}',
      [Symbol(shapeMode)]: true,
      [Symbol(kCapture)]: false,
      [Symbol(kHeaders)]: [Object],
      [Symbol(kHeadersCount)]: 32,
      [Symbol(kTrailers)]: null,
      [Symbol(kTrailersCount)]: 0
    },
    request: Test {
      _events: [Object: null prototype],
      _eventsCount: 1,
      _maxListeners: undefined,
      _enableHttp2: false,
      _agent: false,
      _formData: [FormData],
      method: 'POST',
      url: 'https://televisie.planb.coop/api/v1/videos/upload',
      _header: [Object],
      header: [Object],
      writable: true,
      _redirects: 0,
      _maxRedirects: 0,
      cookies: '',
      qs: {},
      _query: [],
      qsRaw: [],
      _redirectList: [],
      _streamRequest: false,
      _lookup: undefined,
      _buffer: true,
      app: 'https://televisie.planb.coop',
      _asserts: [Array],
      req: [ClientRequest],
      protocol: 'https:',
      host: 'televisie.planb.coop',
      _endCalled: true,
      _callback: [Function (anonymous)],
      _fullfilledPromise: [Promise],
      res: [IncomingMessage],
      _resBuffered: true,
      response: [Circular *1],
      called: true,
      [Symbol(shapeMode)]: false,
      [Symbol(kCapture)]: false
    },
    req: ClientRequest {
      _events: [Object: null prototype],
      _eventsCount: 2,
      _maxListeners: undefined,
      outputData: [],
      outputSize: 0,
      writable: true,
      destroyed: false,
      _last: true,
      chunkedEncoding: false,
      shouldKeepAlive: false,
      maxRequestsOnConnectionReached: false,
      _defaultKeepAlive: true,
      useChunkedEncodingByDefault: true,
      sendDate: false,
      _removedConnection: false,
      _removedContLen: false,
      _removedTE: false,
      strictContentLength: false,
      _contentLength: 769840815,
      _hasBody: true,
      _trailer: '',
      finished: true,
      _headerSent: true,
      _closed: false,
      socket: [TLSSocket],
      _header: 'POST /api/v1/videos/upload HTTP/1.1\r\n' +
        'Host: televisie.planb.coop\r\n' +
        'Accept-Encoding: gzip, deflate\r\n' +
        'Authorization: Bearer 97a14cf72c4acad34c04efc3eccd8d2579b0f1d5\r\n' +
        'Accept: application/json\r\n' +
        'content-type: multipart/form-data; boundary=--------------------------373508552293707451136041\r\n' +
        'Content-Length: 769840815\r\n' +
        'Connection: close\r\n' +
        '\r\n',
      _keepAliveTimeout: 0,
      _onPendingData: [Function: nop],
      agent: [Agent],
      socketPath: undefined,
      method: 'POST',
      maxHeaderSize: undefined,
      insecureHTTPParser: undefined,
      joinDuplicateHeaders: undefined,
      path: '/api/v1/videos/upload',
      _ended: true,
      res: [IncomingMessage],
      aborted: false,
      timeoutCb: null,
      upgradeOrConnect: false,
      parser: null,
      maxHeadersCount: null,
      reusedSocket: false,
      host: 'televisie.planb.coop',
      protocol: 'https:',
      [Symbol(shapeMode)]: false,
      [Symbol(kCapture)]: false,
      [Symbol(kBytesWritten)]: 0,
      [Symbol(kNeedDrain)]: false,
      [Symbol(corked)]: 0,
      [Symbol(kOutHeaders)]: [Object: null prototype],
      [Symbol(errored)]: null,
      [Symbol(kHighWaterMark)]: 16384,
      [Symbol(kRejectNonStandardBodyWrites)]: false,
      [Symbol(kUniqueHeaders)]: null
    },
    text: '{"type":"about:blank","title":"Unsupported Media Type","detail":"This file is not supported. Please, make sure it is of the following type: .webm, .ogv, .ogg, .mp4, .mkv, .mov, .qt, .mqv, .m4v, .flv, .f4v, .wmv, .avi, .3gp, .3gpp, .3g2, .3gpp2, .nut, .mts, ts, .m2ts, .mpv, .m2v, .m1v, .mpg, .mpe, .mpeg, .vob, .mxf, .mp3, .wma, .wav, .flac, .aac, .m4a, .ac3","status":415,"docs":"https://docs.joinpeertube.org/api-rest-reference.html#operation/uploadLegacy"}',
    files: undefined,
    buffered: true,
    headers: {
      server: 'nginx/1.29.0',
      date: 'Fri, 20 Feb 2026 17:19:14 GMT',
      'content-type': 'application/problem+json; charset=utf-8',
      'content-length': '459',
      connection: 'close',
      'x-powered-by': 'PeerTube',
      'x-frame-options': 'DENY',
      tk: 'N',
      'access-control-allow-origin': '*',
      'access-control-allow-credentials': 'true',
      'access-control-expose-headers': 'Retry-After',
      'x-ratelimit-limit': '50',
      'x-ratelimit-remaining': '49',
      'x-ratelimit-reset': '1771607962',
      etag: 'W/"1cb-znqtcZLnN0fXFBVv8R+NV3mS1lE"',
      'strict-transport-security': 'max-age=31536000'
    },
    header: {
      server: 'nginx/1.29.0',
      date: 'Fri, 20 Feb 2026 17:19:14 GMT',
      'content-type': 'application/problem+json; charset=utf-8',
      'content-length': '459',
      connection: 'close',
      'x-powered-by': 'PeerTube',
      'x-frame-options': 'DENY',
      tk: 'N',
      'access-control-allow-origin': '*',
      'access-control-allow-credentials': 'true',
      'access-control-expose-headers': 'Retry-After',
      'x-ratelimit-limit': '50',
      'x-ratelimit-remaining': '49',
      'x-ratelimit-reset': '1771607962',
      etag: 'W/"1cb-znqtcZLnN0fXFBVv8R+NV3mS1lE"',
      'strict-transport-security': 'max-age=31536000'
    },
    statusCode: 415,
    status: 415,
    statusType: 4,
    info: false,
    ok: false,
    redirect: false,
    clientError: true,
    serverError: false,
    error: Error: cannot POST /api/v1/videos/upload (415)
        at Response2.toError (file:///home/matthijs/.npm-packages/lib/node_modules/@peertube/peertube-cli/dist/peertube.js:45631:21)
        at ResponseBase._setStatusProperties (file:///home/matthijs/.npm-packages/lib/node_modules/@peertube/peertube-cli/dist/peertube.js:45555:54)
        at new Response2 (file:///home/matthijs/.npm-packages/lib/node_modules/@peertube/peertube-cli/dist/peertube.js:45593:12)
        at Request3._emitResponse (file:///home/matthijs/.npm-packages/lib/node_modules/@peertube/peertube-cli/dist/peertube.js:46302:24)
        at file:///home/matthijs/.npm-packages/lib/node_modules/@peertube/peertube-cli/dist/peertube.js:46470:42
        at IncomingMessage.<anonymous> (file:///home/matthijs/.npm-packages/lib/node_modules/@peertube/peertube-cli/dist/peertube.js:45814:11)
        at IncomingMessage.emit (node:events:530:35)
        at endReadableNT (node:internal/streams/readable:1698:12)
        at process.processTicksAndRejections (node:internal/process/task_queues:82:21) {
      status: 415,
      text: '{"type":"about:blank","title":"Unsupported Media Type","detail":"This file is not supported. Please, make sure it is of the following type: .webm, .ogv, .ogg, .mp4, .mkv, .mov, .qt, .mqv, .m4v, .flv, .f4v, .wmv, .avi, .3gp, .3gpp, .3g2, .3gpp2, .nut, .mts, ts, .m2ts, .mpv, .m2v, .m1v, .mpg, .mpe, .mpeg, .vob, .mxf, .mp3, .wma, .wav, .flac, .aac, .m4a, .ac3","status":415,"docs":"https://docs.joinpeertube.org/api-rest-reference.html#operation/uploadLegacy"}',
      method: 'POST',
      path: '/api/v1/videos/upload'
    },
    created: false,
    accepted: false,
    noContent: false,
    badRequest: false,
    unauthorized: false,
    notAcceptable: false,
    forbidden: false,
    notFound: false,
    unprocessableEntity: false,
    type: 'application/problem+json',
    charset: 'utf-8',
    links: {},
    setEncoding: [Function: bound ],
    redirects: [],
    _body: {
      type: 'about:blank',
      title: 'Unsupported Media Type',
      detail: 'This file is not supported. Please, make sure it is of the following type: .webm, .ogv, .ogg, .mp4, .mkv, .mov, .qt, .mqv, .m4v, .flv, .f4v, .wmv, .avi, .3gp, .3gpp, .3g2, .3gpp2, .nut, .mts, ts, .m2ts, .mpv, .m2v, .m1v, .mpg, .mpe, .mpeg, .vob, .mxf, .mp3, .wma, .wav, .flac, .aac, .m4a, .ac3',
      status: 415,
      docs: 'https://docs.joinpeertube.org/api-rest-reference.html#operation/uploadLegacy'
    },
    pipe: [Function (anonymous)],
    [Symbol(shapeMode)]: false,
    [Symbol(kCapture)]: false
  }
}

Steps to reproduce

No response

Describe the expected behavior

No response

Additional information

  • PeerTube instance:
  • Browser name, version and platforms on which you could reproduce the bug: Firefox, Linux Ubuntu 25.04
Originally created by @matthijskooijman on GitHub (Feb 20, 2026). ### Describe the current behavior When uploading MPEG Transport Stream files, I'm seeing inconsistent behavior: 1. Uploading via the WebUI allows me to pick ".mts" files but not ".ts" files. If I override the picker and use "All files" then a .ts file is uploaded but then rejected by peertube (in the upload screen already). 2. Uploading via `peertube-cli` works with ".ts" files as expected, but with ".mts" files it failse with 415 / "Unsupported Media Type" (full response below). I noticed that the error message is a bit weird, it shows: > This file is not supported. Please, make sure it is of the following type: .webm, .ogv, .ogg, .mp4, .mkv, .mov, .qt, .mqv, .m4v, .flv, .f4v, .wmv, .avi, .3gp, .3gpp, .3g2, .3gpp2, .nut, .mts, **ts**, .m2ts, .mpv, .m2v, .m1v, .mpg, .mpe, .mpeg, .vob, .mxf, .mp3, .wma, .wav, .flac, .aac, .m4a, .ac3" So that has `ts` instead of `.ts`? I think this is caused by a typo here: https://github.com/Chocobozzz/PeerTube/blob/0234ece61c78765878d36b1eb1da9bcce82ae6e8/server/core/initializers/constants.ts#L1481 Maybe this is also the source of this inconsistency (at least could explain why the web upload rejects the file)? The full failing peertube-cli response is shown below: ``` ❯ for file in Meetkoppel\ 2024/*.mts Koppelting\ 2024/*.mts; do peertube-cli upload --video-name "$file" --file "$(pwd)/$file"; done Uploading Meetkoppel 2024/2024-01-27_10-09-56.mts video... Error: Expected status 200, got 415. The server responded: "{"type":"about:blank","title":"Unsupported Media Type","detail":"This file is not supported. Please, make sure it is of the following type: .webm, .ogv, .ogg, .mp4, .mkv, .mov, .qt, .mqv, .m4v, .flv, .f4v, .wmv, .avi, .3gp, .3gpp, .3g2, .3gpp2, .nut, .mts, ts, .m2ts, .mpv, .m2v, .m1v, .mpg, .mpe, .mpeg, .vob, .mxf, .mp3, .wma, .wav, .flac, .aac, .m4a, .ac3","status":415,"docs":"https://docs.joinpeertube.org/api-rest-reference.html#operation/uploadLegacy"}". You may take a closer look at the logs. To see how to do so, check out this page: https://github.com/Chocobozzz/PeerTube/blob/develop/support/doc/development/tests.md#debug-server-logs at buildRequest (file:///home/matthijs/.npm-packages/lib/node_modules/@peertube/peertube-cli/dist/peertube.js:76560:14) at makeUploadRequest (file:///home/matthijs/.npm-packages/lib/node_modules/@peertube/peertube-cli/dist/peertube.js:76482:9) at VideosCommand.postUploadRequest (file:///home/matthijs/.npm-packages/lib/node_modules/@peertube/peertube-cli/dist/peertube.js:76634:12) at VideosCommand.buildLegacyUpload (file:///home/matthijs/.npm-packages/lib/node_modules/@peertube/peertube-cli/dist/peertube.js:84905:28) at VideosCommand.upload (file:///home/matthijs/.npm-packages/lib/node_modules/@peertube/peertube-cli/dist/peertube.js:84892:52) at process.processTicksAndRejections (node:internal/process/task_queues:95:5) at async run (file:///home/matthijs/.npm-packages/lib/node_modules/@peertube/peertube-cli/dist/peertube.js:85850:5) at async _Command.<anonymous> (file:///home/matthijs/.npm-packages/lib/node_modules/@peertube/peertube-cli/dist/peertube.js:85824:7) ---- at file:///home/matthijs/.npm-packages/lib/node_modules/@peertube/peertube-cli/dist/peertube.js:76563:19 at file:///home/matthijs/.npm-packages/lib/node_modules/@peertube/peertube-cli/dist/peertube.js:46891:17 at Test._assertFunction (file:///home/matthijs/.npm-packages/lib/node_modules/@peertube/peertube-cli/dist/peertube.js:46878:17) at Test.assert (file:///home/matthijs/.npm-packages/lib/node_modules/@peertube/peertube-cli/dist/peertube.js:46769:27) at localAssert (file:///home/matthijs/.npm-packages/lib/node_modules/@peertube/peertube-cli/dist/peertube.js:46738:18) at file:///home/matthijs/.npm-packages/lib/node_modules/@peertube/peertube-cli/dist/peertube.js:46741:11 at Request3.callback (file:///home/matthijs/.npm-packages/lib/node_modules/@peertube/peertube-cli/dist/peertube.js:46296:7) at file:///home/matthijs/.npm-packages/lib/node_modules/@peertube/peertube-cli/dist/peertube.js:46470:22 at IncomingMessage.<anonymous> (file:///home/matthijs/.npm-packages/lib/node_modules/@peertube/peertube-cli/dist/peertube.js:45814:11) at IncomingMessage.emit (node:events:530:35) { res: <ref *1> Response2 { _events: [Object: null prototype] {}, _eventsCount: 0, _maxListeners: undefined, res: IncomingMessage { _events: [Object], _readableState: [ReadableState], _maxListeners: undefined, socket: [TLSSocket], httpVersionMajor: 1, httpVersionMinor: 1, httpVersion: '1.1', complete: true, rawHeaders: [Array], rawTrailers: [], joinDuplicateHeaders: undefined, aborted: false, upgrade: false, url: '', method: null, statusCode: 415, statusMessage: 'Unsupported Media Type', client: [TLSSocket], _consuming: false, _dumped: false, req: [ClientRequest], _eventsCount: 4, text: '{"type":"about:blank","title":"Unsupported Media Type","detail":"This file is not supported. Please, make sure it is of the following type: .webm, .ogv, .ogg, .mp4, .mkv, .mov, .qt, .mqv, .m4v, .flv, .f4v, .wmv, .avi, .3gp, .3gpp, .3g2, .3gpp2, .nut, .mts, ts, .m2ts, .mpv, .m2v, .m1v, .mpg, .mpe, .mpeg, .vob, .mxf, .mp3, .wma, .wav, .flac, .aac, .m4a, .ac3","status":415,"docs":"https://docs.joinpeertube.org/api-rest-reference.html#operation/uploadLegacy"}', [Symbol(shapeMode)]: true, [Symbol(kCapture)]: false, [Symbol(kHeaders)]: [Object], [Symbol(kHeadersCount)]: 32, [Symbol(kTrailers)]: null, [Symbol(kTrailersCount)]: 0 }, request: Test { _events: [Object: null prototype], _eventsCount: 1, _maxListeners: undefined, _enableHttp2: false, _agent: false, _formData: [FormData], method: 'POST', url: 'https://televisie.planb.coop/api/v1/videos/upload', _header: [Object], header: [Object], writable: true, _redirects: 0, _maxRedirects: 0, cookies: '', qs: {}, _query: [], qsRaw: [], _redirectList: [], _streamRequest: false, _lookup: undefined, _buffer: true, app: 'https://televisie.planb.coop', _asserts: [Array], req: [ClientRequest], protocol: 'https:', host: 'televisie.planb.coop', _endCalled: true, _callback: [Function (anonymous)], _fullfilledPromise: [Promise], res: [IncomingMessage], _resBuffered: true, response: [Circular *1], called: true, [Symbol(shapeMode)]: false, [Symbol(kCapture)]: false }, req: ClientRequest { _events: [Object: null prototype], _eventsCount: 2, _maxListeners: undefined, outputData: [], outputSize: 0, writable: true, destroyed: false, _last: true, chunkedEncoding: false, shouldKeepAlive: false, maxRequestsOnConnectionReached: false, _defaultKeepAlive: true, useChunkedEncodingByDefault: true, sendDate: false, _removedConnection: false, _removedContLen: false, _removedTE: false, strictContentLength: false, _contentLength: 769840815, _hasBody: true, _trailer: '', finished: true, _headerSent: true, _closed: false, socket: [TLSSocket], _header: 'POST /api/v1/videos/upload HTTP/1.1\r\n' + 'Host: televisie.planb.coop\r\n' + 'Accept-Encoding: gzip, deflate\r\n' + 'Authorization: Bearer 97a14cf72c4acad34c04efc3eccd8d2579b0f1d5\r\n' + 'Accept: application/json\r\n' + 'content-type: multipart/form-data; boundary=--------------------------373508552293707451136041\r\n' + 'Content-Length: 769840815\r\n' + 'Connection: close\r\n' + '\r\n', _keepAliveTimeout: 0, _onPendingData: [Function: nop], agent: [Agent], socketPath: undefined, method: 'POST', maxHeaderSize: undefined, insecureHTTPParser: undefined, joinDuplicateHeaders: undefined, path: '/api/v1/videos/upload', _ended: true, res: [IncomingMessage], aborted: false, timeoutCb: null, upgradeOrConnect: false, parser: null, maxHeadersCount: null, reusedSocket: false, host: 'televisie.planb.coop', protocol: 'https:', [Symbol(shapeMode)]: false, [Symbol(kCapture)]: false, [Symbol(kBytesWritten)]: 0, [Symbol(kNeedDrain)]: false, [Symbol(corked)]: 0, [Symbol(kOutHeaders)]: [Object: null prototype], [Symbol(errored)]: null, [Symbol(kHighWaterMark)]: 16384, [Symbol(kRejectNonStandardBodyWrites)]: false, [Symbol(kUniqueHeaders)]: null }, text: '{"type":"about:blank","title":"Unsupported Media Type","detail":"This file is not supported. Please, make sure it is of the following type: .webm, .ogv, .ogg, .mp4, .mkv, .mov, .qt, .mqv, .m4v, .flv, .f4v, .wmv, .avi, .3gp, .3gpp, .3g2, .3gpp2, .nut, .mts, ts, .m2ts, .mpv, .m2v, .m1v, .mpg, .mpe, .mpeg, .vob, .mxf, .mp3, .wma, .wav, .flac, .aac, .m4a, .ac3","status":415,"docs":"https://docs.joinpeertube.org/api-rest-reference.html#operation/uploadLegacy"}', files: undefined, buffered: true, headers: { server: 'nginx/1.29.0', date: 'Fri, 20 Feb 2026 17:19:14 GMT', 'content-type': 'application/problem+json; charset=utf-8', 'content-length': '459', connection: 'close', 'x-powered-by': 'PeerTube', 'x-frame-options': 'DENY', tk: 'N', 'access-control-allow-origin': '*', 'access-control-allow-credentials': 'true', 'access-control-expose-headers': 'Retry-After', 'x-ratelimit-limit': '50', 'x-ratelimit-remaining': '49', 'x-ratelimit-reset': '1771607962', etag: 'W/"1cb-znqtcZLnN0fXFBVv8R+NV3mS1lE"', 'strict-transport-security': 'max-age=31536000' }, header: { server: 'nginx/1.29.0', date: 'Fri, 20 Feb 2026 17:19:14 GMT', 'content-type': 'application/problem+json; charset=utf-8', 'content-length': '459', connection: 'close', 'x-powered-by': 'PeerTube', 'x-frame-options': 'DENY', tk: 'N', 'access-control-allow-origin': '*', 'access-control-allow-credentials': 'true', 'access-control-expose-headers': 'Retry-After', 'x-ratelimit-limit': '50', 'x-ratelimit-remaining': '49', 'x-ratelimit-reset': '1771607962', etag: 'W/"1cb-znqtcZLnN0fXFBVv8R+NV3mS1lE"', 'strict-transport-security': 'max-age=31536000' }, statusCode: 415, status: 415, statusType: 4, info: false, ok: false, redirect: false, clientError: true, serverError: false, error: Error: cannot POST /api/v1/videos/upload (415) at Response2.toError (file:///home/matthijs/.npm-packages/lib/node_modules/@peertube/peertube-cli/dist/peertube.js:45631:21) at ResponseBase._setStatusProperties (file:///home/matthijs/.npm-packages/lib/node_modules/@peertube/peertube-cli/dist/peertube.js:45555:54) at new Response2 (file:///home/matthijs/.npm-packages/lib/node_modules/@peertube/peertube-cli/dist/peertube.js:45593:12) at Request3._emitResponse (file:///home/matthijs/.npm-packages/lib/node_modules/@peertube/peertube-cli/dist/peertube.js:46302:24) at file:///home/matthijs/.npm-packages/lib/node_modules/@peertube/peertube-cli/dist/peertube.js:46470:42 at IncomingMessage.<anonymous> (file:///home/matthijs/.npm-packages/lib/node_modules/@peertube/peertube-cli/dist/peertube.js:45814:11) at IncomingMessage.emit (node:events:530:35) at endReadableNT (node:internal/streams/readable:1698:12) at process.processTicksAndRejections (node:internal/process/task_queues:82:21) { status: 415, text: '{"type":"about:blank","title":"Unsupported Media Type","detail":"This file is not supported. Please, make sure it is of the following type: .webm, .ogv, .ogg, .mp4, .mkv, .mov, .qt, .mqv, .m4v, .flv, .f4v, .wmv, .avi, .3gp, .3gpp, .3g2, .3gpp2, .nut, .mts, ts, .m2ts, .mpv, .m2v, .m1v, .mpg, .mpe, .mpeg, .vob, .mxf, .mp3, .wma, .wav, .flac, .aac, .m4a, .ac3","status":415,"docs":"https://docs.joinpeertube.org/api-rest-reference.html#operation/uploadLegacy"}', method: 'POST', path: '/api/v1/videos/upload' }, created: false, accepted: false, noContent: false, badRequest: false, unauthorized: false, notAcceptable: false, forbidden: false, notFound: false, unprocessableEntity: false, type: 'application/problem+json', charset: 'utf-8', links: {}, setEncoding: [Function: bound ], redirects: [], _body: { type: 'about:blank', title: 'Unsupported Media Type', detail: 'This file is not supported. Please, make sure it is of the following type: .webm, .ogv, .ogg, .mp4, .mkv, .mov, .qt, .mqv, .m4v, .flv, .f4v, .wmv, .avi, .3gp, .3gpp, .3g2, .3gpp2, .nut, .mts, ts, .m2ts, .mpv, .m2v, .m1v, .mpg, .mpe, .mpeg, .vob, .mxf, .mp3, .wma, .wav, .flac, .aac, .m4a, .ac3', status: 415, docs: 'https://docs.joinpeertube.org/api-rest-reference.html#operation/uploadLegacy' }, pipe: [Function (anonymous)], [Symbol(shapeMode)]: false, [Symbol(kCapture)]: false } } ``` ### Steps to reproduce _No response_ ### Describe the expected behavior _No response_ ### Additional information * PeerTube instance: * URL: https://televisie.planb.coop/ * Version: develop (2026-02-20-ish) * Browser name, version and platforms on which you could reproduce the bug: Firefox, Linux Ubuntu 25.04
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/PeerTube#6468
No description provided.