Monday, September 7, 2026

stb_avif: a vibing effort with LLM

some months ago I was thinking about: can we have a minimal stb_image alike AVIF decoder?

I asked my friend @lenchan139 and he happily vibe me thing exactly what I asked for: https://github.com/lenchan139/stb_avif, but what is working is just HEIF container parsing with a dav1d backend and YUV-to-RGB conversion, and its internal AV1 decoder is a stub at all.

He did try to vibe internal AV1 decoder but everything is not working, maybe due to missing references and/or samples.

2 months later (which is 3 weeks before today), I finally have time to pick it up, trying to create a working version.

First, I asked ChatGPT to give me a set of headers for new internal AV1 decoder, after that free plan limit triggered (decoder started to produce some correct pixels at the time) and I switched to use opencode free models for later tasks.

First opencode free model is DeepSeek4 Flash free, which is quite decent. But in the time, the free period of DS4F ends and I have to use opencode's Big Pickle for a while to fix decoder bugs.

Then I tried other free models like nemotron 3 ultra and muse spark 1.2 but their output are not satisfying me.

After that opencode and openrouter giving out unlimited usage "Ox Alpha" for a short period of time and I used it a lot, which is quite satisfying and quite progressed.

Good times are short and Ox Alpha free period ended, and there is no alternatives that has same level as Ox Alpha, I went back to old path: pack my files and upload it to ChatGPT and ask questions. ChatGPT working for about 25 minutes and tried to give some answers, it may give out some bugfix patches or it give out intermediate answer without any patch.

After some more testings, I found that Mimo v2.5 free is better than Big Pickle and still available to use and I switched to it for my later vibing.

Later workflow is like a loop: adding non-working new sample files, tell LLM about that and it started testing and tracing the error. When opencode free usage is used up, switch to new IP and continue.

Vibed for 3 weeks and now stb_avif is quite usable with internal AV1 decoder.

My commits are pushed and I created a PR to upstream, as I posted upstream link to Hacker News in the past.

Conclusion: as a F2P(Free-to-Play) LLM user, you can still able to code(or say, vibe) something big.

Saturday, September 5, 2026

Weekly browser binaries (20260905)

New build of Serpent/UXP for XP!

Test binary:
Win32 https://o.rthost.win/basilisk/basilisk52-g4.8.win32-git-20260905-3219d2d-uxp-11ae877de0-xpmod.7z
Win64 https://o.rthost.win/basilisk/basilisk52-g4.8.win64-git-20260905-3219d2d-uxp-11ae877de0-xpmod.7z

source code that is comparable to my current working tree is available here: https://github.com/roytam1/UXP/commits/custom

IA32 Win32 https://o.rthost.win/basilisk/basilisk52-g4.8.win32-git-20260905-3219d2d-uxp-11ae877de0-xpmod-ia32.7z

source code that is comparable to my current working tree is available here: https://github.com/roytam1/UXP/commits/ia32

NM28XP build:
Win32 https://o.rthost.win/palemoon/palemoon-28.10.7a1.win32-git-20260905-d849524bd-uxp-11ae877de0-xpmod.7z
Win32 IA32 https://o.rthost.win/palemoon/palemoon-28.10.7a1.win32-git-20260905-d849524bd-uxp-11ae877de0-xpmod-ia32.7z
Win32 SSE https://o.rthost.win/palemoon/palemoon-28.10.7a1.win32-git-20260905-d849524bd-uxp-11ae877de0-xpmod-sse.7z
Win64 https://o.rthost.win/palemoon/palemoon-28.10.7a1.win64-git-20260905-d849524bd-uxp-11ae877de0-xpmod.7z
Win7+ x64 AVX2 https://o.rthost.win/palemoon/palemoon-28.10.7a1.win64-git-20260905-d849524bd-uxp-11ae877de0-w7plus-avx2.7z

Official UXP changes picked since my last build:
- Replace strnlen with memchr. See code comment. (a74a510873)
- [DOM] Keep resized windows within reasonable bounds. (d91415b005)
- [gfx] Hold a strong ref to platform font entry. (3c098a9891)
- [gfx] Add buffer integer limit check to NVImage::GetAsSourceSurface. (60b7352394)
- [gfx] Check format 4 subtable length and Zero newly-allocated range. (1d17f9bf14)
- [gfx] Clean up cairo-win32-printing-surface.c (1d84253588)
- [layout] Prevent recursion of callbacks in PressShell. (d5fd5bf3ca)
- Bug 2057204 - use the right AddSystemEventListener variant with nsFileControlFrame::mMouseListener (86c8267530)
- [image] Simplify and further improve handling of destroying raster images. (bfe7453ddf)
- Resolve various assertions in debug builds (a5e46d4bbd)
- [DOM] Improve MediaInfo/Data a little. (887b1940d4)
- [gfx] Skia: Port grey mode pixelspace fix. (832062fa67)
- [parser] Only check for high surrogates when intending to avoid split pair. (0ae79a0f7e)
- Bug 2058622 - Validate selected options entries. (7b26e2f7cd)
- No issue - remove duplicate HTMLWin32ObjectAccessible from build. (3151562123)
- [DOM] Remove content from parent node before appending. (c9c1f678d3)
- [DOM] Clear mDocumentChildren after XSLT branch consumes it in DidBuildModel. (3687adcaec)
- Bug 2027380 - pass offset-adjusted pointer to SEC_ASN1GetSubtemplate in QuickDER call sites. (e4ca42477f)
- Bug 2029289 - fix off-by-one offset in pk11_buildNickname cert_id branch. (56fc8b29ec)
- Bug 2029750 - Reject undersized IV and key SECItems in PBES2 cipher dispatchers. (5227d5a9a6)
- Bug 2029794 - handle NSSCertificate identity changing in __CERT_AddTempCertToPerm (f86aa85f98)
- Bug 2027388 - add defensive check on pk11_HandUnwrap key size. (d8ef293df7)
- [DOM media] Reset CORS mode as-appropriate. (8980dbb8fc)
- [network] Reject NUL bytes in chunked trailer and chunk-size lines. (14e880ec29)
- [DOM] Hold a strong ref to the composed document in nsFocusManager. (0dd6e1178c)
- [editor] Hold a strong ref. (e3fe86d097)

No official Pale-Moon changes picked since my last build.

No official Basilisk changes picked since my last build.

My changes picked since my last build:
- Revert "Issue #2473 - implement :has() CSS pseudo class" (906f4cb77a)
- Revert "No issue - remove duplicate HTMLWin32ObjectAccessible from build." (6116fc571f)

Update Notice:
- You may delete file named icudt*.dat and icu63.dll inside program folder when updating from old releases.

* Notice: From now on, UXP rev will point to `custom` branch of my UXP repo instead of MCP UXP repo, while "official UXP changes" shows only `tracking` branch changes.
New build of BOC/UXP for XP!

Test binary:
MailNews Win32 https://o.rthost.win/boc-uxp/mailnews.win32-20260905-40a79c75-uxp-11ae877de0-xpmod.7z
BNavigator Win32 https://o.rthost.win/boc-uxp/bnavigator.win32-20260905-40a79c75-uxp-11ae877de0-xpmod.7z

source repo (excluding UXP): https://github.com/roytam1/boc-uxp/tree/custom

* Notice: the profile prefix (i.e. parent folder names) are also changed since 2020-08-15 build, you may rename their names before using new binaries when updating from builds before 2020-08-15.

--

New build of HBL-UXP for XP!

Test binary:
IceDove-UXP(mail) https://o.rthost.win/hbl-uxp/icedove.win32-20260905-id-656ea98-uxp-11ae877de0-xpmod.7z
IceApe-UXP(suite) https://o.rthost.win/hbl-uxp/iceape.win32-20260905-id-656ea98-ia-c642e3c-uxp-11ae877de0-xpmod.7z

source repo (excluding UXP):
https://github.com/roytam1/icedove-uxp/tree/winbuild
https://github.com/roytam1/iceape-uxp/tree/winbuild
New build of post-deprecated Serpent/moebius for XP!
* Notice: This repo will not be built on regular schedule, and changes are experimental as usual.
** Current moebius patch level should be on par with 52.9, but some security patches can not be applied/ported due to source milestone differences between versions.

Test binary:
Win32 https://o.rthost.win/basilisk/basilisk55-win32-git-20260905-69d8d0eeb-xpmod.7z
Win64 https://o.rthost.win/basilisk/basilisk55-win64-git-20260905-69d8d0eeb-xpmod.7z

repo: https://github.com/roytam1/basilisk55

Repo changes:
- Revert "ported from UXP: Issue #2473 - implement :has() CSS pseudo class (aed631e5)" (f37ae9305)
- import from UXP:
 - Bug 2027380 - pass offset-adjusted pointer to SEC_ASN1GetSubtemplate in QuickDER call sites. (e4ca42477f)
 - Bug 2029289 - fix off-by-one offset in pk11_buildNickname cert_id branch. (56fc8b29ec)
 - Bug 2029750 - Reject undersized IV and key SECItems in PBES2 cipher dispatchers. (5227d5a9a6)
 - Bug 2029794 - handle NSSCertificate identity changing in __CERT_AddTempCertToPerm (f86aa85f98)
 - Bug 2027388 - add defensive check on pk11_HandUnwrap key size. (d8ef293df7) (ca2859464)
- import from UXP: Replace strnlen with memchr. See code comment. (a74a5108) (60dd79100)
- ported from UXP: [DOM] Keep resized windows within reasonable bounds. (d91415b0) (241221671)
- import from UXP: [gfx] Hold a strong ref to platform font entry. (3c098a98) (a97442845)
- ported from UXP: [gfx] Add buffer integer limit check to NVImage::GetAsSourceSurface. (60b73523) (da097637e)
- import from UXP: [gfx] Check format 4 subtable length and Zero newly-allocated range. (1d17f9bf) (2a03a5cdc)
- import from UXP: [gfx] Clean up cairo-win32-printing-surface.c (1d842535) (62bbea2f1)
- ported from UXP: [layout] Prevent recursion of callbacks in PressShell. (d5fd5bf3) (0be2c29bf)
- import from UXP: Bug 2057204 - use the right AddSystemEventListener variant with nsFileControlFrame::mMouseListener (86c82675) (8431cec2d)
- import from UXP: [image] Simplify and further improve handling of destroying raster images. (bfe7453d) (b0b4201ff)
- ported from UXP: Resolve various assertions in debug builds (a5e46d4b) (b1721e606)
- import from UXP: [DOM] Improve MediaInfo/Data a little. (887b1940) (28f2ef572)
- import from UXP: [gfx] Skia: Port grey mode pixelspace fix. (832062fa) (b90fb195b)
- import from UXP: [parser] Only check for high surrogates when intending to avoid split pair. (0ae79a0f) (337ccdc67)
- import from UXP: Bug 2058622 - Validate selected options entries. (7b26e2f7) (0c41b7d2c)
- import from UXP: [DOM] Remove content from parent node before appending. (c9c1f678) (c0e7cbedd)
- import from UXP: [DOM] Clear mDocumentChildren after XSLT branch consumes it in DidBuildModel. (3687adca) (4fde6fed6)
- import from UXP: [DOM media] Reset CORS mode as-appropriate. (8980dbb8) (2174ea5e0)
- import from UXP: [network] Reject NUL bytes in chunked trailer and chunk-size lines. (14e880ec) (8a2f7d830)
- import from UXP: [DOM] Hold a strong ref to the composed document in nsFocusManager. (0dd6e117) (7947eff86)
- import from UXP: [editor] Hold a strong ref. (e3fe86d0) (69d8d0eeb)