@pbk20191/icodec 0.7.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/README.md +68 -50
  2. package/dist/avif-dec.d.ts +14 -0
  3. package/dist/avif-dec.js +296 -2
  4. package/dist/avif-dec.wasm +0 -0
  5. package/dist/avif-enc.d.ts +30 -0
  6. package/dist/avif-enc.js +298 -2
  7. package/dist/avif-enc.wasm +0 -0
  8. package/dist/heic-dec.d.ts +14 -0
  9. package/dist/heic-dec.js +317 -2
  10. package/dist/heic-dec.wasm +0 -0
  11. package/dist/heic-enc.d.ts +26 -0
  12. package/dist/heic-enc.js +364 -2
  13. package/dist/heic-enc.wasm +0 -0
  14. package/dist/jxl-dec.d.ts +14 -0
  15. package/dist/jxl-dec.js +296 -2
  16. package/dist/jxl-dec.wasm +0 -0
  17. package/dist/jxl-enc.d.ts +37 -0
  18. package/dist/jxl-enc.js +298 -2
  19. package/dist/jxl-enc.wasm +0 -0
  20. package/dist/mozjpeg.d.ts +34 -0
  21. package/dist/mozjpeg.js +298 -2
  22. package/dist/mozjpeg.wasm +0 -0
  23. package/dist/pngquant.d.ts +48 -0
  24. package/dist/pngquant.js +242 -258
  25. package/dist/pngquant_bg.wasm +0 -0
  26. package/dist/qoi.d.ts +15 -0
  27. package/dist/qoi.js +296 -2
  28. package/dist/qoi.wasm +0 -0
  29. package/dist/vvic-dec.d.ts +14 -0
  30. package/dist/vvic-dec.js +327 -0
  31. package/dist/vvic-dec.wasm +0 -0
  32. package/dist/vvic-enc.d.ts +20 -0
  33. package/dist/vvic-enc.js +343 -0
  34. package/dist/vvic-enc.wasm +0 -0
  35. package/dist/webp-dec.d.ts +14 -0
  36. package/dist/webp-dec.js +296 -2
  37. package/dist/webp-dec.wasm +0 -0
  38. package/dist/webp-enc.d.ts +50 -0
  39. package/dist/webp-enc.js +301 -2
  40. package/dist/webp-enc.wasm +0 -0
  41. package/dist/wp2-dec.d.ts +14 -0
  42. package/dist/wp2-dec.js +296 -2
  43. package/dist/wp2-dec.wasm +0 -0
  44. package/dist/wp2-enc.d.ts +27 -0
  45. package/dist/wp2-enc.js +298 -2
  46. package/dist/wp2-enc.wasm +0 -0
  47. package/lib/avif.d.ts +5 -3
  48. package/lib/common.d.ts +4 -1
  49. package/lib/common.js +10 -3
  50. package/lib/heic.d.ts +3 -3
  51. package/lib/index.d.ts +10 -9
  52. package/lib/index.js +1 -0
  53. package/lib/jpeg.d.ts +4 -2
  54. package/lib/jpeg.js +4 -0
  55. package/lib/jxl.d.ts +3 -3
  56. package/lib/node.d.ts +16 -0
  57. package/lib/node.js +31 -37
  58. package/lib/png.d.ts +3 -3
  59. package/lib/qoi.d.ts +4 -3
  60. package/lib/qoi.js +2 -1
  61. package/lib/vvic.d.ts +25 -0
  62. package/lib/vvic.js +30 -0
  63. package/lib/webp.d.ts +5 -4
  64. package/lib/wp2.d.ts +4 -3
  65. package/lib/wp2.js +1 -0
  66. package/package.json +15 -8
  67. package/types/wasm_type.d.ts +57 -0
  68. package/versions.json +1 -1
package/lib/jxl.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { EnumValue, ImageDataLike, WasmSource } from "./common.js";
1
+ import { EnumValue, ImageDataLike, WasmSource } from "./common.ts";
2
2
  export declare enum Override {
3
3
  Default = -1,
4
4
  False = 0,
@@ -173,8 +173,8 @@ export declare const defaultOptions: Required<Options>;
173
173
  export declare const mimeType = "image/jxl";
174
174
  export declare const extension = "jxl";
175
175
  export declare const bitDepth: number[];
176
- export declare function loadEncoder(input?: WasmSource): Promise<any>;
177
- export declare function loadDecoder(input?: WasmSource): Promise<any>;
176
+ export declare function loadEncoder(input?: WasmSource): Promise<import("../dist/jxl-enc.ts").MainModule>;
177
+ export declare function loadDecoder(input?: WasmSource): Promise<import("../dist/jxl-dec.ts").MainModule>;
178
178
  export declare function encode(image: ImageDataLike, options?: Options): Uint8Array<ArrayBufferLike>;
179
179
  export declare function decode(input: BufferSource): ImageData;
180
180
  export declare function unloadDecoder(): void;
package/lib/node.d.ts ADDED
@@ -0,0 +1,16 @@
1
+ /// <reference types="node" preserve="true" />
2
+ import { WasmSource } from "./common.ts";
3
+ type NodeCodecModule<D, E> = {
4
+ loadEncoder(input?: WasmSource): Promise<D>;
5
+ loadDecoder(input?: WasmSource): Promise<E>;
6
+ };
7
+ export declare const avif: NodeCodecModule<import("../dist/avif-enc").MainModule, import("../dist/avif-dec").MainModule>;
8
+ export declare const png: NodeCodecModule<import("../dist/pngquant").InitOutput, import("../dist/pngquant").InitOutput>;
9
+ export declare const jpeg: NodeCodecModule<import("../dist/mozjpeg").MainModule, import("../dist/mozjpeg").MainModule>;
10
+ export declare const jxl: NodeCodecModule<import("../dist/jxl-enc").MainModule, import("../dist/jxl-dec").MainModule>;
11
+ export declare const webp: NodeCodecModule<import("../dist/webp-enc").MainModule, import("../dist/webp-dec").MainModule>;
12
+ export declare const qoi: NodeCodecModule<import("../dist/qoi").MainModule, import("../dist/qoi").MainModule>;
13
+ export declare const wp2: NodeCodecModule<import("../dist/wp2-enc").MainModule, import("../dist/wp2-dec").MainModule>;
14
+ export declare const vvic: NodeCodecModule<import("../dist/vvic-enc").MainModule, import("../dist/vvic-dec").MainModule>;
15
+ export declare const heic: NodeCodecModule<import("../dist/heic-enc").MainModule, import("../dist/heic-dec").MainModule>;
16
+ export {};
package/lib/node.js CHANGED
@@ -1,8 +1,8 @@
1
+ /// <reference types="node" preserve="true" />
1
2
  import { readFileSync } from "node:fs";
2
- import { join } from "node:path";
3
-
3
+ import { dirname, join } from "node:path";
4
+ import { fileURLToPath } from "node:url";
4
5
  import { PureImageData } from "./common.js";
5
-
6
6
  import * as avifRaw from "./avif.js";
7
7
  import * as pngRaw from "./png.js";
8
8
  import * as jpegRaw from "./jpeg.js";
@@ -11,38 +11,36 @@ import * as webpRaw from "./webp.js";
11
11
  import * as heicRaw from "./heic.js";
12
12
  import * as qoiRaw from "./qoi.js";
13
13
  import * as wp2Raw from "./wp2.js";
14
-
14
+ import * as vvicRaw from "./vvic.js";
15
+ const distDir = join(dirname(fileURLToPath(import.meta.url)), "../dist");
15
16
  globalThis._icodec_ImageData = (data, w, h, depth) => {
16
- return new PureImageData(data, w, h, depth);
17
+ return new PureImageData(data, w, h, depth);
17
18
  };
18
-
19
19
  function wrapLoaders(original, e, d = e) {
20
- let loadedEnc;
21
- let loadedDec;
22
-
23
- const loadEncoder = input => {
24
- if (loadedEnc) return loadedEnc;
25
-
26
- input ??= join(import.meta.dirname, "../dist", e);
27
- if (typeof input === "string") {
28
- input = readFileSync(input);
29
- }
30
- return loadedEnc = original.loadEncoder(input);
31
- };
32
-
33
- const loadDecoder = input => {
34
- if (loadedDec) return loadedDec;
35
-
36
- input ??= join(import.meta.dirname, "../dist", d);
37
- if (typeof input === "string") {
38
- input = readFileSync(input);
39
- }
40
- return loadedDec = original.loadDecoder(input);
41
- };
42
-
43
- return { ...original, loadEncoder, loadDecoder };
20
+ let loadedEnc;
21
+ let loadedDec;
22
+ const loadEncoder = (input) => {
23
+ if (loadedEnc)
24
+ return loadedEnc;
25
+ let source = input ?? join(distDir, e);
26
+ if (typeof source === "string") {
27
+ source = readFileSync(source);
28
+ }
29
+ loadedEnc = original.loadEncoder(source);
30
+ return loadedEnc;
31
+ };
32
+ const loadDecoder = (input) => {
33
+ if (loadedDec)
34
+ return loadedDec;
35
+ let source = input ?? join(distDir, d);
36
+ if (typeof source === "string") {
37
+ source = readFileSync(source);
38
+ }
39
+ loadedDec = original.loadDecoder(source);
40
+ return loadedDec;
41
+ };
42
+ return { ...original, loadEncoder, loadDecoder };
44
43
  }
45
-
46
44
  export const avif = wrapLoaders(avifRaw, "avif-enc.wasm", "avif-dec.wasm");
47
45
  export const png = wrapLoaders(pngRaw, "pngquant_bg.wasm");
48
46
  export const jpeg = wrapLoaders(jpegRaw, "mozjpeg.wasm");
@@ -50,9 +48,5 @@ export const jxl = wrapLoaders(jxlRaw, "jxl-enc.wasm", "jxl-dec.wasm");
50
48
  export const webp = wrapLoaders(webpRaw, "webp-enc.wasm", "webp-dec.wasm");
51
49
  export const qoi = wrapLoaders(qoiRaw, "qoi.wasm");
52
50
  export const wp2 = wrapLoaders(wp2Raw, "wp2-enc.wasm", "wp2-dec.wasm");
53
-
54
- /*
55
- * Web Workers that require special handling of Node, but if we add "node" to build target,
56
- * it will require the bundler to add additional config to exclude node modules.
57
- */
58
- export const heic = wrapLoaders(heicRaw,"heic-enc.wasm", "heic-dec.wasm");
51
+ export const vvic = wrapLoaders(vvicRaw, "vvic-enc.wasm", "vvic-dec.wasm");
52
+ export const heic = wrapLoaders(heicRaw, "heic-enc.wasm", "heic-dec.wasm");
package/lib/png.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { ImageDataLike, WasmSource } from "./common.js";
1
+ import { ImageDataLike, WasmSource } from "./common.ts";
2
2
  export interface QuantizeOptions {
3
3
  /**
4
4
  * Range: [1, 10], bigger is faster and generate images of lower quality,
@@ -59,8 +59,8 @@ export declare const defaultOptions: Required<Options>;
59
59
  export declare const bitDepth: number[];
60
60
  export declare const mimeType = "image/png";
61
61
  export declare const extension = "png";
62
- export declare const loadEncoder: (module_or_path?: WasmSource) => Promise<any>;
63
- export declare const loadDecoder: (module_or_path?: WasmSource) => Promise<any>;
62
+ export declare const loadEncoder: (module_or_path?: WasmSource) => Promise<import("../dist/pngquant.ts").InitOutput>;
63
+ export declare const loadDecoder: (module_or_path?: WasmSource) => Promise<import("../dist/pngquant.ts").InitOutput>;
64
64
  /**
65
65
  * Reduces the colors used in the image at a slight loss, using a combination
66
66
  * of vector quantization algorithms.
package/lib/qoi.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { ImageDataLike, WasmSource } from "./common.js";
1
+ import { ImageDataLike, WasmSource } from "./common.ts";
2
2
  /**
3
3
  * QOI encoder does not have options, it's always lossless.
4
4
  */
@@ -7,8 +7,9 @@ export declare const defaultOptions: never;
7
7
  export declare const bitDepth: number[];
8
8
  export declare const mimeType = "image/qoi";
9
9
  export declare const extension = "qoi";
10
- export declare function loadEncoder(input?: WasmSource): Promise<any>;
10
+ export declare function loadEncoder(input?: WasmSource): Promise<import("../dist/qoi.ts").MainModule>;
11
11
  export declare const loadDecoder: typeof loadEncoder;
12
12
  export declare function encode(image: ImageDataLike): Uint8Array<ArrayBufferLike>;
13
13
  export declare function decode(input: BufferSource): ImageData;
14
- export declare function unloadCoder(): void;
14
+ export declare function unloadDecoder(): void;
15
+ export declare const unloadEncoder: typeof unloadDecoder;
package/lib/qoi.js CHANGED
@@ -17,6 +17,7 @@ export function encode(image) {
17
17
  export function decode(input) {
18
18
  return check(codecWASM.decode(input), "QOI Decode");
19
19
  }
20
- export function unloadCoder() {
20
+ export function unloadDecoder() {
21
21
  codecWASM = undefined;
22
22
  }
23
+ export const unloadEncoder = unloadDecoder;
package/lib/vvic.d.ts ADDED
@@ -0,0 +1,25 @@
1
+ import { ImageDataLike, WasmSource } from "./common.ts";
2
+ export interface Options {
3
+ /**
4
+ * If true, encode the image without any loss.
5
+ *
6
+ * @default false
7
+ */
8
+ lossless?: boolean;
9
+ /**
10
+ * The quality of the encoded image, from 0 to 100.
11
+ *
12
+ * @default 75
13
+ */
14
+ quality?: number;
15
+ }
16
+ export declare const defaultOptions: Required<Options>;
17
+ export declare const mimeType = "image/vvic";
18
+ export declare const extension = "vvic";
19
+ export declare const bitDepth: number[];
20
+ export declare function loadEncoder(input?: WasmSource): Promise<import("../dist/vvic-enc.ts").MainModule>;
21
+ export declare function loadDecoder(input?: WasmSource): Promise<import("../dist/vvic-dec.ts").MainModule>;
22
+ export declare function encode(image: ImageDataLike, options?: Options): Uint8Array<ArrayBufferLike>;
23
+ export declare function decode(input: BufferSource): ImageData;
24
+ export declare function unloadDecoder(): void;
25
+ export declare function unloadEncoder(): void;
package/lib/vvic.js ADDED
@@ -0,0 +1,30 @@
1
+ import wasmFactoryEnc from "../dist/vvic-enc.js";
2
+ import wasmFactoryDec from "../dist/vvic-dec.js";
3
+ import { check, encodeES, loadES } from "./common.js";
4
+ export const defaultOptions = {
5
+ lossless: false,
6
+ quality: 75,
7
+ };
8
+ let encoderWASM;
9
+ let decoderWASM;
10
+ export const mimeType = "image/vvic";
11
+ export const extension = "vvic";
12
+ export const bitDepth = [8];
13
+ export async function loadEncoder(input) {
14
+ return encoderWASM ??= await loadES(wasmFactoryEnc, input);
15
+ }
16
+ export async function loadDecoder(input) {
17
+ return decoderWASM ??= await loadES(wasmFactoryDec, input);
18
+ }
19
+ export function encode(image, options) {
20
+ return encodeES("VVIC Encode", encoderWASM, defaultOptions, image, options);
21
+ }
22
+ export function decode(input) {
23
+ return check(decoderWASM.decode(input), "VVIC Decode");
24
+ }
25
+ export function unloadDecoder() {
26
+ decoderWASM = undefined;
27
+ }
28
+ export function unloadEncoder() {
29
+ encoderWASM = undefined;
30
+ }
package/lib/webp.d.ts CHANGED
@@ -1,4 +1,5 @@
1
- import { EnumValue, ImageDataLike, WasmSource } from "./common.js";
1
+ import { WebPConfig } from "../dist/webp-enc.ts";
2
+ import { EnumValue, ImageDataLike, WasmSource } from "./common.ts";
2
3
  export declare enum Preprocess {
3
4
  None = 0,
4
5
  SegmentSmooth = 1,
@@ -221,10 +222,10 @@ export declare const defaultOptions: Required<Options> & Record<string, any>;
221
222
  export declare const bitDepth: number[];
222
223
  export declare const mimeType = "image/webp";
223
224
  export declare const extension = "webp";
224
- export declare function loadEncoder(input?: WasmSource): Promise<any>;
225
- export declare function loadDecoder(input?: WasmSource): Promise<any>;
225
+ export declare function loadEncoder(input?: WasmSource): Promise<import("../dist/webp-enc.ts").MainModule>;
226
+ export declare function loadDecoder(input?: WasmSource): Promise<import("../dist/webp-dec.ts").MainModule>;
226
227
  export declare function encode(image: ImageDataLike, options?: Options): Uint8Array<ArrayBufferLike>;
227
- export declare function preset(config: Options, preset: EnumValue<typeof WebPPreset>): Options | null;
228
+ export declare function preset(config: Options, preset: EnumValue<typeof WebPPreset>): WebPConfig | undefined;
228
229
  export declare function decode(input: BufferSource): ImageData;
229
230
  export declare function unloadDecoder(): void;
230
231
  export declare function unloadEncoder(): void;
package/lib/wp2.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { EnumValue, ImageDataLike, WasmSource } from "./common.js";
1
+ import { EnumValue, ImageDataLike, WasmSource } from "./common.ts";
2
2
  export declare enum UVMode {
3
3
  UVAdapt = 0,
4
4
  UV420 = 1,
@@ -60,13 +60,14 @@ export interface Options {
60
60
  */
61
61
  errorDiffusion?: number;
62
62
  useRandomMatrix?: boolean;
63
+ lossless?: boolean;
63
64
  }
64
65
  export declare const defaultOptions: Required<Options>;
65
66
  export declare const bitDepth: number[];
66
67
  export declare const mimeType = "image/webp2";
67
68
  export declare const extension = "wp2";
68
- export declare function loadEncoder(input?: WasmSource): Promise<any>;
69
- export declare function loadDecoder(input?: WasmSource): Promise<any>;
69
+ export declare function loadEncoder(input?: WasmSource): Promise<import("../dist/wp2-enc.ts").MainModule>;
70
+ export declare function loadDecoder(input?: WasmSource): Promise<import("../dist/wp2-dec.ts").MainModule>;
70
71
  export declare function encode(image: ImageDataLike, options?: Options): Uint8Array<ArrayBufferLike>;
71
72
  export declare function decode(input: BufferSource): ImageData;
72
73
  export declare function unloadDecoder(): void;
package/lib/wp2.js CHANGED
@@ -25,6 +25,7 @@ export const defaultOptions = {
25
25
  cspType: Csp.YCoCg,
26
26
  errorDiffusion: 0,
27
27
  useRandomMatrix: false,
28
+ lossless: false,
28
29
  };
29
30
  export const bitDepth = [8];
30
31
  // WebP 2 will not be released as an image format, but wee need define these properties.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pbk20191/icodec",
3
- "version": "0.7.0",
3
+ "version": "0.9.0",
4
4
  "private": false,
5
5
  "description": "Image encoders & decoders built with WebAssembly",
6
6
  "license": "MIT",
@@ -12,9 +12,11 @@
12
12
  "type": "module",
13
13
  "scripts": {
14
14
  "wasm": "node scripts/build.js",
15
- "types": "tsc -p tsconfig.json --emitDeclarationOnly && tsc -p tsconfig.json",
15
+ "types": "tsc -p tsconfig.json",
16
16
  "build": "npm run wasm && npm run types",
17
17
  "test-convert": "tsx --test test/test-convert.js",
18
+ "test-leak": "tsx --test test/test-leak.js",
19
+ "test-lossless": "tsx --test test/test-lossless.js",
18
20
  "demo": "node scripts/start-demo.js"
19
21
  },
20
22
  "keywords": [
@@ -30,12 +32,15 @@
30
32
  "jxl",
31
33
  "wp2",
32
34
  "mozjpeg",
35
+ "vvic",
33
36
  "pngquant"
34
37
  ],
35
38
  "files": [
36
39
  "versions.json",
37
- "dist/*.{js,wasm}",
38
- "lib/*.{js,d.ts}"
40
+ "dist/*.{js,wasm,d.ts}",
41
+ "lib/*.{js,d.ts}",
42
+ "types/*.{d.ts}",
43
+ "types/wasm_type.d.ts"
39
44
  ],
40
45
  "exports": {
41
46
  "./versions.json": "./versions.json",
@@ -57,14 +62,16 @@
57
62
  "@kaciras/eslint-config-typescript": "^3.4.1",
58
63
  "@kaciras/utilities": "^1.0.5",
59
64
  "@types/emscripten": "^1.41.5",
60
- "@types/node": "^24.10.1",
61
- "esbench": "^0.8.0",
65
+ "@types/node": "^24.12.0",
66
+ "esbench": "^0.8.1",
62
67
  "eslint": "^9.39.1",
68
+ "node-addon-api": "^8.6.0",
69
+ "node-gyp": "^12.2.0",
63
70
  "pixelmatch": "^7.1.0",
64
71
  "sharp": "^0.34.5",
65
72
  "smol-toml": "^1.5.2",
73
+ "tsx": "^4.21.0",
66
74
  "typescript": "^5.9.3",
67
- "version-compare": "^3.12.0",
68
- "tsx": "^4.21.0"
75
+ "version-compare": "^3.12.0"
69
76
  }
70
77
  }
@@ -0,0 +1,57 @@
1
+ /// <reference types="emscripten" preserve="true" />
2
+ import "emscripten"
3
+ declare module "../dist/avif-dec.ts" {
4
+ interface WasmModule extends EmscriptenModule {}
5
+ }
6
+
7
+ declare module "../dist/avif-enc.ts" {
8
+ interface WasmModule extends EmscriptenModule {}
9
+ }
10
+
11
+ declare module "../dist/jxl-dec.ts" {
12
+ interface WasmModule extends EmscriptenModule {}
13
+ }
14
+
15
+ declare module "../dist/jxl-enc.ts" {
16
+ interface WasmModule extends EmscriptenModule {}
17
+ }
18
+
19
+ declare module "../dist/webp-dec.ts" {
20
+ interface WasmModule extends EmscriptenModule {}
21
+ }
22
+
23
+ declare module "../dist/webp-enc.ts" {
24
+ interface WasmModule extends EmscriptenModule {}
25
+ }
26
+
27
+ declare module "../dist/heic-dec.ts" {
28
+ interface WasmModule extends EmscriptenModule {}
29
+ }
30
+
31
+ declare module "../dist/heic-enc.ts" {
32
+ interface WasmModule extends EmscriptenModule {}
33
+ }
34
+
35
+ declare module "../dist/wp2-dec.ts" {
36
+ interface WasmModule extends EmscriptenModule {}
37
+ }
38
+
39
+ declare module "../dist/wp2-enc.ts" {
40
+ interface WasmModule extends EmscriptenModule {}
41
+ }
42
+
43
+ declare module "../dist/qoi.ts" {
44
+ interface WasmModule extends EmscriptenModule {}
45
+ }
46
+
47
+ declare module "../dist/vvic-dec.ts" {
48
+ interface WasmModule extends EmscriptenModule {}
49
+ }
50
+
51
+ declare module "../dist/vvic-enc.ts" {
52
+ interface WasmModule extends EmscriptenModule {}
53
+ }
54
+
55
+ declare module "../dist/mozjpeg.ts" {
56
+ interface WasmModule extends EmscriptenModule {}
57
+ }
package/versions.json CHANGED
@@ -1 +1 @@
1
- [{"name":"mozjpeg","version":"v4.1.5","repository":"https://github.com/mozilla/mozjpeg","date":"2023-10-12"},{"name":"qoi","version":"6fff9b7","repository":"https://github.com/phoboslab/qoi","date":"2026-02-14"},{"name":"libwebp","version":"v1.6.0","repository":"https://github.com/webmproject/libwebp","date":"2025-07-08"},{"name":"libjxl","version":"v0.11.2","repository":"https://github.com/libjxl/libjxl","date":"2026-02-09"},{"name":"libavif","version":"v1.4.0","repository":"https://github.com/AOMediaCodec/libavif","date":"2026-02-27"},{"name":"aom","version":"v3.13.1","repository":"https://aomedia.googlesource.com/aom","date":"2025-09-05"},{"name":"libwebp2","version":"8720150","repository":"https://chromium.googlesource.com/codecs/libwebp2","date":"2026-03-16"},{"name":"x265","version":"4.1","repository":"https://bitbucket.org/multicoreware/x265_git","date":"2024-11-22"},{"name":"libde265","version":"v1.0.18","repository":"https://github.com/strukturag/libde265","date":"2026-03-19"},{"name":"libheif","version":"v1.21.2","repository":"https://github.com/strukturag/libheif","date":"2026-01-15"}]
1
+ [{"name":"mozjpeg","version":"v4.1.5","repository":"https://github.com/mozilla/mozjpeg","date":"2023-10-12"},{"name":"qoi","version":"6fff9b7","repository":"https://github.com/phoboslab/qoi","date":"2026-02-14"},{"name":"libwebp","version":"v1.6.0","repository":"https://github.com/webmproject/libwebp","date":"2025-07-08"},{"name":"libjxl","version":"v0.11.2","repository":"https://github.com/libjxl/libjxl","date":"2026-02-09"},{"name":"libavif","version":"v1.4.1","repository":"https://github.com/AOMediaCodec/libavif","date":"2026-03-20"},{"name":"aom","version":"v3.13.2","repository":"https://aomedia.googlesource.com/aom","date":"2026-03-17"},{"name":"libwebp2","version":"8720150","repository":"https://chromium.googlesource.com/codecs/libwebp2","date":"2026-03-16"},{"name":"x265","version":"4.1","repository":"https://bitbucket.org/multicoreware/x265_git","date":"2024-11-22"},{"name":"libde265","version":"v1.0.18","repository":"https://github.com/strukturag/libde265","date":"2026-03-19"},{"name":"libheif","version":"v1.21.2","repository":"https://github.com/strukturag/libheif","date":"2026-01-15"},{"name":"vvenc","version":"v1.14.0","repository":"https://github.com/fraunhoferhhi/vvenc","date":"2026-01-21"},{"name":"vvdec","version":"v3.1.0","repository":"https://github.com/fraunhoferhhi/vvdec","date":"2025-11-18"}]