Repository navigation
docs: chapter thumbnails and branding uploads work with local artwork storage #36
Description
Three manual pages say chapter thumbnails and branding uploads need a public S3 bucket. The server stores both in artwork storage, which is local disk on a default install. As a result, admins of single-host servers are told to set up S3 they don't need, or they conclude these features aren't available to them. The chapter thumbnail steps also send admins to Admin > Scheduled Tasks to look for failures, but the backfill task isn't listed there.
The code links below are pinned to silo-server commit 20866241. Check each claim against current code before publishing. The server's in-app text also still says S3 is required, in the library editor's Generate chapter thumbnails card and in the upload warning in Appearance settings. That text is wrong too and will be fixed separately in the server repo, so don't copy it into the manual.
The author of Silo-Server/silo-server#1617 was invited to fix the chapter thumbnail section. Check for their PR before starting.
What to change
src/content/docs/docs/running-a-server/playback.md ("Generate chapter thumbnails")
- Replace "Preview images for chapters need public S3 storage, even when artwork uses local disk." with "Silo stores chapter preview images in artwork storage, on local disk or in S3."
- Delete step 1, "Set up and test public storage.", and renumber the remaining steps.
- Replace step 4 with "Let background generation run. Silo checks for missing previews every six hours. If previews don't appear, search Admin > Logs for the
chapterthumbscomponent."
src/content/docs/docs/get-started/installation-options.md ("Decide where artwork will live")
- Delete "Chapter thumbnail generation requires public asset S3 storage."
src/content/docs/docs/running-a-server/branding.md (step 1)
- Replace "Uploads need a public S3 bucket, set in Storage & Database; see artwork storage." with "Silo saves uploads in artwork storage, on local disk or in S3."
Code references
- The chapter thumbnail service writes to the artwork store,
deps.Blobs.Assets: cmd/silo/main.go#L1513-L1521 - The library editor enables Generate chapter thumbnails whenever an artwork store exists: internal/api/handlers/libraries.go#L423
- With Local disk, or Automatic and no public bucket, the artwork store is a directory on disk: internal/blobstore/open.go#L55-L72
- Branding uploads use the same artwork store: cmd/silo/main.go#L2742-L2746
- Branding uploads are enabled whenever that store exists: internal/apiv2/branding.go#L69 and internal/branding/service.go#L40-L41
- The Chapter Thumbnail Backfill task is hidden (
IsHidden()returns true) and runs every six hours: internal/taskmanager/tasks/chapter_thumbnail_backfill.go#L31-L37 - The Scheduled Tasks page lists only tasks that aren't hidden: web/src/hooks/queries/admin/tasks.ts#L29-L35 and internal/taskmanager/manager.go#L341-L343
- Silo logs each thumbnail failure as a warning with
componentset tochapterthumbs: internal/chapterthumbs/service.go#L313 and #L329
AI disclosure: drafted with Claude Code (claude-opus-5-5[1m]) from an audit of the server repository's docs against the manual and current server code.
Activity
Tobechukwu-Njoku commentedon Sep 29, 2026
The chapter thumbnail parts of this are in #44. I left the branding line for whoever takes it.
For the server-side text you mentioned, I can open a PR in silo-server if nobody has started it. It would cover three strings that still say S3 is required on current
main:LibraryFormSections.tsx, Generate chapter thumbnails description: "Stores chapter preview images in the configured public asset S3 bucket."LibraryFormSections.tsx, the disabled-state note: "Public asset S3 storage is required before this can be enabled." It only shows when no artwork store exists, so it would say that instead.AppearanceSettings.tsx, upload warning: "Image uploads need a public S3 bucket"Happy to leave it if you already have it in hand.
Tobechukwu-Njoku commentedon Sep 29, 2026
Nevermind on the server-side text: Silo-Server/silo-server#1664 covers it, against Silo-Server/silo-server#1636.