Skip to content

Library editor and Appearance settings say S3 is required for local-storage features #1636

Description

@Quick104

Problem

Two admin screens tell administrators they need a public S3 bucket for features that work with local artwork storage:

  • The library editor's Generate chapter thumbnails card says it "Stores chapter preview images in the configured public asset S3 bucket", and its warning reads "Public asset S3 storage is required before this can be enabled."
  • Settings > Appearance shows "Image uploads need a public S3 bucket, set in Storage & Database settings." when logo and icon uploads are unavailable.

Both features write to the artwork store, which is a local directory on a default install. The library switch is enabled whenever an artwork store exists, and branding uploads are available on the same condition. A single-host administrator reading this text sets up S3 they don't need, or concludes the feature isn't available to them. The manual repeated the same claim; Silo-Server/siloserver.org#36 corrects it.

Found by reading the code while auditing the docs for #1635; not reproduced on a running server.

Fix

  • Chapter thumbnails card: say the images go to artwork storage (local disk or S3). The warning, shown only when no artwork store exists, should point to artwork storage in Storage & Database rather than to S3.
  • Appearance: same change for the upload warning. Keep the "Restart the server to finish enabling image uploads." branch, but check whether its s3.public_bucket condition still describes the case where storage is configured and not yet active, now that local storage exists.

Technical notes

  • web/src/components/admin/libraries/LibraryFormSections.tsx:458 (description) and :462 (warning).
  • web/src/pages/admin-settings/AppearanceSettings.tsx:130 (s3Configured) and :236 (warning text).
  • chapter_thumbnails_supported is h.ArtworkStore != nil (internal/api/handlers/libraries.go), and ArtworkStore is deps.Blobs.Assets (internal/api/router.go:670).
  • Branding storage_available comes from Branding.HasStorage() (internal/apiv2/branding.go:69); the branding store is also deps.Blobs.Assets (cmd/silo/main.go).
  • deps.Blobs.Assets is a filesystem store when the backend is local (internal/blobstore/open.go).

AI disclosure

  • Harness: T3 Code (Claude Code agent harness)
  • Tool(s): Claude Code, GitHub CLI
  • Model(s): claude-opus-5-5
  • Involvement: AI-assisted; filed at the maintainer's request
  • Adversarial review: n/a

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions