Skip to content

Renditions and formats

After an upload, the service makes derived copies (renditions) of the files it knows how to read. This page lists them by kind, with the metadata it reads and how the preview call shows each kind. Any type can be stored and downloaded whatever this page says, unless the application’s allowed_types narrows it.

Source Rendition What it is Status
JPEG, PNG, WebP, GIF, TIFF, AVIF, HEIC, HEIF thumbnail WebP that fits in 256 × 256, never upscaled Available
preview WebP that fits in 1280 × 1280 Available
large WebP that fits in 2048 × 2048 Available
Video poster A JPEG frame from the start of the video Available
thumbnail WebP that fits in 256 × 256, made from the poster Available
mp4_720p H.264 MP4 (AAC stereo sound) that every browser plays: the short side 720 pixels, or the source’s size when smaller Available
mp4_1080p The same with the short side 1080 pixels, only for sources larger than 720p Available
hls Adaptive streaming Coming
PDF thumbnail, preview The first page as WebP, fitting in 256 × 256 and 1280 × 1280 Available
Word, Excel, PowerPoint, OpenDocument, RTF none No Office preview: download to open —
Text, JSON, XML, Markdown, CSV none Previewed from the original —
Everything else none Download to open —
  • Renditions have the orientation applied and carry no camera metadata.
  • Files larger than 2 GiB get no renditions. Videos longer than 10 minutes get no MP4 renditions and play from the original.
  • Each rendition has a status (pending, ready, failed, skipped), mime_type, size, width and height, duration_ms for the MP4 renditions, and an error that says why it was skipped or failed (source_smaller, duration_exceeds_limit, size_exceeds_limit, duration_unknown for the MP4 renditions). A rendition that is not ready answers rendition_not_available when you ask for its URL. See Previews and renditions.
  • Renditions do not count against the quota.
  • The application can switch renditions off (renditions_enabled). POST P/files/:file_id/renditions makes them again, for example after switching back on; GET P/files/:file_id/renditions lists them.

Read into the file’s media object, never including a location:

Kind Fields
Image width, height (as displayed, orientation applied), orientation, format, has_alpha; from the camera data captured_at (the camera’s local time, with its offset when the camera wrote one) and camera (make and model)
Video duration_ms, width, height, codec, rotation
Audio duration_ms, codec
PDF pages, and title and author when the document has them
kind The preview shows
image The preview rendition; the original while it is being made, for the formats browsers display (JPEG, PNG, GIF, WebP, AVIF, BMP); otherwise nothing until the rendition exists. SVG is not previewed
video mp4_720p, then mp4_1080p when ready; the original until then (record H.264 MP4 so it plays everywhere meanwhile)
audio The original
pdf The original in the browser’s viewer; the first page as thumbnail and preview
text The original as UTF-8 text, cut after 1 MiB
document, spreadsheet, presentation Nothing (kind: none): offer a download
archive, other Nothing: offer a download

kind comes from the type detected in the bytes:

kind Types
image image/* (JPEG, PNG, GIF, WebP, HEIC, HEIF, AVIF, TIFF, BMP, SVG)
video video/* (MP4, QuickTime, WebM, Matroska, AVI, 3GP)
audio audio/* (MP3, M4A, AAC, WAV, Ogg, FLAC)
pdf application/pdf
document Word (doc, docx), OpenDocument text, RTF
spreadsheet Excel (xls, xlsx), OpenDocument spreadsheets, CSV
presentation PowerPoint (ppt, pptx), OpenDocument presentations
text text/*, JSON, XML
archive ZIP, gzip, tar, 7z, RAR, bzip2
other Everything else

The file’s extension follows the detected type, not the uploaded name.

For content search (in=content), the text of these types is extracted, up to 2 MiB per version:

Types processing.text
PDF; Word, PowerPoint, Excel (docx, pptx, xlsx); OpenDocument (odt, odp, ods); text, CSV, Markdown, JSON, YAML; HTML, XHTML, XML done
Images (no OCR), legacy doc, xls, ppt, RTF, everything else skipped

The extracted text is never handed to clients: search answers highlights of at most 200 characters only.