Lolly
Apri l'app

Reserved URL parameters

Look up export settings, packed links, units, print marks and contact sheets.

Part of URL Mode.

Reserved parameters

These keys are never treated as tool inputs. They control shell-level behaviour.

ParamWhereDescription
formatweb + CLIOutput format (png, svg, pdf, …). Used by export and copy.
exportweb + CLIPresence flag - trigger an immediate download on page load.
copyweb onlyPresence flag - arm copy-to-clipboard on first interaction.
fullweb onlyPresence flag - open in fullscreen (sidebar collapsed).
optionsweb onlyPresence flag - open with the export-settings panel expanded instead of the collapsed Render button. full wins if both are set.
filenameweb onlyName for the downloaded file (no extension). Defaults to the tool ID.
slotweb onlyName of a saved state slot to pre-load. URL params override saved values. (The one-shot CLI has no saved-state store, so it ignores slot.)
templateweb onlyId of a templates[] entry in the tool's manifest to seed a fresh session from, skipping the "New from template" chooser (a launcher for a retired tool id, e.g. ?template=carousel). The entry's values are read in-process (never packed into the link); an unknown or absent id falls through to the normal fresh-open flow. The CLI has no chooser, so it ignores template.
presetweb onlyId of a preset inside the named template - a preset is a curated values overlay on its template's base values, so ?template=poster&preset=story seeds the Poster template in its Story variant. Only read alongside template; an unknown or absent id applies the template base alone. Ignored by the CLI.
outputCLI onlyFile path to write the exported file. Defaults to stdout.
_vweb + CLITool version pin (e.g. 1.0.0). Ignored if not matched - forward-compat safety. The _ prefix as a whole is a reserved namespace: any param starting with _ is skipped before input matching, and no tool input or urlKey may claim such a name - future reserved params are minted there so they can never collide with a tool's inputs.
width / wweb + CLIOutput width, as a value in unit. Also pre-fills the export dimensions panel. On a multi-artboard document, see the note below the table.
height / hweb + CLIOutput height, as a value in unit. Also pre-fills the export dimensions panel. On a multi-artboard document, see the note below the table.
unitweb + CLIPhysical unit for width/height: px (default), mm, cm, in, pt, pc.
dpiweb + CLIRaster resolution for physical units (default 300). Ignored for px and for vector formats.
passwordweb + CLIOpen password for pdf and zip - the standard tier only (the export panel's strong AES-256 tier, which also covers pdf-cmyk, is typed at export and deliberately never travels in a link). The CLI applies it wherever it can render a PDF. A basic lock, not strong encryption; it travels in clear text in the URL, so it's a light deterrent, not protection for confidential material. Ignored when bleed/marks are on (encrypted PDFs can't carry print finishing).
profileweb + CLI (press condition)Colour profile, two roles by format. For ordinary raster (png / jpg) it selects the ICC profile: srgb (the default) embeds an sRGB profile; none omits it. For the print formats (pdf-cmyk / cmyk-tiff) it is the CMYK press condition, e.g. fogra51 - named in the PDF's output intent (no profile bytes: no CMYK ICC ships with Lolly), recorded in the TIFF's provenance. profile=own instead embeds a CMYK profile loaded on the device the link is opened on, which is what a conformant PDF/X-4 Print PDF needs (see the print section for what else can withhold the claim); it resolves only when exactly one such profile is loaded, and otherwise writes no output intent and declares nothing. A digest is deliberately never in the link - which profile is embedded is the recipient's device's business, and so is the resulting file size.
bleedweb + CLI (browser tier)Bleed amount for the print formats (pdf / pdf-cmyk / cmyk-tiff), as a dimension (e.g. 3mm, 0.125in). The artwork is scaled to fill the bleed; the PDF declares TrimBox/BleedBox, the TIFF is enlarged to the full sheet.
marksweb + CLI (browser tier)Print marks for the print formats (pdf / pdf-cmyk / cmyk-tiff) - a CSV of crop, reg, bleed, bars, prov. Drawn in the page margin (PDF) or rasterised into the image margin (TIFF); registration prints on all four plates in pdf-cmyk and cmyk-tiff. prov (provenance credit text) is PDF-only.
c2paweb + CLI (both default-on)Content Credentials for the stampable formats. On by default on both surfaces - a tool opts out with render.c2pa:false, an on-device privacy utility never carries them and c2pa=off forces it off per export. c2pa=7/30/90/365 sets the ephemeral-certificate lifetime in days; c2pa=1 (or a bare --c2pa on the CLI) uses the default (30). Web: an enrolled identity's certificate window (fixed at enrolment) takes precedence and the lifetime value is ignored. CLI: ephemeral signing only; --no-provenance turns this and the imprint off together, which is how you get byte-identical output run to run. Mutually exclusive with password on PDFs.
durableweb (opt-in)Durable Content Credential for raster exports (png / jpg/jpeg / webp / avif / tiff): an opt-in neural TrustMark-format watermark carrying Lolly's own identifier, so the "made with Lolly" link survives a metadata strip (a social upload, a re-save) and any TrustMark-aware tool can recover it. Off by default - a heavy on-device neural encode that also needs a model fetched once - so pass durable=1 (or durable=on) to turn it on. A no-op if the encoder model isn't on-device (see scripts/convert-trustmark-encoder-onnx.py); raster-only for now (not the pdf/pptx container rasters). Complements - does not replace - the default imprint and the c2pa credential. Recognised on-device on the /verify page as a "Lolly durable mark" pip. See plans/28-durable-content-credentials.md.
imprintweb + CLI (both default-on)Lolly pixel watermark for raster exports (png / jpg/jpeg / webp / avif / tiff - the RGB TIFF, not Print/CMYK TIFF), plus Lolly-rendered raster content embedded inside a pdf, pdf-cmyk or pptx export - a composed tool render, a gradient/filter fallback or an SVG illustration that gets walked to pixels still carries the mark even though the container itself isn't a raster format (a zip bundle carries it through to whichever of its members qualify). It never marks a user's own uploaded image - only art Lolly itself rasterised. On by default, like c2pa - embedded unless explicitly disabled; imprint=0 (or imprint=off) turns it off (as does the CLI's --no-provenance). imprint=1 (or a bare ?imprint) is still accepted for existing links (redundant with the default). The CLI defaults it on too, and the browser-free resvg PNG path now embeds the mark itself rather than escalating to the browser tier; a render below the watermark's detection floor is reported and written unmarked. Unlike c2pa - which lives in a metadata container and dies to any re-save or strip - the imprint survives metadata stripping, recompression (down to ~JPEG q50) and an 8-pixel-aligned crop, so it's a durable complement to the credential. TIFF (lossless) round-trips the mark exactly; AVIF's AV1 encode applies the mark pre-encode but its survival through that encode is not yet calibrated/verified. It does not survive an arbitrary resize, and it is security-through-obscurity (the detector key is public), so it's an integrity hint, not a hardened claim. Detected on-device on the /verify page - for pdf/pdf-cmyk/pptx files, detection scans the embedded Lolly-rendered rasters, not the page/slide as a whole.
metaweb + CLI (default-on)Generator-metadata toggle. A generated export normally records its source in the format's own generator field - EPS %%Creator, DXF 999 comment, EXR/Radiance software/SOFTWARE=, PDF Producer - plain ASCII Lolly lolly.tools, no scheme or punctuation a vintage reader could choke on. On by default, like imprint/c2pa; pass meta=off (or meta=0) to strip that source field for a metadata-free export. This is a generated artifact's generator field only - a user's own file goes through the on-device transform path (Strip Hidden Data), which never adds metadata. Distinct from c2pa (the signed credential) and imprint (the pixel watermark): meta=off drops only the plain generator text, not the credential.
hdrweb + CLI/MCPHDR raster export (png / jpg/jpeg / avif / tiff): re-encode the pixels to Rec.2100 PQ - BT.2020 primaries, SMPTE ST 2084 transfer - so brand colours and white text reach peak brightness on an HDR display, and tag the container so a colour-managed viewer reads them that way (an ICC v4 profile carrying a cicp tag for jpg/tiff, a cICP chunk for png, a rewritten colr box for avif). Off by default - it changes the pixels rather than labelling them - so pass hdr=1 (or hdr=on/hdr=pq) to turn it on. A tuned form carries the export panel's four author dials in the same value: hdr=<peakNits>-<reach>-<lift>-<focus>, e.g. hdr=1600-60-0-50 (White 1600 nits, Reach 60, Dark lift 0, Focus 50); hdr=1 means the defaults (1000-45-0-40). The boost is gated on OKLab lightness and hue-preserving, so darks stay dark and a brand green doesn't drift minty. webp is deliberately excluded (8-bit, no working HDR decode path - a PQ WebP just looks dark), as are the vector formats and PDF. Note that many platforms re-encode uploads and strip the HDR signal, which can leave the image looking dark - see Exporting → HDR. On the CLI and MCP it is also what makes the float formats possible: --export=exr and --export=hdr REQUIRE --hdr=1, because the terminal render path rasterises to 8-bit sRGB and the view transform is the only thing that generates genuine above-1.0 range (without it, and when a render has nothing to lift, the export refuses rather than padding 8 bits into float).
depthweb, CLIRequested bit depth for the export: 8, 16, float or auto (the default). Bits per channel for 8/16; float means floating-point samples, the depth the film and VFX formats speak. It is a request, not a promise: depth follows provenance, so a consumer writes deep bits only where the pipeline actually produced them - a 16-bit file made from an 8-bit canvas render is padding, and Lolly would rather hand you the honest 8-bit file than a bigger one that carries no more picture. auto asks for the deepest the chain supports, which is how deep output becomes the default as more of the pipeline earns it (the same rule gamut follows - see Colour spaces). Formats that are inherently deep (OpenEXR, Radiance .hdr) ignore the param except for one choice - on the CLI, depth=float writes an EXR with 32-bit float samples instead of the default 16-bit half - and an HDR PNG is written at 16 bits regardless because 8-bit PQ bands (depth=8 there falls back to the legacy encode). What the CLI does not do is honour depth=16 on png/tiff: the terminal render path rasterises to 8-bit sRGB, so those bits would be padding, and the request is ignored silently rather than obeyed. Junk (depth=32, depth=deep, an empty value) reads as auto rather than failing the export. See HDR export.
cutsweb export panel; CLI refuses cuts>1Contact sheet for a still export (png / jpg / webp / svg / pdf) of a timed composition - a Sequence timeline, or any tool whose stage carries data-sequence. An integer, default 1. cuts=1 renders the frame at the playhead (what you see is what you get) and is identical to leaving the param off. The web shell takes the count from the export panel's Frames field, not from the link; the CLI reads the param and exits 3 on cuts>1, writing nothing, rather than quietly handing back one frame. cuts=N for N > 1 samples N stills at equal intervals across the sequence and hands them back together: raster and SVG as N zipped files (<filename>-01.png, -02.png, …), pdf as one document of N pages. Sampling is midpoint, not endpoint - t_i = duration x (i + 0.5) / N - because at t = 0 an enter transition is still at alpha 0 (a blank card) and at t = duration every clip has ended, so endpoint sampling would waste the first and last frame of a sheet on blanks. Clamped to 1-64; junk (non-numeric, 0, negative, Infinity) falls back to 1 rather than failing the export. Ignored for non-still formats (video/animation already have every frame) and for stages with no sequence.
fpsweb + CLI/MCPFrame rate for the motion formats (mp4 / webm / gif / apng / webp-anim): an integer 1..120, the URL form of the export panel's Frame rate select (24, 25, 30, 50, 60 there; any integer here). Absent or junk leaves each format's own default (30 for the video containers). On the CLI, --fps=60 is this param forwarded to the browser tier.
secondsweb + CLI/MCPClip length in seconds (0.5..3600) for the motion formats - the panel's Duration field. A length given here is a deliberate one: the export carries it as durationUserSet, so a tool whose hook would otherwise stretch the clip to its material (the Audiogram runs to the end of its audio; a Sequence to its timeline) renders exactly this long instead. Named seconds because duration is an input id in several tools (3d, flythrough, spatial-photo) and a reserved name must collide with none.
waitweb + CLI/MCPSettle time in seconds (0..30) before the first frame is captured - the panel's Start after field. For a tool whose first frames are a fade-in or a data fetch.
codecweb + CLI/MCPVideo codec for mp4 / webm: h264, hevc, vp9 or av1 (aliases avc, h265, vp09, av01 read the same). The panel's Codec select; absent means Auto, the best the encoder offers, which on many machines is AV1 - so pin codec=h264 when the file has to play in every browser's <video> or on an older phone.
vqweb + CLI/MCPVideo quality stop: smaller, balanced (the default) or best - the panel's Quality select, which drives the bitrate ladder. Named vq because quality is an input id (convert-image).
langweb + CLIUI/content language as a canonical short code: en (default), es, de, fr, zh (Simplified), zh-hant (Traditional), ja, ko, vi, pt, it, nl, sv, no, pl, cs, ro, tr, uk, bg, ms, id, tl, hi, bn, ur and ar (the LANGS set in engine/src/lang.ts is the source of truth). Arabic and Urdu render right-to-left (the whole UI mirrors). Informal aliases (cn, jp and in for id) are accepted and normalized on parse. Applies for that session only - it does not overwrite the recipient's saved language preference. Unset/unrecognized falls back to the profile, then localStorage, then the browser's language, then English.
designvweb + CLIThe design-system version this render resolves against: a published version's slug, or latest for the edit head. Highest rung of the resolution ladder - it beats a tool's designVersion manifest pin and the active version, and it falls through to the next rung when it points at nothing this device has, so a link never fails to draw. A testing lever for authors ("check against latest, fix, then publish"); it is never written into a generated share link, because a version belongs to the design system it was published in, not to whoever opens the link. On a device that has never published a version, every value resolves to the edit head - the behaviour before versions existed. One difference between the two shells today: the CLI reads the pin out of the tool's manifest as the rung below this param, while the web shell resolves this param and the active version only, so a manifest pin does not change what a browser draws yet.
dsweb + CLIThe design system this render resolves against: the id of one of the design systems held on the device (default, shipped, or a slug like acme-2026). A value that fails the id grammar reads as absent, and an id for a system the device does not hold falls through to the active one with a warning, so a link never fails to draw. Like designv, it is never written into a generated share link: a design system belongs to whoever holds it, and a link must not pin its recipient to one that isn't theirs. Pair it with designv to name a published version of that system.
nostageweb onlyPresence flag - for the html export only, drop the fixed-size canvas frame ("stage") so the saved page fills the whole window: the tool's content becomes the document body, with no centred card or grey backdrop. Mirrors the Full page toggle in the export panel.
presentweb onlyPresence flag - open a frame document (Design) as a fullscreen, click-advanced deck. The document's frames become slides in presentation order (order, tie-break x); a non-frame timed document instead mounts normally and starts its sequence transport. The CLI documents it as a no-op (there is no fullscreen to present into).
sweb + CLIThe state address of a deck. s=2 is the 1-based position in presentation order; anything else (s=slide1, a ULID) is a frame id; an .N suffix (s=2.3) picks a build step. With present it deep-links that slide (and that build step); without present the editor centres that frame on mount. It is also a still-export filter: ?s=2&format=png renders just that one slide, so every slide of a deck has its own image link, and lolly design --s=2 --export=png means the same thing (both shells resolve the address with the same engine code). Build steps are presenter-only - a still export always shows every build. Formats that carry the whole deck by construction (pdf, zip, pptx, html) and the motion formats (where time selects the frame, not s) are rendered whole; the CLI says so rather than obeying a filter it cannot apply. An address that matches no slide never falls back to slide 1: the web shell exports the whole deck and announces the mismatch, the CLI exits 2 and writes nothing.
kioskweb only (present mode)Presence flag - the presenter wraps at the ends and a timed document's transport loops, so ?present&kiosk is digital signage (pair with per-frame dur for dwell). This flag was named loop until 2026-08-28; it was renamed and reserved because loop is a real input id in several tools (3D, Flythrough, …) and could never be reserved without stripping their value. Old ?present&loop links no longer loop - re-mint them with kiosk.
zweb + CLIA packed whole-state token - the entire readable query, compressed (raw DEFLATE) and base64url-encoded, for complex tools whose readable link would blow past practical URL limits. See Packed links below.
zxweb onlyAn encrypted whole-state token - the packed state AES-256-GCM-encrypted under a password-derived key (PBKDF2). Opening the link prompts for the password in the browser (no server); the password itself is never in the link. See Encrypted links below.
emojiweb + CLI (--emoji=)The emoji set this render draws its emoji from, as <id>@<version> - emoji=community/emoji/twemoji/color-starter@17.0.3, or the short emoji=twemoji/color-starter@17.0.3 when those last two segments name one set the device holds. Every emoji in the text is then drawn from that set's pinned vector artwork rather than whatever emoji font the machine happens to have, so the same link draws the same picture everywhere. A glyph the set does not carry, or a set this device does not hold, draws a neutral placeholder rather than falling back to a system glyph (a device that holds no sets at all has nothing to choose, so it leaves the characters as the tool wrote them). The convenience form resolves its checksum from the local listing; generated links also carry the exact emojistyle snapshot. Unlike ds and designv, this is written into a share link: the emoji a document draws belong to the document.
emojifxweb + CLI (--emojifx=)The brand treatment applied to that artwork: original (the upstream colours), influence:<bps> (pull every colour toward its nearest brand colour, 1 to 9999 basis points), snap (take the nearest brand colour outright), mono (one brand colour's hue over each colour's own lightness) or duotone (ramp between a dark and a light brand colour). Skin tones, flags and custom brand symbols keep their own colours unless you add the ,unprotected suffix (emojifx=snap,unprotected). Without emojistyle, the palette comes from the brand in force when the link opens. Generated links pin the original palette in their style snapshot. A treatment named with no emoji set is reported rather than guessed at, since there is no artwork to treat.
emojistyleweb + CLI (--emojistyle=)Exact EmojiStyleV1 JSON snapshot, including manifest checksums, ordered fallback sets, palette and protection. Generated links preserve it. It takes precedence over emoji and emojifx; malformed or oversized snapshots are reported. Pack bytes travel in portable .lolly documents, not URLs.
licenceweb + CLI (--licence=)The licence you declare for your own export, as one of CC0-1.0, CC-PDM-1.0, CC-BY-4.0, CC-BY-SA-4.0, CC-BY-NC-4.0, CC-BY-NC-SA-4.0, CC-BY-ND-4.0 or CC-BY-NC-ND-4.0. Its name and deed link are written into the file's licence metadata (EXIF, XMP, RIFF and the Content Credential's rights field, where the format carries one). Absent, or any other value, means no declaration: all rights reserved. A tool with its own licence input (Claim) keeps that input's value. It travels in a share link, because a licence belongs to the document.

The reserved z (and zx) above is a top-level param only - the whole-state packed/encrypted token. A box's own z depth field and a keyframe track's z channel token live inside the boxes block's per-box sub-fields, a separate namespace decoded positionally, so there is no collision between the two.

Dimensions on a multi-artboard document (a Design doc with more than one artboard): the artboards are the size truth, and width/height describe the active artboard - the selected one for still formats, the one under the playhead for animated ones. In the app the export panel mirrors that artboard live, and editing the fields resizes it. At export time each format resolves the boards its own way: still images fan out to one file per artboard at that board's own size (zipped when there is more than one, and ?s= narrows to one board), PDF and PPTX carry every board as a page at its native size, and the animated formats composite every scene into a width×height output frame, letterboxing a board whose aspect differs. So on a framed document w/h never scales the whole set - it is the size of one board, and the video frame.

export, copy, full, options, nostage, present and kiosk are presence flags - the parameter value is ignored; what matters is whether the key appears in the URL.

lang is the one reserved param that changes the interface rather than the file. Adding ?lang=ja to any tool link hands the recipient the whole sidebar in Japanese for that session, without touching their saved preference.

The Colour Palette controls with every label, hint and dropdown option in Japanese, from one lang paramsigned by Lollyvector SVGVerifica tu stessoScarica il file firmato29 paths~1.4k nodes61 groups2 images29 KBThe Colour Palette controls with every label, hint and dropdown option in Japanese, from one lang paramsigned by Lollyvector SVGVerifica tu stessoScarica il file firmato29 paths~1.4k nodes61 groups2 images29 KB

Building share links in the UI. In the web shell you don't have to hand-write these. The Share button (in the export panel) opens a dialog with the ready-to-copy link plus a toggle for each on-visit flag - _open fullscreen_ (full), _open with the export panel expanded_ (options), _download automatically_ (export), _copy to clipboard_ (copy) and _pin tool version_ (_v). The copy toggle appears only for clipboard-friendly formats (bitmap/text/html) and is hidden for SVG, PDF and video. Ticking a box rewrites the link in place. The same dialog is reachable from Projects → Share link on any saved session (it reconstructs the tool URL from the saved inputs).

Readable URLs are first-class - a simple ?color=30BA78&theme=dark link can be hand-edited. But a complex tool (e.g. Design, with dozens of boxes each carrying coordinates, colours and text) serialises to thousands of characters, past the ~2000-char ceiling that pasted links, social crawlers, QR codes and some servers still enforce.

For those, the app compresses the entire readable query into one z param:

/t/design?background=…&boxes=…&format=png   ← readable (e.g. 2729 chars)
/t/design?z=1eJyFkc…                         ← packed   (e.g. 1059 chars)

A password-gated variant of a packed link: share a link that only opens for someone who knows the password - with no server and no account.

The state is DEFLATE'd then AES-256-GCM-encrypted under a key derived from a password (PBKDF2-SHA256), and carried in a zx param. Opening the link prompts for the password, derives the key and decrypts entirely in the recipient's browser, then rebuilds the tool content. Wrong password → it asks again; cancel → the tool loads at its defaults.

Physical units (unit= + dpi=)

width/height are plain numbers; unit says what they mean. With a physical unit the output is rendered at the correct physical size for the format, not just a pixel count:

px is the default and behaves exactly as before (the CSS 96-DPI convention). The canvas takes the physical shape straight away, so ?w=210&h=297&unit=mm&format=pdf shows you a portrait A4 before you export anything.

The Wordmark canvas standing as a portrait A4 page, its shape set by the width, height and unit params before anything is exportedsigned by Lollyvector SVGVerifica tu stessoScarica il file firmato1 path141 nodes4 groups5 KBThe Wordmark canvas standing as a portrait A4 page, its shape set by the width, height and unit params before anything is exportedsigned by Lollyvector SVGVerifica tu stessoScarica il file firmato1 path141 nodes4 groups5 KB

lolly quotes --quote="Print me." --width=210 --height=297 --unit=mm --export=svg --output=a4.svg

For print-ready output, bleed= and marks= add the prep a print shop expects to the pdf (RGB), pdf-cmyk (Print PDF) and cmyk-tiff (Print TIFF) formats. They're ignored for every other format. The two CMYK formats apply the same engine geometry - the PDF as vectors with declared page boxes, the TIFF rasterised onto an enlarged sheet.

The Print marks and bleed card opened by a bleed and marks link, with each mark toggle already setsigned by Lollyvector SVGVerifica tu stessoScarica il file firmato16 paths~5.7k nodes25 groups6 images67 KBThe Print marks and bleed card opened by a bleed and marks link, with each mark toggle already setsigned by Lollyvector SVGVerifica tu stessoScarica il file firmato16 paths~5.9k nodes25 groups6 images118 KB

The CMYK press condition (profile=, e.g. fogra51) is carried for both CMYK formats: the Print PDF declares it in the document's output intent; the Print TIFF records it as provenance in ImageDescription (the pixels stay untagged DeviceCMYK - no embedded profile, so the file is never mislabelled).

A named condition tells a RIP what the DeviceCMYK values mean, but PDF/X-4 also wants the profile itself inside the file, and no CMYK ICC ships with Lolly. So a named condition writes the output intent and not the GTS_PDFXVersion conformance claim. Load a CMYK profile of your own (Colour Lab, or the export panel's Colour profile control) and pick its Embed row - profile=own in a link - and the profile is embedded as the DestOutputProfile, at which point the file can claim PDF/X-4 - and does, unless something else in the export makes the claim untrue: RGB artwork the CMYK pass couldn't convert, marks=prov (its credit text is set in a standard font that isn't embedded, which X-4 doesn't excuse) or a strong password (X-4 forbids encryption). The output intent is written either way. The intent then declares the registered condition only where the profile itself proves one (its own targ characterization data, or a fetch Lolly made from the ICC registry); otherwise it declares Custom under the profile's own name, which is the honest reading of an unpaired profile.

?format=cmyk-tiff&bleed=3mm&marks=crop,reg,bleed,bars&profile=fogra51&export

Marks/bleed and the PDF open-password are mutually exclusive: print finishing is applied via pdf-lib, which can't write encrypted PDFs, so a password is ignored when marks/bleed are on. (cmyk-tiff has no password concept.)


Contact sheets (cuts=)

A still export of a timed composition renders the frame at the playhead. That's the contract: what you see on the stage is what goes into the file. A contact sheet asks for more than that frame - N stills sampled at equal intervals across the sequence, for a storyboard, a thumbnail sheet or a social carousel.

Set this in the export panel, not the link. The Frames field in the export panel is what produces a contact sheet today - see Exporting. cuts is reserved, parsed and clamped by the engine, but the web shell takes the count from that field rather than from the URL, so a link carrying ?cuts=6 renders the single playhead frame and a Share link never carries the value. The CLI does read it, and answers plainly: --cuts=6 (or a pasted link carrying it) exits 3 and writes nothing, because the sequence renderer lives in the web shell and a single frame under the filename you asked for would be a different artefact. The rest of this section describes the behaviour the Frames field drives.

With N > 1 and PDF chosen you get one N-page PDF, one page per sample, in time order; with png/jpg/webp/svg you get a zip of N files (-01 … -0N) instead, because PDF is the only still format that can hold several frames in one file. 1 is the single playhead frame.

Samples land at the midpoint of each slice - t_i = duration x (i + 0.5) / N, so a 6-cut render of a 12-second sequence samples at 1s, 3s, 5s, 7s, 9s and 11s. Sampling the endpoints instead (0s and 12s) would hand you two blank cards: at t = 0 an enter transition hasn't faded in yet, and at t = duration every clip has already ended.

Values are clamped to 1-64 (a contact sheet is for a human to look at; 64 is already an 8x8 wall), and anything unparseable falls back to 1 rather than failing the export. Non-still formats ignore cuts entirely - a video already contains every frame.


Back to URL Mode.