Community PBR audit and review¶
Community materials are admitted in three separate tranches. They do not
share a bake merely because all three ultimately use _n and _s files.
- Terrain and solid nodes. Tile-aware structural upscale, bounded relief, class-aware roughness and guarded metalness. Repeating faces are checked for wrap seams.
- Billboards, plants and flat world items. Alpha and silhouette are authoritative. Transparent pixels must remain neutral, relief is shallow, foliage may use back-lighting, and animation frames stay registered.
- Creatures. UV atlases are processed without tiling. Atlas islands, painted eyes and markings must not move, opposite edges must not be treated as neighbours, and a rendered model turntable is required for acceptance.
The intake manifests under pbr_packs/manifests/ are candidate lists, not a
claim that the images are already licensed, baked or approved. Package
versions and hashes are in pbr_packs/COMMUNITY_LOCK.json.
Licence gate¶
For every selected source image, record the exact archive, owning mod, source path, author, media licence and required attribution. An archive-wide licence is sufficient only when it unambiguously covers all media. A mixed notice requires a per-file mapping. A ContentDB label is corroborating metadata, not a substitute for the notice inside the pinned archive. Ambiguous files are excluded, or recorded under the strictest licence they could be under, rather than assigned the most convenient nearby licence.
A file the package's own notices do not name, where nothing in the archive says otherwise, takes the media licence the author declares for the package on ContentDB. A permissive file (CC0, WTFPL, MIT) inside a package declared CC BY or CC BY-SA is no contradiction, since it can be redistributed under either. Where the package's own files show the declared licence is understated (CC BY-SA files in a package declared CC BY or MIT), such a file takes the strictest licence among them instead. A file whose notice states a licence outside the accepted set (non-commercial terms, say) or one that cannot be identified ("CC", "CCPL") is still excluded, as is a file credited to another package whose terms have not been read.
A bare "CC" or "Creative Commons" with no licence kind or version is usable (the owner's decision of 2026-10-05: it has long been used loosely, often to mean CC0). Such a file is recorded under the strictest reading Goanna can comply with, CC BY-SA with attribution to the author named, so it is honoured whichever licence was meant. "CCPL" and stated non-commercial or no-derivatives terms still exclude a file.
GPL-3.0 media is accepted, for texture packs only. Goanna's code is
LGPL-2.1-or-later and the packs are separate works shipped beside it, each
under its own source's terms as noted in its ATTRIBUTION.md, so a GPL
texture makes only the maps derived from it GPL-3.0. Their source, in the
GPL's sense, is the spec each was authored from under tools/pbr/pbr_author/,
and the pack's attribution says where that is. AGPL media is still
rejected. A package's software licence never qualifies its media: that takes
a notice about the media. pbr_packs/MEDIA_POLICY.json
is the machine-readable allow/deny list and tools/pbr/check-pbr-licenses.py
enforces it against both the source lock and reviewed per-file ledgers.
Where the package-level notice is mixed, the summary string in
pbr_packs/MEDIA_AUDIT.json does not qualify anything on its own. The gate
resolves that package from the exact media_license recorded against each
selected file in its intake manifest under pbr_packs/manifests/, and fails
the package if the mapping is missing, if any selected file has no exact
licence, or if any recorded licence is outside the accepted set. A rejected
package-level licence still fails before the mapping is consulted.
Not yet under the gate: the bundled Mineclonia pack predates the source lock,
so it has no pinned release, no archive hash and no audit row, and
check-pbr-licenses.py iterates the lock and therefore never sees it. Its
terms are clean on inspection, with LEGAL.md separating GPLv3 code from
media that is CC BY-SA 4.0 (Pixel Perfection and Pixel Perfection Legacy)
with CC0 menu images, but clean on inspection is not the same as checked.
The current audit groups are:
| Package group | State | Reason |
|---|---|---|
| Advtrains, Glass Stained, Lanterns, Mesecons, Moreblocks, Morelights, Nether, Pipeworks, Stainedglass | archive-wide media terms found | Derivatives are permitted with the named attribution/share-alike terms. |
| Animalia, Dungeons Plus, Natural Biomes | single-project terms found | The included notice covers the project; Dungeons Plus has no qualifying node textures. |
| Ebiomes, Ethereal, Everness, Fachwerk, Techage, X-Decor | per-file audit required | Their notices identify multiple authors, licences, imported works or submods. |
| Darkage | excluded | ContentDB declares CC0 media while the archive contains an MIT notice without a clear media scope; it is absent from every intake manifest. |
| Draconis | archive-wide media terms found | Release 34129's only notice is MIT by ElCeejo, with no other author or term named, and ContentDB's MIT media label agrees. |
| Simple Airship | archive-wide media terms found | Release 30601's license.txt puts all media under CC BY 4.0. |
| Cottages | per-file mapping recorded | Release 22105's README names media per file; 22 node textures are recorded, the rope ("CC") and unnamed road textures excluded. |
| Edit Skin | per-file mapping recorded | Release 30155's media_credits.txt names each part's author and licence; the 9 parts it omits are excluded. |
| Basic Materials | archive-wide media terms found | Release 38908 puts all media under CC BY-SA 4.0. |
| DF Caverns | per-file mapping recorded | Release 22198's submods each carry a textures/license.txt; 185 node textures are recorded, derivatives of Minetest Game and caverealms under those sources' licences. The tunnel tube, recoloured from More Trees' palm trunk, is CC BY-SA 4.0; big webs takes the package's strictest licence; unnamed icons are excluded. |
| Nextgen Fungi | archive-wide media terms found | Release 20073 credits its six textures to StarNinjas, CC BY-SA 3.0. |
Mineclonia Furniture and Decorations (mcl_decor) |
archive-wide media terms found | Release 35460 puts its media under CC BY-SA 4.0 and credits each Pixel Perfection source. |
| Steampunk Blimp | archive-wide media terms found | Release 38331 gives its model and textures as APercy's, CC BY-SA 3.0. |
| 3d_armor | archive-wide media terms found | Release 37711's LICENSE.md places the armour and shield textures under CC BY-SA 3.0 by davidthecreator; the armour stand, named by no notice, is excluded. |
| Mobs Animal | per-file mapping recorded | Release 39178's license.txt is per file; ContentDB's label matches none of it. The sheep (non-commercial) and rats ("CCPL") are excluded. |
| Mobs Monster | per-file mapping recorded | Release 38244's license.txt is per file; skins it does not name are excluded. |
| X Farming | per-file mapping recorded | Release 38796's LICENSE.txt credits every texture; 331 world textures are recorded, all CC BY-SA 4.0 or 3.0, two built on Farmer's Delight art under MIT. |
| More Trees | archive-wide media terms found | Release 38501's LICENSE puts all media under CC BY-SA 4.0 and names the author of each file. |
| Goblins | per-file mapping recorded | Release 32959's README names the skins, models and mushrooms CC BY-SA 3.0 (the king from the SummerFields pack); molten gold, lightning and unnamed icons are excluded. |
| VoxeLibre | per-file mapping recorded | Release 38585's LEGAL.md is mixed and mods carry their own notices. tools/pbr/pbr_audit_voxelibre.py records the most specific notice for each of the 902 authored stems in pbr_packs/manifests/voxelibre-pack-v1.sources.json. 38 are GPL-3.0: mcl_fences places its textures under GPLv3 and mcl_flowers has an unscoped GPLv3 line, read as covering them. Mineclonia's copies of both notices say WTFPL. |
| Asuna | excluded | Its own LICENSE opens "this game as a whole is released under GPLv3", because it aggregates GPL works. ContentDB's CC BY-SA 4.0 label is the corroborating metadata that cannot stand in for that. It does enumerate every included work with its licence file, so a work may still be admitted through its own upstream package. |
| Minetest Game | archive-wide plus per-mod attribution | Release 38214 is pinned; its LGPL code is irrelevant to the separately CC BY-SA 3.0 media. Its terrain tranche contains 87 solid-node surfaces. |
| Less Dirt | per-file mapping recorded | Release 13232 carries per-family CC BY-SA notices, so the archive-wide string is a summary. Its 42 selected files are each recorded CC BY-SA 3.0 at intake. |
Automated acceptance gate¶
Run tools/pbr/check-pbr-quality.py against every completed tranche before
copying anything into pbr_packs/. It rejects malformed pairs, normal fields
outside the tangent hemisphere, directional bias, unbounded or flat height,
excessive smoothness for the material class, dark diffuse-authored art
incorrectly made metallic, broken transparent regions and excessive
generated-albedo colour drift. Strong wrap seams are reported for review.
The gate is intentionally followed by visual review:
- a source/albedo/normal/height/roughness contact sheet;
- representative Godot material-ball or cube renders under neutral, grazing and coloured light;
- a tiled plane for terrain, an alpha-card scene for billboards and a model turntable for creatures;
- reject, reclassify or rebake individual failures rather than weakening a threshold to make a batch pass.
tools/pbr/test-pbr-quality.py exercises the failure cases with synthetic maps.
The current pre-review manifests contain 808 community terrain candidates,
453 billboard/item/plant candidates, 139 creature candidates and 87 Minetest
Game terrain candidates. The original 33-image pilot was withdrawn after the
new gate rejected 31 maps,
mostly for unconstrained height. It is evidence for the gate, not a baseline
to grandfather into a release.
Running a bake¶
The sources a bake reads are not in the repository.
tools/pbr/pbr_stage_sources.py rebuilds them from
pbr_packs/COMMUNITY_LOCK.json, downloading each pinned ContentDB release,
checking it against the hash the lock records and extracting it below a staging
root. A hash that does not match is reported and skipped rather than baked,
because the licence audit above is written against the archive the lock names.
tools/pbr/run-pbr-overnight.sh stages every package the queued tranches need
and then bakes them. Its staging root defaults to
~/.local/share/goanna-pbr-audit and can be moved with GOANNA_AUDIT_ROOT. It
must not be put on /tmp: that is tmpfs on the development box, and a reboot on
2026-09-07 took a night's composed maps with it.
The generation itself survived that reboot, because ComfyUI writes every image
it produces to its own output directory on ordinary disk. pbr_bake.py
--reuse-outputs composes a texture from a previous run's saved detail pass and
Chord maps instead of generating it again, and generates only what the
directory does not cover, so an interrupted run is finished rather than
repeated. Checked on br_carpet_0: the reused _n, _s and _albedo are
byte identical to a fresh bake of the same stem, in 0.7 s against 31 s.
Nothing records which settings produced a saved image, so a reuse is only
valid for the same queue at the same settings; the overnight script therefore
reuses only each stage's own run folder.
Popularity audit and update queue¶
A 2026-09-04 survey checks the top 50 listings per stream, then backfills to 20 packages that actually contain relevant assets. Download rank alone does not admit a package: APIs, duplicate aggregates, low-yield packs and unclear media are removed first.
- Terrain: Too Many Stones is the first clean addition (396 conservative candidates under an explicit MIT texture grant). Logistica follows after dynamic-registration selector support. Unified Dyes is excluded as GPL media; Protector, Melterns, Homedecor and Cblocks require exact ledgers or clarification.
- Billboards/items/plants: Farming Redo, Plantlife, More Trees, X Farming and Bonemeal are the main missing sources. Farming and X Farming require file-level attribution. DFCaverns, Bees, Digistuff, Nextgen Fungi, Multidecor and Beautiful Flowers remain held where archive evidence is mixed, missing or contradictory.
- Model skins: Animal World, Draconis, Dmobs, People, Living Nether and Marinara Mobs are the strongest clean additions. UV/model pairs are kept for turntable review even though only derived texture maps ship. GPL groups are excluded at file level; this applies to PaleoTest, the Mobs Water crocodile group, and four non-commercial Mobs Animal sheep skins.
The release format and periodic update procedure are described in
docs/develop/asset-bundles.md. Minetest Game terrain bundle 1.0.0 is the
calibration release; later community sources receive separate immutable bundle
IDs and versions so users download only changed tranches.