Files
KohakuHub/scripts/dev
narugo1992 c84fa1d24a fix(ui/indexed-tar): repair in-archive download + parquet/safetensors preview
Three real-world bugs surfaced once the modal was actually used:

1. Member download returned the entire tar instead of the slice.
   The memberView wrapper used by the Download button copied
   {path, name, size, sha256} but dropped .offset; downloadMember
   then re-called extractMemberBytes with offset === undefined,
   the resulting "bytes=undefined-..." Range header was silently
   ignored by MinIO, and the response was the full archive. Fix:
   include offset in memberView, cache the already-extracted
   bytes so the download reuses them with no second round-trip,
   and have extractMemberBytes throw a clear TypeError on shape
   misuse instead of delegating to the network.

2. Parquet / safetensors preview inside an archive failed with a
   CORS-shaped "Browser blocked the request" error. The cause was
   handing FilePreviewDialog a `blob:` URL — hyparquet's
   asyncBufferFromUrl issues HEAD + Range against the source, and
   `blob:` URLs do not honour those reliably. The safetensors
   path showed the same failure as a "header too large" garbage
   value because the intercepted response carried wrong bytes at
   offset 0. Fix: add parseSafetensorsMetadataFromBuffer +
   parseParquetMetadataFromBuffer that work on the in-memory
   bytes the modal already has; FilePreviewDialog now accepts a
   `bytes` prop and routes to the from-buffer parsers.

3. Inner FilePreviewDialog auto-opened on prop change and stacked
   over the "Open metadata preview" button, intercepting clicks.
   Fix: only open it on explicit button click; clear it on member
   close.

README files inside the archive (with or without an extension) now
classify as markdown / text by basename instead of falling through
to "binary". Fixes the missing icon report.

Real-browser verification with Playwright drove the actual flow:
parquet + safetensors metadata dialogs render with the seeded
columns, tensors, parameter counts and __metadata__ — covered by
new from-buffer unit tests plus the screenshots collected during
the verification run.

Danbooru picks regenerated with order:random per the user request:
24 posts spanning post-id 3.6M – 11.2M (no longer adjacent IDs),
same 16-arknights-by-rating + 8-mixed-IP layout.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-27 17:44:08 +08:00
..