The art and dates listing fields the UI needs #45
Replies: 4 comments 3 replies
|
I would restart this with a complete optional image model for the current Borea designs and Markdown descriptions, plus listing dates that every client can calculate the same way. 1. Let authors define each image that a listing can showI propose optional authored image records for an icon, a banner, an ordered gallery, and images that the Markdown description can use: description = """
Configure the guidance mode in the settings window.

"""
[images.icon]
url = "https://example.invalid/my-mod-icon.png"
sha256 = "0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF"
license = "CC-BY-4.0"
attribution = "Artwork by Example Artist"
source = "https://example.invalid/original-artwork"
[images.banner]
url = "https://example.invalid/my-mod-banner.webp"
sha256 = "1234567890ABCDEF1234567890ABCDEF1234567890ABCDEF1234567890ABCDEF"
license = "CC-BY-4.0"
attribution = "Artwork by Example Artist"
[[images.gallery]]
url = "https://example.invalid/flight-view.png"
sha256 = "2345678901ABCDEF2345678901ABCDEF2345678901ABCDEF2345678901ABCDEF"
license = "CC-BY-4.0"
alt = "The flight guidance display during a lunar descent"
caption = "Powered descent guidance in flight"
[[images.description]]
id = "settings-window"
url = "https://example.invalid/settings-window.png"
sha256 = "3456789012ABCDEF3456789012ABCDEF3456789012ABCDEF3456789012ABCDEF"
license = "CC-BY-4.0"
For a mod or mod loader, all images are live listing facts. A mod pack has no separate live listing document because every pack version is one complete immutable authored document. 2. Keep the image on the author's hostThe index does not copy or serve the image. The listing checks fetch the image and require:
The 256 KiB icon limit follows the current Modrinth icon limit and should be enough for a square listing image. A client must repeat the applicable byte limit, type, dimensions, animation, and digest checks because the host can change after publication. The index needs a new submission rule for images. 3. Derive listing dates instead of asking authors to write themRFC 0031 already carries the source timestamps:
Authors should not add a second listing date that can disagree with those values. I propose two optional fields generated into each listing entry in the snapshot:
Both are ISO 8601 UTC timestamps. Modrinth also separates a project's published and updated timestamps from its version dates. 4. Compatibility with current clientsAll image records and derived date fields are optional. 5. I especially consider these decisions to be still open
If this scope is acceptable, the RFC can specify the exact TOML and snapshot schemas, the validation errors, the rights statement in the listing guidance, and fixtures for each image role, a Markdown image reference, no images, a changed image behind the same URL, unsafe network targets, no releases, all versions unavailable, stable plus dev releases, a yanked newest release, a retracted newest pack version, and a backfilled older release. References: |
|
Some thoughts from building the Borea screens that would use this. Numbered to match. 1. Images Please also cap the count, not just the size. A 4096x4096 image decodes to about 64 MB, so a big gallery can eat a lot of client memory. Something like max 8 gallery and 8 description images would give clients a real bound. 2. Hosting It would also help if the checker re-fetched images now and then and put a digest mismatch into Clients should probably offer a setting to not load images from author hosts at all, given the IP exposure. That's a client call, but the spec could recommend it. 3. 4. Dates Open questions
Not covered yet |
|
What I had in my mind is to only have a 1:1 thumbnail. We need it in 3 sizes (small/medium/large), for list, tile and detail page. The idea behind it was to simplify the spec requirements and focus the art to help scanning the list and identification of the content. All the rest, like banner or gallery I was expecting to delegate for the content description field, like a markdown and fetch it on demand, so each modder can decide if they want a wall of text os many many images. Optionally we can add a tab inside the mod detail page that is called "gallery", but I still prefer the flexibility of a rich description box. The reason to try to "keep it simple" is mainly that it is painful for people without art skill to generate quality art assets, and we end up with ugly art in the app. |
|
Decided by RFC 0058, which gives an authored document an optional |
Uh oh!
There was an error while loading. Please reload this page.
The UI work in Borea#8 has reached the point where the mockups ask the metadata format for things
spec_version = 1does not carry.RFC 0031's own evolution rule says an added optional field is not a break and does not bump the version, and RFC 0035 already took that path: it replaced RFC 0031's
[install]table with a superset and stayed atspec_version = 1.The only thing in here that would be a real break is making an image required, and nobody is proposing that.
Please reference the numbers so the thread stays followable.
1. What images
Every mockup in Borea#8 shows an image per listing, on three surfaces: a small thumbnail in the Discover rows, a larger one in the detail header, and a 1:1 tile with the title laid over it on Home.
The format has no image field at all. I just forgot it when I proposed RFC 0031.
The options as I see them, each having a bigger cost due to more files:
Two things regardles of whichever shape wins:
listingblock RFC 0031 stamps into each release file, the same carve-outstatusandsuperseded_byalready have. Otherwise changing your icon leaves every past release showing the old one.2. Where the image actually live
RFC 0025 states as a non-goal that we host no content files.
A. The author names a URL in the authored file.
Cheapest to specify and cheapest to author.
Costs: links rot, and a dead icon is a broken listing page forever; the client fetches from an arbitrary host, so a list view is N requests to N hosts and every one of them learns the user's IP; nothing guarantees dimensions or size unless the checks fetch the image anyway; and the snapshot stops being enough on its own, which breaks the offline-first property RFC 0033 and RFC 0017 both lean on.
B. The image is committed into
content-indexand the index serves it.One host, one CDN, one cache. The bytes are moderatable, and shippable offline with the snapshot, and dimensions can be enforced at publish time.
Costs: binary blobs enter git history and cannot be pruned later; changing your icon is a pull request; the checks need real image validation; the index Repos would get very big.
All reactions