Video filter dim amount 1 changes nothing: check it, skip the $0.02
Dim amount 1 makes no change to a clip, yet an encode still costs $0.02. See the filter boundary table, what the free check refuses, and what to skip.

A dim op with amount 1 is valid and does nothing. The Video filter docs say amount is in (0, 1], that 0.45 makes the clip less bright, and that 1 makes no change. An encode with amount 1 would still be a $0.02 job, so a script that loops over amounts should skip 1 and avoid paying for a copy (as of 2026-10-08). The free check accepts it, since it is inside the range, and cannot tell you the output equals the input.
What the boundaries are
These come from the docs. Dim refuses 0 and anything above 1. Crop needs x and y in [0, 1], width and height in [0.05, 1], with x + width and y + height at most 1. A program is limited to 8 ops, the source to 300 seconds, a filtergraph to 2048 characters and 32 filters.
| Input | Verdict | Why |
|---|---|---|
| dim amount 0 | Refused | Range is above 0 |
| dim amount 0.01 | Valid | Inside (0, 1] |
| dim amount 1 | Valid, no change | Docs: 1 makes no change |
| dim amount 1.01 | Refused | Above 1 |
| crop width 0.04 | Refused | Below 0.05 |
| crop x 0.8, width 0.3 | Refused | x + width is 1.1 |
| Source of 301 s | Refused | Source cap is 300 s |
What to do with that
Run POST /v1/video-filter/check on every program. It is free, needs no Idempotency-Key, and creates no job. The response says valid or not, with diagnostics, a compiled filter list, an estimate and a next_action. Its encode field reads not_run, so it proves the program is accepted and nothing more about the picture.
Then drop no-ops yourself. If your tool chooses amount from a slider, treat 1 as off and skip the encode. That saves $0.02 per skipped call: across 1,000 jobs where 5 percent are no-ops, that is 50 x $0.02 = $1.00.
TikTok's page states the delivery limits for a finished ad (up to 10 minutes, 500 MB, 516 kbps), none of which a filter program can change on its own.
Where a dim fits
Dim a clip before captions go on it, or before it goes into a Timeline slot. A filter job of $0.02 on a clip under 300 seconds, plus a $0.10 render for a minute of output, is $0.12 for a darkened 60-second piece.
A guard in code
In code, the guard is a single line before the encode: if amount is 1 or more, skip. Keep the check call in front of everything else so a malformed program is caught at no cost, and log the skipped no-ops so you can see how often a slider sits at its end stop. The docs example amount is 0.45. Because the check does not render, decide a level by looking at one encoded file, as in the five-level comparison post.
Cost of a skipped no-op
The saving per skipped no-op is small, $0.02, and the real benefit is a cleaner pipeline: no extra artifact, no extra poll, no extra file to delete. Treat values near 1, such as 0.98, as real dims, because the docs only name exactly 1 as no change.
Sources
Related posts
More in Developers
- Video frames caps at 24 stills: a 15 s hook needs fps 1.6, not 2
Video frames returns at most 24 stills and fps up to 2. At 2 fps only 12 s are covered, so a 15 s hook needs fps 1.6; the Python below checks any length.
- Inspect stills at max_edge 960: 540x960 views of a 9:16 ad
Video inspect max_edge 960 returns 9:16 stills at 540x960, TikTok's non-Spark minimum, so you review the ad at the smallest size it may run. 24 stills per call.
- One env line picks the video model: $1.25 vs $5.78 per 10 s clip
Read the Sume video model id from one env var. For a 10 s 720p 9:16 clip, gemini-omni-flash-1.1 bills $1.25 and seedance-2.5 bills $5.78.
- Clip-type route table in Python: Sora use cases to Sume models
A 30-line Python route table maps ads, demos and teasers to a Sume model, size and length, refuses a length the model cannot make, and prints the dollar cost.
Written by Sume