diff --git a/CHANGELOG.md b/CHANGELOG.md index 6a879aa..dea22aa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,23 @@ All notable changes to av-tools are documented here. The project follows semantic versioning once a first release is legally publishable. +## 0.3.0 — 2026-07-27 + +- Make imported media and browser-native duration/dimensions available without + loading FFmpeg, so recognized files can start playback immediately. +- Move authoritative codec, stream, chapter and tag inspection to explicit or + operation-driven demand; keep playback usable after inspection failure and + expose bounded retry controls. +- Inspect automatically when Quick Convert, preview proxies, timeline renders + or advanced tools require authoritative details, while preserving + deterministic multi-file timeline order. +- Recover Firefox probes with a fresh same-mode core, safe MT-to-ST fallback + and operation reservations that prevent concurrent mounts or preference + changes. +- Add Chromium and Firefox evidence proving the supplied 153 MB, 43-minute + lecture plays before detailed inspection and retains the same media element + afterward. + ## 0.2.1 — 2026-07-27 - Move the canonical source, manifest schema links, and package registry from diff --git a/README.md b/README.md index 8d718ed..c9f8fb5 100644 --- a/README.md +++ b/README.md @@ -8,8 +8,8 @@ telemetry, runtime CDN, remote-media fetch or third-party script. It is also a Toolbox SDK application. The same static build runs directly or under Toolbox Portal with shared shell, theme, help and app switching. -> **Release status:** 0.2.1 is licensed GPL-3.0-or-later. Its canonical -> release consists of the exact reviewed `v0.2.1` source, production +> **Release status:** 0.3.0 is licensed GPL-3.0-or-later. Its canonical +> release consists of the exact reviewed `v0.3.0` source, production > ZIP/checksum and Corresponding Source bundle published together. See > [Licensing](#licensing). @@ -23,7 +23,7 @@ Two workflows keep the product intentionally smaller than a nonlinear editor: - **Edit:** a media bin and sequential non-overlapping clip timeline with non-destructive settings, one export at a time. -The 0.2 release covers typed/capability-gated conversion and remux, +The 0.3 release covers typed/capability-gated conversion and remux, fast/accurate trim, split, compatible/normalized concatenate, reorder, crop, resize, frame-rate change, audio extraction/stream removal, waveform, peak/two-pass loudness normalization, gain, audio/video fades, metadata, diff --git a/SOURCE.md b/SOURCE.md index c597b58..7513f51 100644 --- a/SOURCE.md +++ b/SOURCE.md @@ -1,6 +1,6 @@ # Source and reproducibility record -This file identifies the source corresponding to av-tools 0.2.1. It is not a +This file identifies the source corresponding to av-tools 0.3.0. It is not a substitute for satisfying a component's licence or for delivering complete Corresponding Source with an object-code release. @@ -9,9 +9,9 @@ Corresponding Source with an object-code release. - Canonical repository: `git@git.add-ideas.de:lotobo/av-tools.git` - Browser source: `https://git.add-ideas.de/lotobo/av-tools` -- Version: `0.2.1` -- Release source identity: immutable annotated tag `v0.2.1` - (`refs/tags/v0.2.1`) in the canonical repository. +- Version: `0.3.0` +- Release source identity: immutable annotated tag `v0.3.0` + (`refs/tags/v0.3.0`) in the canonical repository. - Application licence: `GPL-3.0-or-later`; full GPL version 3 terms in `LICENSE`. - Copyright: Copyright © 2026 Albrecht Degering. @@ -22,10 +22,10 @@ the tag exists, is annotated, points to the reviewed release commit and is available without authentication: ```sh -test "$(git cat-file -t v0.2.1)" = tag -git rev-parse v0.2.1^{commit} +test "$(git cat-file -t v0.3.0)" = tag +git rev-parse v0.3.0^{commit} git ls-remote --tags \ - https://git.add-ideas.de/lotobo/av-tools.git refs/tags/v0.2.1 + https://git.add-ideas.de/lotobo/av-tools.git refs/tags/v0.3.0 ``` The Toolbox manifest names the canonical repository and SPDX licence. Publish diff --git a/THIRD_PARTY_NOTICES.md b/THIRD_PARTY_NOTICES.md index 2620e18..dcf57da 100644 --- a/THIRD_PARTY_NOTICES.md +++ b/THIRD_PARTY_NOTICES.md @@ -1,6 +1,6 @@ # Third-party notices -av-tools 0.2.1 is Copyright © 2026 Albrecht Degering and licensed +av-tools 0.3.0 is Copyright © 2026 Albrecht Degering and licensed GPL-3.0-or-later; see the root `LICENSE`. This inventory describes third-party inputs. It is informational, not legal advice, and does not replace their terms. Files under `LICENSES/` reproduce available terms. A packaged ZIP also diff --git a/docs/FORMAT_SUPPORT.md b/docs/FORMAT_SUPPORT.md index 7065e9a..722e0bf 100644 --- a/docs/FORMAT_SUPPORT.md +++ b/docs/FORMAT_SUPPORT.md @@ -5,7 +5,7 @@ extensions or this document. The app queries muxers, demuxers, decoders, encoders and filters; a preset is disabled with missing components listed. Browser playback is a separate capability checked with MIME/media APIs. -## 0.2.1 release fixture matrix +## 0.3.0 release fixture matrix All 15 files are generated and re-probed with native FFmpeg 7.1.3 for test preparation and pass the checksum/probe verifier. That proves fixture diff --git a/docs/KNOWN_LIMITATIONS.md b/docs/KNOWN_LIMITATIONS.md index 0a192cd..b782eda 100644 --- a/docs/KNOWN_LIMITATIONS.md +++ b/docs/KNOWN_LIMITATIONS.md @@ -1,6 +1,6 @@ # Known limitations -This is the conservative 0.2.1 release baseline. A capability appearing in +This is the conservative 0.3.0 release baseline. A capability appearing in FFmpeg output does not remove these product/browser/resource limits. ## Functional @@ -82,7 +82,7 @@ FFmpeg output does not remove these product/browser/resource limits. verification against the live container. - The application is GPL-3.0-or-later and its native legal files and pinned source identities are included in the release record. Publish the production - ZIP/checksum, exact `v0.2.1` source and FFmpeg Corresponding Source bundle + ZIP/checksum, exact `v0.3.0` source and FFmpeg Corresponding Source bundle together; development-only smoke artifacts must not be distributed. - Chromium covers a broad real pinned-core ST operation matrix, a real MT H.264/AAC conversion, MT-to-ST fallback, nested static/Toolbox-context diff --git a/docs/RELEASE.md b/docs/RELEASE.md index 2e24017..9e327af 100644 --- a/docs/RELEASE.md +++ b/docs/RELEASE.md @@ -11,7 +11,7 @@ The repository already declares the application licence and immutable third-party source identities. Before any distribution: 1. commit the reviewed GPL-3.0-or-later source; -2. create and verify annotated tag `v0.2.1` at that exact commit; +2. create and verify annotated tag `v0.3.0` at that exact commit; 3. push the commit and tag to the canonical public repository; 4. assemble, review and publish corresponding source and exact external notices for both reviewed core profiles and linked libraries; @@ -57,8 +57,8 @@ npm run package:release -- --allow-unlicensed-development-smoke Pass `--force` only to replace the exact same-version ZIP and sidecar. Output: ```text -release/av-tools-0.2.1.zip -release/av-tools-0.2.1.zip.sha256 +release/av-tools-0.3.0.zip +release/av-tools-0.3.0.zip.sha256 release/ffmpeg-core-0.12.10-reviewed-stack5m.1-corresponding-source.tar.xz release/ffmpeg-core-0.12.10-reviewed-stack5m.1-corresponding-source.tar.xz.sha256 ``` @@ -68,7 +68,7 @@ Verify independently: ```sh node scripts/checksum-release.mjs (cd release && sha256sum -c ffmpeg-core-0.12.10-reviewed-stack5m.1-corresponding-source.tar.xz.sha256) -unzip -l release/av-tools-0.2.1.zip +unzip -l release/av-tools-0.3.0.zip tar -tJf release/ffmpeg-core-0.12.10-reviewed-stack5m.1-corresponding-source.tar.xz ``` @@ -96,7 +96,7 @@ exact `HEAD` and clones that revision into a temporary directory: ```sh npm run portal:smoke -- \ - --artifact release/av-tools-0.2.1.zip \ + --artifact release/av-tools-0.3.0.zip \ --portal-root ../toolbox-portal ``` @@ -123,7 +123,7 @@ for `v0.6.0` and must not suppress review of new gaps. See ## 5. Publish only reviewed bytes -From a clean `v0.2.1` checkout, rerun all checks, create the ZIP once, verify +From a clean `v0.3.0` checkout, rerun all checks, create the ZIP once, verify the sidecar, assemble that exact ZIP through Portal, and publish the immutable ZIP, `.zip.sha256`, manifest, changelog, Corresponding Source and notices. Put its exact lowercase digest/version/id/target in a reviewed Portal lock. Never diff --git a/package-lock.json b/package-lock.json index d07e4ee..8551d4d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "av-tools", - "version": "0.2.1", + "version": "0.3.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "av-tools", - "version": "0.2.1", + "version": "0.3.0", "license": "GPL-3.0-or-later", "dependencies": { "@add-ideas/toolbox-contract": "0.2.3", diff --git a/package.json b/package.json index 10a7d36..9080a4f 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "av-tools", "private": true, - "version": "0.2.1", + "version": "0.3.0", "description": "Local-first browser audio and video conversion and light editing with ffmpeg.wasm.", "license": "GPL-3.0-or-later", "author": "Albrecht Degering", diff --git a/public/toolbox-app.json b/public/toolbox-app.json index 987c071..3982b1e 100644 --- a/public/toolbox-app.json +++ b/public/toolbox-app.json @@ -3,7 +3,7 @@ "schemaVersion": 1, "id": "de.add-ideas.av-tools", "name": "Audio & Video Tools", - "version": "0.2.1", + "version": "0.3.0", "description": "Convert and lightly edit audio and video locally in the browser.", "entry": "./", "icon": "./favicon.svg", diff --git a/src/toolbox/manifest.source.json b/src/toolbox/manifest.source.json index cdcbc14..64ab909 100644 --- a/src/toolbox/manifest.source.json +++ b/src/toolbox/manifest.source.json @@ -3,7 +3,7 @@ "schemaVersion": 1, "id": "de.add-ideas.av-tools", "name": "Audio & Video Tools", - "version": "0.2.1", + "version": "0.3.0", "description": "Convert and lightly edit audio and video locally in the browser.", "entry": "./", "icon": "./favicon.svg", diff --git a/src/version.ts b/src/version.ts index 6b7b2d6..fbce572 100644 --- a/src/version.ts +++ b/src/version.ts @@ -1,4 +1,4 @@ -export const APP_VERSION = '0.2.1'; +export const APP_VERSION = '0.3.0'; export const FFMPEG_WRAPPER_VERSION = '0.12.15'; export const FFMPEG_UTIL_VERSION = '0.12.2'; export const FFMPEG_CORE_VERSION = '0.12.10'; diff --git a/tests/unit/release-package.test.mjs b/tests/unit/release-package.test.mjs index ec83c1b..6b56ac0 100644 --- a/tests/unit/release-package.test.mjs +++ b/tests/unit/release-package.test.mjs @@ -165,30 +165,30 @@ describe('licence release gate', () => { describe('release checksum', () => { it('formats and parses the portable sidecar form', () => { const digest = 'a'.repeat(64); - const line = checksumLine(digest, 'av-tools-0.2.1.zip'); - expect(line).toBe(`${digest} av-tools-0.2.1.zip\n`); + const line = checksumLine(digest, 'av-tools-0.3.0.zip'); + expect(line).toBe(`${digest} av-tools-0.3.0.zip\n`); expect(parseChecksumLine(line)).toEqual({ - archiveName: 'av-tools-0.2.1.zip', + archiveName: 'av-tools-0.3.0.zip', digest, }); }); it('writes and verifies a checksum sidecar', async () => { const directory = await temporaryDirectory(); - const archive = path.join(directory, 'av-tools-0.2.1.zip'); + const archive = path.join(directory, 'av-tools-0.3.0.zip'); await writeFile(archive, 'deterministic bytes'); const result = await writeChecksum(archive); expect(await verifyChecksum(archive, result.sidecarPath)).toBe( result.digest ); expect(await readFile(result.sidecarPath, 'utf8')).toContain( - ' av-tools-0.2.1.zip' + ' av-tools-0.3.0.zip' ); }); it('rejects checksum mismatches', async () => { const directory = await temporaryDirectory(); - const archive = path.join(directory, 'av-tools-0.2.1.zip'); + const archive = path.join(directory, 'av-tools-0.3.0.zip'); const sidecar = `${archive}.sha256`; await writeFile(archive, 'changed'); await mkdir(path.dirname(sidecar), { recursive: true });