PageSourceSearch

https://opensource.contentauthenticity.org/assets/js/e10065f5.0975e175.js

js contentauthenticity.org collected 2026-09-24 08:25:20 UTC 9,886 bytes, 1 lines download raw bytes

1"use strict";(globalThis.webpackChunkopensource_contentauth_org=globalThis.webpackChunkopensource_contentauth_org||[]).push([[3645],{2e3:(e,s,d)=>{d.r(s),d.d(s,{assets:()=>l,contentTitle:()=>c,default:()=>x,frontMatter:()=>n,metadata:()=>t,toc:()=>h});const t=JSON.parse('{"id":"sdk-repos/c2pa-js/supported-formats","title":"Supported file formats","description":"The following table summarizes the supported media (asset) file formats. This information is based on what the Rust library supports; other libraries in the SDK support the same formats unless noted otherwise.","source":"@site/docs/sdk-repos/c2pa-js/supported-formats.md","sourceDirName":"sdk-repos/c2pa-js","slug":"/sdk-repos/c2pa-js/supported-formats","permalink":"/docs/sdk-repos/c2pa-js/supported-formats","draft":false,"unlisted":false,"editUrl":"https://github.com/contentauth/c2pa-rs/edit/main/docs/supported-formats.md","tags":[],"version":"current","frontMatter":{},"sidebar":"docs","previous":{"title":"c2pa-utilities","permalink":"/docs/sdk-repos/c2pa-js/packages/c2pa-utilities/"},"next":{"title":"CAI Node.js library","permalink":"/docs/sdk-repos/c2pa-js/packages/c2pa-node/"}}');var r=d(4848),i=d(8453);const n={},c="Supported file formats",l={},h=[{value:"Experimental feature: Text formats",id:"experimental-feature-text-formats",level:2}];function o(e){const s={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.header,{children:(0,r.jsx)(s.h1,{id:"supported-file-formats",children:"Supported file formats"})}),"\n",(0,r.jsx)(s.p,{children:"The following table summarizes the supported media (asset) file formats. This information is based on what the Rust library supports; other libraries in the SDK support the same formats unless noted otherwise."}),"\n",(0,r.jsx)(s.admonition,{type:"note",children:(0,r.jsxs)(s.p,{children:['When reading an asset, the SDK first looks at the file name extension to determine the asset type.  If the file has no extension, then the SDK uses the MIME type specified in the API call (if any).\nWhen the internal header/MIME disagrees with the extension, the SDK uses the extension, not the internal MIME/metadata.\nIf there is no file extension nor MIME type, then the SDK "sniffs the bytes" of the asset using ',(0,r.jsx)(s.a,{href:"https://docs.rs/infer/latest/infer/",children:(0,r.jsx)(s.code,{children:"infer"})})," to determine the asset type."]})}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.code,{children:"txt"})," requires the non-default ",(0,r.jsx)(s.code,{children:"unstable_plain_text"})," feature."]}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Extensions"}),(0,r.jsx)(s.th,{children:"MIME type"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"avi"})}),(0,r.jsxs)(s.td,{children:[(0,r.jsx)(s.code,{children:"video/msvideo"}),", ",(0,r.jsx)(s.code,{children:"video/x-msvideo"}),", ",(0,r.jsx)(s.code,{children:"video/avi"}),", ",(0,r.jsx)(s.code,{children:"application/x-troff-msvideo"})]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"avif"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"image/avif"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"c2pa"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"application/x-c2pa-manifest-store"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"dng"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"image/x-adobe-dng"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"flac"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"audio/flac"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"gif"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"image/gif"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"heic"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"image/heic"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"heif"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"image/heif"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsxs)(s.td,{children:[(0,r.jsx)(s.code,{children:"jpg"}),", ",(0,r.jsx)(s.code,{children:"jpeg"})]}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"image/jpeg"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"jxl"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"image/jxl"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"m4a"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"audio/mp4"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"mp3"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"audio/mpeg"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"mp4"})}),(0,r.jsxs)(s.td,{children:[(0,r.jsx)(s.code,{children:"video/mp4"}),", ",(0,r.jsx)(s.code,{children:"application/mp4"})," ",(0,r.jsx)("br",{}),"Fragmented MP4 (DASH) supported only for file-based operations from the Rust library."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"mov"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"video/quicktime"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"pdf"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"application/pdf"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"png"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"image/png"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"svg"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"image/svg+xml"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsxs)(s.td,{children:[(0,r.jsx)(s.code,{children:"tif"}),", ",(0,r.jsx)(s.code,{children:"tiff"})]}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"image/tiff"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"txt"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"text/plain"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"wav"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"audio/wav"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"webp"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"image/webp"})})]})]})]}),"\n",(0,r.jsx)(s.h2,{id:"experimental-feature-text-formats",children:"Experimental feature: Text formats"}),"\n",(0,r.jsxs)(s.p,{children:["The Rust library supports the following text formats when the ",(0,r.jsx)(s.code,{children:"unstable_structured_text"})," feature is enabled."]}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Extensions"}),(0,r.jsx)(s.th,{children:"MIME type"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"atom"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"application/atom+xml"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"css"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"text/css"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"ini"})}),(0,r.jsx)(s.td,{children:"(detected by extension)"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsxs)(s.td,{children:[(0,r.jsx)(s.code,{children:"js"}),", ",(0,r.jsx)(s.code,{children:"mjs"})]}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"text/javascript"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsxs)(s.td,{children:[(0,r.jsx)(s.code,{children:"md"}),", ",(0,r.jsx)(s.code,{children:"markdown"})]}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"text/markdown"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"py"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"text/x-python"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"rss"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"application/rss+xml"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"sql"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"application/sql"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"tex"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"application/x-tex"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"toml"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"application/toml"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"vtt"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"text/vtt"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsxs)(s.td,{children:[(0,r.jsx)(s.code,{children:"yaml"}),", ",(0,r.jsx)(s.code,{children:"yml"})]}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"application/yaml"})})]})]})]})]})}function x(e={}){const{wrapper:s}={...(0,i.R)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(o,{...e})}):o(e)}},8453:(e,s,d)=>{d.d(s,{R:()=>n,x:()=>c});var t=d(6540);const r={},i=t.createContext(r);function n(e){const s=t.useContext(i);return t.useMemo(function(){return"function"==typeof e?e(s):{...s,...e}},[s,e])}function c(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:n(e.components),t.createElement(i.Provider,{value:s},e.children)}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.