Skip to content

webm: pictures up to 8192x4352 - AV1's levels are the bound, and an 8K film peaks at about 240 MB - #169

Merged
donislawdev merged 3 commits into
mainfrom
format/webm-large-pictures
Oct 7, 2026
Merged

donislawdev merged 3 commits into
mainfrom
format/webm-large-pictures

Conversation

@donislawdev

@donislawdev donislawdev commented Oct 7, 2026 •

Copy link
Copy Markdown
Owner

What

A film's picture was held to 4096x2304 because gav1d codes one AV1 tile correctly and no more. Since #168 the picture is cut into tiles here and every tile is within one of gav1d's, so the bound left is the format's: the largest picture an AV1 level describes, 8192x4352 (35 651 584 pixels), with either side up to 16384. 7680x4320 and 8192x4320 films can be made. A larger picture is refused as a setting before anything is written.

The cut rule keeps every cut it had and adds two, only where a frame cannot carry the layout:

  • a column wider than MAX_TILE_WIDTH, and a row taller than the area tile_info leaves a tile once the frame needs several, are cut into the fewest equal parts, the larger last;
  • a frame more than one superblock tall gets columns narrow enough for rows of two superblocks. Without that, a wide low picture (4097x65) had a last row of tiles one pixel tall. Annex A refuses that, and every decoder played it anyway.

The film's memory went with it. A film kept its starting picture whole as pixels and as planes, and every painter, one for each helper, copied the planes whole. Now the film makes its planes sixty four rows at a time, keeps pixels only along the rows a picture can change, each painter holds the largest tile that can change, and a tile nothing changes is coded straight from the film's planes.

Measured

  • Bytes of every picture within the old bound are unchanged: the golden films (a new one with tiles was measured on the code before the change), and twelve sizes made by main and by this branch, byte for byte.
  • 7680x4320, 8192x4352, 16384x2176, 4097x65, 4096x2305 and 2048x16384: libaom and dav1d (ffmpeg 9.0.2) decode every frame and agree on every frame's hash. dav1d 1.4.1 decodes 90/90. Chromium 152 plays and seeks them.
  • Memory at the peak, before and after the painter change, interleaved, three rounds:
before after
one 7680x4320 film 1276-1284 MB 187-241 MB
sixteen of them at once 3733-3914 MB 1068-1106 MB
one 3840x2160 film 356-358 MB 144 MB

The time is the same, about 2 s for an 8K film of ten seconds. Nine large films made before and after the painter change are identical.

Changed on purpose

  • The width and area bounds, and the sentence tfg formats webm gives for them (English catalogue and Polish translation).
  • The refusal "more than one AV1 tile" and its sentence are gone (both catalogues).
  • The site's webm width range, 1 - 16384, on 22 pages.
  • Bytes of pictures larger than 4096x2304 are new. Webm is unreleased, so this is not a major change.

Guards

  • New: TestEveryFilmLayoutIsOneTheAV1SpecificationAllows checks 451 177 layouts up to the declared bound against tile_info and Annex A in 0.4 s. The conditions are derived in the guard from the specification, not from the writer. It asserts that it reached the wide, area-cut and narrowed layouts. Proven by three hand mutations, one of them removing the narrowing (2156 breaks).
  • Golden webm_tiles (640x360, six tiles) and webm_wide (4240x1000, uneven column and row cuts).
  • Wide cases in the tile guard and in the libaom guard. The refusal guard is rewritten for the new bound.
  • video.Picture now puts a picture together tile by tile, the way the film does, so the guard that holds it to the picture painted whole covers the tiles' own road.

Test plan

  • Guards touched, by name: layout, refusal, tiles, libaom, golden bytes, painting, several goroutines, stopped half way, allocations, catalogues EN/PL, site, stored screens, presets
  • Shape, branching, type and prose gates
  • CI

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features
    • WebM video can now support larger, multi-tile pictures, up to 16,384 pixels per side and a maximum picture area of 8,192 × 4,352 pixels.
    • Added details on supported 8K sizes and expected memory use for large films and concurrent encoding.
  • Bug Fixes
    • Oversized pictures are refused before writing, with limits aligned to AV1 specifications.

donislawdev and others added 3 commits October 7, 2026 10:19
…one tile

webm_tiles is 640x360 for three seconds: six tiles, three pictures, so how a
picture is cut and which tile is coded again are pinned before the rule that
cuts larger pictures changes. Measured on the code before that change, and the
same hash from the command line with --id g --seed 7741.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… one tile

gav1d codes one tile correctly and no more, and that held a film's picture to
4096x2304. Since pictures are cut into tiles here, every tile is within one of
gav1d's, so the bound left is the format's: the largest picture an AV1 level
describes, 8192 by 4352, with either side up to 16384.

The cut rule keeps today's cuts and adds two, only where a frame cannot carry
the layout: a column wider than MAX_TILE_WIDTH and a row taller than the area
tile_info leaves a tile once the frame needs several are cut into the fewest
equal parts, the larger last, and a frame more than one superblock tall gets
columns narrow enough for rows of two superblocks - without that, a wide low
picture's last row of tiles was a pixel tall, which Annex A refuses and every
decoder took. A picture of 4096x2304 or less keeps the layout and the bytes it
had: the golden films, and twelve sizes made by main and by this.

Measured on 8K, 8192x4352, 16384x2176, 4097x65, 4096x2305 and 2048x16384:
libaom and dav1d decode every frame and agree, dav1d 1.4.1 too, Chromium plays
and seeks.

New guard: TestEveryFilmLayoutIsOneTheAV1SpecificationAllows holds every
layout up to the declared bound to tile_info and Annex A, derived from the
specification rather than the writer. A golden film wider than one tile, and
wide cases in the tile and libaom guards.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…B, it took 1.3 GB

A film kept its starting picture whole in pixels and in planes, and every
painter - one for each helper coding beside the writer - copied the planes
whole, so a 7680x4320 film held 133 MB of pixels its painters read a sixth of
and fifteen copies of 50 MB. Now the film makes its planes sixty four rows at
a time and keeps pixels only along the rows a picture can change, a painter
has room for the largest tile that can change, and a tile no picture changes
is coded straight from the film's planes, which every goroutine reads and
none writes.

Measured before and after, interleaved, three rounds each: one 7680x4320
film 1276-1284 MB at the peak, now 187-241 MB. Sixteen of them at once
3733-3914 MB, now 1068-1106 MB. 3840x2160 356-358 MB, now 144 MB. The time is
the same, and so are the bytes - the golden films, and nine large films made
both ways.

video.Picture now puts a picture together tile by tile from where the film
takes each tile, so the guard that holds it to the picture painted whole
holds the tiles' own road.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Oct 7, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Repository UI (base), Organization UI (inherited)
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: cb13bc3e-11b6-4104-bd2f-e52dc915a4ab
📥 Commits

Reviewing files that changed from the base of the PR and between f678b0b and 8a6ed74.

⛔ Files ignored due to path filters (22)
  • web/public/ar/formats/index.html is excluded by !**/web/public/**
  • web/public/cs/formaty/index.html is excluded by !**/web/public/**
  • web/public/de/formate/index.html is excluded by !**/web/public/**
  • web/public/es/formatos/index.html is excluded by !**/web/public/**
  • web/public/formats/index.html is excluded by !**/web/public/**
  • web/public/fr/formats/index.html is excluded by !**/web/public/**
  • web/public/hi/formats/index.html is excluded by !**/web/public/**
  • web/public/id/format/index.html is excluded by !**/web/public/**
  • web/public/it/formati/index.html is excluded by !**/web/public/**
  • web/public/ja/formats/index.html is excluded by !**/web/public/**
  • web/public/ko/formats/index.html is excluded by !**/web/public/**
  • web/public/nl/formaten/index.html is excluded by !**/web/public/**
  • web/public/pl/formaty/index.html is excluded by !**/web/public/**
  • web/public/pt-br/formatos/index.html is excluded by !**/web/public/**
  • web/public/ro/formate/index.html is excluded by !**/web/public/**
  • web/public/ru/formats/index.html is excluded by !**/web/public/**
  • web/public/th/formats/index.html is excluded by !**/web/public/**
  • web/public/tr/bicimler/index.html is excluded by !**/web/public/**
  • web/public/uk/formats/index.html is excluded by !**/web/public/**
  • web/public/vi/dinh-dang/index.html is excluded by !**/web/public/**
  • web/public/zh-hans/formats/index.html is excluded by !**/web/public/**
  • web/public/zh-hant/formats/index.html is excluded by !**/web/public/**
📒 Files selected for processing (17)
  • CHANGELOG.md
  • internal/format/video/ahead.go
  • internal/format/video/choose.go
  • internal/format/video/grid.go
  • internal/format/video/picture.go
  • internal/format/video/pictures.go
  • internal/format/video/settings.go
  • internal/format/video/still.go
  • internal/guard/film_test.go
  • internal/guard/filmlayout_test.go
  • internal/guard/filmtiles_test.go
  • internal/guard/generatorbytes_test.go
  • internal/guard/testdata/generator-golden.json
  • internal/gui/text/locale/registry/en.json
  • internal/gui/text/locale/registry/pl.json
  • internal/gui/text/locale/said/en.json
  • internal/gui/text/locale/said/pl.json
💤 Files with no reviewable changes (2)
  • internal/gui/text/locale/said/pl.json
  • internal/format/video/choose.go

Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review.

📜 Recent review details
⏰ Context from checks skipped due to timeout. (20)
  • GitHub Check: race detector (part 1 of 4)
  • GitHub Check: race detector (part 3 of 4)
  • GitHub Check: race detector (part 2 of 4)
  • GitHub Check: race detector (part 0 of 4)
  • GitHub Check: bill of materials
  • GitHub Check: test on ubuntu-latest
  • GitHub Check: linters
  • GitHub Check: test on windows-latest
  • GitHub Check: coverage gate
  • GitHub Check: semgrep
  • GitHub Check: test on macos-latest
  • GitHub Check: import table of the window binary
  • GitHub Check: known vulnerabilities
  • GitHub Check: the installer installs and leaves
  • GitHub Check: the Chocolatey packages install and leave
  • GitHub Check: reference tools actually installed
  • GitHub Check: staticcheck
  • GitHub Check: Analyze (actions)
  • GitHub Check: Analyze (python)
  • GitHub Check: Analyze (go)
🧰 Additional context used
📚 Code guidelines (1)
CONTRIBUTING.md — configured
📓 Path-based instructions (13)
Applies to text shown to the user (labels, buttons, tooltips, placeholders, dialogs, errors, status messages, empty states, translations).

⚙️ CodeRabbit configuration file

Files:

  • internal/gui/text/locale/registry/en.json
  • internal/gui/text/locale/registry/pl.json
  • internal/guard/film_test.go
  • internal/gui/text/locale/said/en.json
  • internal/guard/filmtiles_test.go
  • internal/format/video/pictures.go
  • internal/guard/generatorbytes_test.go
  • internal/format/video/ahead.go
  • internal/format/video/still.go
  • internal/format/video/settings.go
  • internal/format/video/grid.go
  • internal/format/video/picture.go
  • internal/guard/filmlayout_test.go
Verify tests check real behavior and would fail if the implementation were broken.

⚙️ CodeRabbit configuration file

Files:

  • internal/guard/film_test.go
  • internal/guard/filmtiles_test.go
  • internal/guard/generatorbytes_test.go
  • internal/guard/filmlayout_test.go
These are end-user desktop applications.

⚙️ CodeRabbit configuration file

Files:

  • internal/guard/film_test.go
  • internal/guard/filmtiles_test.go
  • internal/format/video/pictures.go
  • internal/guard/generatorbytes_test.go
  • internal/format/video/ahead.go
  • internal/format/video/still.go
  • internal/format/video/settings.go
  • internal/format/video/grid.go
  • internal/format/video/picture.go
  • internal/guard/filmlayout_test.go
Performance is a known weak spot of these projects.

⚙️ CodeRabbit configuration file

Files:

  • internal/guard/film_test.go
  • internal/guard/filmtiles_test.go
  • internal/format/video/pictures.go
  • internal/guard/generatorbytes_test.go
  • internal/format/video/ahead.go
  • internal/format/video/still.go
  • internal/format/video/settings.go
  • internal/format/video/grid.go
  • internal/format/video/picture.go
  • internal/guard/filmlayout_test.go
Applies only to code that builds or styles a GUI.

⚙️ CodeRabbit configuration file

Files:

  • internal/guard/film_test.go
  • internal/guard/filmtiles_test.go
  • internal/format/video/pictures.go
  • internal/guard/generatorbytes_test.go
  • internal/format/video/ahead.go
  • internal/format/video/still.go
  • internal/format/video/settings.go
  • internal/format/video/grid.go
  • internal/format/video/picture.go
  • internal/guard/filmlayout_test.go
User-facing changelog.

⚙️ CodeRabbit configuration file

Files:

  • CHANGELOG.md
Domain: test file generator (Go; `tfg` CLI and `tfg-gui` Fyne window over one engine).

⚙️ CodeRabbit configuration file

Files:

  • internal/guard/testdata/generator-golden.json
  • internal/gui/text/locale/registry/en.json
  • internal/gui/text/locale/registry/pl.json
  • internal/guard/film_test.go
  • internal/gui/text/locale/said/en.json
  • internal/guard/filmtiles_test.go
  • internal/format/video/pictures.go
  • internal/guard/generatorbytes_test.go
  • internal/format/video/ahead.go
  • internal/format/video/still.go
  • internal/format/video/settings.go
  • internal/format/video/grid.go
  • internal/format/video/picture.go
  • internal/guard/filmlayout_test.go
SECURITY, HIGH PRIORITY.

⚙️ CodeRabbit configuration file

Files:

  • internal/guard/film_test.go
  • internal/guard/filmtiles_test.go
  • internal/format/video/pictures.go
  • internal/guard/generatorbytes_test.go
  • internal/format/video/ahead.go
  • internal/format/video/still.go
  • internal/format/video/settings.go
  • internal/format/video/grid.go
  • internal/format/video/picture.go
  • internal/guard/filmlayout_test.go
These apps are QA/developer tools.

⚙️ CodeRabbit configuration file

Files:

  • internal/guard/film_test.go
  • internal/guard/filmtiles_test.go
  • internal/format/video/pictures.go
  • internal/guard/generatorbytes_test.go
  • internal/format/video/ahead.go
  • internal/format/video/still.go
  • internal/format/video/settings.go
  • internal/format/video/grid.go
  • internal/format/video/picture.go
  • internal/guard/filmlayout_test.go
Go code.

⚙️ CodeRabbit configuration file

Files:

  • internal/guard/film_test.go
  • internal/guard/filmtiles_test.go
  • internal/format/video/pictures.go
  • internal/guard/generatorbytes_test.go
  • internal/format/video/ahead.go
  • internal/format/video/still.go
  • internal/format/video/settings.go
  • internal/format/video/grid.go
  • internal/format/video/picture.go
  • internal/guard/filmlayout_test.go
Check that documentation matches the actual code in this PR: commands, flags, config keys, file paths, build steps and examples must exist.

⚙️ CodeRabbit configuration file

Files:

  • CHANGELOG.md
All code in this repository is written by an AI coding agent (Claude Code).

⚙️ CodeRabbit configuration file

Files:

  • internal/guard/testdata/generator-golden.json
  • internal/gui/text/locale/registry/en.json
  • internal/gui/text/locale/registry/pl.json
  • internal/guard/film_test.go
  • internal/gui/text/locale/said/en.json
  • internal/guard/filmtiles_test.go
  • internal/format/video/pictures.go
  • internal/guard/generatorbytes_test.go
  • CHANGELOG.md
  • internal/format/video/ahead.go
  • internal/format/video/still.go
  • internal/format/video/settings.go
  • internal/format/video/grid.go
  • internal/format/video/picture.go
  • internal/guard/filmlayout_test.go
Source excerpt: **Words a user reads are English, with a flat hyphen and no semicolons.**

📄 CodeRabbit inference engine (CONTRIBUTING.md)

Files:

  • CHANGELOG.md
🪛 ast-grep (0.45.3)
internal/format/video/picture.go

[warning] 217-217: Narrowing a non-constant integer to a smaller fixed-width type (int8/int16/int32, uint8/uint16/uint32) can silently overflow or wrap, yielding negative or truncated values that are dangerous in size, length, or index logic. Validate the source value is within the target type's range before converting (e.g. bounds-check, or use a checked helper), and avoid narrowing untrusted or len()/parsed values.
Context: uint8((x+g.off)%256)
Note: [CWE-190] Integer Overflow or Wraparound.

(integer-overflow-narrowing-conversion-go)


[warning] 217-217: Narrowing a non-constant integer to a smaller fixed-width type (int8/int16/int32, uint8/uint16/uint32) can silently overflow or wrap, yielding negative or truncated values that are dangerous in size, length, or index logic. Validate the source value is within the target type's range before converting (e.g. bounds-check, or use a checked helper), and avoid narrowing untrusted or len()/parsed values.
Context: uint8((y+g.off)%256)
Note: [CWE-190] Integer Overflow or Wraparound.

(integer-overflow-narrowing-conversion-go)


[warning] 217-217: Narrowing a non-constant integer to a smaller fixed-width type (int8/int16/int32, uint8/uint16/uint32) can silently overflow or wrap, yielding negative or truncated values that are dangerous in size, length, or index logic. Validate the source value is within the target type's range before converting (e.g. bounds-check, or use a checked helper), and avoid narrowing untrusted or len()/parsed values.
Context: uint8((x+y+g.off)%256)
Note: [CWE-190] Integer Overflow or Wraparound.

(integer-overflow-narrowing-conversion-go)


[warning] 474-474: Narrowing a non-constant integer to a smaller fixed-width type (int8/int16/int32, uint8/uint16/uint32) can silently overflow or wrap, yielding negative or truncated values that are dangerous in size, length, or index logic. Validate the source value is within the target type's range before converting (e.g. bounds-check, or use a checked helper), and avoid narrowing untrusted or len()/parsed values.
Context: uint8(16 + (47red+157g+16*b+128)>>8)
Note: [CWE-190] Integer Overflow or Wraparound.

(integer-overflow-narrowing-conversion-go)

🔇 Additional comments (15)
internal/format/video/settings.go (1)

44-61: LGTM!

Also applies to: 106-119

internal/format/video/still.go (1)

59-65: LGTM!

Also applies to: 175-187

internal/format/video/grid.go (1)

25-26: LGTM!

Also applies to: 54-123, 176-176, 240-240

internal/format/video/picture.go (1)

37-57: LGTM!

Also applies to: 144-291, 345-440, 458-481

internal/format/video/ahead.go (1)

127-127: LGTM!

Also applies to: 172-172, 195-196

internal/format/video/pictures.go (1)

229-233: LGTM!

internal/guard/film_test.go (1)

556-557: LGTM!

Also applies to: 590-618

internal/guard/filmlayout_test.go (1)

1-178: LGTM!

internal/guard/filmtiles_test.go (1)

283-288: LGTM!

internal/guard/generatorbytes_test.go (1)

167-176: LGTM!

internal/guard/testdata/generator-golden.json (1)

349-358: LGTM!

CHANGELOG.md (1)

42-48: LGTM!

internal/gui/text/locale/registry/en.json (1)

1594-1595: LGTM!

internal/gui/text/locale/registry/pl.json (1)

320-320: LGTM!

internal/gui/text/locale/said/en.json (1)

1594-1594: LGTM!


📝 Walkthrough

Walkthrough

WebM picture bounds now allow dimensions up to 16,384 pixels per side and a maximum area of 8,192×4,352 pixels. Tile layouts are fitted to frame constraints, and film tiles are rendered and encoded from tile-local sources.

Changes

WebM Multi-Tile Picture Support

Layer / File(s) Summary
Picture limits and tile layout
internal/format/video/settings.go, internal/format/video/grid.go, internal/format/video/still.go, internal/format/video/choose.go
WebM picture limits now reflect the stated AV1 level bounds. Layout selection splits oversized tile dimensions to fit frame limits, and the one-tile request rejection is removed.
Tile rendering and encoding
internal/format/video/picture.go, internal/format/video/pictures.go, internal/format/video/ahead.go
Rendering supplies tile-local planes. Film painters use shared base planes and tile-sized buffers. Tile encoding receives the source and position for each region.
Layout validation and limit descriptions
internal/guard/*, internal/guard/testdata/generator-golden.json, CHANGELOG.md, internal/gui/text/locale/registry/*, internal/gui/text/locale/said/*
Tests check picture limits, generated layouts, decoding, and generator outputs. The changelog and interface text describe the updated limits, and obsolete multi-tile warning messages are removed.

Priority: ➖ Normal

Estimated code review effort: 4 (Complex) | ~45 minutes

Change: Feature

Sequence Diagram(s)

sequenceDiagram
  participant CodedSize
  participant gridFor
  participant painter
  participant encodeTile
  CodedSize->>gridFor: geometry and timeline FPS
  CodedSize->>painter: keyer with selected grid
  loop Each tile
    CodedSize->>painter: source for tile rectangle
    painter-->>CodedSize: tile planes and position
    CodedSize->>encodeTile: source and position
  end
Loading

Suggested labels: enhancement, performance, ui

Merge Risk: ⚪ Minimal · up to 8a6ed

WebM output now supports pictures up to 8192x4352 using multiple AV1 tiles and uses less memory. Pictures within the old bound keep their bytes. No concrete defect was found, and the change appears ready to merge once CI passes.

🚥 Pre-merge checks | ✅ 14
✅ Passed checks (14 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly describes the WebM picture-size increase and adds specific AV1 and memory context. It meets the plain-language and length requirements.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Tests For Changed Behavior ✅ Passed The PR changes video runtime behavior and adds tests for it. filmlayout_test.go checks layout constraints across dimensions up to the new bounds; film_test.go checks rejection beyond the new limit…
No Secrets Or Debug Leftovers ✅ Passed The changed-file inventory contains no CLAUDE.md, CLAUDE.local.md, AGENTS.md, .claude, or .env files. Scans of added diff lines found no credentials, personal email addresses, private URLs, local abso…
No Hardcoded Ui Styling ✅ Passed The PR does not change UI controls or styling code. Its GUI-path changes update localization text in JSON files. Its HTML changes update the displayed WebM width range only. No literal colors, fonts, …
No Obvious Performance Problems ✅ Passed The changed production paths show no listed performance problem. cutToFit and cutEach process bounded tile-layout slices, and the tile limits cap layouts at 64 rows and 64 columns. The painter pro…
Desktop Robustness ✅ Passed No explicit desktop-robustness failure is introduced. The changed application code adjusts WebM size limits, tile layout, and painter memory use. The changed locale files and web pages change limit te…
Safe File Parsing ✅ Passed No unsafe file-parsing change is present. The changed JSON files contain fixed translation strings and golden-test metadata; all five parse as valid JSON. The WebM code changes generate video from bou…
System Changes Are Reversible ✅ Passed The diff changes WebM/AV1 picture limits, tile layout, and picture rendering and memory use, plus tests and user-facing text. It does not add or change code that modifies network filters, proxies, fir…
Clear User-Facing Text ✅ Passed The PR changes user-facing limit descriptions and documentation, but introduces no vague controls or button labels. The dimension ranges include units, and the combined AV1 picture limit is stated in …
No Resource Leaks ✅ Passed No new resource leak or unbounded accumulation is evident in the changed code. picture.go retains shared base planes and strip buffers for reuse, and gives each painter a tile-sized buffer. These bu…
Scope, Duplication And Docs ✅ Passed The changes stay within the described WebM size-limit, tile-layout, and memory-use work. The description covers the layout guards and memory refactor; the diff adds only related encoding changes, guar…
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot added enhancement New feature or request performance ui labels Oct 7, 2026
@donislawdev
donislawdev merged commit 2553cfe into main Oct 7, 2026
25 checks passed
@donislawdev
donislawdev deleted the format/webm-large-pictures branch October 7, 2026 11:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request performance ui

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant