What 1.10.0 announced for 2.0 (contract --json's deprecated list): four changes made, one
withdrawn (result_v2, below). No new feature; tool count still 42. docs/contract.md "What 2.0 changed" is the migration table, and
contract --json now lists the same under removed, with the version that deprecated each.
Removed
--crfon every re-encoding tool that has--quality(deprecated in 1.10.0): it was an alias
of--quality, and argparse now refuses it.--quality's default is what--crf's was (18;
proxy.py30).export.pykeeps its own--crf-- its preset chooses the encoder, so it is not
an alias. Arender.pyproject'sexport.crfstill reachesexport.py --crf.jsonandprogressfrom every MCPinputSchema(deprecated in 1.10.0): they are transport
flags the server sets itself, asFFMPEG_SKILL_MCP_LEAN=1showed since 1.10.0; that variable
no longer does anything. A client that still sends them is not refused. The frozen MCP snapshot
is regenerated.- The
result_v2preview key andFFMPEG_SKILL_RESULT_V2(1.10.0 deprecated the flat keys in its
favour). It was withdrawn rather than promoted: it put a key inmetricsordetailsby its
value (a number in one, the same key holdingnullin the other), so a caller could not know
where to look without the value. The flat top-level keys, typed per tool inoutput_schema, are
the 2.0 shape -- unchanged from 1.x.
Changed
- An existing output is refused without
--overwrite(1.x warned; deprecated in 1.10.0):
kind: input, before any ffmpeg runs, dry runs included, with a hint naming the flag.
FFMPEG_SKILL_NO_OVERWRITEno longer does anything. probe'shdris true only for a PQ / HLG transfer or Dolby Vision (deprecated in 1.10.0),
equal tohdr_signal, which stays. The newbt2020_or_hdrcarries the 1.x meaning (BT.2020
primaries count), and every editing tool routes on it, so a BT.2020 SDR source still re-encodes
as HEVC Main10 with its own tags: tool behaviour is unchanged.hdr_formatstill names
BT.2020 SDR.docs/contract.md: "Stability guarantee (2.x)"; the deprecation policy records that 2.0.0
waived the 90-day half of its window (the deprecations date from 1.10.0, 2026-09-13; sixteen
minor releases carried them), andtests/test_contract.pyrequires such a waiver to be stated
there.ctxonrun()/emit()/die()stays optional (docs/design-decisions.md says why).render.pyrefuses an existing project output before its first stage runs, not at the final
copy after every stage had.demos/build.pyclears a demo's own outputs before rebuilding it, since a tool now refuses to
replace them.
Also in this release
- Fix:
docs/contract.md's historical versions no longer move with every release. The auto-bump inrelease.ymlreplaced every occurrence of the outgoing version in that file, so each "Since" in "What 2.0 changes" (all 1.10.0), "Per-tool keys added in 1.17.1 / 1.18.0",broken_inside_word(1.18.4), "every version before 1.18.3",examples[](1.21.0) andsupports_json_brief(1.11.0) had been rewritten to 1.26.0. They are restored from git history, and the bump now lives in.github/scripts/bump_contract_md.py, which moves only theskill.versionrow and the example'sversion, each required exactly once. - Tests: the 2.0 table's Since column is pinned to
_contract.DEPRECATED, and a package.json major bump fails before the policy's window has passed (two further minors and 90 days after 1.10.0: 2026-12-12) or while a deprecated entry is still listed.
What's Changed
- chore(deps): Bump actions/cache from 4 to 6 by @dependabot[bot] in #266
- ci(release): bump only contract.md's current version; restore its history and gate 2.0 by @kajisho5 in #282
- feat!: 2.0.0 — the changes announced in 1.10.0 by @kajisho5 in #283
Full Changelog: v1.26.0...v2.0.0