Compute
Prepare documents, audio and video
Check MIME type, codec, duration, page count and language against the workflow's declared bounds before you upload. Keep your original master and its timebase intact.
Before you start
You need the workflow descriptor, because the bounds that matter are declared per workflow and repeated on your quote. You also need the original files, not a copy someone already converted.
Inspect locally first. Nothing here uploads anything:
lithi inspect
lithi media inspect
lithi transcript plan
Check the file, not the file name
An extension is a claim, not evidence. Read the actual MIME type from the bytes, and reject any file whose real type disagrees with its name.
Then check what the workflow declares bounds for. That normally means the container and codec, a recording's duration, a document's page count, the number of images, and the languages present.
Check them before the upload rather than after. A file that fails a declared bound is refused at validation, and a refusal after a large transfer costs you the transfer. For the ceilings that bind a submission, see what a workflow declares.
Declare the language, and split mixed content
Say which language the content is in. A workflow may accept a bounded set of languages, and a file outside that set is refused rather than attempted.
If one recording moves between languages, that is usually two items. Split it at the boundary and declare each part, rather than sending one file and hoping the majority language wins.
Keep the master, and keep the timebase
Never overwrite your original with a converted copy. Your original is what lets you re-check a disputed result later, and its digest is what provenance.json binds the run to.
Timebases matter just as much. Returned timestamps are expressed against the media you sent. A re-encode that changes the frame rate, the sample rate or the start offset moves them all. Every timestamp you get back then points at the wrong moment in your master.
If you must convert, write down the mapping between old and new. One recorded offset turns a returned timestamp back into a position in your original.
What conversion is safe
Repackaging into a supported container without re-encoding keeps the streams and the timebase intact. That is the safe end of the range.
Re-encoding is different. It changes the bytes, so re-inspect and re-snapshot afterwards, and treat the converted file as the input of record from then on.
What is never safe is trimming, cropping or downsampling evidence the workflow has to read. Required evidence is never truncated to make something fit. When one item does not fit, four honest options remain: a registered deterministic sectioning strategy, a declared preprocessing stage, an approved larger profile, or a typed refusal.
What success looks like
Local inspection reports a type, a codec, a duration or page count and a language that all match what the descriptor accepts.
Your quote then repeats the bounds and the maximum charge for that workflow. Read them before you approve, because approval is a separate act and nothing runs until you take it.
If the format is not supported
An unsupported format falls under the rejected_unsupported profile. It is refused with a safe reason and a concrete next action, rather than converted for you on a guess.
Take the named action first: repackage, split, or choose the workflow that accepts the format you actually hold. If the refusal is not clear enough to act on, work from what to do when an input is rejected.