diff --git a/.github/ISSUE_TEMPLATE/request-asset.yml b/.github/ISSUE_TEMPLATE/request-asset.yml new file mode 100644 index 0000000..cb4a3d4 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/request-asset.yml @@ -0,0 +1,56 @@ +name: Request an asset / report a gap +description: You need something the catalog does not cover and have no source in mind +title: "[gap] " +labels: ["gap"] +body: + - type: markdown + attributes: + value: | + Use this when you searched the [catalog](https://tmhsdigital.github.io/Free-Game-Dev-Assets/) and came up empty. If you already know a source, use **New source** instead. Gaps feed the research queue and the Gaps sections of the [stacks](https://github.com/TMHSDigital/Free-Game-Dev-Assets/tree/main/stacks). + - type: textarea + id: need + attributes: + label: What you need + description: Be concrete about the asset, not the game. "Straight-down character sprites that turn in four directions, 16x16" beats "RPG art". + validations: + required: true + - type: dropdown + id: category + attributes: + label: Category + options: + - 3d + - 2d + - characters + - audio + - animation + - video + - environment + - shaders-vfx + - fonts + - tools + - not sure + validations: + required: true + - type: dropdown + id: licence + attributes: + label: Licence constraint + description: The most restrictive terms you can accept. + options: + - No credit at all (CC0 / public domain) + - Credit is fine (CC-BY) + - Any licence that allows commercial game use + - Copyleft is fine (GPL, CC-BY-SA) + validations: + required: true + - type: input + id: format + attributes: + label: Formats or engine + placeholder: glTF for Godot 4, PNG sprite sheets, OGG loops, … + - type: textarea + id: tried + attributes: + label: What you already tried + description: Catalog entries or outside sources you looked at, and why they did not fit (wrong perspective, licence, style, quality). diff --git a/.github/workflows/links.yml b/.github/workflows/links.yml index 2725753..ae35741 100644 --- a/.github/workflows/links.yml +++ b/.github/workflows/links.yml @@ -26,6 +26,9 @@ jobs: - name: Check links id: check + env: + # Read-only use of the GitHub API for the archived / inactive check. + GITHUB_TOKEN: ${{ github.token }} run: node site/check-links.mjs --report link-report.md - name: Open or update the report issue diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0cde822..b5c33cc 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -43,9 +43,11 @@ To add a starter stack (one pick per need for a kind of game), follow [`stacks/R - `attribution_string`: the copy-paste credit line. Required when `attribution_required` is `true`; optional otherwise. - `publisher`: optional. Name the **rights-holding publisher**, never the host. Set it whenever that publisher has more than one catalog entry, so the entries group; setting it on a publisher that currently has only one entry is also fine and saves a backfill later. Do not set it to a generic host or distributor (GitHub, Hugging Face, itch.io, OpenGameArt, the Internet Archive, Google Fonts) or to a distributor that does not hold the rights. Distinguish sibling organisations that are genuinely different rights holders: `blender.md` (the application, Blender Foundation) carries no `publisher`, while the asset bundles under `studio.blender.org` carry `Blender Studio`. Kenney, Quaternius, KayKit, LuizMelo, 0x72, Blender Studio, Material Maker, Alif Type, GGBotNet and 3dmodelscc0 are the largest groups in use today; treat that as illustrative, not as the permitted set. - `subcategories`: lower-case kebab-case (`base-meshes`, `field-recordings`). Reuse a value already in the catalog before inventing one, and do not add a variant of an existing value that differs only in plural or spelling. Where both forms were in use, the more common one was kept (`characters`, `environment`, `interior`, `tileset`, `vectors`, `pixel`, `impulse-responses`, `base-meshes`). Retired spellings are listed in [`site/value-aliases.json`](site/value-aliases.json), which the validator enforces (V19); add a line there when you merge two values. -- `formats`: what you actually get, in one of four kinds. **File formats**, as commonly written: usually upper case (`PNG`, `FBX`, `JSON`, `VOX`), tool-specific ones as the tool writes them (`gdshader`, `tmx`, `ktx2`). **Engine or language targets**, as the product writes them (`glTF`, `Godot`, `Unity`, `Python`, `React`). **Delivery types** for software with no file format of its own, lower-case kebab-case (`godot-addon`, `blender-extension`, `npm`, `cli`, `library`, `desktop-app`, `mobile-app`, `middleware`, `model`). And `various` for an aggregator whose files come in too many formats to list. Platforms (`windows`, `macos`, `ios`) and descriptions (`heightfield`, `examples`) are `tags`, not formats. Reuse the spelling already in the catalog. +- `formats`: what you actually get, in one of four kinds. **File formats**, as commonly written: usually upper case (`PNG`, `FBX`, `JSON`, `VOX`), tool-specific ones as the tool writes them (`gdshader`, `tmx`, `ktx2`). **Engine or language targets**, as the product writes them (`glTF`, `Godot`, `Unity`, `Python`, `React`). **Delivery types** for software with no file format of its own, lower-case kebab-case (`godot-addon`, `blender-extension`, `npm`, `cli`, `library`, `desktop-app`, `mobile-app`, `middleware`, `model`). And `various` for an aggregator whose files come in too many formats to list. Platforms (`windows`, `macos`, `ios`) and descriptions (`heightfield`, `examples`) are `tags`, not formats. The allowed values are the closed list in [`site/format-vocabulary.json`](site/format-vocabulary.json), which the validator enforces (V20): reuse a listed spelling, and add a genuinely new format there in the same change that first uses it. Its `groups` drive the site's Format filter, so a new format that belongs to a group (another glTF or font container) goes into that group too. +- `tags`: lower-case kebab-case words describing the content (`low-poly`, `modular`, `platformer`). Do not restate another field: the licence (`cc0`, `mit`, `ofl`, `open-source`, `royalty-free`), the credit requirement (`no-attribution`) or the entry's own `publisher` (`kenney`) are rejected (V19 via `site/value-aliases.json`, V21), because search and the filters read those fields directly and a copied tag drifts. A `varies` entry lists its licence mix in the body, not in tags. - Frontmatter is one `key: value` per line; lists are `[a, b]` or indented `- item` lines. A key given twice is an error. Entry files may not contain emoji. - `grid_dimensions` / `camera_perspective` / `hardware_tags`: optional metadata for 2D and UI entries. `3d` and `characters` entries leave `camera_perspective` out: it describes a 2D camera, and those entries have none. +- `maintenance`: optional, `archived` | `inactive` (V22). Set `archived` when the source repository is archived, and `inactive` when it has had no push for over three years, with a dated `- Maintenance:` line in Notes saying what you read. Leave it out otherwise. The weekly link check reports a GitHub source whose state no longer matches. - `url`: an `https://` address (`http://` only where the source has no https). Other schemes are rejected. - `verified`: ISO date (`YYYY-MM-DD`) of your last license check. It must be a real date, no later than tomorrow in UTC, and no newer than the newest date in `## Evidence` (V8): a new `verified` date needs a new dated Evidence line from the same check. Dates inside URLs do not count as Evidence dates. - `status`: `active` | `needs-review` | `deprecated`. A `deprecated` entry needs a `- Deprecated:` line in its body giving the reason (V9). `active` means the licence, the commercial stance and the credit requirement are all settled: an `unknown` in `license`, `commercial` or `attribution_required` keeps an entry at `needs-review`. The validator enforces this (V14), and rejects `formats`, `subcategories` or `tags` values that differ only by case, punctuation or a trailing "s" from one already in use (V13). diff --git a/README.md b/README.md index 2bdb15c..3783fc6 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ [![Website](https://img.shields.io/website?url=https%3A%2F%2Ftmhsdigital.github.io%2FFree-Game-Dev-Assets%2F&up_message=live&down_message=down&label=website)](https://tmhsdigital.github.io/Free-Game-Dev-Assets/) [![Pages](https://img.shields.io/github/actions/workflow/status/TMHSDigital/Free-Game-Dev-Assets/pages.yml?label=pages)](https://github.com/TMHSDigital/Free-Game-Dev-Assets/actions/workflows/pages.yml) [![License: CC0-1.0](https://img.shields.io/badge/license-CC0--1.0-lightgrey.svg)](LICENSE) -[![Sources](https://img.shields.io/badge/sources-319-informational)](https://tmhsdigital.github.io/Free-Game-Dev-Assets/) +[![Sources](https://img.shields.io/badge/sources-334-informational)](https://tmhsdigital.github.io/Free-Game-Dev-Assets/) [![GitHub stars](https://img.shields.io/github/stars/TMHSDigital/Free-Game-Dev-Assets)](https://github.com/TMHSDigital/Free-Game-Dev-Assets/stargazers) [![PRs welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](CONTRIBUTING.md) @@ -11,7 +11,7 @@ Free assets and tools for commercial games. Each entry records the licence as it states it and the date someone read it there; active entries quote the source's own words. The catalog indexes sources and never rehosts them: check the source before you ship. -- **[Browse 319 sources](https://tmhsdigital.github.io/Free-Game-Dev-Assets/)** on the site, filtered by licence, credit and review status. +- **[Browse 334 sources](https://tmhsdigital.github.io/Free-Game-Dev-Assets/)** on the site, filtered by licence, credit and review status. - **Starter stacks**, one pick per need and what the whole set owes: [2D pixel platformer](https://tmhsdigital.github.io/Free-Game-Dev-Assets/stack/2d-pixel-platformer/) · [2D top-down pixel game](https://tmhsdigital.github.io/Free-Game-Dev-Assets/stack/2d-top-down-pixel/) · @@ -100,23 +100,23 @@ a credit. ## Browse the catalog -The [website](https://tmhsdigital.github.io/Free-Game-Dev-Assets/) searches all 319 entries +The [website](https://tmhsdigital.github.io/Free-Game-Dev-Assets/) searches all 334 entries and filters them by category, commercial use, attribution, review status and 2D camera view. Press `/` to search. Filtered views and individual entries have their own URLs, so you can send someone exactly what you are looking at. | Category | Entries | Focus | Index | | --- | ---: | --- | --- | -| **3D** | 69 | Models, scans, PBR textures and materials | [`catalog/3d/`](catalog/3d/) | -| **Tools** | 66 | Editors, pipeline, TTS, Godot add-ons | [`catalog/tools/`](catalog/tools/) | +| **3D** | 70 | Models, scans, PBR textures and materials | [`catalog/3d/`](catalog/3d/) | +| **Tools** | 77 | Editors, pipeline, TTS, Godot add-ons | [`catalog/tools/`](catalog/tools/) | | **2D** | 54 | Sprites, tilesets, UI and HUD, icons, palettes | [`catalog/2d/`](catalog/2d/) | | **Audio** | 30 | SFX, music, foley, impulse responses | [`catalog/audio/`](catalog/audio/) | -| **Characters** | 27 | Rigged packs, generators, modular humanoids | [`catalog/characters/`](catalog/characters/) | -| **Fonts** | 23 | OFL and commercial-ok typefaces, CJK | [`catalog/fonts/`](catalog/fonts/) | -| **Environment** | 15 | HDRI, terrain DEMs, geodata | [`catalog/environment/`](catalog/environment/) | +| **Characters** | 28 | Rigged packs, generators, modular humanoids | [`catalog/characters/`](catalog/characters/) | +| **Fonts** | 25 | OFL and commercial-ok typefaces, CJK | [`catalog/fonts/`](catalog/fonts/) | +| **Environment** | 13 | HDRI, terrain DEMs, geodata | [`catalog/environment/`](catalog/environment/) | | **Shaders & VFX** | 17 | Shaders, particle and FX resources | [`catalog/shaders-vfx/`](catalog/shaders-vfx/) | | **Animation** | 12 | Motion capture and character clips | [`catalog/animation/`](catalog/animation/) | -| **Video** | 6 | Stock footage, archival clips | [`catalog/video/`](catalog/video/) | +| **Video** | 8 | Stock footage, archival clips | [`catalog/video/`](catalog/video/) | ## Reading an entry diff --git a/catalog/2d/README.md b/catalog/2d/README.md index 5c8fefb..e45aedf 100644 --- a/catalog/2d/README.md +++ b/catalog/2d/README.md @@ -104,7 +104,7 @@ two carry obligations the rest do not. | [universal-lpc-generator](universal-lpc-generator.md) | Universal LPC Generator | varies (SA) | varies† | active | | [lpc-revised-basics](lpc-revised-basics.md) | LPC Revised Basics | varies (OGA-BY for every item) | yes | active | | [openclipart](openclipart.md) | Openclipart | CC0 | yes | active | -| [opengameart](opengameart.md) | OpenGameArt | varies | unknown | needs-review | +| [opengameart](opengameart.md) | OpenGameArt | varies | yes | needs-review | | [lospec](lospec.md) | Lospec | varies | unknown | needs-review | | [dcss-tiles](dcss-tiles.md) | Dungeon Crawl Stone Soup Tiles | varies | unknown | needs-review | diff --git a/catalog/2d/ansimuz-industrial-parallax.md b/catalog/2d/ansimuz-industrial-parallax.md index e407e0c..4d868f4 100644 --- a/catalog/2d/ansimuz-industrial-parallax.md +++ b/catalog/2d/ansimuz-industrial-parallax.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [PNG, PSD] -tags: [cc0, parallax, background, layers, pixel, industrial, night, platformer, side-scroller] +tags: [parallax, background, layers, pixel, industrial, night, platformer, side-scroller] camera_perspective: side_scroller verified: 2026-09-23 status: active diff --git a/catalog/2d/ansimuz-sunnyland.md b/catalog/2d/ansimuz-sunnyland.md index bd0486b..7a97205 100644 --- a/catalog/2d/ansimuz-sunnyland.md +++ b/catalog/2d/ansimuz-sunnyland.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [PNG, WAV] -tags: [cc0, pixel, platformer, itch, 16-bit] +tags: [pixel, platformer, itch, 16-bit] camera_perspective: side_scroller verified: 2026-08-24 status: active diff --git a/catalog/2d/armm1998-zelda-like.md b/catalog/2d/armm1998-zelda-like.md index 3597e1d..44a3d7c 100644 --- a/catalog/2d/armm1998-zelda-like.md +++ b/catalog/2d/armm1998-zelda-like.md @@ -9,7 +9,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [PNG] -tags: [cc0, 16x16, overworld, cave, indoors, opengameart, 4-directional] +tags: [16x16, overworld, cave, indoors, opengameart, 4-directional] grid_dimensions: 16x16 camera_perspective: isometric_3_4 verified: 2026-09-22 diff --git a/catalog/2d/bit-bonanza.md b/catalog/2d/bit-bonanza.md index 3b0c3de..db57039 100644 --- a/catalog/2d/bit-bonanza.md +++ b/catalog/2d/bit-bonanza.md @@ -9,7 +9,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [PNG] -tags: [cc0, 1-bit, 10x10, rpg, icons, itch] +tags: [1-bit, 10x10, rpg, icons, itch] grid_dimensions: 10x10 camera_perspective: 2d_flat verified: 2026-08-15 diff --git a/catalog/2d/bondoki-rotating-gems.md b/catalog/2d/bondoki-rotating-gems.md index 257903c..d8e4769 100644 --- a/catalog/2d/bondoki-rotating-gems.md +++ b/catalog/2d/bondoki-rotating-gems.md @@ -9,7 +9,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [GIF, PNG] -tags: [cc0, match-3, gems, jewels, animated, puzzle, casual, mobile] +tags: [match-3, gems, jewels, animated, puzzle, casual, mobile] grid_dimensions: 52x52 verified: 2026-09-23 status: active diff --git a/catalog/2d/bootstrap-icons.md b/catalog/2d/bootstrap-icons.md index 352b77e..dd7d94c 100644 --- a/catalog/2d/bootstrap-icons.md +++ b/catalog/2d/bootstrap-icons.md @@ -9,7 +9,7 @@ license_spdx: MIT commercial: true attribution_required: false formats: [SVG, WOFF, WOFF2] -tags: [icons, mit, svg, ui, bootstrap] +tags: [icons, svg, ui, bootstrap] camera_perspective: 2d_flat verified: 2026-08-24 status: active diff --git a/catalog/2d/dcss-tiles.md b/catalog/2d/dcss-tiles.md index a6522c2..b19d0b2 100644 --- a/catalog/2d/dcss-tiles.md +++ b/catalog/2d/dcss-tiles.md @@ -11,6 +11,7 @@ formats: [PNG] tags: [roguelike, tileset, dungeon, monsters, items, mixed-license] verified: 2026-08-24 status: needs-review +maintenance: inactive grid_dimensions: 32x32 camera_perspective: top_down --- @@ -21,6 +22,7 @@ Thousands of 32x32 top-down tiles covering monsters, items, dungeon features, an ## Notes +- Maintenance: no push to the GitHub repository crawl/tiles since 2020-09-05, per the GitHub API on 2026-09-26. - The project publishes `TILES_UNDER_UNKNOWN_LICENSE.md` and `ARTISTS.md` alongside the art; read both before using anything, and treat the unknown-license list as unusable - The upstream statement is that the majority is CC0 and new submissions are CC0 unless specified otherwise, with older pieces being the problem - Derived from rltiles, which is where much of the older and less traceable provenance comes from diff --git a/catalog/2d/gameart2d-freebies.md b/catalog/2d/gameart2d-freebies.md index 1bd5f0c..009f9ce 100644 --- a/catalog/2d/gameart2d-freebies.md +++ b/catalog/2d/gameart2d-freebies.md @@ -9,7 +9,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [PNG] -tags: [cc0, platformer, gui, side-scroller] +tags: [platformer, gui, side-scroller] camera_perspective: side_scroller verified: 2026-08-29 status: active diff --git a/catalog/2d/glitch-archive.md b/catalog/2d/glitch-archive.md index 41e3f02..8a81de9 100644 --- a/catalog/2d/glitch-archive.md +++ b/catalog/2d/glitch-archive.md @@ -13,6 +13,7 @@ formats: [PNG, SVG, FLA] tags: [hand-drawn, vector, large-pack] verified: 2026-08-29 status: active +maintenance: archived --- # Glitch archive @@ -21,6 +22,7 @@ status: active ## Notes +- Maintenance: the GitHub repository tinyspeck/glitch-items is archived (read-only), per the GitHub API on 2026-09-26; last push 2013-12-16. - Logo and trademark are excluded. Only files in the repo tree are covered. - Original announcement: glitchthegame.com/public-domain-game-art/ (not re-fetched on 2026-08-29). Community PNG/SVG conversions are usually easier than Adobe FLA. - FLA packages need Flash-era tools or community rips; do not treat FLA as engine-ready. diff --git a/catalog/2d/gustavo-saraiva-city-parallax.md b/catalog/2d/gustavo-saraiva-city-parallax.md index b7bbf16..253a2e3 100644 --- a/catalog/2d/gustavo-saraiva-city-parallax.md +++ b/catalog/2d/gustavo-saraiva-city-parallax.md @@ -9,7 +9,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [PNG] -tags: [cc0, parallax, background, layers, pixel, city, platformer, side-scroller] +tags: [parallax, background, layers, pixel, city, platformer, side-scroller] camera_perspective: side_scroller verified: 2026-09-23 status: active diff --git a/catalog/2d/heroicons.md b/catalog/2d/heroicons.md index cfe4354..b373506 100644 --- a/catalog/2d/heroicons.md +++ b/catalog/2d/heroicons.md @@ -9,7 +9,7 @@ license_spdx: MIT commercial: true attribution_required: false formats: [SVG, React, Vue] -tags: [mit, icons, tailwind, ui] +tags: [icons, tailwind, ui] camera_perspective: 2d_flat verified: 2026-07-19 status: active diff --git a/catalog/2d/kenney-1-bit-pack.md b/catalog/2d/kenney-1-bit-pack.md index 4ae07be..7d014ff 100644 --- a/catalog/2d/kenney-1-bit-pack.md +++ b/catalog/2d/kenney-1-bit-pack.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [PNG] -tags: [cc0, 1-bit, roguelike, rpg, pixel, kenney, multi-perspective] +tags: [1-bit, roguelike, rpg, pixel, multi-perspective] grid_dimensions: 16x16 verified: 2026-07-19 status: active diff --git a/catalog/2d/kenney-boardgame-pack.md b/catalog/2d/kenney-boardgame-pack.md index 456e7ad..7bfe2ed 100644 --- a/catalog/2d/kenney-boardgame-pack.md +++ b/catalog/2d/kenney-boardgame-pack.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [PNG, SVG, XML, OGG] -tags: [cc0, board-game, cards, dice, chips, tokens, mobile] +tags: [board-game, cards, dice, chips, tokens, mobile] verified: 2026-09-23 status: active --- diff --git a/catalog/2d/kenney-cursor-pack.md b/catalog/2d/kenney-cursor-pack.md index 52de8fb..e7bff01 100644 --- a/catalog/2d/kenney-cursor-pack.md +++ b/catalog/2d/kenney-cursor-pack.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [PNG] -tags: [cc0, cursor, pointer, ui, kenney] +tags: [cursor, pointer, ui] camera_perspective: 2d_flat verified: 2026-07-19 status: active diff --git a/catalog/2d/kenney-input-prompts.md b/catalog/2d/kenney-input-prompts.md index fc0ff25..9f86603 100644 --- a/catalog/2d/kenney-input-prompts.md +++ b/catalog/2d/kenney-input-prompts.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [PNG, SVG] -tags: [cc0, gamepad, keyboard, hud, steam-deck, switch-2, quest] +tags: [gamepad, keyboard, hud, steam-deck, switch-2, quest] grid_dimensions: 64x64 camera_perspective: 2d_flat hardware_tags: [steam_deck, steam_controller, steam_frame, valve_index, switch, switch_2, xbox, playstation, meta_quest, playdate, wii, gamecube] diff --git a/catalog/2d/kenney-micro-roguelike.md b/catalog/2d/kenney-micro-roguelike.md index 5bf939b..ce04294 100644 --- a/catalog/2d/kenney-micro-roguelike.md +++ b/catalog/2d/kenney-micro-roguelike.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [PNG] -tags: [cc0, 1-bit, 8x8, roguelike, rpg, top-down] +tags: [1-bit, 8x8, roguelike, rpg, top-down] grid_dimensions: 8x8 camera_perspective: top_down verified: 2026-09-22 diff --git a/catalog/2d/kenney-pixel-platformer.md b/catalog/2d/kenney-pixel-platformer.md index 4118a9e..26c97ec 100644 --- a/catalog/2d/kenney-pixel-platformer.md +++ b/catalog/2d/kenney-pixel-platformer.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [PNG] -tags: [cc0, pixel, platformer, tiles, kenney] +tags: [pixel, platformer, tiles] grid_dimensions: 18x18 camera_perspective: side_scroller verified: 2026-07-19 diff --git a/catalog/2d/kenney-pixel-vehicle-pack.md b/catalog/2d/kenney-pixel-vehicle-pack.md index d64df21..2358ec9 100644 --- a/catalog/2d/kenney-pixel-vehicle-pack.md +++ b/catalog/2d/kenney-pixel-vehicle-pack.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [PNG] -tags: [cc0, vehicles, cars, pixel, kenney] +tags: [vehicles, cars, pixel] verified: 2026-07-19 status: active --- diff --git a/catalog/2d/kenney-playing-cards-pack.md b/catalog/2d/kenney-playing-cards-pack.md index e5fcdf3..d538c13 100644 --- a/catalog/2d/kenney-playing-cards-pack.md +++ b/catalog/2d/kenney-playing-cards-pack.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [PNG, CSV] -tags: [cc0, cards, playing-cards, solitaire, poker, pixel, board-game, mobile] +tags: [cards, playing-cards, solitaire, poker, pixel, board-game, mobile] verified: 2026-09-23 status: active --- diff --git a/catalog/2d/kenney-puzzle-pack-2.md b/catalog/2d/kenney-puzzle-pack-2.md index e1a0991..90b1009 100644 --- a/catalog/2d/kenney-puzzle-pack-2.md +++ b/catalog/2d/kenney-puzzle-pack-2.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [PNG, SVG, XML] -tags: [cc0, puzzle, casual, breakout, brick, pipes, coins, particles, mobile] +tags: [puzzle, casual, breakout, brick, pipes, coins, particles, mobile] verified: 2026-09-23 status: active --- diff --git a/catalog/2d/kenney-roguelike-characters.md b/catalog/2d/kenney-roguelike-characters.md index f5dded0..807dd64 100644 --- a/catalog/2d/kenney-roguelike-characters.md +++ b/catalog/2d/kenney-roguelike-characters.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [PNG] -tags: [cc0, rpg, characters, roguelike, overworld, front-facing] +tags: [rpg, characters, roguelike, overworld, front-facing] camera_perspective: isometric_3_4 verified: 2026-09-22 status: active diff --git a/catalog/2d/kenney-roguelike-rpg-pack.md b/catalog/2d/kenney-roguelike-rpg-pack.md index b1911d9..b2ade3c 100644 --- a/catalog/2d/kenney-roguelike-rpg-pack.md +++ b/catalog/2d/kenney-roguelike-rpg-pack.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [PNG] -tags: [cc0, 16x16, rpg, roguelike, ui, overworld] +tags: [16x16, rpg, roguelike, ui, overworld] grid_dimensions: 16x16 camera_perspective: isometric_3_4 verified: 2026-09-22 diff --git a/catalog/2d/kenney-tiny-battle.md b/catalog/2d/kenney-tiny-battle.md index 3239cf5..08a055c 100644 --- a/catalog/2d/kenney-tiny-battle.md +++ b/catalog/2d/kenney-tiny-battle.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [PNG] -tags: [cc0, 16x16, strategy, wargame, units, top-down] +tags: [16x16, strategy, wargame, units, top-down] grid_dimensions: 16x16 camera_perspective: top_down verified: 2026-09-22 diff --git a/catalog/2d/kenney-tiny-dungeon.md b/catalog/2d/kenney-tiny-dungeon.md index b4dbf37..7036e4b 100644 --- a/catalog/2d/kenney-tiny-dungeon.md +++ b/catalog/2d/kenney-tiny-dungeon.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [PNG] -tags: [cc0, dungeon, sewer, roguelike, pixel, kenney, tiny] +tags: [dungeon, sewer, roguelike, pixel, tiny] grid_dimensions: 16x16 camera_perspective: isometric_3_4 verified: 2026-07-19 diff --git a/catalog/2d/kenney-tiny-town.md b/catalog/2d/kenney-tiny-town.md index e721aa7..f27ec82 100644 --- a/catalog/2d/kenney-tiny-town.md +++ b/catalog/2d/kenney-tiny-town.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [PNG] -tags: [cc0, 16x16, town, overworld, rpg] +tags: [16x16, town, overworld, rpg] grid_dimensions: 16x16 camera_perspective: isometric_3_4 verified: 2026-09-22 diff --git a/catalog/2d/kenney-ui-pack.md b/catalog/2d/kenney-ui-pack.md index a0b6b1d..dd43c96 100644 --- a/catalog/2d/kenney-ui-pack.md +++ b/catalog/2d/kenney-ui-pack.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [PNG] -tags: [cc0, ui, button, panels, kenney] +tags: [ui, button, panels] camera_perspective: 2d_flat verified: 2026-07-19 status: active diff --git a/catalog/2d/lospec.md b/catalog/2d/lospec.md index 3b641e3..0df3f3c 100644 --- a/catalog/2d/lospec.md +++ b/catalog/2d/lospec.md @@ -9,7 +9,7 @@ commercial: unknown attribution_required: unknown formats: [gpl-palette, PAL, ASE, PNG] tags: [palettes, pixel-art, retro] -verified: 2026-07-20 +verified: 2026-09-26 status: needs-review --- @@ -19,7 +19,8 @@ Curated pixel palettes and tools. **No site-wide commercial grant** — most pal ## Notes -- `lospec.com/terms` still 404; [privacy-policy](https://lospec.com/privacy-policy) / [about](https://lospec.com/about) have no palette license grant +- `lospec.com/terms` still 404; the footer links [Terms and Conditions](https://lospec.com/terms-and-conditions) instead. Read on 2026-09-26: a generic website/store ToS with no licence for palettes, so there is still no site-wide grant. Open question: each palette's own terms (most pages show none), which keeps `commercial` and `attribution_required` at `unknown` +- [privacy-policy](https://lospec.com/privacy-policy) / [about](https://lospec.com/about) have no palette license grant - Hardware palettes are often usable as color lists; artist palettes need author terms - Prefer [paleto-vol01](paleto-vol01.md) when you need a verified commercial-ok starter set @@ -27,7 +28,8 @@ Curated pixel palettes and tools. **No site-wide commercial grant** — most pal - Live Sweetie 16 / DawnBringer 16 pages (2026-07-20): no license field → catalog-level `commercial: unknown` - Live [palette-list/tag/cc0](https://lospec.com/palette-list/tag/cc0) (2026-07-20): some uploads self-tag CC0 (e.g. Paleto) — not a site-wide grant → keep `needs-review` - +- Live [Terms and Conditions](https://lospec.com/terms-and-conditions) (2026-09-26): covers use of the site and store ("This website is operated by Lospec"); sections on user submissions and prohibited uses, no licence granted for palette content +- Live [Sweetie 16](https://lospec.com/palette-list/sweetie-16) (2026-09-26): "Palette created by GrafxKid", tags and download count only; no licence field ## Related - [paleto-vol01](paleto-vol01.md) diff --git a/catalog/2d/lpc-revised-basics.md b/catalog/2d/lpc-revised-basics.md index 712350e..eb697f9 100644 --- a/catalog/2d/lpc-revised-basics.md +++ b/catalog/2d/lpc-revised-basics.md @@ -9,7 +9,7 @@ commercial: true attribution_required: true attribution_string: "LPC Revised Character Basics by Eliza Wyatt, Stephen Challener (Redshrike), Durrani, BenCreating, Johannes Sjölund (Wulax), Thecilekli and BlueCarrot16 (OGA-BY 3.0). See the Credits files for per-item authors." formats: [PNG] -tags: [lpc, opengameart, cc-by-sa, gpl, oga-by, copyleft-assets] +tags: [lpc, opengameart] camera_perspective: isometric_3_4 verified: 2026-09-24 status: active diff --git a/catalog/2d/luizmelo-evil-wizard.md b/catalog/2d/luizmelo-evil-wizard.md index f32da8a..9bbd83c 100644 --- a/catalog/2d/luizmelo-evil-wizard.md +++ b/catalog/2d/luizmelo-evil-wizard.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [PNG] -tags: [pixel, platformer, boss, cc0] +tags: [pixel, platformer, boss] camera_perspective: side_scroller verified: 2026-08-24 status: active diff --git a/catalog/2d/luizmelo-martial-hero.md b/catalog/2d/luizmelo-martial-hero.md index 151835d..3df8765 100644 --- a/catalog/2d/luizmelo-martial-hero.md +++ b/catalog/2d/luizmelo-martial-hero.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [PNG] -tags: [pixel, platformer, player, cc0] +tags: [pixel, platformer, player] camera_perspective: side_scroller verified: 2026-08-24 status: active diff --git a/catalog/2d/luizmelo-monsters-creatures-fantasy.md b/catalog/2d/luizmelo-monsters-creatures-fantasy.md index c261fbd..6a159bd 100644 --- a/catalog/2d/luizmelo-monsters-creatures-fantasy.md +++ b/catalog/2d/luizmelo-monsters-creatures-fantasy.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [PNG] -tags: [pixel, platformer, spritesheet, cc0] +tags: [pixel, platformer, spritesheet] camera_perspective: side_scroller verified: 2026-08-24 status: active diff --git a/catalog/2d/material-symbols.md b/catalog/2d/material-symbols.md index 2f5b524..05609ea 100644 --- a/catalog/2d/material-symbols.md +++ b/catalog/2d/material-symbols.md @@ -10,7 +10,7 @@ license_spdx: Apache-2.0 commercial: true attribution_required: false formats: [SVG, TTF, WOFF2] -tags: [icons, google, variable-font] +tags: [icons, variable-font] camera_perspective: 2d_flat verified: 2026-09-26 status: active diff --git a/catalog/2d/ninja-adventure.md b/catalog/2d/ninja-adventure.md index a1c3a41..7f423f9 100644 --- a/catalog/2d/ninja-adventure.md +++ b/catalog/2d/ninja-adventure.md @@ -9,7 +9,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [PNG, WAV] -tags: [cc0, 16x16, top-down, rpg, itch, godot, 4-directional] +tags: [16x16, top-down, rpg, itch, godot, 4-directional] grid_dimensions: 16x16 camera_perspective: isometric_3_4 verified: 2026-08-15 diff --git a/catalog/2d/opengameart.md b/catalog/2d/opengameart.md index 3ae179a..e106a8a 100644 --- a/catalog/2d/opengameart.md +++ b/catalog/2d/opengameart.md @@ -5,11 +5,11 @@ url: https://opengameart.org category: 2d subcategories: [sprites, tileset, aggregator] license: varies -commercial: unknown +commercial: true attribution_required: unknown formats: [PNG, SVG, OGG] tags: [community, pixel-art, aggregator] -verified: 2026-07-20 +verified: 2026-09-26 status: needs-review --- @@ -22,11 +22,16 @@ Community hub for game art under many licenses (CC0, CC-BY, CC-BY-SA, GPL, OGA-B - FAQ: closed-source commercial games OK **if** you follow each file’s license - Multi-license uploads = pick one compatible set; SA/GPL packs need extra care (see [`docs/high-risk.md`](../../docs/high-risk.md)) - Filter CC0 / CC-BY before packaging +- `commercial: true` follows the FAQ's plain site-wide statement (re-read 2026-09-26). Still open: credit is per upload (CC0 none; CC-BY needs it; the FAQ says to assume GPL uploads need it), and the schema has no per-file value for `attribution_required`, so the entry stays `needs-review` +- Apple App Store: the FAQ says GPL, LGPL, CC-BY-SA and CC-BY terms conflict with Apple's, so ask the artist first ## Evidence - Live [FAQ](https://opengameart.org/content/faq) (2026-07-20): “I'm a commercial (closed-source) game developer… **Yes, you can use this art. Even in commercial projects.** Be sure to follow the terms of the license…” - Same FAQ: CC0 “commercial use is ok”; CC-BY needs credit; SA/GPL also hosted → keep catalog-level `needs-review` / `commercial: unknown` +- Live [FAQ](https://opengameart.org/content/faq) (2026-09-26): "Yes, you can use any of the art submitted to this site. Even in commercial projects. Just be sure to adhere to the license terms." +- Same FAQ (2026-09-26): CC0 works may be used "without asking, crediting or notifying the creating artist"; CC-BY: "You must state that you have used the work and credit the original artist"; GPL: "you should assume that all work contained on OpenGameArt requires it [attribution] unless otherwise specified" +- Same FAQ (2026-09-26), Apple App Store: "Not necessarily." Terms "conflict with the terms of the GNU GPL, the GNU LGPL, CC-BY-SA, and CC-BY" ## Related diff --git a/catalog/2d/openpeeps.md b/catalog/2d/openpeeps.md index c71437c..ff21f66 100644 --- a/catalog/2d/openpeeps.md +++ b/catalog/2d/openpeeps.md @@ -9,7 +9,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [SVG, PNG, Sketch, Figma] -tags: [cc0, illustration, characters, mix-match] +tags: [illustration, characters, mix-match] camera_perspective: 2d_flat verified: 2026-07-19 status: active diff --git a/catalog/2d/ox72-dungeon-tileset.md b/catalog/2d/ox72-dungeon-tileset.md index d88790a..6ca441b 100644 --- a/catalog/2d/ox72-dungeon-tileset.md +++ b/catalog/2d/ox72-dungeon-tileset.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [PNG] -tags: [cc0, dungeon, pixel, tileset, itch] +tags: [dungeon, pixel, tileset, itch] grid_dimensions: 16x16 camera_perspective: isometric_3_4 verified: 2026-07-19 diff --git a/catalog/2d/ox72-dungeontileset-ii.md b/catalog/2d/ox72-dungeontileset-ii.md index f63895c..b39632c 100644 --- a/catalog/2d/ox72-dungeontileset-ii.md +++ b/catalog/2d/ox72-dungeontileset-ii.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [PNG] -tags: [cc0, dungeon, pixel, tileset, itch, 16x16] +tags: [dungeon, pixel, tileset, itch, 16x16] grid_dimensions: 16x16 camera_perspective: isometric_3_4 verified: 2026-08-15 diff --git a/catalog/2d/paleto-vol01.md b/catalog/2d/paleto-vol01.md index bf06a77..010f793 100644 --- a/catalog/2d/paleto-vol01.md +++ b/catalog/2d/paleto-vol01.md @@ -9,7 +9,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [ASE, PNG, PDF, HTML] -tags: [cc0, palettes, pixel-art, fantasy, horror, ocean, retro] +tags: [palettes, pixel-art, fantasy, horror, ocean, retro] verified: 2026-07-20 status: active --- diff --git a/catalog/2d/penzilla.md b/catalog/2d/penzilla.md index c31836c..95aef70 100644 --- a/catalog/2d/penzilla.md +++ b/catalog/2d/penzilla.md @@ -8,7 +8,7 @@ license: custom commercial: true attribution_required: unknown formats: [PNG] -tags: [pixel, gui, itch, royalty-free] +tags: [pixel, gui, itch] verified: 2026-08-24 status: needs-review --- diff --git a/catalog/2d/playpug-simple-vector-ui.md b/catalog/2d/playpug-simple-vector-ui.md index a06dcf7..0dc879a 100644 --- a/catalog/2d/playpug-simple-vector-ui.md +++ b/catalog/2d/playpug-simple-vector-ui.md @@ -9,7 +9,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [PNG] -tags: [cc0, ui, 9-slice, vector] +tags: [ui, 9-slice, vector] camera_perspective: 2d_flat verified: 2026-08-29 status: active diff --git a/catalog/2d/screaming-brain-studios.md b/catalog/2d/screaming-brain-studios.md index e071cc5..ba61799 100644 --- a/catalog/2d/screaming-brain-studios.md +++ b/catalog/2d/screaming-brain-studios.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [PNG] -tags: [cc0, isometric, tiles, itch, 2-to-1] +tags: [isometric, tiles, itch, 2-to-1] camera_perspective: isometric_3_4 verified: 2026-08-29 status: active diff --git a/catalog/2d/simple-icons.md b/catalog/2d/simple-icons.md index 323ecc3..bfef53d 100644 --- a/catalog/2d/simple-icons.md +++ b/catalog/2d/simple-icons.md @@ -9,7 +9,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [SVG] -tags: [icons, brands, logos, cc0, svg] +tags: [icons, brands, logos, svg] camera_perspective: 2d_flat verified: 2026-07-19 status: active diff --git a/catalog/2d/sparklin-superpowers.md b/catalog/2d/sparklin-superpowers.md index 3b09325..73bac95 100644 --- a/catalog/2d/sparklin-superpowers.md +++ b/catalog/2d/sparklin-superpowers.md @@ -10,9 +10,10 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [PNG] -tags: [cc0, pixel, itch, sparklin] +tags: [pixel, itch] verified: 2026-08-29 status: active +maintenance: inactive --- # Sparklin Superpowers asset packs @@ -21,6 +22,7 @@ Pixel-Boy packs from Sparklin Labs (vehicles, prehistoric platformer, space shoo ## Notes +- Maintenance: no push to the GitHub repository sparklinlabs/superpowers-asset-packs since 2019-09-21, per the GitHub API on 2026-09-26. - Repo README (2026-08-29): assets "released under the Creative Commons Zero (CC0) license." `LICENSE.txt` is the full CC0 1.0 deed. - Same README: "You can use the assets found in this repository in your own games, even commercial ones. Attribution is not required but appreciated." - 2D folders named on 2026-08-29 (exclude ninja): `prehistoric-platformer`, `space-shooter`, `top-down-shooter`, `western-fps-2d`, `rpg-battle-system`, `medieval-fantasy`, `backgrounds`. diff --git a/catalog/2d/sylly-gem-match-3.md b/catalog/2d/sylly-gem-match-3.md index 99ca1d5..aa22687 100644 --- a/catalog/2d/sylly-gem-match-3.md +++ b/catalog/2d/sylly-gem-match-3.md @@ -9,7 +9,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [PNG, SVG] -tags: [cc0, match-3, gems, jewels, vector, puzzle, casual, mobile] +tags: [match-3, gems, jewels, vector, puzzle, casual, mobile] verified: 2026-09-23 status: active --- diff --git a/catalog/2d/tabler-icons.md b/catalog/2d/tabler-icons.md index a39a592..67073e1 100644 --- a/catalog/2d/tabler-icons.md +++ b/catalog/2d/tabler-icons.md @@ -9,7 +9,7 @@ license_spdx: MIT commercial: true attribution_required: false formats: [SVG, React, PNG] -tags: [mit, icons, outline, ui] +tags: [icons, outline, ui] camera_perspective: 2d_flat verified: 2026-07-19 status: active diff --git a/catalog/2d/universal-lpc-generator.md b/catalog/2d/universal-lpc-generator.md index 684f6d4..70101db 100644 --- a/catalog/2d/universal-lpc-generator.md +++ b/catalog/2d/universal-lpc-generator.md @@ -9,7 +9,7 @@ commercial: varies attribution_required: true attribution_string: "Credit all authors listed in the generator export (except CC0 layers)." formats: [PNG] -tags: [lpc, cc-by-sa, cc-by, oga-by, gpl, copyleft-assets] +tags: [lpc] verified: 2026-07-19 status: active --- diff --git a/catalog/2d/urizen-onebit.md b/catalog/2d/urizen-onebit.md index d12bb59..392c3a8 100644 --- a/catalog/2d/urizen-onebit.md +++ b/catalog/2d/urizen-onebit.md @@ -9,7 +9,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [PNG] -tags: [cc0, 1-bit, 12x12, tileset, itch] +tags: [1-bit, 12x12, tileset, itch] grid_dimensions: 12x12 camera_perspective: isometric_3_4 verified: 2026-08-15 diff --git a/catalog/3d/3dmodelscc0-city.md b/catalog/3d/3dmodelscc0-city.md index aa7119d..2c7b084 100644 --- a/catalog/3d/3dmodelscc0-city.md +++ b/catalog/3d/3dmodelscc0-city.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [GLB] -tags: [cc0, city, props] +tags: [city, props] verified: 2026-08-29 status: active --- diff --git a/catalog/3d/3dmodelscc0-guns.md b/catalog/3d/3dmodelscc0-guns.md index 35a7aeb..2873e49 100644 --- a/catalog/3d/3dmodelscc0-guns.md +++ b/catalog/3d/3dmodelscc0-guns.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [GLB] -tags: [cc0, weapons, firearms] +tags: [weapons, firearms] verified: 2026-08-29 status: active --- diff --git a/catalog/3d/3dmodelscc0-melee-weapons.md b/catalog/3d/3dmodelscc0-melee-weapons.md index cdc21c7..d9a26c4 100644 --- a/catalog/3d/3dmodelscc0-melee-weapons.md +++ b/catalog/3d/3dmodelscc0-melee-weapons.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [glTF, GLB] -tags: [cc0, weapons, melee] +tags: [weapons, melee] verified: 2026-08-29 status: active --- diff --git a/catalog/3d/README.md b/catalog/3d/README.md index 858b163..0943a2b 100644 --- a/catalog/3d/README.md +++ b/catalog/3d/README.md @@ -130,8 +130,9 @@ than pack-wide. Triangle counts are geometry and survive re-hosting; file sizes | [magicavoxel](magicavoxel.md) | MagicaVoxel | custom | yes | active | | [smithsonian-open-access](smithsonian-open-access.md) | Smithsonian Open Access | CC0 | yes | active | | [charge-materials](charge-materials.md) | Charge materials | CC-BY? | unknown | needs-review | -| [fab-megascans-standard](fab-megascans-standard.md) | Fab/Quixel (Standard) | custom | unknown* | needs-review | +| [fab-megascans-standard](fab-megascans-standard.md) | Fab/Quixel (Standard) | custom | yes | active | | [poly-pizza](poly-pizza.md) | Poly Pizza | varies | unknown | needs-review | | [sketchfab](sketchfab.md) | Sketchfab | varies | unknown | needs-review | +| [nasa-3d-resources](nasa-3d-resources.md) | NASA 3D Resources | public-domain* | yes* | active | \* Fab Standard vs Epic Content License — verify per asset; Fab/Epic license pages unreachable this harden pass. Poly Haven models are under [`environment/poly-haven`](../environment/poly-haven.md) (CC0). diff --git a/catalog/3d/blenderkit.md b/catalog/3d/blenderkit.md index ba0af20..a8a8d12 100644 --- a/catalog/3d/blenderkit.md +++ b/catalog/3d/blenderkit.md @@ -8,7 +8,7 @@ license: varies commercial: varies attribution_required: false formats: [Blend, glTF, HDR] -tags: [blender, marketplace, royalty-free] +tags: [blender, marketplace] verified: 2026-08-24 status: active --- diff --git a/catalog/3d/cgbookcase.md b/catalog/3d/cgbookcase.md index ebc7afa..5cf9e4a 100644 --- a/catalog/3d/cgbookcase.md +++ b/catalog/3d/cgbookcase.md @@ -9,7 +9,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [PNG] -tags: [pbr, seamless, photogrammetry, cc0, concrete, metal, brick] +tags: [pbr, seamless, photogrammetry, concrete, metal, brick] verified: 2026-08-24 status: active --- diff --git a/catalog/3d/charge-materials.md b/catalog/3d/charge-materials.md index a08b411..79eaff8 100644 --- a/catalog/3d/charge-materials.md +++ b/catalog/3d/charge-materials.md @@ -9,7 +9,7 @@ license: CC-BY commercial: unknown attribution_required: unknown formats: [Blend] -tags: [blender-studio, eevee, bake-out, license-unverified] +tags: [eevee, bake-out, license-unverified] verified: 2026-08-25 status: needs-review --- diff --git a/catalog/3d/fab-megascans-standard.md b/catalog/3d/fab-megascans-standard.md index 2b522ea..87e9f69 100644 --- a/catalog/3d/fab-megascans-standard.md +++ b/catalog/3d/fab-megascans-standard.md @@ -5,12 +5,12 @@ url: https://www.fab.com category: 3d subcategories: [photogrammetry, foliage, decals] license: custom -commercial: unknown -attribution_required: unknown +commercial: true +attribution_required: false formats: [various] -tags: [fab, quixel, engine-check-required, tos-unreachable] -verified: 2026-07-19 -status: needs-review +tags: [fab, quixel, engine-check-required] +verified: 2026-09-26 +status: active --- # Fab / Quixel Megascans (Standard License) @@ -21,10 +21,15 @@ Photogrammetry rocks, foliage, ground materials, etc. **Only** listings under ** - Prefer [poly-haven](../environment/poly-haven.md) / [ambientcg](ambientcg.md) / Kenney nature kits when you need clear CC0 - On 2026-07-19: `fab.com` license URLs **HTTP 403**; Epic Fab docs pages returned Cloudflare challenge shells — cannot re-confirm Standard vs Epic wording live +- On 2026-09-26 the [Fab EULA](https://www.fab.com/eula) loaded in a full browser (plain fetch still 403). The fields above describe **Standard License** listings only; a CC-BY listing needs credit, and a legacy UE Marketplace License listing is noted on its own page +- Personal vs Professional is a price tier by buyer revenue (over $100,000 USD in the last 12 months = Professional); the EULA summary says both tiers "grant you the same scope of rights" ## Evidence - Live fetch (2026-07-19): `fab.com/licensing`, `/license`, sellers licensing → **403**; `dev.epicgames.com/documentation/.../fab/licenses` → challenge/empty body → keep `needs-review` / `commercial: unknown` +- Live [Fab EULA](https://www.fab.com/eula) Standard License summary (2026-09-26): "Use the assets commercially or privately"; "Use the assets with any compatible tools (usage is not limited to Unreal Engine)" +- Same page (2026-09-26): "You are not required to give credit to the publisher you acquired the Fab asset from"; "You may not: Resell or redistribute the asset for free on a standalone basis" +- Live [Licenses and Pricing in Fab](https://dev.epicgames.com/documentation/en-us/fab/licenses-and-pricing-in-fab) (2026-09-26): "Fab offers the following license types: Creative Commons Attribution (CC-BY) (Free) Standard (Free or For Sale)"; the UE Marketplace License is being phased out ## Related diff --git a/catalog/3d/ggbotnet-psx-cars.md b/catalog/3d/ggbotnet-psx-cars.md index 0343d65..5f91d05 100644 --- a/catalog/3d/ggbotnet-psx-cars.md +++ b/catalog/3d/ggbotnet-psx-cars.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [Blend, OBJ, PNG, OGG] -tags: [cc0, psx, cars, low-poly] +tags: [psx, cars, low-poly] verified: 2026-08-29 status: active --- diff --git a/catalog/3d/kaykit-block-bits.md b/catalog/3d/kaykit-block-bits.md index a137edc..04e3759 100644 --- a/catalog/3d/kaykit-block-bits.md +++ b/catalog/3d/kaykit-block-bits.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [OBJ, FBX, glTF] -tags: [cc0, blocks, prototype, kaykit] +tags: [blocks, prototype] verified: 2026-08-25 status: active --- diff --git a/catalog/3d/kaykit-dungeon-pack.md b/catalog/3d/kaykit-dungeon-pack.md index 6d43a32..dcc719e 100644 --- a/catalog/3d/kaykit-dungeon-pack.md +++ b/catalog/3d/kaykit-dungeon-pack.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [FBX, glTF, OBJ] -tags: [cc0, dungeon, modular, kaykit] +tags: [dungeon, modular] verified: 2026-08-25 status: active --- diff --git a/catalog/3d/kaykit-furniture-bits.md b/catalog/3d/kaykit-furniture-bits.md index a59d6a2..f666bf7 100644 --- a/catalog/3d/kaykit-furniture-bits.md +++ b/catalog/3d/kaykit-furniture-bits.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [OBJ, FBX, glTF] -tags: [cc0, furniture, stylized, kaykit] +tags: [furniture, stylized] verified: 2026-07-19 status: active --- diff --git a/catalog/3d/kaykit-halloween-bits.md b/catalog/3d/kaykit-halloween-bits.md index 968158f..55b5cb6 100644 --- a/catalog/3d/kaykit-halloween-bits.md +++ b/catalog/3d/kaykit-halloween-bits.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [OBJ, FBX, glTF] -tags: [cc0, halloween, cemetery, kaykit] +tags: [halloween, cemetery] verified: 2026-08-25 status: active --- diff --git a/catalog/3d/kaykit-holiday-bits.md b/catalog/3d/kaykit-holiday-bits.md index cc6ed55..b6056e5 100644 --- a/catalog/3d/kaykit-holiday-bits.md +++ b/catalog/3d/kaykit-holiday-bits.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [OBJ, FBX, glTF] -tags: [cc0, holiday, winter, kaykit] +tags: [holiday, winter] verified: 2026-08-25 status: active --- diff --git a/catalog/3d/kaykit-platformer.md b/catalog/3d/kaykit-platformer.md index dc7aed7..aafbfb1 100644 --- a/catalog/3d/kaykit-platformer.md +++ b/catalog/3d/kaykit-platformer.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [FBX, glTF, OBJ] -tags: [cc0, platformer, modular, kaykit] +tags: [platformer, modular] verified: 2026-08-25 status: active --- diff --git a/catalog/3d/kaykit-prototype-bits.md b/catalog/3d/kaykit-prototype-bits.md index f64abf7..23e5f98 100644 --- a/catalog/3d/kaykit-prototype-bits.md +++ b/catalog/3d/kaykit-prototype-bits.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [OBJ, FBX, glTF] -tags: [cc0, low-poly, atlas, prototype, kaykit] +tags: [low-poly, atlas, prototype] verified: 2026-08-15 status: active --- diff --git a/catalog/3d/kaykit-resource-bits.md b/catalog/3d/kaykit-resource-bits.md index cb80ebb..87f0117 100644 --- a/catalog/3d/kaykit-resource-bits.md +++ b/catalog/3d/kaykit-resource-bits.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [OBJ, FBX, glTF] -tags: [cc0, low-poly, atlas, crafting, kaykit] +tags: [low-poly, atlas, crafting] verified: 2026-08-15 status: active --- diff --git a/catalog/3d/kaykit-restaurant-bits.md b/catalog/3d/kaykit-restaurant-bits.md index c121a86..445a2d9 100644 --- a/catalog/3d/kaykit-restaurant-bits.md +++ b/catalog/3d/kaykit-restaurant-bits.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [OBJ, FBX, glTF] -tags: [cc0, restaurant, food, kaykit] +tags: [restaurant, food] verified: 2026-08-25 status: active --- diff --git a/catalog/3d/kenney-car-kit.md b/catalog/3d/kenney-car-kit.md index 6d0140b..91c32d6 100644 --- a/catalog/3d/kenney-car-kit.md +++ b/catalog/3d/kenney-car-kit.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [glTF, FBX, Blend] -tags: [cc0, cars, vehicles, kenney] +tags: [cars, vehicles] verified: 2026-07-19 status: active --- diff --git a/catalog/3d/kenney-castle-kit.md b/catalog/3d/kenney-castle-kit.md index edcdd0b..d073e0c 100644 --- a/catalog/3d/kenney-castle-kit.md +++ b/catalog/3d/kenney-castle-kit.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [glTF, FBX, Blend] -tags: [cc0, castle, medieval, kenney] +tags: [castle, medieval] verified: 2026-08-25 status: active --- diff --git a/catalog/3d/kenney-city-kit-commercial.md b/catalog/3d/kenney-city-kit-commercial.md index 5ff692a..05da7cf 100644 --- a/catalog/3d/kenney-city-kit-commercial.md +++ b/catalog/3d/kenney-city-kit-commercial.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [glTF, FBX, Blend] -tags: [cc0, city, buildings, kenney, modular] +tags: [city, buildings, modular] verified: 2026-08-25 status: active --- diff --git a/catalog/3d/kenney-city-kit-industrial.md b/catalog/3d/kenney-city-kit-industrial.md index 27f3b1d..c63981d 100644 --- a/catalog/3d/kenney-city-kit-industrial.md +++ b/catalog/3d/kenney-city-kit-industrial.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [glTF, FBX, Blend] -tags: [cc0, city, factory, kenney, modular] +tags: [city, factory, modular] verified: 2026-08-25 status: active --- diff --git a/catalog/3d/kenney-city-kit-roads.md b/catalog/3d/kenney-city-kit-roads.md index 9a9767b..c5749cf 100644 --- a/catalog/3d/kenney-city-kit-roads.md +++ b/catalog/3d/kenney-city-kit-roads.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [glTF, FBX, Blend] -tags: [cc0, city, roads, kenney, modular] +tags: [city, roads, modular] verified: 2026-08-25 status: active --- diff --git a/catalog/3d/kenney-city-kit-suburban.md b/catalog/3d/kenney-city-kit-suburban.md index 6d81f11..80e6fd3 100644 --- a/catalog/3d/kenney-city-kit-suburban.md +++ b/catalog/3d/kenney-city-kit-suburban.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [glTF, FBX, Blend] -tags: [cc0, city, suburban, kenney, modular] +tags: [city, suburban, modular] verified: 2026-08-25 status: active --- diff --git a/catalog/3d/kenney-factory-kit.md b/catalog/3d/kenney-factory-kit.md index fb7c3ff..1c480fd 100644 --- a/catalog/3d/kenney-factory-kit.md +++ b/catalog/3d/kenney-factory-kit.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [glTF, FBX, Blend] -tags: [cc0, factory, conveyor, kenney] +tags: [factory, conveyor] verified: 2026-08-25 status: active --- diff --git a/catalog/3d/kenney-fantasy-town-kit.md b/catalog/3d/kenney-fantasy-town-kit.md index e2ba281..34b9b12 100644 --- a/catalog/3d/kenney-fantasy-town-kit.md +++ b/catalog/3d/kenney-fantasy-town-kit.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [glTF, FBX, Blend] -tags: [cc0, medieval, town, kenney, modular] +tags: [medieval, town, modular] verified: 2026-08-25 status: active --- diff --git a/catalog/3d/kenney-food-kit.md b/catalog/3d/kenney-food-kit.md index 3f3fcaa..9139eea 100644 --- a/catalog/3d/kenney-food-kit.md +++ b/catalog/3d/kenney-food-kit.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [glTF, FBX, Blend] -tags: [cc0, food, kitchen, kenney] +tags: [food, kitchen] verified: 2026-08-25 status: active --- diff --git a/catalog/3d/kenney-furniture-kit.md b/catalog/3d/kenney-furniture-kit.md index 67200cb..67c7159 100644 --- a/catalog/3d/kenney-furniture-kit.md +++ b/catalog/3d/kenney-furniture-kit.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [glTF, FBX, Blend] -tags: [cc0, furniture, interior, kenney] +tags: [furniture, interior] verified: 2026-08-25 status: active --- diff --git a/catalog/3d/kenney-graveyard-kit.md b/catalog/3d/kenney-graveyard-kit.md index 15dda5a..c286f3e 100644 --- a/catalog/3d/kenney-graveyard-kit.md +++ b/catalog/3d/kenney-graveyard-kit.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [glTF, FBX, Blend] -tags: [cc0, graveyard, kenney] +tags: [graveyard] verified: 2026-08-25 status: active --- diff --git a/catalog/3d/kenney-mini-arena.md b/catalog/3d/kenney-mini-arena.md index 423a413..8cb3be4 100644 --- a/catalog/3d/kenney-mini-arena.md +++ b/catalog/3d/kenney-mini-arena.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [glTF, FBX, Blend] -tags: [cc0, arena, mini, kenney] +tags: [arena, mini] verified: 2026-08-25 status: active --- diff --git a/catalog/3d/kenney-mini-dungeon.md b/catalog/3d/kenney-mini-dungeon.md index 92af8b4..6d1ecaf 100644 --- a/catalog/3d/kenney-mini-dungeon.md +++ b/catalog/3d/kenney-mini-dungeon.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [glTF, FBX, Blend] -tags: [cc0, dungeon, mini, kenney] +tags: [dungeon, mini] verified: 2026-08-25 status: active --- diff --git a/catalog/3d/kenney-mini-forest.md b/catalog/3d/kenney-mini-forest.md index d5fd3b0..8384df4 100644 --- a/catalog/3d/kenney-mini-forest.md +++ b/catalog/3d/kenney-mini-forest.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [glTF, FBX, Blend] -tags: [cc0, forest, mini, kenney] +tags: [forest, mini] verified: 2026-08-25 status: active --- diff --git a/catalog/3d/kenney-mini-skate.md b/catalog/3d/kenney-mini-skate.md index abf0476..0d407f1 100644 --- a/catalog/3d/kenney-mini-skate.md +++ b/catalog/3d/kenney-mini-skate.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [glTF, FBX, Blend] -tags: [cc0, skate, park, kenney] +tags: [skate, park] verified: 2026-08-25 status: active --- diff --git a/catalog/3d/kenney-modular-cave-kit.md b/catalog/3d/kenney-modular-cave-kit.md index 15fa5d0..5bd1f9e 100644 --- a/catalog/3d/kenney-modular-cave-kit.md +++ b/catalog/3d/kenney-modular-cave-kit.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [glTF, FBX, Blend] -tags: [cc0, cave, modular, kenney] +tags: [cave, modular] verified: 2026-08-25 status: active --- diff --git a/catalog/3d/kenney-modular-dungeon-kit.md b/catalog/3d/kenney-modular-dungeon-kit.md index c5be5ad..ed32c11 100644 --- a/catalog/3d/kenney-modular-dungeon-kit.md +++ b/catalog/3d/kenney-modular-dungeon-kit.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [glTF, FBX, Blend] -tags: [cc0, dungeon, modular, kenney] +tags: [dungeon, modular] verified: 2026-08-25 status: active --- diff --git a/catalog/3d/kenney-modular-space-kit.md b/catalog/3d/kenney-modular-space-kit.md index eca3ec3..07a8589 100644 --- a/catalog/3d/kenney-modular-space-kit.md +++ b/catalog/3d/kenney-modular-space-kit.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [glTF, FBX, Blend] -tags: [cc0, sci-fi, modular, kenney] +tags: [sci-fi, modular] verified: 2026-08-25 status: active --- diff --git a/catalog/3d/kenney-nature-kit.md b/catalog/3d/kenney-nature-kit.md index a9cb024..8891657 100644 --- a/catalog/3d/kenney-nature-kit.md +++ b/catalog/3d/kenney-nature-kit.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [glTF, FBX, Blend] -tags: [cc0, trees, rocks, foliage, kenney] +tags: [trees, rocks, foliage] verified: 2026-07-19 status: active --- diff --git a/catalog/3d/kenney-pirate-kit.md b/catalog/3d/kenney-pirate-kit.md index 10060d5..1b79301 100644 --- a/catalog/3d/kenney-pirate-kit.md +++ b/catalog/3d/kenney-pirate-kit.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [glTF, FBX, Blend] -tags: [cc0, pirate, ships, kenney] +tags: [pirate, ships] verified: 2026-08-25 status: active --- diff --git a/catalog/3d/kenney-platformer-kit.md b/catalog/3d/kenney-platformer-kit.md index cc9ebd5..8c448dd 100644 --- a/catalog/3d/kenney-platformer-kit.md +++ b/catalog/3d/kenney-platformer-kit.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [glTF, FBX, Blend] -tags: [cc0, platformer, modular, kenney] +tags: [platformer, modular] verified: 2026-08-25 status: active --- diff --git a/catalog/3d/kenney-racing-kit.md b/catalog/3d/kenney-racing-kit.md index d3a1d62..b80d5e9 100644 --- a/catalog/3d/kenney-racing-kit.md +++ b/catalog/3d/kenney-racing-kit.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [glTF, FBX, Blend] -tags: [cc0, racing, vehicles, kenney] +tags: [racing, vehicles] verified: 2026-08-25 status: active --- diff --git a/catalog/3d/kenney-retro-fantasy-kit.md b/catalog/3d/kenney-retro-fantasy-kit.md index 8c4103a..18d3358 100644 --- a/catalog/3d/kenney-retro-fantasy-kit.md +++ b/catalog/3d/kenney-retro-fantasy-kit.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [glTF, FBX, Blend] -tags: [cc0, medieval, retro, kenney] +tags: [medieval, retro] verified: 2026-08-25 status: active --- diff --git a/catalog/3d/kenney-retro-urban-kit.md b/catalog/3d/kenney-retro-urban-kit.md index 6cf7011..b5853e6 100644 --- a/catalog/3d/kenney-retro-urban-kit.md +++ b/catalog/3d/kenney-retro-urban-kit.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [glTF, FBX, Blend] -tags: [cc0, urban, retro, kenney] +tags: [urban, retro] verified: 2026-08-25 status: active --- diff --git a/catalog/3d/kenney-tower-defense-kit.md b/catalog/3d/kenney-tower-defense-kit.md index 82d0cc3..1afb1ea 100644 --- a/catalog/3d/kenney-tower-defense-kit.md +++ b/catalog/3d/kenney-tower-defense-kit.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [glTF, FBX, Blend] -tags: [cc0, castle, defense, kenney] +tags: [castle, defense] verified: 2026-08-25 status: active --- diff --git a/catalog/3d/kenney-train-kit.md b/catalog/3d/kenney-train-kit.md index 5e1102a..4e15431 100644 --- a/catalog/3d/kenney-train-kit.md +++ b/catalog/3d/kenney-train-kit.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [glTF, FBX, Blend] -tags: [cc0, train, tram, kenney] +tags: [train, tram] verified: 2026-08-25 status: active --- diff --git a/catalog/3d/kenney-watercraft-kit.md b/catalog/3d/kenney-watercraft-kit.md index 306b471..70b09c9 100644 --- a/catalog/3d/kenney-watercraft-kit.md +++ b/catalog/3d/kenney-watercraft-kit.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [glTF, FBX, Blend] -tags: [cc0, boats, transport, kenney] +tags: [boats, transport] verified: 2026-08-25 status: active --- diff --git a/catalog/3d/magicavoxel.md b/catalog/3d/magicavoxel.md index 9ad652b..0a1eca7 100644 --- a/catalog/3d/magicavoxel.md +++ b/catalog/3d/magicavoxel.md @@ -8,7 +8,7 @@ license: custom commercial: true attribution_required: false formats: [VOX, OBJ] -tags: [voxel, freeware] +tags: [voxel] verified: 2026-08-25 status: active --- diff --git a/catalog/environment/nasa-3d-resources.md b/catalog/3d/nasa-3d-resources.md similarity index 89% rename from catalog/environment/nasa-3d-resources.md rename to catalog/3d/nasa-3d-resources.md index 22a5b23..eca9203 100644 --- a/catalog/environment/nasa-3d-resources.md +++ b/catalog/3d/nasa-3d-resources.md @@ -3,7 +3,7 @@ id: nasa-3d-resources name: NASA 3D Resources url: https://science.nasa.gov/3d-resources/ publisher: NASA -category: environment +category: 3d subcategories: [models, planetary] license: public-domain commercial: true @@ -32,6 +32,6 @@ US federal 3D models (spacecraft, planetary props). NASA media used in 3D models ## Related -- [nasa-image-video-library](nasa-image-video-library.md) -- [usgs-earth-explorer](usgs-earth-explorer.md) -- [poly-haven](poly-haven.md) +- [nasa-image-video-library](../video/nasa-image-video-library.md) +- [usgs-earth-explorer](../environment/usgs-earth-explorer.md) +- [poly-haven](../environment/poly-haven.md) diff --git a/catalog/3d/quaternius-cyberpunk-game-kit.md b/catalog/3d/quaternius-cyberpunk-game-kit.md index 4708340..be92266 100644 --- a/catalog/3d/quaternius-cyberpunk-game-kit.md +++ b/catalog/3d/quaternius-cyberpunk-game-kit.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [FBX, OBJ, Blend, glTF] -tags: [cc0, cyberpunk, sci-fi, quaternius] +tags: [cyberpunk, sci-fi] verified: 2026-08-25 status: active --- diff --git a/catalog/3d/quaternius-downtown-city-megakit.md b/catalog/3d/quaternius-downtown-city-megakit.md index da58cdd..46a387e 100644 --- a/catalog/3d/quaternius-downtown-city-megakit.md +++ b/catalog/3d/quaternius-downtown-city-megakit.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [FBX, OBJ, glTF, Blend] -tags: [cc0, city, modular, quaternius] +tags: [city, modular] verified: 2026-08-25 status: active --- diff --git a/catalog/3d/quaternius-fantasy-props-megakit.md b/catalog/3d/quaternius-fantasy-props-megakit.md index 9a8d7cb..b21a25e 100644 --- a/catalog/3d/quaternius-fantasy-props-megakit.md +++ b/catalog/3d/quaternius-fantasy-props-megakit.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [FBX, glTF, Blend, OBJ] -tags: [cc0, medieval, furniture, props, quaternius] +tags: [medieval, furniture, props] verified: 2026-07-19 status: active --- diff --git a/catalog/3d/quaternius-medieval-village-megakit.md b/catalog/3d/quaternius-medieval-village-megakit.md index a99977c..8bf5ff8 100644 --- a/catalog/3d/quaternius-medieval-village-megakit.md +++ b/catalog/3d/quaternius-medieval-village-megakit.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [FBX, OBJ, Blend, glTF] -tags: [cc0, medieval, modular, quaternius] +tags: [medieval, modular] verified: 2026-08-25 status: active --- diff --git a/catalog/3d/quaternius-modular-sci-fi-megakit.md b/catalog/3d/quaternius-modular-sci-fi-megakit.md index b354015..306e151 100644 --- a/catalog/3d/quaternius-modular-sci-fi-megakit.md +++ b/catalog/3d/quaternius-modular-sci-fi-megakit.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [FBX, OBJ, Blend, glTF] -tags: [cc0, sci-fi, modular, quaternius] +tags: [sci-fi, modular] verified: 2026-08-25 status: active --- diff --git a/catalog/3d/quaternius-pirate-kit.md b/catalog/3d/quaternius-pirate-kit.md index fad3e30..971b117 100644 --- a/catalog/3d/quaternius-pirate-kit.md +++ b/catalog/3d/quaternius-pirate-kit.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [FBX, OBJ, Blend, glTF] -tags: [cc0, pirate, characters, quaternius] +tags: [pirate, characters] verified: 2026-08-25 status: active --- diff --git a/catalog/3d/quaternius-stylized-nature-megakit.md b/catalog/3d/quaternius-stylized-nature-megakit.md index b386aab..3fb6015 100644 --- a/catalog/3d/quaternius-stylized-nature-megakit.md +++ b/catalog/3d/quaternius-stylized-nature-megakit.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [FBX, glTF, Blend, OBJ] -tags: [cc0, ghibli-ish, trees, plants, quaternius] +tags: [ghibli-ish, trees, plants] verified: 2026-07-19 status: active --- diff --git a/catalog/3d/quaternius-sushi-restaurant-kit.md b/catalog/3d/quaternius-sushi-restaurant-kit.md index e8b4135..802685c 100644 --- a/catalog/3d/quaternius-sushi-restaurant-kit.md +++ b/catalog/3d/quaternius-sushi-restaurant-kit.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [FBX, OBJ, Blend, glTF] -tags: [cc0, restaurant, food, quaternius] +tags: [restaurant, food] verified: 2026-08-25 status: active --- diff --git a/catalog/3d/quaternius-ultimate-space-kit.md b/catalog/3d/quaternius-ultimate-space-kit.md index b29a4d2..1579780 100644 --- a/catalog/3d/quaternius-ultimate-space-kit.md +++ b/catalog/3d/quaternius-ultimate-space-kit.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [FBX, OBJ, Blend, glTF] -tags: [cc0, sci-fi, space, quaternius] +tags: [sci-fi, space] verified: 2026-08-25 status: active --- diff --git a/catalog/3d/quaternius-zombie-apocalypse-kit.md b/catalog/3d/quaternius-zombie-apocalypse-kit.md index 6db6687..5cfb211 100644 --- a/catalog/3d/quaternius-zombie-apocalypse-kit.md +++ b/catalog/3d/quaternius-zombie-apocalypse-kit.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [FBX, OBJ, Blend, glTF] -tags: [cc0, zombie, vehicles, quaternius] +tags: [zombie, vehicles] verified: 2026-08-25 status: active --- diff --git a/catalog/3d/scan-the-world.md b/catalog/3d/scan-the-world.md index 713a91c..88900dd 100644 --- a/catalog/3d/scan-the-world.md +++ b/catalog/3d/scan-the-world.md @@ -8,7 +8,7 @@ license: unknown commercial: false attribution_required: unknown formats: [STL, OBJ] -tags: [photogrammetry, museum, print, aggregator, non-commercial] +tags: [photogrammetry, museum, print, aggregator] verified: 2026-09-23 status: needs-review --- @@ -33,5 +33,5 @@ MyMiniFactory's collection of 3D-scanned cultural artefacts, made for **physical ## Related - [smithsonian-open-access](smithsonian-open-access.md) -- [../environment/nasa-3d-resources](../environment/nasa-3d-resources.md) +- [nasa-3d-resources](nasa-3d-resources.md) - [poly-pizza](poly-pizza.md) diff --git a/catalog/3d/smithsonian-open-access.md b/catalog/3d/smithsonian-open-access.md index f2c4d06..ea8ad70 100644 --- a/catalog/3d/smithsonian-open-access.md +++ b/catalog/3d/smithsonian-open-access.md @@ -35,4 +35,4 @@ Museum 3D scans and media released under CC0 when marked with the Creative Commo ## Related - [scan-the-world](scan-the-world.md) -- [nasa-3d-resources](../environment/nasa-3d-resources.md) +- [nasa-3d-resources](nasa-3d-resources.md) diff --git a/catalog/3d/threedtextures-me.md b/catalog/3d/threedtextures-me.md index e1254ef..7e79533 100644 --- a/catalog/3d/threedtextures-me.md +++ b/catalog/3d/threedtextures-me.md @@ -9,7 +9,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [PNG, SBSAR] -tags: [pbr, seamless, cc0, concrete, metal, brick] +tags: [pbr, seamless, concrete, metal, brick] verified: 2026-08-24 status: active --- diff --git a/catalog/README.md b/catalog/README.md index 9b7f252..cce8c75 100644 --- a/catalog/README.md +++ b/catalog/README.md @@ -4,19 +4,27 @@ One markdown file per source under a category folder. Copy [`TEMPLATE.md`](TEMPL | Category | Entries | Path | Focus | | --- | ---: | --- | --- | -| 3D | 69 | [`3d/`](3d/) | Models, scans, PBR textures | -| Tools | 66 | [`tools/`](tools/) | Editors, pipeline, TTS, Godot add-ons | +| 3D | 70 | [`3d/`](3d/) | Models, scans, PBR textures | +| Tools | 77 | [`tools/`](tools/) | Editors, pipeline, TTS, Godot add-ons | | 2D | 54 | [`2d/`](2d/) | Sprites, UI, icons, palettes | | Audio | 30 | [`audio/`](audio/) | SFX, music, foley, IRs | -| Characters | 27 | [`characters/`](characters/) | Generators & modular humanoids | -| Fonts | 23 | [`fonts/`](fonts/) | OFL / commercial-ok type | -| Environment | 15 | [`environment/`](environment/) | HDRI, terrain, geodata | +| Characters | 28 | [`characters/`](characters/) | Generators & modular humanoids | +| Fonts | 25 | [`fonts/`](fonts/) | OFL / commercial-ok type | +| Environment | 13 | [`environment/`](environment/) | HDRI, terrain, geodata | | Shaders & VFX | 17 | [`shaders-vfx/`](shaders-vfx/) | Shaders, particle textures, FX | | Animation | 12 | [`animation/`](animation/) | MoCap, character clips | -| Video | 6 | [`video/`](video/) | Stock footage, archival clips | +| Video | 8 | [`video/`](video/) | Stock footage, archival clips | Guides: [`docs/licenses.md`](../docs/licenses.md) · [`docs/provenance.md`](../docs/provenance.md) · [`docs/high-risk.md`](../docs/high-risk.md) · [`docs/fivem.md`](../docs/fivem.md) · [`docs/ai-assets.md`](../docs/ai-assets.md) · [`docs/trust-score.md`](../docs/trust-score.md) · [`docs/fonts.md`](../docs/fonts.md) · [`docs/geodata.md`](../docs/geodata.md) · [`docs/game-vs-video-licensing.md`](../docs/game-vs-video-licensing.md) · [`docs/godot-budget-stack.md`](../docs/godot-budget-stack.md) · [`docs/research-index.md`](../docs/research-index.md) -Optional frontmatter (2D/UI): `grid_dimensions`, `camera_perspective`, `hardware_tags`, `attribution_string`. See [`TEMPLATE.md`](TEMPLATE.md). +**Which category.** File a source under the kind of content it mainly gives you. +Software that exists to make one kind of content lives with that content, next to the +assets it competes with: character creators (MakeHuman, VRoid Studio, CharMorph) are in +`characters/`, capture and retargeting tools (Rokoko Vision, MoveBox, Animated Drawings) +in `animation/`. General-purpose editors and pipeline tools live in `tools/`. A library +that mixes several kinds is filed by its main one: dedicated HDRI publishers are in +`environment/`, while BlendKit, mostly models and materials with some HDRIs, is in `3d/`. + +Optional frontmatter (2D/UI): `grid_dimensions`, `camera_perspective`, `hardware_tags`, `attribution_string`. Any entry: `maintenance` (`archived` or `inactive`, for a source repository that is archived or has had no push in three years; the site shows it as a badge and the weekly link check reports a GitHub source whose state disagrees). See [`TEMPLATE.md`](TEMPLATE.md). Status legend: `active` = license spot-checked · `needs-review` = useful but verify before shipping · `deprecated` = keep for history only. diff --git a/catalog/TEMPLATE.md b/catalog/TEMPLATE.md index 6d6be0e..eabb0c1 100644 --- a/catalog/TEMPLATE.md +++ b/catalog/TEMPLATE.md @@ -10,8 +10,8 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [glTF, FBX, PNG] -# subcategories and formats spelling: see CONTRIBUTING.md -tags: [low-poly, modular] +# subcategories and formats spelling: see CONTRIBUTING.md (formats must be in site/format-vocabulary.json) +tags: [low-poly, modular] # describe the content; never the licence or the publisher (V19, V21) verified: 2026-07-19 status: active # Optional (omit if N/A): @@ -21,6 +21,7 @@ status: active # grid_dimensions: 16x16 # 2D and UI entries only # camera_perspective: top_down # isometric_3_4 | side_scroller | 2d_flat. 2D and UI entries only; 3D and characters leave it out # hardware_tags: [steam_deck, switch_2] +# maintenance: archived # or inactive (no push in 3 years); from the source repository, with a dated Notes line --- # Example Source diff --git a/catalog/animation/blender-ellie-poses.md b/catalog/animation/blender-ellie-poses.md index b71b312..430da53 100644 --- a/catalog/animation/blender-ellie-poses.md +++ b/catalog/animation/blender-ellie-poses.md @@ -10,7 +10,7 @@ commercial: true attribution_required: true attribution_string: "Ellie Pose Library (c) Blender Studio. CC-BY. Suggested format; card does not specify wording." formats: [Blend] -tags: [blender-studio, poses] +tags: [poses] verified: 2026-08-24 status: active --- diff --git a/catalog/animation/kaykit-character-animations.md b/catalog/animation/kaykit-character-animations.md index c5f7aee..3e077e9 100644 --- a/catalog/animation/kaykit-character-animations.md +++ b/catalog/animation/kaykit-character-animations.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [FBX, glTF] -tags: [low-poly, cc0, characters] +tags: [low-poly, characters] verified: 2026-08-24 status: active --- diff --git a/catalog/animation/meta-animated-drawings.md b/catalog/animation/meta-animated-drawings.md index bd973fa..be29d9e 100644 --- a/catalog/animation/meta-animated-drawings.md +++ b/catalog/animation/meta-animated-drawings.md @@ -9,9 +9,10 @@ license_spdx: MIT commercial: true attribution_required: false formats: [Python] -tags: [mit, 2d, research, archived, fair] +tags: [2d, research, fair] verified: 2026-07-19 status: active +maintenance: archived --- # Meta Animated Drawings @@ -20,6 +21,7 @@ MIT code to animate children’s-style human figure drawings (FAIR paper impleme ## Notes +- Maintenance: the GitHub repository facebookresearch/AnimatedDrawings is archived (read-only), per the GitHub API on 2026-09-26; last push 2025-09-03. - Local Python install; example configs under `examples/` - Keep MIT copyright notice with redistributed code - Attribution example (optional): `Animated Drawings © Meta Platforms — MIT` diff --git a/catalog/animation/microsoft-movebox.md b/catalog/animation/microsoft-movebox.md index bfe6d7d..7c84af5 100644 --- a/catalog/animation/microsoft-movebox.md +++ b/catalog/animation/microsoft-movebox.md @@ -10,9 +10,10 @@ license_spdx: MIT commercial: true attribution_required: false formats: [Unity] -tags: [mit, kinect, azure-kinect, rocketbox, archived] +tags: [kinect, azure-kinect, rocketbox] verified: 2026-07-19 status: active +maintenance: archived --- # MoveBox for Microsoft Rocketbox @@ -21,6 +22,7 @@ MIT Unity toolbox to drive [Microsoft Rocketbox](../characters/microsoft-rocketb ## Notes +- Maintenance: the GitHub repository microsoft/MoveBox-for-Microsoft-Rocketbox is archived (read-only), per the GitHub API on 2026-09-26; last push 2024-01-29. - Tied to Rocketbox skeleton / Unity capture studio scenes - Not a general clip library — capture/retarget tool - Keep MIT notice; Attribution example (optional): `MoveBox © Microsoft — MIT` diff --git a/catalog/animation/quaternius-universal-animation-library-2.md b/catalog/animation/quaternius-universal-animation-library-2.md index 002ef7c..f433d76 100644 --- a/catalog/animation/quaternius-universal-animation-library-2.md +++ b/catalog/animation/quaternius-universal-animation-library-2.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [FBX, glTF, GLB, Blend] -tags: [cc0, retarget, combat, parkour, zombie] +tags: [retarget, combat, parkour, zombie] verified: 2026-07-19 status: active --- diff --git a/catalog/animation/quaternius-universal-animation-library.md b/catalog/animation/quaternius-universal-animation-library.md index 057b227..bb3e7d0 100644 --- a/catalog/animation/quaternius-universal-animation-library.md +++ b/catalog/animation/quaternius-universal-animation-library.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [FBX, glTF, GLB, Blend] -tags: [cc0, retarget, godot, unity, unreal, locomotion] +tags: [retarget, godot, unity, unreal, locomotion] verified: 2026-07-19 status: active --- diff --git a/catalog/audio/adventure-kid-irs.md b/catalog/audio/adventure-kid-irs.md index e06bca1..c5f8b4c 100644 --- a/catalog/audio/adventure-kid-irs.md +++ b/catalog/audio/adventure-kid-irs.md @@ -10,7 +10,7 @@ commercial: true attribution_required: true attribution_string: "Reverb IRs (c) Adventure Kid (CC BY 4.0)" formats: [WAV] -tags: [impulse-response, reverb, cc-by, springs] +tags: [impulse-response, reverb, springs] verified: 2026-08-29 status: active --- diff --git a/catalog/audio/bigsoundbank.md b/catalog/audio/bigsoundbank.md index 8cb1369..aff4dea 100644 --- a/catalog/audio/bigsoundbank.md +++ b/catalog/audio/bigsoundbank.md @@ -9,7 +9,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [WAV, MP3] -tags: [cc0, field-recording, royalty-free, footsteps-capable] +tags: [field-recording, footsteps-capable] verified: 2026-08-24 status: active --- diff --git a/catalog/audio/ccmixter.md b/catalog/audio/ccmixter.md index 5e8143d..6f37363 100644 --- a/catalog/audio/ccmixter.md +++ b/catalog/audio/ccmixter.md @@ -9,7 +9,7 @@ commercial: unknown attribution_required: true attribution_string: "Music \"{title}\" by {artist} Available at ccMixter.org {url} Under {CC license} {license-url}" formats: [MP3, WAV] -tags: [aggregator, creative-commons, remix, youtube-first] +tags: [aggregator, remix, youtube-first] verified: 2026-08-24 status: needs-review --- diff --git a/catalog/audio/congusbongus-footsteps-surfaces.md b/catalog/audio/congusbongus-footsteps-surfaces.md index af9b039..03b3134 100644 --- a/catalog/audio/congusbongus-footsteps-surfaces.md +++ b/catalog/audio/congusbongus-footsteps-surfaces.md @@ -10,7 +10,7 @@ commercial: true attribution_required: true attribution_string: "Footsteps by congusbongus (CC BY 3.0), derived from sounds by swuing, EminYILDIRIM, sabotovat, Eelke, ceberation and Lee Barkovich (CC BY 3.0), and Ali_6868 and blukotek (CC0)" formats: [OGG] -tags: [footsteps, multi-surface, foley, cc-by] +tags: [footsteps, multi-surface, foley] verified: 2026-09-24 status: active --- diff --git a/catalog/audio/convology-xt.md b/catalog/audio/convology-xt.md index 598a721..b8a61ff 100644 --- a/catalog/audio/convology-xt.md +++ b/catalog/audio/convology-xt.md @@ -9,7 +9,7 @@ commercial: unknown attribution_required: unknown formats: [VST, AU, AAX, WAV] tags: [reverb, ir, plugin, free-factory] -verified: 2026-07-19 +verified: 2026-09-26 status: needs-review --- @@ -22,10 +22,12 @@ Free convolution reverb plugin + **74** factory vintage IR samples (Impulse Reco - Prefer [voxengo-impulses](voxengo-impulses.md) when you need an explicit royalty-free IR file grant for commercial games - Using the plugin in a DAW to *render* wet audio into a game is a different question from shipping the IR files - `/license/`, `/eula/`, `/terms/`, `/faq/` all 404 on 2026-07-19; only [privacy](https://impulserecord.com/privacy/) is public — no commercial/redistribution grant there +- Re-checked 2026-09-26: `/license/`, `/eula/`, `/terms/`, `/terms-and-conditions/`, `/licensing/`, `/license-agreement/`, `/faq/` all 404, and the site's page sitemap lists no licence page. Still open: the licence for the 74 factory IRs (commercial use, credit, and whether the WAVs may ship in a game) sits behind the download form, so `commercial` and `attribution_required` stay `unknown` ## Evidence - Live product page (2026-07-19): “Free Factory Plugin – Includes 74 Vintage Reverb Impulse Response Files… no time limitations, iLok…” — points users to a gated “licensing page” at download; no public commercial/redistribution text found → keep `needs-review` +- Live [product page](https://impulserecord.com/convology-xt/) (2026-09-26): unchanged: "Free Factory Plugin – Includes 74 Vintage Reverb Impulse Response Files"; "Simply fill in the information on the licensing page and that's all there is to it." No licence terms on the page ## Related diff --git a/catalog/audio/fesliyan-footsteps.md b/catalog/audio/fesliyan-footsteps.md index a4f977e..ae94049 100644 --- a/catalog/audio/fesliyan-footsteps.md +++ b/catalog/audio/fesliyan-footsteps.md @@ -8,7 +8,7 @@ license: custom commercial: true attribution_required: false formats: [MP3] -tags: [footsteps, royalty-free, freemium] +tags: [footsteps, freemium] verified: 2026-08-24 status: active --- diff --git a/catalog/audio/filmmusic-ende.md b/catalog/audio/filmmusic-ende.md index b8cff5e..cd23bf2 100644 --- a/catalog/audio/filmmusic-ende.md +++ b/catalog/audio/filmmusic-ende.md @@ -9,7 +9,7 @@ license_spdx: CC-BY-4.0 commercial: true attribution_required: false formats: [MP3, WAV] -tags: [music, cc-by, no-nd, games-ok] +tags: [music, no-nd, games-ok] verified: 2026-08-24 status: active --- diff --git a/catalog/audio/free-music-archive.md b/catalog/audio/free-music-archive.md index 9a15b46..c6d5bce 100644 --- a/catalog/audio/free-music-archive.md +++ b/catalog/audio/free-music-archive.md @@ -9,7 +9,7 @@ commercial: unknown attribution_required: true attribution_string: "Credit the track artist and the CC license named on that FMA track page." formats: [MP3] -tags: [aggregator, creative-commons, tribe-of-noise] +tags: [aggregator, tribe-of-noise] verified: 2026-08-24 status: needs-review --- diff --git a/catalog/audio/freepd.md b/catalog/audio/freepd.md index c879ecd..f90c8d3 100644 --- a/catalog/audio/freepd.md +++ b/catalog/audio/freepd.md @@ -8,7 +8,7 @@ license: unknown commercial: unknown attribution_required: false formats: [MP3] -tags: [music, public-domain, offline] +tags: [music, offline] verified: 2026-08-24 status: deprecated --- diff --git a/catalog/audio/freesound.md b/catalog/audio/freesound.md index e23a4b2..64a8511 100644 --- a/catalog/audio/freesound.md +++ b/catalog/audio/freesound.md @@ -5,11 +5,11 @@ url: https://freesound.org category: audio subcategories: [sfx, field-recordings] license: varies -commercial: unknown +commercial: varies attribution_required: unknown formats: [WAV, FLAC, OGG] tags: [community, filter-required, cc0-filter] -verified: 2026-07-19 +verified: 2026-09-26 status: needs-review --- @@ -21,6 +21,8 @@ Huge community audio library. Per-sound licenses are **CC0**, **CC BY**, or **CC - **Content ID reaches sound effects, through third parties.** Freesound's own FAQ (read 2026-09-23) explains it: musicians put "raw" Freesound sounds into songs and register those songs with YouTube Content ID, so any other video containing the same unedited sound gets matched. It adds that a sound "modified with plugins, stretched or slowed" is less likely to match, and that a claim can be disputed by showing the Freesound upload predates the song. For a game, process sounds before you ship them, which also protects your players' videos +- `commercial: varies` (set 2026-09-26): the FAQ names three per-sound licences, and one of them (BY-NC) forbids commercial use, so this is the per-file case the catalog marks `varies`. Still open: credit is also per sound (CC0 none, BY required), and the schema has no per-file value for `attribution_required`, so the entry stays `needs-review` + - Search filters are not a legal guarantee — open each sound’s license page before packaging - Attribution list tool: freesound.org/home/attribution/ - Site ToS restricts commercial use of the *website portal*; sound reuse still follows the per-file Creative Commons choice @@ -30,6 +32,7 @@ Huge community audio library. Per-sound licenses are **CC0**, **CC BY**, or **CC - Live [FAQ — Licenses](https://freesound.org/help/faq/) (2026-07-19): uploaders choose CC0 / BY / BY-NC; FAQ summary: NC means “you can't earn any money with the piece of work you create!” - Live [website ToS](https://freesound.org/help/tos_web/) (2026-07-19): sounds/metadata licensed under the CC license the uploader selects — not a site-wide commercial grant → keep `needs-review` / `commercial: unknown` +- Live [FAQ — Licenses](https://freesound.org/help/faq/) (2026-09-26): "freesound lets the user select one of three licenses for their sounds. And, we used to have a 4th license"; zero: "you can do pretty much what you want with the sound"; attribution: "you should always mention the original creators"; noncommercial: "you can't earn any money with the piece of work you create!" ## Related diff --git a/catalog/audio/gboxmikefozzy-footsteps.md b/catalog/audio/gboxmikefozzy-footsteps.md index 05f206f..b3f507e 100644 --- a/catalog/audio/gboxmikefozzy-footsteps.md +++ b/catalog/audio/gboxmikefozzy-footsteps.md @@ -9,7 +9,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [OGG] -tags: [footsteps, subway, field-recording, cc0] +tags: [footsteps, subway, field-recording] verified: 2026-08-24 status: active --- diff --git a/catalog/audio/incompetech.md b/catalog/audio/incompetech.md index 1623e95..2090ac8 100644 --- a/catalog/audio/incompetech.md +++ b/catalog/audio/incompetech.md @@ -10,7 +10,7 @@ commercial: true attribution_required: true attribution_string: "Title Kevin MacLeod (incompetech.com) Licensed under Creative Commons: By Attribution 4.0 https://creativecommons.org/licenses/by/4.0/" formats: [MP3, WAV] -tags: [music, loops, attribution] +tags: [music, loops] verified: 2026-08-24 status: active --- diff --git a/catalog/audio/kenney-impact-sounds.md b/catalog/audio/kenney-impact-sounds.md index 920f2e3..139b09e 100644 --- a/catalog/audio/kenney-impact-sounds.md +++ b/catalog/audio/kenney-impact-sounds.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [OGG, WAV] -tags: [cc0, impact, foley, kenney] +tags: [impact, foley] verified: 2026-07-19 status: active --- diff --git a/catalog/audio/kenney-interface-sounds.md b/catalog/audio/kenney-interface-sounds.md index ace539d..31e1de8 100644 --- a/catalog/audio/kenney-interface-sounds.md +++ b/catalog/audio/kenney-interface-sounds.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [OGG, WAV] -tags: [ui, interface, click, cc0] +tags: [ui, interface, click] verified: 2026-08-24 status: active --- diff --git a/catalog/audio/kenney-music-jingles.md b/catalog/audio/kenney-music-jingles.md index a489a26..84d4be6 100644 --- a/catalog/audio/kenney-music-jingles.md +++ b/catalog/audio/kenney-music-jingles.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [OGG] -tags: [cc0, music, stinger, jingle, ui] +tags: [music, stinger, jingle, ui] verified: 2026-08-24 status: active --- diff --git a/catalog/audio/kenney-rpg-audio.md b/catalog/audio/kenney-rpg-audio.md index 8222445..56ecc1c 100644 --- a/catalog/audio/kenney-rpg-audio.md +++ b/catalog/audio/kenney-rpg-audio.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [OGG, WAV] -tags: [cc0, footsteps, rpg, weapons, kenney] +tags: [footsteps, rpg, weapons] verified: 2026-07-19 status: active --- diff --git a/catalog/audio/kenney-sci-fi-sounds.md b/catalog/audio/kenney-sci-fi-sounds.md index 21d90c2..6a0284d 100644 --- a/catalog/audio/kenney-sci-fi-sounds.md +++ b/catalog/audio/kenney-sci-fi-sounds.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [OGG, WAV] -tags: [sci-fi, space, engine, cc0] +tags: [sci-fi, space, engine] verified: 2026-08-24 status: active --- diff --git a/catalog/audio/kenney-ui-audio.md b/catalog/audio/kenney-ui-audio.md index 254b642..2309620 100644 --- a/catalog/audio/kenney-ui-audio.md +++ b/catalog/audio/kenney-ui-audio.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [OGG, WAV] -tags: [ui, click, button, cc0] +tags: [ui, click, button] verified: 2026-08-24 status: active --- diff --git a/catalog/audio/mixkit-sfx.md b/catalog/audio/mixkit-sfx.md index 2a62e26..9878249 100644 --- a/catalog/audio/mixkit-sfx.md +++ b/catalog/audio/mixkit-sfx.md @@ -9,7 +9,7 @@ license: custom commercial: true attribution_required: false formats: [WAV, MP3] -tags: [sfx, royalty-free, envato, no-signup] +tags: [sfx, no-signup] verified: 2026-09-23 status: active --- diff --git a/catalog/audio/musopen.md b/catalog/audio/musopen.md index ebf97a2..b706ba5 100644 --- a/catalog/audio/musopen.md +++ b/catalog/audio/musopen.md @@ -8,7 +8,7 @@ license: varies commercial: varies attribution_required: unknown formats: [MP3] -tags: [music, public-domain, recordings, classical, per-file-license] +tags: [music, recordings, classical, per-file-license] verified: 2026-09-23 status: needs-review --- diff --git a/catalog/audio/pixabay-audio.md b/catalog/audio/pixabay-audio.md index b13162b..f03c75a 100644 --- a/catalog/audio/pixabay-audio.md +++ b/catalog/audio/pixabay-audio.md @@ -9,7 +9,7 @@ license: custom commercial: true attribution_required: false formats: [MP3, WAV] -tags: [royalty-free, curated, no-attribution] +tags: [curated] verified: 2026-09-23 status: active --- diff --git a/catalog/audio/sonniss-gdc.md b/catalog/audio/sonniss-gdc.md index f89011d..2bc9489 100644 --- a/catalog/audio/sonniss-gdc.md +++ b/catalog/audio/sonniss-gdc.md @@ -8,7 +8,7 @@ license: custom commercial: true attribution_required: false formats: [WAV] -tags: [professional, large, royalty-free] +tags: [professional, large] verified: 2026-08-24 status: active --- diff --git a/catalog/audio/subspaceaudio-5-chiptunes.md b/catalog/audio/subspaceaudio-5-chiptunes.md index e2531ec..cc83956 100644 --- a/catalog/audio/subspaceaudio-5-chiptunes.md +++ b/catalog/audio/subspaceaudio-5-chiptunes.md @@ -9,7 +9,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [WAV] -tags: [cc0, chiptune, 8-bit, retro, music, looping, platformer] +tags: [chiptune, 8-bit, retro, music, looping, platformer] verified: 2026-09-23 status: active --- diff --git a/catalog/audio/tallbeard-abstraction-music-loop-bundle.md b/catalog/audio/tallbeard-abstraction-music-loop-bundle.md index 29ca7db..4a095c9 100644 --- a/catalog/audio/tallbeard-abstraction-music-loop-bundle.md +++ b/catalog/audio/tallbeard-abstraction-music-loop-bundle.md @@ -9,7 +9,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [MP3, OGG] -tags: [cc0, loops, music, itch, games-ok] +tags: [loops, music, itch, games-ok] verified: 2026-08-29 status: active --- diff --git a/catalog/audio/voxengo-impulses.md b/catalog/audio/voxengo-impulses.md index 944f084..71eba98 100644 --- a/catalog/audio/voxengo-impulses.md +++ b/catalog/audio/voxengo-impulses.md @@ -8,7 +8,7 @@ license: custom commercial: true attribution_required: false formats: [WAV] -tags: [impulse-response, reverb, convolution, free] +tags: [impulse-response, reverb, convolution] verified: 2026-07-19 status: active --- diff --git a/catalog/characters/README.md b/catalog/characters/README.md index fbd2b14..1bd0b4d 100644 --- a/catalog/characters/README.md +++ b/catalog/characters/README.md @@ -61,5 +61,6 @@ Rocketbox, whose MIT licence requires the copyright notice to ship with your bui | [oga-fps-arms-rigged](oga-fps-arms-rigged.md) | FPS Arms, rigged (OpenGameArt) | CC0 | yes | active | | [charmorph](charmorph.md) | CharMorph | varies (AGPL/`mb_*`) | unknown | needs-review | | [vroid-studio](vroid-studio.md) | VRoid Studio | custom | yes | active | +| [kenney-animated-characters](kenney-animated-characters.md) | Kenney Animated Characters | CC0 | yes | active | \* MPFB/MakeHuman: **core exports/assets CC0**; app/addon code AGPL/GPL. Avoid **MB-Lab** and CharMorph **`mb_*`** AGPL bases — [`docs/high-risk.md`](../../docs/high-risk.md). diff --git a/catalog/characters/barnabe-wild-lowpoly-rigged.md b/catalog/characters/barnabe-wild-lowpoly-rigged.md index c551494..f7fabc2 100644 --- a/catalog/characters/barnabe-wild-lowpoly-rigged.md +++ b/catalog/characters/barnabe-wild-lowpoly-rigged.md @@ -9,7 +9,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [Blend, FBX] -tags: [low-poly, psx, cc0, itch] +tags: [low-poly, psx, itch] verified: 2026-08-24 status: active --- diff --git a/catalog/characters/blender-human-base-meshes.md b/catalog/characters/blender-human-base-meshes.md index d895b89..65946e6 100644 --- a/catalog/characters/blender-human-base-meshes.md +++ b/catalog/characters/blender-human-base-meshes.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [Blend, glTF, FBX] -tags: [blender-studio, topology] +tags: [topology] verified: 2026-08-24 status: active --- diff --git a/catalog/characters/blender-studio-critter-evolved.md b/catalog/characters/blender-studio-critter-evolved.md index a8fe378..b234024 100644 --- a/catalog/characters/blender-studio-critter-evolved.md +++ b/catalog/characters/blender-studio-critter-evolved.md @@ -11,7 +11,7 @@ commercial: true attribution_required: true attribution_string: "Critter Evolved (c) Blender Studio (CC BY 4.0)" formats: [Blend] -tags: [blender-studio, creature, rig] +tags: [creature, rig] verified: 2026-08-29 status: active --- diff --git a/catalog/characters/blender-studio-critter.md b/catalog/characters/blender-studio-critter.md index abf56ce..ce1b72a 100644 --- a/catalog/characters/blender-studio-critter.md +++ b/catalog/characters/blender-studio-critter.md @@ -11,7 +11,7 @@ commercial: true attribution_required: true attribution_string: "Critter (c) Blender Studio (CC BY 4.0)" formats: [Blend] -tags: [blender-studio, creature, rig] +tags: [creature, rig] verified: 2026-08-29 status: active --- diff --git a/catalog/characters/blender-studio-one.md b/catalog/characters/blender-studio-one.md index 890820a..3db24c5 100644 --- a/catalog/characters/blender-studio-one.md +++ b/catalog/characters/blender-studio-one.md @@ -11,7 +11,7 @@ commercial: true attribution_required: true attribution_string: "One (c) Blender Studio (CC BY 4.0)" formats: [Blend] -tags: [blender-studio, humanoid, rig] +tags: [humanoid, rig] verified: 2026-08-29 status: active --- diff --git a/catalog/characters/blender-studio-rain.md b/catalog/characters/blender-studio-rain.md index d34703d..0f18d9b 100644 --- a/catalog/characters/blender-studio-rain.md +++ b/catalog/characters/blender-studio-rain.md @@ -11,7 +11,7 @@ commercial: true attribution_required: true attribution_string: "Rain (c) Blender Studio (CC BY 4.0)" formats: [Blend] -tags: [blender-studio, humanoid, rig] +tags: [humanoid, rig] verified: 2026-08-29 status: active --- diff --git a/catalog/characters/blender-studio-space-creatures.md b/catalog/characters/blender-studio-space-creatures.md index 8eec4cd..9a07727 100644 --- a/catalog/characters/blender-studio-space-creatures.md +++ b/catalog/characters/blender-studio-space-creatures.md @@ -11,7 +11,7 @@ commercial: true attribution_required: true attribution_string: "Space Creatures (c) Blender Studio (CC BY 4.0)" formats: [Blend] -tags: [blender-studio, creature, rig] +tags: [creature, rig] verified: 2026-08-29 status: active --- diff --git a/catalog/characters/charmorph.md b/catalog/characters/charmorph.md index eb4ad3e..520e79f 100644 --- a/catalog/characters/charmorph.md +++ b/catalog/characters/charmorph.md @@ -8,8 +8,8 @@ license: varies commercial: unknown attribution_required: unknown formats: [Blend, glTF, FBX] -tags: [blender, humanoid, agpl-assets, mb-lab-derived] -verified: 2026-07-19 +tags: [blender, humanoid, mb-lab-derived] +verified: 2026-09-26 status: needs-review --- @@ -22,12 +22,17 @@ Blender character tool reimplementing MB-Lab-style morphing (no MB-Lab *code*). - Open each character’s `license.txt` in [CharMorph-db](https://github.com/Upliner/CharMorph-db) before exporting - `mb_female` (and likely other `mb_*`) = full AGPL text — treat like MB-Lab export risk - Antonia = CC-BY-3.0 (attribution required) +- Reom = CC-BY per its `config.yaml` (`license: CC-BY`, no version stated); it has no `license.txt` - Do not assume “safer than MB-Lab” without checking the active base +- Still open (re-checked 2026-09-26): every stated licence (GPL-3 code, AGPL-3 MB-Lab data, CC-BY Antonia and Reom) permits commercial use in itself; what is unsettled is how far the AGPL on `mb_*` meshes reaches into an exported character shipped in a closed game, and credit differs per base. That keeps `commercial` and `attribution_required` at `unknown` +- Maintenance: GitHub API on 2026-09-26: CharMorph not archived, last push 2025-05-29; CharMorph-db last push 2024-07-23 ## Evidence - Live CharMorph-db (2026-07-19): `characters/mb_female/license.txt` = **GNU AGPL v3**; `characters/antonia/license.txt` = **CC BY 3.0** - Live `__init__.py`: GPL-3 license block for the addon +- Live [license.txt](https://github.com/Upliner/CharMorph/blob/master/license.txt) (2026-09-26): "All python files released in the CharMorph package, are released under GNU General Public License 3"; "Each character has its own license stated in select list"; MB-Lab character data "released under GNU Affero General Public License 3" +- Live CharMorph-db (2026-09-26): characters are `antonia`, `mb_female`, `mb_male`, `reom`. `antonia/license.txt`: "licensed under the Creative Commons Attribution 3.0 Unported License"; `reom/config.yaml`: "title: Reom (CC-BY)", "license: CC-BY" ## Related diff --git a/catalog/characters/gdquest-3d-mannequin.md b/catalog/characters/gdquest-3d-mannequin.md index 75432af..994a058 100644 --- a/catalog/characters/gdquest-3d-mannequin.md +++ b/catalog/characters/gdquest-3d-mannequin.md @@ -11,9 +11,10 @@ commercial: true attribution_required: true attribution_string: "GDQuest and contributors (https://www.gdquest.com/)" formats: [glTF, Godot] -tags: [godot, mannequin, controller, cc-by] +tags: [godot, mannequin, controller] verified: 2026-08-24 status: active +maintenance: inactive --- # GDQuest Open 3D Mannequin @@ -22,6 +23,7 @@ Open mannequin mesh plus a third-person controller sample for Godot. Good placeh ## Notes +- Maintenance: no push to the GitHub repository gdquest-demos/godot-3d-mannequin since 2021-08-04, per the GitHub API on 2026-09-26. - Repo targets **Godot 3.2+** controller scenes — treat the mesh/animations as the reusable catalog value; expect porting work for Godot 4. - Attribute: `GDQuest and contributors (https://www.gdquest.com/)`. - Not a character generator — one stylized mannequin, not a wardrobe system. diff --git a/catalog/characters/kaykit-adventurers.md b/catalog/characters/kaykit-adventurers.md index e353f0d..11a07fd 100644 --- a/catalog/characters/kaykit-adventurers.md +++ b/catalog/characters/kaykit-adventurers.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [FBX, glTF] -tags: [cc0, low-poly, stylized, adventurers, kaykit] +tags: [low-poly, stylized, adventurers] verified: 2026-07-19 status: active --- diff --git a/catalog/characters/kaykit-skeletons.md b/catalog/characters/kaykit-skeletons.md index 081b873..65b6118 100644 --- a/catalog/characters/kaykit-skeletons.md +++ b/catalog/characters/kaykit-skeletons.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [FBX, glTF] -tags: [cc0, low-poly, skeletons, enemies, kaykit] +tags: [low-poly, skeletons, enemies] verified: 2026-08-25 status: active --- diff --git a/catalog/characters/kenney-animated-characters.md b/catalog/characters/kenney-animated-characters.md new file mode 100644 index 0000000..5df0cd2 --- /dev/null +++ b/catalog/characters/kenney-animated-characters.md @@ -0,0 +1,38 @@ +--- +id: kenney-animated-characters +name: Kenney Animated Characters +url: https://kenney.nl/assets?series=Animated+Characters +publisher: Kenney +category: characters +subcategories: [rigged, animated, humanoid] +license: CC0 +license_spdx: CC0-1.0 +commercial: true +attribution_required: false +formats: [FBX, PNG, SVG] +tags: [low-poly, survivors, zombie, skins] +verified: 2026-09-26 +status: active +--- + +# Kenney Animated Characters + +Kenney's "Animated Characters" series: three small packs of rigged, animated low-poly humanoids with swappable PNG skins. [Protagonists](https://kenney.nl/assets/animated-characters-protagonists) (2020; skater, cyborg, criminal), [Retro](https://kenney.nl/assets/animated-characters-retro) (2022) and [Survivors](https://kenney.nl/assets/animated-characters-survivors) (2019; zombie and survivor). All three are CC0. + +## Notes + +- One entry for the series, since each pack is the same rig and format with different skins +- Contents read from each pack's download ZIP (2026-09-26): 4 FBX files plus PNG skins in each, and SVG files in Protagonists and Survivors +- The bundled `License.txt` says credit is welcome but "not a requirement" +- Attribution example (optional): `Characters by Kenney.nl (CC0)` + +## Evidence + +- Live pack pages for Protagonists, Retro and Survivors (2026-09-26): each shows Category "3D", series "Animated Characters", 8 files, License "Creative Commons CC0" +- `License.txt` in the Protagonists download (2026-09-26): "License: (Creative Commons Zero, CC0)", "You can use this content for personal, educational, and commercial purposes. Support by crediting 'Kenney' or 'www.kenney.nl' (this is not a requirement)" + +## Related + +- [kaykit-adventurers](kaykit-adventurers.md) +- [quaternius-universal-base-characters](quaternius-universal-base-characters.md) +- [kenney](../3d/kenney.md) diff --git a/catalog/characters/microsoft-rocketbox.md b/catalog/characters/microsoft-rocketbox.md index 5ce5f38..3db631c 100644 --- a/catalog/characters/microsoft-rocketbox.md +++ b/catalog/characters/microsoft-rocketbox.md @@ -13,6 +13,7 @@ formats: [FBX] tags: [rigged, vr, research-origin, diverse] verified: 2026-09-26 status: active +maintenance: inactive --- # Microsoft Rocketbox @@ -21,6 +22,7 @@ status: active ## Notes +- Maintenance: no push to the GitHub repository microsoft/Microsoft-Rocketbox since 2022-10-02, per the GitHub API on 2026-09-26. - README still mentions the older “research/academic” blog framing; **LICENSE.md is MIT** (updated Dec 2020) — keep the copyright notice. - Unity import helpers ship in-repo; Unreal batch importer contributed later. Retarget animations carefully (skeleton is library-specific). - Paper citation requested for *research* use; MIT still requires copyright notice in distributions. diff --git a/catalog/characters/oga-fps-arms-rigged.md b/catalog/characters/oga-fps-arms-rigged.md index 02b4c4a..5b81b06 100644 --- a/catalog/characters/oga-fps-arms-rigged.md +++ b/catalog/characters/oga-fps-arms-rigged.md @@ -9,7 +9,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [FBX, Blend] -tags: [cc0, first-person, fps, arms, ik, fingers, opengameart] +tags: [first-person, fps, arms, ik, fingers, opengameart] verified: 2026-09-23 status: active --- diff --git a/catalog/characters/osa-100avatars.md b/catalog/characters/osa-100avatars.md index 8c496cb..813216a 100644 --- a/catalog/characters/osa-100avatars.md +++ b/catalog/characters/osa-100avatars.md @@ -9,7 +9,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [VRM] -tags: [vrm, cc0, web, metaverse] +tags: [vrm, web, metaverse] verified: 2026-08-25 status: active --- diff --git a/catalog/characters/quaternius-animated-fish-pack.md b/catalog/characters/quaternius-animated-fish-pack.md index 760977d..367b0f8 100644 --- a/catalog/characters/quaternius-animated-fish-pack.md +++ b/catalog/characters/quaternius-animated-fish-pack.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [FBX, OBJ, Blend] -tags: [cc0, fish, aquatic, animated, quaternius] +tags: [fish, aquatic, animated] verified: 2026-08-25 status: active --- diff --git a/catalog/characters/quaternius-animated-mech-pack.md b/catalog/characters/quaternius-animated-mech-pack.md index 6744eb8..8344da9 100644 --- a/catalog/characters/quaternius-animated-mech-pack.md +++ b/catalog/characters/quaternius-animated-mech-pack.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [FBX, OBJ, Blend, glTF] -tags: [cc0, mech, sci-fi, animated, quaternius] +tags: [mech, sci-fi, animated] verified: 2026-08-25 status: active --- diff --git a/catalog/characters/quaternius-cube-world-kit.md b/catalog/characters/quaternius-cube-world-kit.md index 2e65110..91cb44d 100644 --- a/catalog/characters/quaternius-cube-world-kit.md +++ b/catalog/characters/quaternius-cube-world-kit.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [FBX, OBJ, Blend, glTF] -tags: [cc0, voxel, cube, characters, animals, quaternius] +tags: [voxel, cube, characters, animals] verified: 2026-08-25 status: active --- diff --git a/catalog/characters/quaternius-farm-animal-pack.md b/catalog/characters/quaternius-farm-animal-pack.md index 2a16ad5..bcefb6f 100644 --- a/catalog/characters/quaternius-farm-animal-pack.md +++ b/catalog/characters/quaternius-farm-animal-pack.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [FBX, OBJ, Blend] -tags: [cc0, animals, quadruped, animated, quaternius] +tags: [animals, quadruped, animated] verified: 2026-08-25 status: active --- diff --git a/catalog/characters/quaternius-modular-character-outfits-fantasy.md b/catalog/characters/quaternius-modular-character-outfits-fantasy.md index 83b5b05..7cee030 100644 --- a/catalog/characters/quaternius-modular-character-outfits-fantasy.md +++ b/catalog/characters/quaternius-modular-character-outfits-fantasy.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [FBX, glTF, Blend, OBJ] -tags: [cc0, modular, fantasy, outfits, quaternius] +tags: [modular, fantasy, outfits] verified: 2026-07-19 status: active --- diff --git a/catalog/characters/quaternius-rpg-character-pack.md b/catalog/characters/quaternius-rpg-character-pack.md index 6a3a095..1e4deb3 100644 --- a/catalog/characters/quaternius-rpg-character-pack.md +++ b/catalog/characters/quaternius-rpg-character-pack.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [FBX, OBJ, Blend, glTF] -tags: [cc0, fantasy, rpg, animated, quaternius] +tags: [fantasy, rpg, animated] verified: 2026-08-25 status: active --- diff --git a/catalog/characters/quaternius-sci-fi-essentials-kit.md b/catalog/characters/quaternius-sci-fi-essentials-kit.md index 4d5e5f9..8ef5430 100644 --- a/catalog/characters/quaternius-sci-fi-essentials-kit.md +++ b/catalog/characters/quaternius-sci-fi-essentials-kit.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [FBX, OBJ, Blend, glTF] -tags: [cc0, sci-fi, robots, enemies, guns, quaternius] +tags: [sci-fi, robots, enemies, guns] verified: 2026-08-25 status: active --- diff --git a/catalog/characters/quaternius-toon-shooter-game-kit.md b/catalog/characters/quaternius-toon-shooter-game-kit.md index ab63411..4a48a39 100644 --- a/catalog/characters/quaternius-toon-shooter-game-kit.md +++ b/catalog/characters/quaternius-toon-shooter-game-kit.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [FBX, OBJ, Blend, glTF] -tags: [cc0, shooter, toon, characters, enemies, quaternius] +tags: [shooter, toon, characters, enemies] verified: 2026-08-25 status: active --- diff --git a/catalog/characters/quaternius-ultimate-monsters.md b/catalog/characters/quaternius-ultimate-monsters.md index 6a63dae..1911174 100644 --- a/catalog/characters/quaternius-ultimate-monsters.md +++ b/catalog/characters/quaternius-ultimate-monsters.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [FBX, Blend, OBJ, glTF] -tags: [cc0, monsters, animated, enemies, quaternius] +tags: [monsters, animated, enemies] verified: 2026-07-19 status: active --- diff --git a/catalog/characters/quaternius-universal-base-characters.md b/catalog/characters/quaternius-universal-base-characters.md index 5282f68..cb85750 100644 --- a/catalog/characters/quaternius-universal-base-characters.md +++ b/catalog/characters/quaternius-universal-base-characters.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [FBX, glTF, Blend, OBJ] -tags: [cc0, humanoid, retarget, hairstyles, quaternius] +tags: [humanoid, retarget, hairstyles] verified: 2026-07-19 status: active --- diff --git a/catalog/environment/README.md b/catalog/environment/README.md index a8eca28..7719dc1 100644 --- a/catalog/environment/README.md +++ b/catalog/environment/README.md @@ -4,8 +4,6 @@ | --- | --- | --- | --- | --- | | [poly-haven](poly-haven.md) | Poly Haven | CC0 | yes | active | | [open-hdri](open-hdri.md) | Open HDRI | CC0 | yes | active | -| [nasa-3d-resources](nasa-3d-resources.md) | NASA 3D Resources | public-domain* | yes* | active | -| [nasa-image-video-library](nasa-image-video-library.md) | NASA Image and Video Library | custom | unknown | needs-review | | [natural-earth](natural-earth.md) | Natural Earth | public-domain | yes | active | | [nasadem](nasadem.md) | NASADEM | CC0 | yes | active | | [etopo-2022](etopo-2022.md) | ETOPO 2022 | CC0 | yes | active | diff --git a/catalog/environment/copernicus-dem-glo30.md b/catalog/environment/copernicus-dem-glo30.md index 060fecf..d10d6e9 100644 --- a/catalog/environment/copernicus-dem-glo30.md +++ b/catalog/environment/copernicus-dem-glo30.md @@ -9,7 +9,7 @@ commercial: true attribution_required: true attribution_string: "© DLR e.V. 2010-2014 and © Airbus Defence and Space GmbH 2014-2018 provided under COPERNICUS by the European Union and ESA; all rights reserved." formats: [GeoTIFF, COG, DTED] -tags: [terrain, government, attribution, tandem-x] +tags: [terrain, government, tandem-x] verified: 2026-08-25 status: active --- diff --git a/catalog/environment/jaxa-alos-aw3d30.md b/catalog/environment/jaxa-alos-aw3d30.md index b1f6e60..24e83e7 100644 --- a/catalog/environment/jaxa-alos-aw3d30.md +++ b/catalog/environment/jaxa-alos-aw3d30.md @@ -9,7 +9,7 @@ commercial: true attribution_required: true attribution_string: "Credit: AW3D30 (JAXA)" formats: [GeoTIFF] -tags: [terrain, government, attribution] +tags: [terrain, government] verified: 2026-07-19 status: active --- diff --git a/catalog/environment/open-hdri.md b/catalog/environment/open-hdri.md index 895fae2..1cff9f7 100644 --- a/catalog/environment/open-hdri.md +++ b/catalog/environment/open-hdri.md @@ -9,7 +9,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [EXR] -tags: [hdri, cc0, unclipped, 32-bit] +tags: [hdri, unclipped, 32-bit] verified: 2026-08-29 status: active --- @@ -33,5 +33,5 @@ Second CC0 HDRI publisher besides Poly Haven. Real-world captured unclipped line ## Related - [poly-haven](poly-haven.md) -- [nasa-3d-resources](nasa-3d-resources.md) +- [nasa-3d-resources](../3d/nasa-3d-resources.md) - [../3d/ambientcg](../3d/ambientcg.md) diff --git a/catalog/environment/openstreetmap.md b/catalog/environment/openstreetmap.md index 3f76f05..768da5c 100644 --- a/catalog/environment/openstreetmap.md +++ b/catalog/environment/openstreetmap.md @@ -10,7 +10,7 @@ commercial: true attribution_required: true attribution_string: "© OpenStreetMap contributors" formats: [OSM, PBF] -tags: [odbl, produced-work, geo] +tags: [produced-work, geo] verified: 2026-07-19 status: active --- diff --git a/catalog/environment/poly-haven.md b/catalog/environment/poly-haven.md index 451627b..f60f484 100644 --- a/catalog/environment/poly-haven.md +++ b/catalog/environment/poly-haven.md @@ -34,4 +34,4 @@ Photometrically oriented **CC0** HDRIs (up to 8K), seamless PBR textures, and en - [ambientcg](../3d/ambientcg.md) — CC0 PBR materials - [open-hdri](open-hdri.md) -- [nasa-3d-resources](nasa-3d-resources.md) +- [nasa-3d-resources](../3d/nasa-3d-resources.md) diff --git a/catalog/fonts/README.md b/catalog/fonts/README.md index 7574f3d..82f759c 100644 --- a/catalog/fonts/README.md +++ b/catalog/fonts/README.md @@ -50,5 +50,7 @@ Match the font's design grid to your tile grid where you can: DotGothic16 is dra | [velvetyne](velvetyne.md) | Velvetyne | SIL OFL | yes | active | | [fontsource](fontsource.md) | Fontsource | varies | varies | active | | [open-foundry](open-foundry.md) | Open Foundry | varies | varies | active | +| [kenney-fonts](kenney-fonts.md) | Kenney Fonts | CC0 | yes | active | +| [monogram](monogram.md) | Monogram | CC0 | yes | active | Aggregators (Fontesk, JustFreeFonts, etc.) are intentionally omitted unless the source itself is the distribution path. Fontsource is listed because it is that path (npm). Open Foundry is a display-only index: download from the upstream OFL.txt. Fontshare is a warning: mixed `itf_ffl` / OFL, terms page not readable as text. diff --git a/catalog/fonts/amiri.md b/catalog/fonts/amiri.md index 2c84229..c3b65e6 100644 --- a/catalog/fonts/amiri.md +++ b/catalog/fonts/amiri.md @@ -10,7 +10,7 @@ license_spdx: OFL-1.1 commercial: true attribution_required: false formats: [TTF, OTF] -tags: [arabic, ofl, naskh] +tags: [arabic, naskh] verified: 2026-08-29 status: active --- diff --git a/catalog/fonts/ark-pixel-font.md b/catalog/fonts/ark-pixel-font.md index d212f5a..3e66d08 100644 --- a/catalog/fonts/ark-pixel-font.md +++ b/catalog/fonts/ark-pixel-font.md @@ -9,7 +9,7 @@ license_spdx: OFL-1.1 commercial: true attribution_required: false formats: [OTF, TTF] -tags: [pixel, cjk, ofl, pan-cjk] +tags: [pixel, cjk, pan-cjk] verified: 2026-08-29 status: active --- diff --git a/catalog/fonts/atkinson-hyperlegible.md b/catalog/fonts/atkinson-hyperlegible.md index 218dd4a..0448ff4 100644 --- a/catalog/fonts/atkinson-hyperlegible.md +++ b/catalog/fonts/atkinson-hyperlegible.md @@ -9,7 +9,7 @@ license_spdx: OFL-1.1 commercial: true attribution_required: false formats: [OTF, TTF] -tags: [a11y, low-vision, ui, ofl] +tags: [a11y, low-vision, ui] verified: 2026-08-24 status: active --- diff --git a/catalog/fonts/dotgothic16.md b/catalog/fonts/dotgothic16.md index 6098550..86a2fa9 100644 --- a/catalog/fonts/dotgothic16.md +++ b/catalog/fonts/dotgothic16.md @@ -9,7 +9,7 @@ license_spdx: OFL-1.1 commercial: true attribution_required: false formats: [TTF] -tags: [pixel, japanese, gothic, ofl] +tags: [pixel, japanese, gothic] verified: 2026-08-15 status: active --- diff --git a/catalog/fonts/fontsource.md b/catalog/fonts/fontsource.md index d8217c1..64c0b5a 100644 --- a/catalog/fonts/fontsource.md +++ b/catalog/fonts/fontsource.md @@ -8,7 +8,7 @@ license: varies commercial: varies attribution_required: true formats: [TTF, WOFF, WOFF2, npm] -tags: [ofl, npm, self-host, aggregator] +tags: [npm, self-host, aggregator] attribution_string: "See the OFL.txt / LICENSE in the @fontsource/ package you installed" verified: 2026-08-24 status: active diff --git a/catalog/fonts/ggbotnet-fonts-cc0.md b/catalog/fonts/ggbotnet-fonts-cc0.md index 7704d5d..bc8ad80 100644 --- a/catalog/fonts/ggbotnet-fonts-cc0.md +++ b/catalog/fonts/ggbotnet-fonts-cc0.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [TTF, OTF, WOFF, WOFF2] -tags: [cc0, pixel, fonts, retro] +tags: [pixel, fonts, retro] verified: 2026-08-29 status: active --- diff --git a/catalog/fonts/ibm-plex-sans.md b/catalog/fonts/ibm-plex-sans.md index b238684..c66b05a 100644 --- a/catalog/fonts/ibm-plex-sans.md +++ b/catalog/fonts/ibm-plex-sans.md @@ -9,7 +9,7 @@ license_spdx: OFL-1.1 commercial: true attribution_required: false formats: [OTF, TTF, WOFF2] -tags: [ui, sans, ofl, plex] +tags: [ui, sans, plex] verified: 2026-08-24 status: active --- diff --git a/catalog/fonts/inter.md b/catalog/fonts/inter.md index 5824369..47b5e46 100644 --- a/catalog/fonts/inter.md +++ b/catalog/fonts/inter.md @@ -9,7 +9,7 @@ license_spdx: OFL-1.1 commercial: true attribution_required: false formats: [OTF, TTF] -tags: [ui, sans, ofl, variable-font] +tags: [ui, sans, variable-font] verified: 2026-07-19 status: active --- diff --git a/catalog/fonts/jetbrains-mono.md b/catalog/fonts/jetbrains-mono.md index ccd0154..cadf7b8 100644 --- a/catalog/fonts/jetbrains-mono.md +++ b/catalog/fonts/jetbrains-mono.md @@ -9,7 +9,7 @@ license_spdx: OFL-1.1 commercial: true attribution_required: false formats: [TTF, WOFF2] -tags: [mono, code, ui, ofl, variable-font] +tags: [mono, code, ui, variable-font] verified: 2026-07-19 status: active --- diff --git a/catalog/fonts/kenney-fonts.md b/catalog/fonts/kenney-fonts.md new file mode 100644 index 0000000..07aa703 --- /dev/null +++ b/catalog/fonts/kenney-fonts.md @@ -0,0 +1,38 @@ +--- +id: kenney-fonts +name: Kenney Fonts +url: https://kenney.nl/assets/kenney-fonts +publisher: Kenney +category: fonts +subcategories: [pixel, display] +license: CC0 +license_spdx: CC0-1.0 +commercial: true +attribution_required: false +formats: [TTF] +tags: [pixel, display, mono, ui] +verified: 2026-09-26 +status: active +--- + +# Kenney Fonts + +Twelve CC0 TrueType fonts from Kenney: pixel faces (Pixel, Mini, High, each with a Square variant, plus Mini Square Mono) and display faces (Future, Future Narrow, Blocks, Rocket). They match the lettering in many Kenney UI and game packs, so they suit HUDs built from [kenney-ui-pack](../2d/kenney-ui-pack.md). + +## Notes + +- CC0, so unlike the OFL fonts in this folder there is no licence file you must ship with the font +- Contents read from the download ZIP (2026-09-26): 12 `.ttf` files and `License.txt` +- Version 1.0, released 2014 per the pack page +- Attribution example (optional): `Fonts by Kenney.nl (CC0)` + +## Evidence + +- Live pack page (2026-09-26): tags font, letter, pixel; Category 2D; Files 11; License "Creative Commons CC0" +- Download ZIP listing (2026-09-26): "Kenney Blocks.ttf", "Kenney Future.ttf", "Kenney Future Narrow.ttf", "Kenney High.ttf", "Kenney High Square.ttf", "Kenney Mini.ttf", "Kenney Mini Square.ttf", "Kenney Mini Square Mono.ttf", "Kenney Pixel.ttf", "Kenney Pixel Square.ttf", "Kenney Rocket.ttf", "Kenney Rocket Square.ttf" + +## Related + +- [monogram](monogram.md) +- [ggbotnet-fonts-cc0](ggbotnet-fonts-cc0.md) +- [kenney-ui-pack](../2d/kenney-ui-pack.md) diff --git a/catalog/fonts/league-gothic.md b/catalog/fonts/league-gothic.md index 676c719..f20beb8 100644 --- a/catalog/fonts/league-gothic.md +++ b/catalog/fonts/league-gothic.md @@ -10,7 +10,7 @@ license_spdx: OFL-1.1 commercial: true attribution_required: false formats: [OTF, TTF] -tags: [display, ofl, condensed, gothic] +tags: [display, condensed, gothic] verified: 2026-08-29 status: active --- diff --git a/catalog/fonts/monogram.md b/catalog/fonts/monogram.md new file mode 100644 index 0000000..0107af4 --- /dev/null +++ b/catalog/fonts/monogram.md @@ -0,0 +1,36 @@ +--- +id: monogram +name: Monogram +url: https://datagoblin.itch.io/monogram +category: fonts +subcategories: [pixel, mono] +license: CC0 +license_spdx: CC0-1.0 +commercial: true +attribution_required: false +formats: [TTF, PNG, JSON] +tags: [pixel, monospace, bitmap, pico-8] +verified: 2026-09-26 +status: active +--- + +# Monogram + +Compact monospace bitmap font by datagoblin, legible at small sizes, released CC0. Offered as TrueType, as a bitmap sheet with JSON metrics, and as a PICO-8 custom font. An extended version adds more glyphs and an italic. + +## Notes + +- Name-your-own-price on itch; the free download includes every font file (a "thank-you gift" zip is for payments of $5 or more) +- Files listed on the download page (2026-09-26), version 1.1.0: `monogram.ttf`, `monogram-extended.ttf`, `monogram-extended-italic.ttf`, `monogram-bitmap.png`, `monogram-bitmap.json`, `monogram.p8` +- CC0, so no notice file has to ship with the font + +## Evidence + +- Live itch page (2026-09-26): "Monogram is a monospace bitmap font, free and CC0!" with CC0 linked to creativecommons.org/publicdomain/zero/1.0 +- Same page (2026-09-26): "Monogram is available in TrueType, bitmap or as a PICO-8 custom font" + +## Related + +- [kenney-fonts](kenney-fonts.md) +- [departure-mono](departure-mono.md) +- [silkscreen](silkscreen.md) diff --git a/catalog/fonts/noto-sans.md b/catalog/fonts/noto-sans.md index 9f1a28e..9673170 100644 --- a/catalog/fonts/noto-sans.md +++ b/catalog/fonts/noto-sans.md @@ -9,7 +9,7 @@ license_spdx: OFL-1.1 commercial: true attribution_required: false formats: [OTF, TTF] -tags: [localization, cjk, ofl, variable-font] +tags: [localization, cjk, variable-font] verified: 2026-07-19 status: active --- diff --git a/catalog/fonts/open-foundry.md b/catalog/fonts/open-foundry.md index d56a2a0..717b514 100644 --- a/catalog/fonts/open-foundry.md +++ b/catalog/fonts/open-foundry.md @@ -8,7 +8,7 @@ license: varies commercial: varies attribution_required: true formats: [OTF, TTF] -tags: [ofl, aggregator, display-only] +tags: [aggregator, display-only] attribution_string: "See the licence on the typeface's own GitHub or foundry page" verified: 2026-08-24 status: active diff --git a/catalog/fonts/orbitron.md b/catalog/fonts/orbitron.md index b17c02b..fc27c17 100644 --- a/catalog/fonts/orbitron.md +++ b/catalog/fonts/orbitron.md @@ -10,7 +10,7 @@ license_spdx: OFL-1.1 commercial: true attribution_required: false formats: [OTF, TTF] -tags: [sci-fi, geometric, display, ofl] +tags: [sci-fi, geometric, display] verified: 2026-08-24 status: active --- diff --git a/catalog/fonts/pixelify-sans.md b/catalog/fonts/pixelify-sans.md index 9b5a9e1..ab1a5bb 100644 --- a/catalog/fonts/pixelify-sans.md +++ b/catalog/fonts/pixelify-sans.md @@ -9,7 +9,7 @@ license_spdx: OFL-1.1 commercial: true attribution_required: false formats: [TTF] -tags: [pixel, modern, ui, ofl] +tags: [pixel, modern, ui] verified: 2026-08-24 status: active --- diff --git a/catalog/fonts/press-start-2p.md b/catalog/fonts/press-start-2p.md index 3fab1af..1ba2101 100644 --- a/catalog/fonts/press-start-2p.md +++ b/catalog/fonts/press-start-2p.md @@ -9,7 +9,7 @@ license_spdx: OFL-1.1 commercial: true attribution_required: false formats: [TTF] -tags: [pixel, retro, arcade, ofl] +tags: [pixel, retro, arcade] verified: 2026-07-19 status: active --- diff --git a/catalog/fonts/quanpixel.md b/catalog/fonts/quanpixel.md index ca00b67..76358c7 100644 --- a/catalog/fonts/quanpixel.md +++ b/catalog/fonts/quanpixel.md @@ -9,7 +9,7 @@ license_spdx: OFL-1.1 commercial: true attribution_required: false formats: [TTF] -tags: [pixel, cjk, ofl, 8x8] +tags: [pixel, cjk, 8x8] verified: 2026-08-29 status: active --- diff --git a/catalog/fonts/reem-kufi.md b/catalog/fonts/reem-kufi.md index 5dc0a5d..1b11c35 100644 --- a/catalog/fonts/reem-kufi.md +++ b/catalog/fonts/reem-kufi.md @@ -10,7 +10,7 @@ license_spdx: OFL-1.1 commercial: true attribution_required: false formats: [TTF, OTF] -tags: [arabic, ofl, kufi, headline] +tags: [arabic, kufi, headline] verified: 2026-08-29 status: active --- diff --git a/catalog/fonts/silkscreen.md b/catalog/fonts/silkscreen.md index 0148744..9bc6d09 100644 --- a/catalog/fonts/silkscreen.md +++ b/catalog/fonts/silkscreen.md @@ -9,7 +9,7 @@ license_spdx: OFL-1.1 commercial: true attribution_required: false formats: [TTF] -tags: [pixel, display, ofl] +tags: [pixel, display] verified: 2026-07-19 status: active --- diff --git a/catalog/fonts/source-sans-3.md b/catalog/fonts/source-sans-3.md index f81db92..c5652a5 100644 --- a/catalog/fonts/source-sans-3.md +++ b/catalog/fonts/source-sans-3.md @@ -9,7 +9,7 @@ license_spdx: OFL-1.1 commercial: true attribution_required: false formats: [OTF, TTF, WOFF] -tags: [ui, sans, ofl, adobe, variable-font] +tags: [ui, sans, adobe, variable-font] verified: 2026-08-24 status: active --- diff --git a/catalog/fonts/velvetyne.md b/catalog/fonts/velvetyne.md index b6006b2..cee6516 100644 --- a/catalog/fonts/velvetyne.md +++ b/catalog/fonts/velvetyne.md @@ -9,7 +9,7 @@ license_spdx: OFL-1.1 commercial: true attribution_required: true formats: [OTF, TTF, WOFF] -tags: [ofl, foundry, libre] +tags: [foundry, libre] attribution_string: "[Font name] by [designer] / Velvetyne Type Foundry" verified: 2026-08-24 status: active diff --git a/catalog/fonts/vt323.md b/catalog/fonts/vt323.md index 1f372c8..25904f5 100644 --- a/catalog/fonts/vt323.md +++ b/catalog/fonts/vt323.md @@ -9,7 +9,7 @@ license_spdx: OFL-1.1 commercial: true attribution_required: false formats: [TTF] -tags: [pixel, terminal, retro, ofl] +tags: [pixel, terminal, retro] verified: 2026-08-24 status: active --- diff --git a/catalog/shaders-vfx/3dtexel-decals.md b/catalog/shaders-vfx/3dtexel-decals.md index 3ec7b3d..fa1cae3 100644 --- a/catalog/shaders-vfx/3dtexel-decals.md +++ b/catalog/shaders-vfx/3dtexel-decals.md @@ -9,7 +9,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [PNG] -tags: [cc0, decals, pbr, handmade] +tags: [decals, pbr, handmade] verified: 2026-08-29 status: active --- diff --git a/catalog/shaders-vfx/effekseer-samples.md b/catalog/shaders-vfx/effekseer-samples.md index 3a87077..c19a799 100644 --- a/catalog/shaders-vfx/effekseer-samples.md +++ b/catalog/shaders-vfx/effekseer-samples.md @@ -9,7 +9,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [efk] -tags: [cc0, particles, vfx, effekseer] +tags: [particles, vfx, effekseer] verified: 2026-08-29 status: active --- diff --git a/catalog/shaders-vfx/gdquest-godot-shaders.md b/catalog/shaders-vfx/gdquest-godot-shaders.md index 7770084..85a4102 100644 --- a/catalog/shaders-vfx/gdquest-godot-shaders.md +++ b/catalog/shaders-vfx/gdquest-godot-shaders.md @@ -10,7 +10,7 @@ license_spdx: MIT commercial: true attribution_required: false formats: [gdshader, Godot] -tags: [godot, 2d, 3d, demos, gdquest] +tags: [godot, 2d, 3d, demos] verified: 2026-07-19 status: active --- diff --git a/catalog/shaders-vfx/godot-psx-style-demo.md b/catalog/shaders-vfx/godot-psx-style-demo.md index abf507d..624cea5 100644 --- a/catalog/shaders-vfx/godot-psx-style-demo.md +++ b/catalog/shaders-vfx/godot-psx-style-demo.md @@ -12,6 +12,7 @@ formats: [gdshader, Godot] tags: [godot, godot-4, psx, affine, dither, vertex-snap] verified: 2026-07-27 status: active +maintenance: inactive --- # Godot PSX Style Demo @@ -20,6 +21,7 @@ MIT Godot 4 shader set recreating PS1 quirks: vertex snap, affine mapping, color ## Notes +- Maintenance: no push to the GitHub repository MenacingMecha/godot-psx-style-demo since 2023-09-21, per the GitHub API on 2026-09-26. - Godot 4.x only on `master`; use v1.x branch for Godot 3 - Demo floor texture is separately CC0 (Stealthix) — shaders themselves are MIT - Requires a `precision_multiplier` shader global (see README) diff --git a/catalog/shaders-vfx/godot-shaders.md b/catalog/shaders-vfx/godot-shaders.md index 6454dc3..2e72828 100644 --- a/catalog/shaders-vfx/godot-shaders.md +++ b/catalog/shaders-vfx/godot-shaders.md @@ -9,7 +9,7 @@ commercial: true attribution_required: unknown formats: [gdshader] tags: [godot, canvas-item, spatial, per-item-license] -verified: 2026-07-19 +verified: 2026-09-26 status: needs-review --- @@ -19,6 +19,7 @@ Community Godot shader library. Site policy allows personal **and commercial** u ## Notes +- Still open (re-checked 2026-09-26): credit depends on each post's licence (CC0 none; MIT keeps its notice; GPL v3 carries its own terms), and the schema has no per-file value for `attribution_required`, so the entry stays `needs-review` - Browse/filter by license on the library; never assume the trending page is GPL-free - Featured images, screenshots, videos, and embedded assets are **outside** the shader license - Prefer primary MIT packs in this category ([boujie-water](boujie-water.md), [sky3d](sky3d.md), [waterways](waterways.md)) when you need a known-safe dependency @@ -27,6 +28,7 @@ Community Godot shader library. Site policy allows personal **and commercial** u - Live [License](https://godotshaders.com/license/) (2026-07-19): “Anyone will be able to use the shaders posted to the site freely, both in personal and commercial products.” Submitters choose CC0, MIT, or GNU GPL v.3; media exception stated. - Live [About](https://godotshaders.com/about/) (2026-07-19): “All shaders here are free under CC0, MIT or GNU GPLv.3 license.” +- Live [License](https://godotshaders.com/license/) (2026-09-26): unchanged: "Anyone will be able to use the shaders posted to the site freely, both in personal and commercial products"; licence options CC0, MIT, GNU GPL v.3; "The featured image, screenshots and videos, and assets used in these, do not fall under this license." ## Related diff --git a/catalog/shaders-vfx/jangafx-free-vdb.md b/catalog/shaders-vfx/jangafx-free-vdb.md index 0ceefc9..75fe2bf 100644 --- a/catalog/shaders-vfx/jangafx-free-vdb.md +++ b/catalog/shaders-vfx/jangafx-free-vdb.md @@ -9,7 +9,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [VDB] -tags: [cc0, vdb, volumes, explosion, smoke] +tags: [vdb, volumes, explosion, smoke] verified: 2026-08-29 status: active --- diff --git a/catalog/shaders-vfx/kenney-light-masks.md b/catalog/shaders-vfx/kenney-light-masks.md index 44efa3e..aaf08f6 100644 --- a/catalog/shaders-vfx/kenney-light-masks.md +++ b/catalog/shaders-vfx/kenney-light-masks.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [PNG] -tags: [cc0, light, cookie, shader, vfx, kenney] +tags: [light, cookie, shader, vfx] verified: 2026-07-27 status: active --- diff --git a/catalog/shaders-vfx/kenney-particle-pack.md b/catalog/shaders-vfx/kenney-particle-pack.md index 939ef41..cdbe8c7 100644 --- a/catalog/shaders-vfx/kenney-particle-pack.md +++ b/catalog/shaders-vfx/kenney-particle-pack.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [PNG] -tags: [cc0, particles, shader, vfx, kenney] +tags: [particles, shader, vfx] verified: 2026-07-27 status: active --- diff --git a/catalog/shaders-vfx/kenney-smoke-particles.md b/catalog/shaders-vfx/kenney-smoke-particles.md index ed000b0..aa5719a 100644 --- a/catalog/shaders-vfx/kenney-smoke-particles.md +++ b/catalog/shaders-vfx/kenney-smoke-particles.md @@ -10,7 +10,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [PNG] -tags: [cc0, smoke, explosion, particles, vfx, kenney] +tags: [smoke, explosion, particles, vfx] verified: 2026-07-27 status: active --- diff --git a/catalog/shaders-vfx/material-maker-gallery.md b/catalog/shaders-vfx/material-maker-gallery.md index 5309f8d..0aed697 100644 --- a/catalog/shaders-vfx/material-maker-gallery.md +++ b/catalog/shaders-vfx/material-maker-gallery.md @@ -10,7 +10,7 @@ commercial: unknown attribution_required: unknown formats: [mm, PNG] tags: [procedural, pbr, per-item-license] -verified: 2026-07-19 +verified: 2026-09-26 status: needs-review --- @@ -21,13 +21,15 @@ Community procedural materials/nodes/brushes/environments with **per-item** lice ## Notes - CC-BY → credit author; CC-BY-SA → share-alike on asset derivatives (keep graphs/textures extractable) -- Site `/terms` is privacy/cookies, not an IP license for gallery items +- Site `/terms` is privacy/cookies, not an IP license for gallery items (re-read 2026-09-26: still a privacy policy, "effective as of 01/01/2021") +- Still open (2026-09-26): the site makes no commercial or credit statement of its own, and item pages are script-rendered, so a per-item licence could not be read in a plain fetch. All three filter licences are CC licences that allow commercial use, but the catalog records `commercial` only from a source statement, so it and `attribution_required` stay `unknown` - Bake/export for engines; keep license metadata if you redistribute `.mm` - Pair with [material-maker](../tools/material-maker.md); for ready CC0 PBR prefer [ambientcg](../3d/ambientcg.md) ## Evidence - Live gallery license filters (2026-07-19): links labeled **CC-BY**, **CC0**, **CC-BY-SA** (`license_mask` query params), which confirms per-item, not site-wide. +- Live [gallery](https://www.materialmaker.org/materials) (2026-09-26): License filter still lists only "CC-BY", "CC0", "CC-BY-SA"; types material, brush, node, environment ## Related diff --git a/catalog/shaders-vfx/unity-labs-vfx-flipbooks.md b/catalog/shaders-vfx/unity-labs-vfx-flipbooks.md index 450659e..c66a499 100644 --- a/catalog/shaders-vfx/unity-labs-vfx-flipbooks.md +++ b/catalog/shaders-vfx/unity-labs-vfx-flipbooks.md @@ -9,7 +9,7 @@ license_spdx: CC0-1.0 commercial: true attribution_required: false formats: [EXR] -tags: [cc0, vfx, flipbook, engine-agnostic] +tags: [vfx, flipbook, engine-agnostic] verified: 2026-08-29 status: active --- diff --git a/catalog/tools/README.md b/catalog/tools/README.md index 6d74311..f0b7ff2 100644 --- a/catalog/tools/README.md +++ b/catalog/tools/README.md @@ -55,6 +55,16 @@ desktop, [sim-daltonism](sim-daltonism.md) is a live lens on macOS and iOS, | [sfxr](sfxr.md) | sfxr | MIT | active | | [audacity](audacity.md) | Audacity | GPL-3.0 | active | | [blender-cell-fracture](blender-cell-fracture.md) | Cell Fracture (Blender extension) | GPL-3.0-or-later | active | +| [godot-engine](godot-engine.md) | Godot Engine | MIT | active | +| [trenchbroom](trenchbroom.md) | TrenchBroom | GPL-3.0-or-later | active | +| [ogmo-editor](ogmo-editor.md) | Ogmo Editor 3 | MIT | active | +| [beepbox](beepbox.md) | BeepBox | MIT | active | +| [bosca-ceoil-blue](bosca-ceoil-blue.md) | Bosca Ceoil Blue | MIT | active | +| [furnace](furnace.md) | Furnace | GPL-2.0-or-later | active | +| [openmpt](openmpt.md) | OpenMPT | BSD-3-Clause | active | +| [synfig](synfig.md) | Synfig Studio | GPL-3.0 | active | +| [opentoonz](opentoonz.md) | OpenToonz | BSD-3-Clause | active | +| [pencil2d](pencil2d.md) | Pencil2D | GPL-2.0-only | active | ## Pipeline & compression @@ -80,7 +90,7 @@ desktop, [sim-daltonism](sim-daltonism.md) is a live lens on macOS and iOS, | ID | Name | License | Status | | --- | --- | --- | --- | -| [fmod-studio](fmod-studio.md) | FMOD Studio | custom | needs-review | +| [fmod-studio](fmod-studio.md) | FMOD Studio | custom | active | | [wwise](wwise.md) | Wwise Indie | custom | needs-review | ## Accessibility & localization @@ -171,6 +181,7 @@ only release are Godot 3. | [voronoishatter](voronoishatter.md) | VoronoiShatter | MIT | active | | [godot-destruction-plugin](godot-destruction-plugin.md) | Godot Destruction Plugin | MIT | active | | [godot-voxel-destruction](godot-voxel-destruction.md) | Godot Voxel Destruction | MIT | active | +| [func-godot](func-godot.md) | func_godot | MIT | active | ## GTA-format tooling diff --git a/catalog/tools/assimp.md b/catalog/tools/assimp.md index 7383ca9..cf60f59 100644 --- a/catalog/tools/assimp.md +++ b/catalog/tools/assimp.md @@ -9,7 +9,7 @@ license_spdx: BSD-3-Clause commercial: true attribution_required: false formats: [FBX, glTF, OBJ, DAE] -tags: [bsd, importer, converter, pipeline] +tags: [importer, converter, pipeline] verified: 2026-08-24 status: active --- diff --git a/catalog/tools/audacity.md b/catalog/tools/audacity.md index 6b2381d..be4fac3 100644 --- a/catalog/tools/audacity.md +++ b/catalog/tools/audacity.md @@ -8,7 +8,7 @@ license: GPL-3.0 commercial: true attribution_required: false formats: [WAV, FLAC, OGG, MP3, AUP3] -tags: [audio, editor, gpl, muse-group] +tags: [audio, editor, muse-group] verified: 2026-08-24 status: active --- diff --git a/catalog/tools/beepbox.md b/catalog/tools/beepbox.md new file mode 100644 index 0000000..878889a --- /dev/null +++ b/catalog/tools/beepbox.md @@ -0,0 +1,38 @@ +--- +id: beepbox +name: BeepBox +url: https://www.beepbox.co/ +category: tools +subcategories: [music] +license: MIT +license_spdx: MIT +commercial: true +attribution_required: false +formats: [WAV, MP3, MIDI, JSON] +tags: [chiptune, browser, sequencer, retro] +verified: 2026-09-26 +status: active +--- + +# BeepBox + +Browser-based chiptune sequencer. A song is stored in the page URL, so sharing a link shares the song. An offline version is offered for download, and the source is MIT. + +## Notes + +- The MIT licence covers the program and its synth code; the site says you can use the synth code to play BeepBox songs in your own JavaScript projects +- Songs you write are your own; the site does not claim them +- `formats` lists the export options in the editor's export dialog (`editor/ExportPrompt.ts`: .wav, .mp3, .mid, .json, .html); the homepage text quoted below does not name them + +## Evidence + +- Live homepage (2026-09-26): "You can download and use the source code under the MIT license. In particular, you can use the synth code as demonstrated here to play BeepBox songs in your own JavaScript projects!" +- Live homepage (2026-09-26): "BeepBox is a passion project, and will always be free to use." +- Live GitHub `editor/ExportPrompt.ts` (2026-09-26): export options ".wav", ".mp3", ".mid", ".json (for any BeepBox version)" and ".html (opens BeepBox)" +- Live GitHub `johnnesky/beepbox` `LICENSE.md` (2026-09-26): "MIT License", "Copyright (c) 2012-2024 John Nesky and contributing authors" + +## Related + +- [bosca-ceoil-blue](bosca-ceoil-blue.md) +- [furnace](furnace.md) +- [jsfxr](jsfxr.md) diff --git a/catalog/tools/blender.md b/catalog/tools/blender.md index 4534c41..e7feac8 100644 --- a/catalog/tools/blender.md +++ b/catalog/tools/blender.md @@ -9,7 +9,7 @@ license_spdx: GPL-2.0-or-later commercial: true attribution_required: false formats: [Blend, glTF, FBX, OBJ, USD] -tags: [dcc, open-source, modeling] +tags: [dcc, modeling] verified: 2026-08-25 status: active --- diff --git a/catalog/tools/blockbench.md b/catalog/tools/blockbench.md index c80161b..0fc7293 100644 --- a/catalog/tools/blockbench.md +++ b/catalog/tools/blockbench.md @@ -8,7 +8,7 @@ license: GPL-3.0 commercial: true attribution_required: false formats: [glTF, BBMODEL] -tags: [low-poly, editor, open-source] +tags: [low-poly, editor] verified: 2026-08-24 status: active --- diff --git a/catalog/tools/bosca-ceoil-blue.md b/catalog/tools/bosca-ceoil-blue.md new file mode 100644 index 0000000..13314de --- /dev/null +++ b/catalog/tools/bosca-ceoil-blue.md @@ -0,0 +1,38 @@ +--- +id: bosca-ceoil-blue +name: Bosca Ceoil Blue +url: https://yurisizov.itch.io/boscaceoil-blue +category: tools +subcategories: [music] +license: MIT +license_spdx: MIT +commercial: true +attribution_required: false +formats: [desktop-app, WAV, MIDI] +tags: [sequencer, beginner-friendly, chiptune] +verified: 2026-09-26 +status: active +--- + +# Bosca Ceoil Blue + +Beginner-friendly pattern sequencer for writing game music, a Godot-based port of Terry Cavanagh's Bosca Ceoil by Yuri Sizov. This is the maintained line: the original `TerryCavanagh/boscaceoil` repository is archived on GitHub (read 2026-09-26), while Blue runs on Windows, macOS, Linux and in the browser. + +## Notes + +- **Which Bosca Ceoil:** this entry is the Blue port. The original Adobe AIR program is not listed separately; its repository is archived and Blue reimplements it +- Exports WAV, MIDI and XM per the itch page (XM is not in the catalog's format list, so `formats` leaves it out) +- The MIT licence covers the program. Blue's `LICENSE` also carries the original Bosca Ceoil BSD-style notice for the code it reimplements; keep both if you redistribute the program +- The author, in the itch comments, on music made with it: "The tool is provided under the MIT license. This means that you can use it for both non-commercial and commercial work" + +## Evidence + +- Live itch page (2026-09-26): "Bosca Ceoil Blue is absolutely free and provided under a permissive open source license" and metadata "Code license MIT License" +- Live itch page (2026-09-26): "Export your creations to WAV, MIDI, and XM. Share them with the world, or use them for your next game or video!" +- Live GitHub `YuriSizov/boscaceoil-blue` `LICENSE` (2026-09-26): "MIT License", "Copyright (c) 2025 Yuri Sizov and contributors", followed by "This application is based on and reimplements code or parts of code from Bosca Ceoil by Terry Cavanagh, distributed under a BSD-2-Clause-Views license" + +## Related + +- [beepbox](beepbox.md) +- [lmms](lmms.md) +- [furnace](furnace.md) diff --git a/catalog/tools/cloudcompare.md b/catalog/tools/cloudcompare.md index 03fbba3..4e9cf8d 100644 --- a/catalog/tools/cloudcompare.md +++ b/catalog/tools/cloudcompare.md @@ -9,7 +9,7 @@ license_spdx: GPL-2.0-or-later commercial: true attribution_required: false formats: [LAS, E57, PLY, OBJ] -tags: [lidar, point-cloud, gpl] +tags: [lidar, point-cloud] verified: 2026-09-22 status: active --- diff --git a/catalog/tools/colmap.md b/catalog/tools/colmap.md index 7c5c0c8..906274c 100644 --- a/catalog/tools/colmap.md +++ b/catalog/tools/colmap.md @@ -9,7 +9,7 @@ license_spdx: BSD-3-Clause commercial: true attribution_required: false formats: [BIN, TXT, PLY, OBJ] -tags: [photogrammetry, sfm, mvs, open-source] +tags: [photogrammetry, sfm, mvs] verified: 2026-08-24 status: active --- diff --git a/catalog/tools/creature-2d-runtimes.md b/catalog/tools/creature-2d-runtimes.md index 472679b..3576e42 100644 --- a/catalog/tools/creature-2d-runtimes.md +++ b/catalog/tools/creature-2d-runtimes.md @@ -9,9 +9,10 @@ license_spdx: Apache-2.0 commercial: true attribution_required: false formats: [Godot] -tags: [2d, soft-body, godot, apache] +tags: [2d, soft-body, godot] verified: 2026-07-19 status: active +maintenance: inactive --- # Creature 2D Runtimes (Godot) @@ -20,6 +21,7 @@ Godot plugin/runtime for Creature mesh-deformation 2D animation. **Apache 2.0** ## Notes +- Maintenance: no push to the GitHub repository kestrelm/Creature_Godot since 2020-06-07, per the GitHub API on 2026-09-26. - Repo: `kestrelm/Creature_Godot` (Godot 3 path under `creaturegodot3/`) - **Godot 3 only, and unmaintained.** Checked 2026-09-23: last push 2020-06-07, no GitHub releases, and the README refers only to Godot 3. There is no Godot 4 runtime in the repository. It is listed beside the Godot 4 add-ons for completeness, not because it runs in Godot 4; porting it is on you - Other engine runtimes exist under Kestrel Moon — verify each repo’s LICENSE diff --git a/catalog/tools/daltonlens.md b/catalog/tools/daltonlens.md index 7a6e5a3..8dbdde4 100644 --- a/catalog/tools/daltonlens.md +++ b/catalog/tools/daltonlens.md @@ -9,7 +9,7 @@ license_spdx: BSD-2-Clause commercial: true attribution_required: false formats: [desktop-app] -tags: [bsd, a11y, colorblind, simulator] +tags: [a11y, colorblind, simulator] verified: 2026-07-19 status: active --- diff --git a/catalog/tools/espeak-ng.md b/catalog/tools/espeak-ng.md index ad8e7fa..2139870 100644 --- a/catalog/tools/espeak-ng.md +++ b/catalog/tools/espeak-ng.md @@ -9,7 +9,7 @@ license_spdx: GPL-3.0-or-later commercial: true attribution_required: false formats: [WAV, espeak-ng-data] -tags: [tts, formant, gpl, offline] +tags: [tts, formant, offline] verified: 2026-09-22 status: active --- diff --git a/catalog/tools/fmod-studio.md b/catalog/tools/fmod-studio.md index fb82906..dce66c2 100644 --- a/catalog/tools/fmod-studio.md +++ b/catalog/tools/fmod-studio.md @@ -6,25 +6,34 @@ category: tools subcategories: [audio-middleware] license: custom commercial: true -attribution_required: unknown +attribution_required: true +attribution_string: "Made using FMOD Studio by Firelight Technologies Pty Ltd." formats: [middleware] tags: [audio, freemium, indie-threshold] -verified: 2026-07-19 -status: needs-review +verified: 2026-09-26 +status: active --- # FMOD Studio -Audio middleware with an indie free tier (historically ~$200k USD annual gross). Useful, but **live license text could not be fetched on 2026-07-19** (empty responses from fmod.com). +Audio middleware with a Free Indie License for small developers: under $200k USD revenue per year, on a project under $600k development budget. Above that, per-game fees apply. Every licence level requires an in-app credit line and the FMOD logo on a startup splash screen. ## Notes - Keep comparing [Wwise indie](wwise.md) (budget-cap model; DLC caveats). -- Do not treat as `active` until a live licensing page quote is captured. +- The Free Indie terms are thresholds, not a blanket grant: revenue counts the whole company and all development partners, and budget is the expected cost at full commercial release. Check both before shipping. +- The project must be registered in your FMOD profile before a commercial release. +- The authoring tool (FMOD Studio) is free for all use, including commercial, when making content for the FMOD engine; the licence thresholds apply to the FMOD Engine shipped in the game. +- The logo requirement can be waived only for a fee, on the Basic and Premium licences. +- fmod.com pages are script-rendered, so a plain fetch returns an empty shell (as on 2026-07-19); on 2026-09-26 they were read in a full browser. ## Evidence - Target URL `https://www.fmod.com/licensing` — fetch returned empty body (2026-07-19). Re-open manually before promoting. +- Live [Licensing](https://www.fmod.com/licensing) (2026-09-26): "Free Indie License available for developers with less than $200k revenue per year, on a small (under $600k) development budget." FMOD Logo row: "Required" for Indie, Basic and Premium. +- Same page (2026-09-26), EULA: "This EULA grants you the right to use FMOD Engine, for limited Commercial use", subject to a development budget under $600k USD, revenue under $200k USD, registration, and "Product includes attribution in accordance with Clause 3." +- Same page (2026-09-26): "All FMOD licenses require a logo be displayed on a splash screen". +- Live [Attribution](https://www.fmod.com/attribution) (2026-09-26): "Projects using FMOD Studio must include an in-app credit line and the FMOD logo." Example credit: "Made using FMOD Studio by Firelight Technologies Pty Ltd." ## Related diff --git a/catalog/tools/free-tex-packer.md b/catalog/tools/free-tex-packer.md index b5d27ab..48bc0d9 100644 --- a/catalog/tools/free-tex-packer.md +++ b/catalog/tools/free-tex-packer.md @@ -9,7 +9,7 @@ license_spdx: MIT commercial: true attribution_required: false formats: [PNG, JSON] -tags: [spritesheet, atlas, open-source] +tags: [spritesheet, atlas] verified: 2026-08-24 status: active --- diff --git a/catalog/tools/func-godot.md b/catalog/tools/func-godot.md new file mode 100644 index 0000000..93aa544 --- /dev/null +++ b/catalog/tools/func-godot.md @@ -0,0 +1,34 @@ +--- +id: func-godot +name: func_godot +url: https://github.com/func-godot/func_godot_plugin +category: tools +subcategories: [godot, level-editor] +license: MIT +license_spdx: MIT +commercial: true +attribution_required: false +formats: [godot-addon] +tags: [godot, godot-4, quake, levels, brush-based] +verified: 2026-09-26 +status: active +--- + +# func_godot + +Godot 4 add-on that imports Quake `.map` files, as written by [trenchbroom](trenchbroom.md), into Godot scenes with meshes, collision and entities. It is the usual bridge for building Godot levels in TrenchBroom. + +## Notes + +- MIT; the notice travels with the add-on source if you redistribute it +- Godot 4 only, per the repository description + +## Evidence + +- Live GitHub `func-godot/func_godot_plugin` `LICENSE` (2026-09-26): "MIT License", "Copyright (c) 2023 func-godot" +- Live GitHub repository description (2026-09-26): "Quake .map support for Godot 4" + +## Related + +- [trenchbroom](trenchbroom.md) +- [godot-engine](godot-engine.md) diff --git a/catalog/tools/furnace.md b/catalog/tools/furnace.md new file mode 100644 index 0000000..77aac67 --- /dev/null +++ b/catalog/tools/furnace.md @@ -0,0 +1,38 @@ +--- +id: furnace +name: Furnace +url: https://github.com/tildearrow/furnace +category: tools +subcategories: [music] +license: GPL-2.0-or-later +license_spdx: GPL-2.0-or-later +commercial: true +attribution_required: false +formats: [desktop-app] +tags: [tracker, chiptune, sound-chips, retro] +verified: 2026-09-26 +status: active +--- + +# Furnace + +Multi-system chiptune tracker that emulates a long list of sound chips (Yamaha FM, AY/YM, SN76489, SNES, Amiga, PC Engine and many more). It is the tool for music that has to sound like a specific retro console or arcade board. Releases for Windows, macOS and Linux are on GitHub. + +## Notes + +- The GPL covers the program. Music you write and render is your own; shipping Furnace itself inside a closed product would be a GPL event +- **ASIO builds are GPL-3.0:** the `LICENSE` says enabling ASIO support at build time "will result in a GPLv3-licensed binary". Irrelevant to the music you export +- Emulation cores and libraries carry their own licences in their source trees +- Chip emulation is not a licence to any ROM, sample set or trademarked patch name + +## Evidence + +- Live GitHub `LICENSE` (2026-09-26): "most of Furnace is under the GNU General Public License (GPL) version 2 or later" and "certain components, such as emulation cores, libraries and tools, are under various licenses, which can be found in their respective source files/trees" +- Live GitHub `src/main.cpp` header (2026-09-26): "either version 2 of the License, or (at your option) any later version" +- Live GitHub README (2026-09-26): "available for Windows, macOS and Linux" + +## Related + +- [openmpt](openmpt.md) +- [beepbox](beepbox.md) +- [lmms](lmms.md) diff --git a/catalog/tools/gimp.md b/catalog/tools/gimp.md index b4d2655..3864517 100644 --- a/catalog/tools/gimp.md +++ b/catalog/tools/gimp.md @@ -9,7 +9,7 @@ license_spdx: GPL-3.0-or-later commercial: true attribution_required: false formats: [XCF, PNG, TIFF, PSD, EXR] -tags: [painting, texture-work, open-source, dcc] +tags: [painting, texture-work, dcc] verified: 2026-09-22 status: active --- diff --git a/catalog/tools/godot-engine.md b/catalog/tools/godot-engine.md new file mode 100644 index 0000000..61b486e --- /dev/null +++ b/catalog/tools/godot-engine.md @@ -0,0 +1,38 @@ +--- +id: godot-engine +name: Godot Engine +url: https://godotengine.org +category: tools +subcategories: [engine, godot] +license: MIT +license_spdx: MIT +commercial: true +attribution_required: false +formats: [desktop-app, Godot] +tags: [game-engine, 2d, 3d, editor, godot-4] +verified: 2026-09-26 +status: active +--- + +# Godot Engine + +Free 2D and 3D game engine and editor under the MIT licence. The Godot add-ons in this folder (Phantom Camera, Dialogic, Terrain3D and the rest) all run inside it, and its Asset Library is the distribution point for many of them. Your game's content is yours: the licence covers the engine, not what you make with it. + +## Notes + +- **Your game:** the licence page says Godot's terms and copyright "do not apply to the content you create with it" +- **What you owe:** the engine binary you ship with your game is a copy of the MIT-licensed Software, so the copyright notice and licence text must appear somewhere in your documentation. The Godot developers say a link to godotengine.org/license in your documentation or credits is acceptable. This is a notice, not a credit line, so `attribution_required` is false as for other MIT entries +- Third-party components bundled in the engine carry their own notices; see the "Complying with Licenses" page of the Godot documentation linked from the licence page +- Filed in `tools/` as a general-purpose editor, next to [blender](blender.md) + +## Evidence + +- Live [licence page](https://godotengine.org/license/) (2026-09-26): "Godot Engine is free and open source software released under the permissive MIT license (also named Expat license)" and "You can distribute unmodified and changed versions of Godot Engine, even commercially and under a different license (including proprietary)" +- Same page (2026-09-26): "Godot Engine's license terms and copyright do not apply to the content you create with it" and "you are therefore required to include the copyright notice and license statement somewhere in your documentation" +- Live GitHub `godotengine/godot` `LICENSE.txt` (2026-09-26): MIT text, "Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md)" + +## Related + +- [godot-shaders](../shaders-vfx/godot-shaders.md) +- [func-godot](func-godot.md) +- [godotsteam](godotsteam.md) diff --git a/catalog/tools/google-draco.md b/catalog/tools/google-draco.md index b88fdce..e08fafc 100644 --- a/catalog/tools/google-draco.md +++ b/catalog/tools/google-draco.md @@ -9,7 +9,7 @@ license_spdx: Apache-2.0 commercial: true attribution_required: false formats: [DRC, glTF] -tags: [apache, mesh-compression, gltf] +tags: [mesh-compression, gltf] verified: 2026-07-19 status: active --- diff --git a/catalog/tools/goxel.md b/catalog/tools/goxel.md index 878daf2..6675cc6 100644 --- a/catalog/tools/goxel.md +++ b/catalog/tools/goxel.md @@ -9,7 +9,7 @@ license_spdx: GPL-3.0-or-later commercial: true attribution_required: false formats: [VOX, glTF, OBJ, PLY] -tags: [voxel, open-source, dcc] +tags: [voxel, dcc] verified: 2026-09-22 status: active --- diff --git a/catalog/tools/inkscape.md b/catalog/tools/inkscape.md index a3cc231..8fa106e 100644 --- a/catalog/tools/inkscape.md +++ b/catalog/tools/inkscape.md @@ -9,7 +9,7 @@ license_spdx: GPL-3.0-or-later commercial: true attribution_required: false formats: [SVG, PNG, PDF, EPS] -tags: [vector, svg, ui, icons, open-source, dcc] +tags: [vector, svg, ui, icons, dcc] verified: 2026-09-22 status: active --- diff --git a/catalog/tools/instant-meshes.md b/catalog/tools/instant-meshes.md index ffeb1c0..51b5193 100644 --- a/catalog/tools/instant-meshes.md +++ b/catalog/tools/instant-meshes.md @@ -9,9 +9,10 @@ license_spdx: BSD-3-Clause commercial: true attribution_required: false formats: [OBJ] -tags: [retopo, remesh, quad, open-source] +tags: [retopo, remesh, quad] verified: 2026-08-24 status: active +maintenance: inactive --- # Instant Meshes @@ -20,6 +21,7 @@ Interactive field-aligned remesher from Jakob / Tarini / Panozzo / Sorkine-Hornu ## Notes +- Maintenance: no push to the GitHub repository wjakob/instant-meshes since 2022-01-03, per the GitHub API on 2026-09-26. - Evidence: `LICENSE.txt` in [wjakob/instant-meshes](https://github.com/wjakob/instant-meshes). README also links prebuilt Windows / macOS / Linux zips on S3 - The binary expects a sibling `datasets` folder or the Open panel is empty. Those demo meshes are for the paper UI, not a shippable kit - Workflow: orientation field, then position field, then Export mesh. Brush tools exist; they are easy to overfit diff --git a/catalog/tools/krita.md b/catalog/tools/krita.md index c9e9b68..3d37eb8 100644 --- a/catalog/tools/krita.md +++ b/catalog/tools/krita.md @@ -8,7 +8,7 @@ license: GPL-3.0 commercial: true attribution_required: false formats: [KRA, PNG, TIFF, PSD, EXR] -tags: [painting, texture-work, open-source, dcc] +tags: [painting, texture-work, dcc] verified: 2026-08-24 status: active --- diff --git a/catalog/tools/ldtk.md b/catalog/tools/ldtk.md index 3763ca1..6ab3dab 100644 --- a/catalog/tools/ldtk.md +++ b/catalog/tools/ldtk.md @@ -9,7 +9,7 @@ license_spdx: MIT commercial: true attribution_required: false formats: [ldtk, JSON] -tags: [2d, levels, open-source] +tags: [2d, levels] verified: 2026-08-24 status: active --- diff --git a/catalog/tools/libresprite.md b/catalog/tools/libresprite.md index 62316e0..516f616 100644 --- a/catalog/tools/libresprite.md +++ b/catalog/tools/libresprite.md @@ -8,7 +8,7 @@ license: GPL-2.0 commercial: true attribution_required: false formats: [ASE, PNG, GIF] -tags: [pixel-art, editor, aseprite-fork, open-source] +tags: [pixel-art, editor, aseprite-fork] verified: 2026-08-24 status: active --- diff --git a/catalog/tools/lmms.md b/catalog/tools/lmms.md index 8763182..c981cfa 100644 --- a/catalog/tools/lmms.md +++ b/catalog/tools/lmms.md @@ -9,7 +9,7 @@ license_spdx: GPL-2.0-or-later commercial: true attribution_required: false formats: [WAV, OGG, MIDI, MMP] -tags: [daw, open-source, gpl] +tags: [daw] verified: 2026-09-22 status: active --- diff --git a/catalog/tools/material-maker.md b/catalog/tools/material-maker.md index 9950829..325d607 100644 --- a/catalog/tools/material-maker.md +++ b/catalog/tools/material-maker.md @@ -10,7 +10,7 @@ license_spdx: MIT commercial: true attribution_required: false formats: [PNG, mm] -tags: [pbr, procedural, open-source] +tags: [pbr, procedural] verified: 2026-08-24 status: active --- diff --git a/catalog/tools/materialize.md b/catalog/tools/materialize.md index 4f2eab7..5174fe7 100644 --- a/catalog/tools/materialize.md +++ b/catalog/tools/materialize.md @@ -8,7 +8,7 @@ license: GPL-3.0 commercial: true attribution_required: false formats: [PNG, TGA] -tags: [pbr, baker, open-source] +tags: [pbr, baker] verified: 2026-08-24 status: active --- diff --git a/catalog/tools/melotts.md b/catalog/tools/melotts.md index 1937808..26607fa 100644 --- a/catalog/tools/melotts.md +++ b/catalog/tools/melotts.md @@ -9,7 +9,7 @@ license_spdx: MIT commercial: true attribution_required: false formats: [Python, WAV] -tags: [mit, local, multilingual, tts] +tags: [local, multilingual, tts] verified: 2026-07-19 status: active --- diff --git a/catalog/tools/meshlab.md b/catalog/tools/meshlab.md index 10343b5..4939706 100644 --- a/catalog/tools/meshlab.md +++ b/catalog/tools/meshlab.md @@ -8,7 +8,7 @@ license: GPL-3.0 commercial: true attribution_required: false formats: [OBJ, PLY, glTF, 3MF] -tags: [mesh, cleanup, scan, gpl] +tags: [mesh, cleanup, scan] verified: 2026-08-24 status: active --- diff --git a/catalog/tools/meshroom.md b/catalog/tools/meshroom.md index 0135bc3..c6c3c32 100644 --- a/catalog/tools/meshroom.md +++ b/catalog/tools/meshroom.md @@ -9,7 +9,7 @@ license_spdx: MPL-2.0 commercial: true attribution_required: false formats: [OBJ, ABC, EXR, SFMdata] -tags: [photogrammetry, alicevision, open-source, gpu] +tags: [photogrammetry, alicevision, gpu] verified: 2026-08-24 status: active --- diff --git a/catalog/tools/ogmo-editor.md b/catalog/tools/ogmo-editor.md new file mode 100644 index 0000000..d94d618 --- /dev/null +++ b/catalog/tools/ogmo-editor.md @@ -0,0 +1,36 @@ +--- +id: ogmo-editor +name: Ogmo Editor 3 +url: https://ogmo-editor-3.github.io/ +category: tools +subcategories: [level-editor] +license: MIT +license_spdx: MIT +commercial: true +attribution_required: false +formats: [desktop-app, JSON] +tags: [2d, levels, tilemap, entities] +verified: 2026-09-26 +status: active +--- + +# Ogmo Editor 3 + +Free 2D level editor with tile, grid, decal and entity layers. Levels save as plain JSON, so any engine can read them with a small loader. The Community Edition on GitHub is the maintained line of the project. + +## Notes + +- Commercial use of the editor is stated outright on the homepage, and the source is MIT +- Development is slower than [ldtk](ldtk.md) or [tiled](tiled.md): the last push to `Ogmo-Editor-3/OgmoEditor3-CE` was on 2024-06-19 (read 2026-09-26). That is under the three-year line for `maintenance: inactive` +- Levels are your own data; the MIT licence applies to the editor + +## Evidence + +- Live homepage (2026-09-26): "OGMO Editor is free to use for personal and commercial projects - no strings attached - forever! OGMO Editor is also open sourced using the very permissive MIT license!" +- Live GitHub `OgmoEditor3-CE` `LICENSE` (2026-09-26): "MIT License", "Copyright (c) 2019 Noel Berry" +- Live homepage (2026-09-26): "save your level to a handy JSON file" + +## Related + +- [ldtk](ldtk.md) +- [tiled](tiled.md) diff --git a/catalog/tools/openmpt.md b/catalog/tools/openmpt.md new file mode 100644 index 0000000..2f2a659 --- /dev/null +++ b/catalog/tools/openmpt.md @@ -0,0 +1,36 @@ +--- +id: openmpt +name: OpenMPT +url: https://openmpt.org/ +category: tools +subcategories: [music] +license: BSD-3-Clause +license_spdx: BSD-3-Clause +commercial: true +attribution_required: false +formats: [desktop-app] +tags: [tracker, modules, vst] +verified: 2026-09-26 +status: active +--- + +# OpenMPT + +Open ModPlug Tracker: a Windows module tracker (MOD, XM, S3M, IT and more) with VST plugin and ASIO support. Runs on Windows 7 or later, or under Wine. Its playback library, libopenmpt, is the usual way to play tracker modules inside a game. + +## Notes + +- BSD-3-Clause: carry the copyright notice and licence text if you redistribute the program or libopenmpt; the music you write owes nothing +- The GitHub repository is the project's official read-only mirror of its Subversion repository +- VST and ASIO are Steinberg trademarks, as the site footer says; plugins you load carry their own licences + +## Evidence + +- Live homepage (2026-09-26): "OpenMPT is a popular tracker software for Windows. OpenMPT ... is completely free" and "OpenMPT is free software", linked to the BSD-3-Clause licence at opensource.org +- Live GitHub `OpenMPT/openmpt` `LICENSE` (2026-09-26): "Copyright (c) 2004-2026, OpenMPT Project Developers and Contributors", three-clause BSD text ("Redistribution and use in source and binary forms, with or without modification, are permitted provided that ...") +- Live download page (2026-09-26): latest stable "OpenMPT 1.32.11.00, released on 15 August 2026" + +## Related + +- [furnace](furnace.md) +- [lmms](lmms.md) diff --git a/catalog/tools/opentoonz.md b/catalog/tools/opentoonz.md new file mode 100644 index 0000000..7a97b8f --- /dev/null +++ b/catalog/tools/opentoonz.md @@ -0,0 +1,37 @@ +--- +id: opentoonz +name: OpenToonz +url: https://opentoonz.github.io/e/ +category: tools +subcategories: [animation] +license: BSD-3-Clause +license_spdx: BSD-3-Clause +commercial: true +attribution_required: false +formats: [desktop-app] +tags: [2d-animation, frame-by-frame, compositing] +verified: 2026-09-26 +status: active +--- + +# OpenToonz + +Full production 2D animation suite, open-sourced by DWANGO from the Toonz software used in studio animation work. Covers drawing, scanning and cleanup, timing (Xsheet), effects and compositing. Heavier than [pencil2d](pencil2d.md), aimed at longer or more polished animation. + +## Notes + +- The site says OpenToonz can be used free of charge for both commercial and non-commercial projects, and the source is New BSD +- The site points to separate "rules of use" for the installer build, but the page links no such document; it was not read for this entry. The commercial statement above is on the project's own homepage +- Third-party code in `thirdparty/` and the bundled MyPaint brushes carry their own licences, per the `LICENSE.txt` header +- Filed in `tools/` with the other general 2D art and animation editors + +## Evidence + +- Live homepage (2026-09-26): "OpenToonz can be used free of charge for both commercial and non-commercial projects" and "Its source code is available under the terms of the New BSD License" +- Live GitHub `opentoonz/opentoonz` `LICENSE.txt` (2026-09-26): "Copyright (c) 2016 - 2026, DWANGO Co., Ltd." and "BSD 3-Clause \"New\" or \"Revised\" License" + +## Related + +- [pencil2d](pencil2d.md) +- [synfig](synfig.md) +- [krita](krita.md) diff --git a/catalog/tools/pencil2d.md b/catalog/tools/pencil2d.md new file mode 100644 index 0000000..7a256b4 --- /dev/null +++ b/catalog/tools/pencil2d.md @@ -0,0 +1,37 @@ +--- +id: pencil2d +name: Pencil2D +url: https://www.pencil2d.org/ +category: tools +subcategories: [animation] +license: GPL-2.0-only +license_spdx: GPL-2.0-only +commercial: true +attribution_required: false +formats: [desktop-app] +tags: [2d-animation, frame-by-frame, hand-drawn] +verified: 2026-09-26 +status: active +--- + +# Pencil2D + +Small, simple frame-by-frame animation program with raster and vector layers, for hand-drawn sprite animation and animatics. Runs on Windows, macOS, Linux and FreeBSD. + +## Notes + +- **GPL version 2 only:** the source headers grant "version 2 of the License" with no "or any later version" clause, so the licence is `GPL-2.0-only` +- The GPL covers the program. Animations you draw are your own; the homepage says it is free to use "even commercially" +- Filed in `tools/` with the other general 2D art and animation editors + +## Evidence + +- Live homepage (2026-09-26): "Pencil2D is completely open source and free to use, even commercially!" +- Live GitHub `app/src/main.cpp` and `core_lib/src/structure/object.cpp` headers (2026-09-26): "under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License" +- Live GitHub `LICENSE.TXT` (2026-09-26): "GNU GENERAL PUBLIC LICENSE Version 2, June 1991" + +## Related + +- [opentoonz](opentoonz.md) +- [synfig](synfig.md) +- [libresprite](libresprite.md) diff --git a/catalog/tools/pixelorama.md b/catalog/tools/pixelorama.md index b05984f..266efe9 100644 --- a/catalog/tools/pixelorama.md +++ b/catalog/tools/pixelorama.md @@ -9,7 +9,7 @@ license_spdx: MIT commercial: true attribution_required: false formats: [pxo, PNG] -tags: [pixel-art, editor, open-source] +tags: [pixel-art, editor] verified: 2026-08-24 status: active --- diff --git a/catalog/tools/quadriflow.md b/catalog/tools/quadriflow.md index 67f9411..391900a 100644 --- a/catalog/tools/quadriflow.md +++ b/catalog/tools/quadriflow.md @@ -9,9 +9,10 @@ license_spdx: BSD-3-Clause commercial: true attribution_required: false formats: [OBJ] -tags: [retopo, remesh, quad, open-source] +tags: [retopo, remesh, quad] verified: 2026-08-24 status: active +maintenance: inactive --- # QuadriFlow @@ -20,6 +21,7 @@ Huang / Zhou / Niessner / Shewchuk / Guibas quadrangulation (SIGGRAPH 2018). Sam ## Notes +- Maintenance: no push to the GitHub repository hjwdzh/QuadriFlow since 2019-12-07, per the GitHub API on 2026-09-26. - Build from source. No first-party Windows zip on the repo page on 2026-08-24 - `LICENSE.txt` also has a "you are under no obligation to provide Enhancements" paragraph. That is extra BSD language, not a second grant for game assets - Prefer Instant Meshes if you want a GUI. QuadriFlow is the batch/research CLI sibling diff --git a/catalog/tools/sherpa-onnx.md b/catalog/tools/sherpa-onnx.md index 9d5c2d0..46f782a 100644 --- a/catalog/tools/sherpa-onnx.md +++ b/catalog/tools/sherpa-onnx.md @@ -9,7 +9,7 @@ license_spdx: Apache-2.0 commercial: true attribution_required: false formats: [ONNX, C++, Python, WASM] -tags: [apache, local, offline, tts, asr] +tags: [local, offline, tts, asr] verified: 2026-07-19 status: active --- diff --git a/catalog/tools/sim-daltonism.md b/catalog/tools/sim-daltonism.md index e2be61f..b8bff1f 100644 --- a/catalog/tools/sim-daltonism.md +++ b/catalog/tools/sim-daltonism.md @@ -9,7 +9,7 @@ license_spdx: Apache-2.0 commercial: true attribution_required: false formats: [desktop-app, mobile-app] -tags: [apache, a11y, colorblind, simulator, macos, ios] +tags: [a11y, colorblind, simulator, macos, ios] verified: 2026-07-19 status: active --- diff --git a/catalog/tools/sollumz.md b/catalog/tools/sollumz.md index c299d7d..dd56bd0 100644 --- a/catalog/tools/sollumz.md +++ b/catalog/tools/sollumz.md @@ -9,7 +9,7 @@ license_spdx: GPL-3.0-or-later commercial: true attribution_required: false formats: [YDR, YDD, YFT, YBN, YTYP, YCD, YMAP, Blend] -tags: [blender-addon, gta-format, fivem, open-source] +tags: [blender-addon, gta-format, fivem] verified: 2026-09-22 status: active --- diff --git a/catalog/tools/synfig.md b/catalog/tools/synfig.md new file mode 100644 index 0000000..0be1411 --- /dev/null +++ b/catalog/tools/synfig.md @@ -0,0 +1,36 @@ +--- +id: synfig +name: Synfig Studio +url: https://www.synfig.org/ +category: tools +subcategories: [animation, vectors] +license: GPL-3.0 +commercial: true +attribution_required: false +formats: [desktop-app] +tags: [2d-animation, vector, tweening, bones] +verified: 2026-09-26 +status: active +--- + +# Synfig Studio + +Vector 2D animation program built around tweening: you set keyframes and Synfig interpolates shapes, transforms and bone rigs between them, instead of drawing every frame. Useful for cut-out style character animation and animated UI. + +## Notes + +- **Version wording:** the site and README say GPL v3, and the repository `LICENSE` is the GPLv3 text, but the source headers read (for example `synfig-studio/src/gui/main.cpp`) say "version 2 of the License, or (at your option) any later version". The project-level statement is GPLv3 without an "or later", so this entry keeps the bare `GPL-3.0` +- The GPL covers the program. Animations and rendered frames you make are your own work +- Filed in `tools/` with [krita](krita.md) and [pixelorama](pixelorama.md), the other general 2D art and animation editors; `animation/` holds clips and capture tools + +## Evidence + +- Live homepage (2026-09-26): "Synfig is a free and open-source software licensed under GNU GPL v3" +- Live GitHub README (2026-09-26): "This project is licensed under the GNU General Public License v3.0" +- Live GitHub `synfig-studio/src/gui/main.cpp` header (2026-09-26): "either version 2 of the License, or (at your option) any later version" + +## Related + +- [opentoonz](opentoonz.md) +- [pencil2d](pencil2d.md) +- [krita](krita.md) diff --git a/catalog/tools/tenacity.md b/catalog/tools/tenacity.md index 0a1b9a6..7490070 100644 --- a/catalog/tools/tenacity.md +++ b/catalog/tools/tenacity.md @@ -9,7 +9,7 @@ license_spdx: GPL-2.0-or-later commercial: true attribution_required: false formats: [WAV, FLAC, OGG, MP3, AUP3] -tags: [audio, editor, sfx, open-source, dcc] +tags: [audio, editor, sfx, dcc] verified: 2026-09-23 status: active --- diff --git a/catalog/tools/trenchbroom.md b/catalog/tools/trenchbroom.md new file mode 100644 index 0000000..12ba1bc --- /dev/null +++ b/catalog/tools/trenchbroom.md @@ -0,0 +1,37 @@ +--- +id: trenchbroom +name: TrenchBroom +url: https://trenchbroom.github.io/ +category: tools +subcategories: [level-editor] +license: GPL-3.0-or-later +license_spdx: GPL-3.0-or-later +commercial: true +attribution_required: false +formats: [desktop-app] +tags: [3d, levels, brush-based, quake] +verified: 2026-09-26 +status: active +--- + +# TrenchBroom + +Brush-based 3D level editor for Quake-engine map formats, on Windows, macOS and Linux. With [func-godot](func-godot.md) the `.map` files it writes import straight into Godot, which makes it a blockout and level tool for Godot projects as well as Quake-family ones. + +## Notes + +- The GPL covers the editor. Maps you author are your own work; the GPL does not attach to them because you used a GPL program to make them +- Shipping TrenchBroom itself, or code taken from it, inside a closed product is a GPL event +- Supported games per the homepage: Quake, Quake 2 and Hexen 2; others through game configurations + +## Evidence + +- Live homepage (2026-09-26): "TrenchBroom is a free (GPLv3+), cross platform level editor for Quake-engine based games" +- Live GitHub `app/TrenchBroom/src/Main.cpp` header (2026-09-26): "either version 3 of the License, or (at your option) any later version" +- Live GitHub `LICENSE.txt` (2026-09-26): "GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007" + +## Related + +- [func-godot](func-godot.md) +- [tiled](tiled.md) +- [ldtk](ldtk.md) diff --git a/catalog/tools/wwise.md b/catalog/tools/wwise.md index 2b560a9..e769ae0 100644 --- a/catalog/tools/wwise.md +++ b/catalog/tools/wwise.md @@ -9,21 +9,27 @@ commercial: true attribution_required: unknown formats: [middleware] tags: [audio, freemium, budget-cap] -verified: 2026-07-19 +verified: 2026-09-26 status: needs-review --- # Wwise Indie -Audiokinetic middleware — free under a production-budget cap (historically ~$250k). DLC/live-ops may need extras. Compare [FMOD](fmod-studio.md). +Audiokinetic middleware — the Indie plan is free for game projects with a production budget under $250K, royalty free, with unlimited sounds. A licence is per title and per platform (Indie platforms are free). DLC with new audio needs a DLC licence, which is also free at Indie level. Compare [FMOD](fmod-studio.md). ## Notes - Pricing/download pages returned **HTTP 403** on 2026-07-19 — cannot confirm current indie thresholds. +- Re-checked 2026-09-26: the pricing pages load with a browser user agent and confirm the $250K Indie cap. Still open: whether a shipped game must credit Audiokinetic or show a "Powered by Wwise" logo. Neither pricing page says so, and the Wwise EULA / licence agreement that would settle it was not found on a public page (`/en/licensing/faq/` and `/en/legal/` paths return 404; the public SDK Agreement PDF covers plug-in developers, not shipped games). Keep `attribution_required: unknown` until that text is read +- The Free Trial (no registered project) is non-commercial only and capped at 200 media assets; register the project for the Indie licence before shipping +- The licence is tied to one title; a new game needs its own registration ## Evidence - `audiokinetic.com` pricing/download: HTTP 403 (2026-07-19). Leave `needs-review` until a live quote is possible. +- Live [Pricing](https://www.audiokinetic.com/en/wwise/pricing/) (2026-09-26): Indie "Free"; "Production Budget: Less than $250K"; "Sound Files / Media Assets: Unlimited"; Royalty Free (0%) ticked for Indie. +- Same page FAQ (2026-09-26): "The Free Trial version allows you to create a project for non-commercial use only and is limited to 200 media assets"; "The Wwise Project License is tied to a specific project (Licensee Title)". +- Live [Wwise for Games](https://www.audiokinetic.com/en/wwise/pricing/for-games/) (2026-09-26): "the Indie plan is valid for projects with a production budget up to $250K"; Indie first platform and extra platforms "Free"; Wwise DLC License 12-Month Term "Indie (Level A) Free"; "Licenses allow for worldwide distribution of your game title." ## Related diff --git a/catalog/tools/xnormal.md b/catalog/tools/xnormal.md index 4da951b..43f290d 100644 --- a/catalog/tools/xnormal.md +++ b/catalog/tools/xnormal.md @@ -8,7 +8,7 @@ license: custom commercial: unknown attribution_required: false formats: [PNG, TGA, EXR] -tags: [baker, normals, freeware, windows] +tags: [baker, normals, windows] verified: 2026-08-24 status: needs-review --- diff --git a/catalog/video/README.md b/catalog/video/README.md index 1b29ca9..49e347f 100644 --- a/catalog/video/README.md +++ b/catalog/video/README.md @@ -31,8 +31,10 @@ people and brands out of anything prominent, such as a title screen. | [pexels-videos](pexels-videos.md) | Pexels Videos | custom | yes | active | | [pixabay-videos](pixabay-videos.md) | Pixabay Videos | custom | yes | active | | [coverr](coverr.md) | Coverr | custom | yes | active | +| [dareful](dareful.md) | Dareful | CC-BY-4.0 | yes | active | | [mixkit-stock-video](mixkit-stock-video.md) | Mixkit Stock Video | custom | yes | needs-review | | [prelinger-archives](prelinger-archives.md) | Prelinger Archives | varies | varies | needs-review | +| [nasa-image-video-library](nasa-image-video-library.md) | NASA Image and Video Library | custom | unknown | needs-review | See [`docs/provenance.md`](../../docs/provenance.md) for why an aggregator's labels are a starting point, not a clearance. diff --git a/catalog/video/coverr.md b/catalog/video/coverr.md index ae0ec5d..4e7cadd 100644 --- a/catalog/video/coverr.md +++ b/catalog/video/coverr.md @@ -8,7 +8,7 @@ license: custom commercial: true attribution_required: false formats: [MP4] -tags: [stock, b-roll, no-attribution, no-ai-training] +tags: [stock, b-roll, no-ai-training] verified: 2026-09-23 status: active --- diff --git a/catalog/video/dareful.md b/catalog/video/dareful.md new file mode 100644 index 0000000..6325517 --- /dev/null +++ b/catalog/video/dareful.md @@ -0,0 +1,40 @@ +--- +id: dareful +name: Dareful +url: https://dareful.com/ +category: video +subcategories: [stock-footage] +license: CC-BY-4.0 +license_spdx: CC-BY-4.0 +commercial: true +attribution_required: true +attribution_string: "Video courtesy of Dareful (dareful.com), CC BY 4.0" +formats: [MP4] +tags: [4k, aerial, nature, landscape, b-roll] +verified: 2026-09-26 +status: active +--- + +# Dareful + +Free 4K and HD stock footage, mostly nature, landscape and aerial shots, all by one photographer (Joel Holland, founder of VideoBlocks). Everything on the site is under Creative Commons Attribution 4.0, so it is commercial-ok with a credit. + +## Notes + +- **Credit is owed.** CC BY 4.0 requires attribution; the site offers the line "Video courtesy of Dareful" with a link back +- One shooter, so there is no uploader-provenance risk of the kind aggregators carry; check shots with people or brands in frame yourself, as the site says nothing about releases +- **Not everything on the page is Dareful's.** Clip pages embed Shutterstock previews and a Shutterstock discount code. Those previews are paid Shutterstock stock, not CC BY +- Formerly StockFootageForFree.com, per the About page + +## Evidence + +- Live About page (2026-09-26): "You can use our video clips any way you want, even commercially. They are governed by the Creative Commons Attribution 4.0 International License." +- Live About page (2026-09-26): "All of the stock video on Dareful.com was shot by Joel Holland, the founder of VideoBlocks" +- Live clip page "Beach Ocean Waves" (2026-09-26): "Format MP4", "License Creative Commons Attribution 4.0 International License" +- Live homepage footer (2026-09-26): "Give credit to Dareful. Show your appreciation for our free videos by linking back to us. Video courtesy of Dareful" + +## Related + +- [coverr](coverr.md) +- [pexels-videos](pexels-videos.md) +- [pixabay-videos](pixabay-videos.md) diff --git a/catalog/video/destockd.md b/catalog/video/destockd.md index 3b65bb7..0f588a8 100644 --- a/catalog/video/destockd.md +++ b/catalog/video/destockd.md @@ -40,6 +40,6 @@ CLIP-indexed shot search over FedFlix films on the Internet Archive. About 41,00 ## Related -- [nasa-image-video-library](../environment/nasa-image-video-library.md) +- [nasa-image-video-library](nasa-image-video-library.md) - [smithsonian-open-access](../3d/smithsonian-open-access.md) - [FedFlix on Internet Archive](https://archive.org/details/FedFlix) diff --git a/catalog/video/mixkit-stock-video.md b/catalog/video/mixkit-stock-video.md index 0bed99d..09933fb 100644 --- a/catalog/video/mixkit-stock-video.md +++ b/catalog/video/mixkit-stock-video.md @@ -9,7 +9,7 @@ license: custom commercial: true attribution_required: false formats: [MP4] -tags: [stock, b-roll, no-attribution, envato, games-not-named] +tags: [stock, b-roll, games-not-named] verified: 2026-09-23 status: needs-review --- diff --git a/catalog/environment/nasa-image-video-library.md b/catalog/video/nasa-image-video-library.md similarity index 85% rename from catalog/environment/nasa-image-video-library.md rename to catalog/video/nasa-image-video-library.md index 4951f77..957762d 100644 --- a/catalog/environment/nasa-image-video-library.md +++ b/catalog/video/nasa-image-video-library.md @@ -3,7 +3,7 @@ id: nasa-image-video-library name: NASA Image and Video Library url: https://images.nasa.gov publisher: NASA -category: environment +category: video subcategories: [images, video, audio] license: custom commercial: unknown @@ -17,7 +17,7 @@ status: needs-review # NASA Image and Video Library -Searchable NASA stills, video, and audio (launch audio, mission clips, press kits). This is not a CC0 SFX pack. US government NASA media is generally not copyrighted in the United States, with three traps that keep this out of `active`: (1) `images.nasa.gov` returned a JS shell with no license sentence on 2026-08-24, so the grant is the Brand Center guidelines, not the library UI; (2) the commercial section talks about editorial use in "published works that are not promotional" plus a ban on implying NASA endorsement, which does not clearly cover shipping media inside a commercial game; (3) third-party stills on NASA pages stay with their marked owners. [nasa-3d-resources](nasa-3d-resources.md) is the 3D sibling and is `active` on the same guidelines. This library entry stays `needs-review` until a game-use sentence exists or counsel reads the promotional clause. +Searchable NASA stills, video, and audio (launch audio, mission clips, press kits). This is not a CC0 SFX pack. US government NASA media is generally not copyrighted in the United States, with three traps that keep this out of `active`: (1) `images.nasa.gov` returned a JS shell with no license sentence on 2026-08-24, so the grant is the Brand Center guidelines, not the library UI; (2) the commercial section talks about editorial use in "published works that are not promotional" plus a ban on implying NASA endorsement, which does not clearly cover shipping media inside a commercial game; (3) third-party stills on NASA pages stay with their marked owners. [nasa-3d-resources](../3d/nasa-3d-resources.md) is the 3D sibling and is `active` on the same guidelines. This library entry stays `needs-review` until a game-use sentence exists or counsel reads the promotional clause. ## Notes @@ -36,8 +36,8 @@ Searchable NASA stills, video, and audio (launch audio, mission clips, press kit ## Related -- [nasa-3d-resources](nasa-3d-resources.md) -- [nasadem](nasadem.md) +- [nasa-3d-resources](../3d/nasa-3d-resources.md) +- [nasadem](../environment/nasadem.md) - [../3d/smithsonian-open-access](../3d/smithsonian-open-access.md) - [../audio/kenney-sci-fi-sounds](../audio/kenney-sci-fi-sounds.md) -- [../video/destockd](../video/destockd.md) +- [../video/destockd](destockd.md) diff --git a/catalog/video/pexels-videos.md b/catalog/video/pexels-videos.md index e44af44..f6c3af9 100644 --- a/catalog/video/pexels-videos.md +++ b/catalog/video/pexels-videos.md @@ -9,7 +9,7 @@ license: custom commercial: true attribution_required: false formats: [MP4] -tags: [stock, b-roll, no-attribution, canva] +tags: [stock, b-roll, canva] verified: 2026-09-23 status: active --- diff --git a/catalog/video/pixabay-videos.md b/catalog/video/pixabay-videos.md index ad00c6a..647603d 100644 --- a/catalog/video/pixabay-videos.md +++ b/catalog/video/pixabay-videos.md @@ -9,7 +9,7 @@ license: custom commercial: true attribution_required: false formats: [MP4] -tags: [stock, b-roll, no-attribution, standalone-ban] +tags: [stock, b-roll, standalone-ban] verified: 2026-09-23 status: active --- diff --git a/catalog/video/prelinger-archives.md b/catalog/video/prelinger-archives.md index da12a14..7015887 100644 --- a/catalog/video/prelinger-archives.md +++ b/catalog/video/prelinger-archives.md @@ -38,4 +38,4 @@ About 10,000 "ephemeral" films (advertising, educational, industrial and amateur ## Related - [destockd](destockd.md) -- [../environment/nasa-image-video-library](../environment/nasa-image-video-library.md) +- [nasa-image-video-library](nasa-image-video-library.md) diff --git a/docs/review-ledger.md b/docs/review-ledger.md index b38b285..397e9d8 100644 --- a/docs/review-ledger.md +++ b/docs/review-ledger.md @@ -4,6 +4,54 @@ Newest section at the top. One section per review run. This is the record of wha run measured, what it changed, what it deliberately did not change, and what the next run should not spend time re-deciding. +## 2026-09-26 (open issues sweep: #36 to #47) + +The ten issues left open after the review, on the `issues-sweep` branch. + +- **Tags (#36):** tags no longer restate the licence, the credit requirement or the + entry's own publisher. 124 entries lost such a tag (`cc0` 40 more after #49, `ofl` 20, + `open-source` 19, `kenney`/`quaternius`/`kaykit`/`blender-studio` and others). Licence + tags are retired in `site/value-aliases.json` (V19); V21 rejects a tag equal to the + entry's publisher. Search now weights `publisher` like a tag. Decided: a `varies` + entry lists its licence mix in the body, not in tags. +- **Formats (#37):** `site/format-vocabulary.json` is the closed list (117 values in + use); V20 rejects anything else. Its `groups` drive the Format filter. Kept: `model` + (piper-plus, whose page names no container) and `various` (three aggregators). +- **Filters (#45):** Licence (families in `license-vocabulary.json`, every value in + exactly one) and Format selects, in the URL as `?licence=` and `?format=`. +- **Shortlist (#47):** a star on cards and entry pages (`localStorage` + `fgda:shortlist`), a panel with CREDITS.md / CREDITS.txt download. `owes()` moved to + `site/lib/owes.mjs` (no imports, copied to `dist/owes.js`) so the stack pages and the + shortlist share it; it gained a `notices` bucket for MIT/OFL-type licences. +- **Maintenance (#42):** optional `maintenance: archived | inactive` (V22), a badge and + an entry-page row. Set from the GitHub API on 11 sources: archived glitch-archive, + meta-animated-drawings, microsoft-movebox; inactive (no push in 3 years) + dcss-tiles, sparklin-superpowers, instant-meshes, quadriflow, creature-2d-runtimes, + gdquest-3d-mannequin, microsoft-rocketbox, godot-psx-style-demo. `check-links.mjs` + reports a GitHub source whose state disagrees with the field (the first local run + found godot-psx-style-demo, 3.01 years). +- **Categories (#38):** the rule is written in `catalog/README.md` (by main content; + single-purpose creation tools sit with their content; mixed libraries by main kind). + So the character creators and capture tools stay put, HDRI publishers stay in + environment and BlendKit in 3d. Moved: nasa-3d-resources to 3d, + nasa-image-video-library to video. +- **Re-verified (#40):** all ten July needs-review entries re-read. Now active: + fab-megascans-standard, fmod-studio (credit line and splash logo required). Facts + changed: opengameart commercial true, freesound commercial varies. Still open, with + the question in Notes: lospec (per-palette terms), convology-xt (terms behind the + download form), godot-shaders and opengameart (credit per upload), freesound (credit + per sound), material-maker-gallery (per-item licence script-rendered), wwise (game + EULA not public), charmorph (AGPL reach into exported meshes). +- **Added (#43):** 15 sources (Godot Engine, TrenchBroom, Ogmo Editor, func_godot, + BeepBox, Bosca Ceoil Blue, Furnace, OpenMPT, Synfig, OpenToonz, Pencil2D, Kenney + Animated Characters, Kenney Fonts, Monogram, Dareful); `GPL-2.0-only` added for + Pencil2D. Skipped, do not re-research without news: DragonBones (site unreachable), + Life of Vids (unreachable), Mazwai (redirects to Freepik). Music and animation editors + follow the tools/ precedent (LMMS, Krita), not animation/. A "Request an asset / + report a gap" issue form (label `gap`) now feeds the stack Gaps sections. +- **Left:** #41 (the remaining 2D fields need someone to open the files) and #3 (branch + protection, deferred by the maintainer). + ## 2026-09-26 (repo review and issue fixes) A full review of code, site, catalog data and docs filed issues #1 to #47; this run fixed diff --git a/site/build.mjs b/site/build.mjs index 716f1aa..7fc7330 100644 --- a/site/build.mjs +++ b/site/build.mjs @@ -6,7 +6,7 @@ import fs from "node:fs"; import path from "node:path"; import { fileURLToPath } from "node:url"; -import { commercialLabel, esc, latestAllowedDate, PERSPECTIVE_LABELS, verifiedAge } from "./lib/shared.mjs"; +import { commercialLabel, esc, latestAllowedDate, MAINTENANCE_NOTES, PERSPECTIVE_LABELS, verifiedAge } from "./lib/shared.mjs"; import { parseFrontmatter, summaryFromBody } from "./lib/frontmatter.mjs"; import { entryPageHtml } from "./lib/entry-page.mjs"; import { LinkError, makeLinkResolver } from "./lib/links.mjs"; @@ -26,6 +26,7 @@ const DIST = path.join(__dirname, "dist"); const CONFIG_PATH = path.join(__dirname, "config.json"); const VOCAB_PATH = path.join(__dirname, "license-vocabulary.json"); const SPDX_ALLOWED_PATH = path.join(__dirname, "spdx-allowed.json"); +const FORMATS_PATH = path.join(__dirname, "format-vocabulary.json"); // Social preview image: a first-party screenshot of this site, kept with the // other first-party stills (the validator allows binaries there) and copied // into dist at build time. @@ -51,6 +52,14 @@ function walkMarkdown(dir, out = []) { return out; } +/** The Licence-filter family a license value belongs to (license-vocabulary.json `families`). */ +function licenseFamily(vocab, license) { + for (const [key, fam] of Object.entries(vocab.families || {})) { + if (Array.isArray(fam.licenses) && fam.licenses.includes(license)) return key; + } + return "mixed"; +} + function loadEntries(vocab) { const files = walkMarkdown(CATALOG); const entries = []; @@ -113,6 +122,8 @@ function loadEntries(vocab) { ...(meta.attribution_string ? { attribution_string: String(meta.attribution_string) } : {}), ...(meta.publisher ? { publisher: String(meta.publisher) } : {}), ...(meta.license_spdx ? { license_spdx: String(meta.license_spdx) } : {}), + ...(meta.maintenance ? { maintenance: String(meta.maintenance) } : {}), + licenseFamily: licenseFamily(vocab, String(meta.license)), attributionClass: vocab.licenses[String(meta.license)]?.attribution || "any", licenseRank: ATTRIBUTION_RANK[ @@ -138,6 +149,12 @@ function edgeVar(entry) { *
with a real heading link, not a
`; @@ -481,6 +499,7 @@ function checkPages(files) { function main() { const config = JSON.parse(fs.readFileSync(CONFIG_PATH, "utf8")); const vocab = JSON.parse(fs.readFileSync(VOCAB_PATH, "utf8")); + const formatVocab = JSON.parse(fs.readFileSync(FORMATS_PATH, "utf8")); const { entries, errors, bodies } = loadEntries(vocab); const spdxAllowed = JSON.parse(fs.readFileSync(SPDX_ALLOWED_PATH, "utf8")); const { stacks, errors: stackErrors } = loadStacks(entries, vocab, spdxAllowed); @@ -531,11 +550,22 @@ function main() { guides: config.guides, featured, stats, + // Choices for the Licence and Format filters (app.js). + filters: { + licenseFamilies: Object.fromEntries( + Object.entries(vocab.families || {}) + .filter(([key]) => !key.startsWith("_")) + .map(([key, fam]) => [key, fam.label]) + ), + formatGroups: formatVocab.groups, + }, entries, }; if (fs.existsSync(DIST)) fs.rmSync(DIST, { recursive: true, force: true }); copyDir(PUBLIC, DIST); + // The shortlist builds its CREDITS file with the same code as the stack pages. + fs.copyFileSync(path.join(__dirname, "lib", "owes.mjs"), path.join(DIST, "owes.js")); const hasCard = fs.existsSync(OG_CARD_SRC); if (hasCard) fs.copyFileSync(OG_CARD_SRC, path.join(DIST, OG_CARD_NAME)); // data.json is the public machine-readable catalog (see site/README.md); diff --git a/site/check-links.mjs b/site/check-links.mjs index 3106736..16706d2 100644 --- a/site/check-links.mjs +++ b/site/check-links.mjs @@ -8,6 +8,10 @@ * - stale: `verified` is older than --stale-days (365 by default) * - blocked: 401/403/429, which is usually a site refusing robots rather * than a dead link; listed for a manual check, never counted as a problem + * - maintenance: a github.com source whose repository is archived or has had + * no push in three years while its `maintenance` field does not say so, or + * the other way round. Uses the GitHub API; set GITHUB_TOKEN to lift the + * 60-requests-an-hour anonymous limit. * * Writes a Markdown report (stdout, or --report) and, under GitHub Actions, * `problems=` to $GITHUB_OUTPUT so the workflow can open or update one @@ -17,6 +21,7 @@ import fs from "node:fs"; import path from "node:path"; import { fileURLToPath } from "node:url"; +import { maintenanceFromRepo } from "./checks.mjs"; import { parseFrontmatter } from "./lib/frontmatter.mjs"; const __dirname = path.dirname(fileURLToPath(import.meta.url)); @@ -43,8 +48,8 @@ function loadEntries() { else if (d.name.endsWith(".md") && d.name !== "README.md" && d.name !== "TEMPLATE.md") { const parsed = parseFrontmatter(fs.readFileSync(full, "utf8")); if (!parsed?.meta.url) continue; - const { id, url, verified, status } = parsed.meta; - out.push({ id: String(id), url: String(url), verified: verified ? String(verified) : null, status: String(status), rel: path.relative(ROOT, full).split(path.sep).join("/") }); + const { id, url, verified, status, maintenance } = parsed.meta; + out.push({ id: String(id), url: String(url), verified: verified ? String(verified) : null, status: String(status), maintenance: maintenance ? String(maintenance) : null, rel: path.relative(ROOT, full).split(path.sep).join("/") }); } } }; @@ -91,9 +96,49 @@ async function run(entries) { return results; } +/** + * GitHub sources whose repository state and `maintenance` field disagree. + * One API call per github.com repository, one at a time: a few dozen calls, + * well inside the limit with a token. An API failure is listed, not guessed. + */ +async function checkMaintenance(entries) { + const headers = { "user-agent": UA, accept: "application/vnd.github+json" }; + if (process.env.GITHUB_TOKEN) headers.authorization = `Bearer ${process.env.GITHUB_TOKEN}`; + const out = []; + for (const e of entries) { + let host; + try { + host = new URL(e.url).hostname; + } catch { + continue; + } + if (host !== "github.com") continue; + const repo = repoOf(e.url); + if (!repo.includes("/")) continue; + try { + const res = await fetch(`https://api.github.com/repos/${repo}`, { headers, signal: AbortSignal.timeout(TIMEOUT_MS) }); + if (!res.ok) { + out.push({ ...e, detail: `GitHub API HTTP ${res.status} for ${repo}` }); + if (res.status === 403 || res.status === 429) break; // rate limited: the rest would fail too + continue; + } + const data = await res.json(); + const want = maintenanceFromRepo(data); + if (want !== e.maintenance) { + const state = data.archived ? "archived" : `last push ${String(data.pushed_at).slice(0, 10)}`; + out.push({ ...e, detail: `${repo} is ${state}; maintenance is ${e.maintenance || "unset"}, expected ${want || "unset"}` }); + } + } catch (err) { + out.push({ ...e, detail: `GitHub API ${err.name || "error"} for ${repo}` }); + } + } + return out; +} + const staleDays = Number(arg("--stale-days", "365")); const entries = loadEntries().filter((e) => e.status !== "deprecated"); const results = await run(entries); +const maintenance = await checkMaintenance(entries); const cutoff = new Date(Date.now() - staleDays * 86400000).toISOString().slice(0, 10); const rows = entries.map((e, i) => ({ ...e, ...results[i] })); const pick = (kind) => rows.filter((r) => r.kind === kind); @@ -103,7 +148,7 @@ const line = (r) => `- [ ] [\`${r.id}\`](${REPO}/blob/main/${r.rel}): ${r.url}${ const dead = pick("dead"); const moved = pick("moved"); const blocked = pick("blocked"); -const problems = dead.length + moved.length + stale.length; +const problems = dead.length + moved.length + stale.length + maintenance.length; const date = new Date().toISOString().slice(0, 10); const report = [ `Link check of ${entries.length} active and needs-review entries, run ${date}.`, @@ -122,6 +167,10 @@ const report = [ "", ...(stale.length ? stale.map((e) => `- [ ] [\`${e.id}\`](${REPO}/blob/main/${e.rel}): verified ${e.verified}`) : ["None."]), "", + `### GitHub repository state differs from \`maintenance\` (${maintenance.length})`, + "", + ...(maintenance.length ? maintenance.map(line) : ["None."]), + "", `
Refused the checker (${blocked.length}): usually bot blocking, check by hand`, "", ...(blocked.length ? blocked.map(line) : ["None."]), @@ -134,4 +183,4 @@ const reportPath = arg("--report", null); if (reportPath) fs.writeFileSync(reportPath, report); else process.stdout.write(report); if (process.env.GITHUB_OUTPUT) fs.appendFileSync(process.env.GITHUB_OUTPUT, `problems=${problems}\n`); -console.error(`${entries.length} checked: ${dead.length} dead, ${moved.length} moved, ${stale.length} stale, ${blocked.length} blocked`); +console.error(`${entries.length} checked: ${dead.length} dead, ${moved.length} moved, ${stale.length} stale, ${maintenance.length} maintenance, ${blocked.length} blocked`); diff --git a/site/checks.mjs b/site/checks.mjs index f2a580e..f491d51 100644 --- a/site/checks.mjs +++ b/site/checks.mjs @@ -345,6 +345,79 @@ export function checkValueAliases(rel, meta, aliases) { return errors; } +/* ----------------------------------------------------------------- V21 */ +/** + * A tag that repeats the entry's own `publisher` drifted like the licence + * tags did (`kenney` was missing on 14 Kenney entries), and search already + * matches the publisher field, so the tag adds nothing but a way to be wrong. + * The licence-restating tags are retired in site/value-aliases.json (V19). + */ +export function slugify(text) { + return String(text).toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, ""); +} + +export function checkTagsRestatePublisher(rel, meta) { + const errors = []; + if (empty(meta.publisher)) return errors; + const own = slugify(meta.publisher); + for (const t of Array.isArray(meta.tags) ? meta.tags.map(String) : []) { + if (t === own) { + errors.push(`${rel} tag "${t}" restates publisher "${meta.publisher}"; search and grouping use the publisher field`); + } + } + return errors; +} + +/* ----------------------------------------------------------------- V22 */ +/** + * Optional `maintenance`: `archived` (the source repository is archived) or + * `inactive` (no commits for over three years). check-links.mjs reports a + * GitHub source whose state disagrees with it. + */ +export const MAINTENANCE_VALUES = new Set(["archived", "inactive"]); + +/** Three years without a push reads as inactive. */ +export const INACTIVE_DAYS = Math.round(3 * 365.25); + +/** + * The `maintenance` value a GitHub repository's API record implies, or null. + * `repo` is { archived, pushed_at } from GET /repos/{owner}/{repo}. + */ +export function maintenanceFromRepo(repo, now = Date.now()) { + if (repo.archived) return "archived"; + const pushed = Date.parse(repo.pushed_at); + if (!Number.isNaN(pushed) && now - pushed > INACTIVE_DAYS * 86400000) return "inactive"; + return null; +} + +export function checkMaintenance(rel, meta) { + if (empty(meta.maintenance)) return []; + const v = String(meta.maintenance); + return MAINTENANCE_VALUES.has(v) + ? [] + : [`${rel} maintenance "${v}" is not one of ${[...MAINTENANCE_VALUES].join(" | ")}`]; +} + +/* ----------------------------------------------------------------- V20 */ +/** + * `formats` is a closed list (site/format-vocabulary.json). V13 and V19 only + * catch spellings of a value already in use; a new synonym (`JPEG` beside + * `JPG`, `glTF KHR_draco` beside `glTF`) got in before either could see it, + * and the Format filter matches on exact values. + */ +export function checkFormatVocabulary(rel, meta, formatVocab) { + const errors = []; + const allowed = new Set(formatVocab.formats); + for (const v of Array.isArray(meta.formats) ? meta.formats.map(String) : []) { + if (!allowed.has(v)) { + errors.push( + `${rel} formats "${v}" is not in site/format-vocabulary.json (use a listed spelling, or add the new format there first)` + ); + } + } + return errors; +} + /* ----------------------------------------------------------------- V14 */ /** * `active` tells a reader the licence, the commercial stance and the credit diff --git a/site/checks.test.mjs b/site/checks.test.mjs index a7100e2..be035a5 100644 --- a/site/checks.test.mjs +++ b/site/checks.test.mjs @@ -18,12 +18,16 @@ import { checkDeprecationReason, checkEntryUrl, checkEvidenceDates, + checkFormatVocabulary, evidenceDates, markdownAnchors, checkLicenseVocabulary, + checkMaintenance, + maintenanceFromRepo, checkPublisherConsistency, checkSpdxConsistency, checkStacks, + checkTagsRestatePublisher, checkTaxonomyValues, checkValueAliases, checkValueSpellings, @@ -682,7 +686,49 @@ rejects("V19 rejects a retired subcategory", checkValueAliases("bad.md", { subca rejects("V19 rejects a retired format", checkValueAliases("bad.md", { formats: ["JPEG"] }, aliases), 'use "JPG"'); rejects("V19 rejects a licence as a subcategory", checkValueAliases("bad.md", { subcategories: ["public-domain"] }, aliases), "a licence, not a kind of content"); rejects("V19 rejects an internal review tag", checkValueAliases("bad.md", { tags: ["r04"] }, aliases), "internal review marker"); -accepts("V19 lets a tag use a word retired only as a subcategory", checkValueAliases("ok.md", { tags: ["tiles", "public-domain"] }, aliases)); +accepts("V19 lets a tag use a word retired only as a subcategory", checkValueAliases("ok.md", { tags: ["tiles", "gui"] }, aliases)); +rejects("V19 rejects a tag that restates the licence", checkValueAliases("bad.md", { tags: ["cc0"] }, aliases), 'tags must not carry "cc0"'); +accepts("V19 keeps a tag that only mentions a licence word", checkValueAliases("ok.md", { tags: ["odbl-adjacent", "free-tier"] }, aliases)); + +/* Licence families: every licence in exactly one Licence-filter group ---- */ +{ + const fams = Object.entries(vocab.families).filter(([k]) => !k.startsWith("_")); + const homeless = Object.keys(vocab.licenses).filter((l) => fams.filter(([, f]) => f.licenses.includes(l)).length !== 1); + accepts("every licence value sits in exactly one family", homeless); + const unknown = fams.flatMap(([, f]) => f.licenses).filter((l) => !(l in vocab.licenses)); + accepts("families name only licence values the vocabulary has", unknown); +} + +/* V22: maintenance ------------------------------------------------------ */ +rejects("V22 rejects an unknown maintenance value", checkMaintenance("bad.md", { maintenance: "dead" }), 'maintenance "dead" is not one of archived | inactive'); +accepts("V22 accepts archived", checkMaintenance("ok.md", { maintenance: "archived" })); +accepts("V22 leaves the field optional", checkMaintenance("ok.md", {})); +{ + const now = Date.parse("2026-09-26T00:00:00Z"); + const same = (label, actual, expected) => (actual === expected ? accepts(label, []) : accepts(label, [`got ${actual}, want ${expected}`])); + same("an archived repo is archived", maintenanceFromRepo({ archived: true, pushed_at: "2026-09-01T00:00:00Z" }, now), "archived"); + same("no push in over three years is inactive", maintenanceFromRepo({ archived: false, pushed_at: "2023-01-01T00:00:00Z" }, now), "inactive"); + same("a recent push is neither", maintenanceFromRepo({ archived: false, pushed_at: "2025-01-01T00:00:00Z" }, now), null); +} + +/* V21: tag restating the publisher ------------------------------------- */ +rejects("V21 rejects the publisher as a tag", checkTagsRestatePublisher("bad.md", { publisher: "Blender Studio", tags: ["blender-studio", "open-movie"] }), 'tag "blender-studio" restates publisher'); +accepts("V21 allows another publisher's name as a tag", checkTagsRestatePublisher("ok.md", { publisher: "Envato", tags: ["kenney-style"] })); +accepts("V21 ignores an entry with no publisher", checkTagsRestatePublisher("ok.md", { tags: ["kenney"] })); + +/* V20: closed format list ---------------------------------------------- */ +const formatVocab = JSON.parse(fs.readFileSync(path.join(__dirname, "format-vocabulary.json"), "utf8")); +rejects("V20 rejects a format missing from the vocabulary", checkFormatVocabulary("bad.md", { formats: ["glTF KHR_draco"] }, formatVocab), 'formats "glTF KHR_draco" is not in site/format-vocabulary.json'); +rejects("V20 is case-sensitive", checkFormatVocabulary("bad.md", { formats: ["png"] }, formatVocab), 'formats "png"'); +accepts("V20 accepts listed formats", checkFormatVocabulary("ok.md", { formats: ["PNG", "glTF", "GLB"] }, formatVocab)); +accepts( + "V20 vocabulary lists every format a filter group names", + Object.values(formatVocab.groups).flatMap((g) => g.formats).filter((f) => !formatVocab.formats.includes(f)) +); +accepts( + "V20 vocabulary carries no retired spelling", + formatVocab.formats.filter((f) => Object.prototype.hasOwnProperty.call(aliases.formats, f)) +); /* ----------------------------------------------------------------------- */ if (failures.length) { @@ -690,4 +736,4 @@ if (failures.length) { for (const f of failures) console.error(` - ${f}`); process.exit(1); } -console.log(`checks.test ok: ${passed} assertions across 19 checks`); +console.log(`checks.test ok: ${passed} assertions across 22 checks`); diff --git a/site/config.json b/site/config.json index 9fde71f..343e9b2 100644 --- a/site/config.json +++ b/site/config.json @@ -6,7 +6,7 @@ "baseUrl": "/Free-Game-Dev-Assets", "siteUrl": "https://tmhsdigital.github.io/Free-Game-Dev-Assets/" }, - "expectedEntryCount": 319, + "expectedEntryCount": 334, "categories": { "3d": { "label": "3D", "blurb": "Models, scans, PBR textures" }, "environment": { "label": "Environment", "blurb": "HDRI, terrain, geodata" }, diff --git a/site/format-vocabulary.json b/site/format-vocabulary.json new file mode 100644 index 0000000..7beffef --- /dev/null +++ b/site/format-vocabulary.json @@ -0,0 +1,208 @@ +{ + "_comment": "The closed list of `formats` values (checks.mjs V20). Add a new value here in the same change that first uses it; spell it as the format's own documentation does. `groups` drive the site's Format filter: an entry matches a group when any of its formats is listed there.", + "formats": [ + "3MF", + "AAX", + "ABC", + "AMC", + "ASCII", + "ASE", + "AU", + "AUP3", + "basis", + "BBMODEL", + "BIN", + "BIP", + "Blend", + "blender-extension", + "BVH", + "C++", + "C3D", + "cli", + "COG", + "CSV", + "DAE", + "DEM", + "desktop-app", + "DRC", + "DTED", + "E57", + "efk", + "EPS", + "espeak-ng-data", + "EXR", + "FBX", + "Figma", + "FLA", + "FLAC", + "gdextension", + "gdshader", + "GeoJSON", + "GeoTIFF", + "GIF", + "GLB", + "glTF", + "Godot", + "godot-addon", + "gpl-palette", + "HDR", + "HGT", + "HTML", + "JavaScript", + "JPG", + "JSON", + "KRA", + "ktx", + "ktx2", + "LAS", + "LAZ", + "ldtk", + "library", + "middleware", + "MIDI", + "mm", + "MMP", + "mobile-app", + "model", + "MP3", + "MP4", + "MPEG2", + "netCDF", + "npm", + "OBJ", + "OGG", + "OGV", + "ONNX", + "OSM", + "OTF", + "PAL", + "PBF", + "PDF", + "PLY", + "PNG", + "PSD", + "pxo", + "Python", + "R16", + "React", + "SBSAR", + "SFMdata", + "shapefile", + "Sketch", + "STL", + "SVG", + "TGA", + "TIFF", + "tmx", + "TTF", + "TXT", + "Unity", + "Unreal", + "USD", + "various", + "VDB", + "VOX", + "VRM", + "VST", + "Vue", + "WASM", + "WAV", + "WOFF", + "WOFF2", + "XCF", + "XML", + "YBN", + "YCD", + "YDD", + "YDR", + "YFT", + "YMAP", + "YTYP" + ], + "groups": { + "gltf": { + "label": "glTF / GLB", + "formats": [ + "glTF", + "GLB" + ] + }, + "fbx": { + "label": "FBX", + "formats": [ + "FBX" + ] + }, + "obj": { + "label": "OBJ", + "formats": [ + "OBJ" + ] + }, + "blend": { + "label": "Blend", + "formats": [ + "Blend" + ] + }, + "png": { + "label": "PNG", + "formats": [ + "PNG" + ] + }, + "svg": { + "label": "SVG", + "formats": [ + "SVG" + ] + }, + "hdr": { + "label": "EXR / HDR", + "formats": [ + "EXR", + "HDR" + ] + }, + "wav": { + "label": "WAV / FLAC", + "formats": [ + "WAV", + "FLAC" + ] + }, + "ogg": { + "label": "OGG / MP3", + "formats": [ + "OGG", + "MP3" + ] + }, + "font": { + "label": "TTF / OTF / WOFF", + "formats": [ + "TTF", + "OTF", + "WOFF", + "WOFF2" + ] + }, + "godot": { + "label": "Godot", + "formats": [ + "Godot", + "godot-addon", + "gdshader", + "gdextension" + ] + }, + "video": { + "label": "Video (MP4 / OGV)", + "formats": [ + "MP4", + "OGV", + "MPEG2" + ] + } + } +} diff --git a/site/lib/entry-page.mjs b/site/lib/entry-page.mjs index b222456..762a0fe 100644 --- a/site/lib/entry-page.mjs +++ b/site/lib/entry-page.mjs @@ -3,6 +3,7 @@ import { commercialLabel, entryPageUrl, esc, + MAINTENANCE_NOTES, PERSPECTIVE_LABELS, STATUS_NOTES, verifiedAge, @@ -69,6 +70,7 @@ export function entryPageHtml({ entry, leadHtml, restHtml, deprecatedReasonHtml, ["Credit", esc(c.value)], ["Status", `${esc(entry.status)}: ${esc(STATUS_NOTES[entry.status] || "")}`], ["Verified", `${esc(ageText)}`], + entry.maintenance ? ["Maintenance", `${esc(entry.maintenance)}: ${esc(MAINTENANCE_NOTES[entry.maintenance] || "")}`] : null, entry.publisher ? ["Publisher", esc(entry.publisher)] : null, ["Formats", esc((entry.formats || []).join(", ") || "none listed")], entry.camera_perspective @@ -156,6 +158,7 @@ export function entryPageHtml({ entry, leadHtml, restHtml, deprecatedReasonHtml, Go to source View the file on GitHub Report a problem with this entry +

${usedIn}
${restHtml}
@@ -167,6 +170,7 @@ export function entryPageHtml({ entry, leadHtml, restHtml, deprecatedReasonHtml, + `; diff --git a/site/lib/lib.test.mjs b/site/lib/lib.test.mjs index 30197e3..07f3a5c 100644 --- a/site/lib/lib.test.mjs +++ b/site/lib/lib.test.mjs @@ -293,6 +293,29 @@ eq("per-file bucket", ow.perFile.map((i) => i.entry.id).join(","), "c"); eq("open questions bucket", ow.openQuestions.map((i) => i.entry.id).join(","), "c"); eq("unclear bucket", ow.unclear.map((i) => i.entry.id).join(","), "d"); eq("copy all joins canned lines in pick order", copyAllText(ow), 'Art by "A" \nMusic by B'); + +/* entry page: maintenance and shortlist toggle ----------------------------- */ +has("maintenance row on an archived entry", page({ maintenance: "archived" }), "
Maintenance
archived: The source repository is archived"); +lacks("no maintenance row by default", page(), "
Maintenance
"); +has("entry page has a shortlist toggle", page(), 'data-shortlist="e1"'); +has("entry page loads the shortlist module", page(), ''); +/* shortlist: CREDITS file -------------------------------------------------- */ +import { creditsFile } from "./owes.mjs"; +const eF = { ...base, id: "f", name: "Font F", license: "SIL OFL", attributionClass: "notice", attribution_required: false, status: "active", commercial: true }; +const owShort = owes([eA, eB, eC, eD, eE, eF].map((entry) => ({ need: "shortlist", entry }))); +eq("notices bucket holds carry-the-licence entries", owShort.notices.map((i) => i.entry.id).join(","), "f"); +const md = creditsFile(owShort, { format: "md", pageUrl: (e) => `https://x.test/entry/${e.id}/`, date: "2026-09-26" }); +has("md credits carry the canned line", md, '- Art by "A" '); +has("md credits flag a missing canned line", md, "- [Eps](https://x.test/entry/e/): no canned credit line"); +has("md lists notices to keep", md, "## Notices to keep with the files"); +has("md lists per-file review", md, "## Check each file"); +has("md lists open questions", md, "## Open questions"); +has("md lists unclear credit", md, "## Unclear credit"); +has("md is dated", md, "on 2026-09-26"); +const txt = creditsFile(owShort, { format: "txt", pageUrl: (e) => `https://x.test/entry/${e.id}/` }); +lacks("txt has no markdown links", txt, "]("); +has("txt gives the page url plainly", txt, "Gamma (CC-BY-4.0) "); +eq("an empty shortlist still makes a file", creditsFile(owes([])).startsWith("# Credits"), true); const stackMeta = { id: "s1", title: 'Make a "thing" ', task: "A task .", walked: "2026-09-20" }; const sp = (over = {}) => stackPageHtml({ diff --git a/site/lib/owes.mjs b/site/lib/owes.mjs new file mode 100644 index 0000000..15df7f3 --- /dev/null +++ b/site/lib/owes.mjs @@ -0,0 +1,95 @@ +/** + * What a set of picked entries owes, shared by the stack pages (build time) + * and the reader's shortlist (browser). No imports: the build copies this file + * into site/dist as owes.js, and shortlist.js imports it there. + */ + +/** + * What the picks owe, one row per entry (an entry picked for two needs is + * listed once with both). `picked` is [{ need, entry }] with payload entries. + */ +export function owes(picked) { + const byId = new Map(); + for (const { need, entry } of picked) { + if (byId.has(entry.id)) byId.get(entry.id).needs.push(need); + else byId.set(entry.id, { entry, needs: [need] }); + } + const items = [...byId.values()]; + const credit = (i) => i.entry.attribution_required; + return { + credits: items.filter((i) => credit(i) === true).map((i) => ({ ...i, line: i.entry.attribution_string || null })), + // Licences that oblige you to carry their notice with the files (MIT, OFL, + // Apache...), which is not a credits-screen line (license-vocabulary.json). + notices: items.filter((i) => i.entry.attributionClass === "notice"), + noCredit: items.filter((i) => credit(i) === false), + unclear: items.filter((i) => credit(i) !== true && credit(i) !== false), + perFile: items.filter((i) => i.entry.commercial === "varies"), + openQuestions: items.filter((i) => i.entry.status === "needs-review"), + }; +} + +/** Every canned credit line, one per line, in pick order. */ +export function copyAllText(owed) { + return owed.credits + .filter((c) => c.line) + .map((c) => c.line) + .join("\n"); +} + +/** + * A CREDITS file for what `owed` lists. `format` is "md" or "txt"; `pageUrl` + * maps an entry to its catalog page; `date` is the YYYY-MM-DD it was made. + * Every section a stack page shows is here, so nothing owed is dropped on the + * way from the shortlist to the game's repository. + */ +export function creditsFile(owed, { format = "md", pageUrl = () => "", date = "", source = "Free Game Dev Assets" } = {}) { + const md = format === "md"; + const out = []; + const heading = (text) => { + out.push("", md ? `## ${text}` : `${text}\n${"-".repeat(text.length)}`, ""); + }; + const name = (e) => (md && pageUrl(e) ? `[${e.name}](${pageUrl(e)})` : e.name); + const ref = (e) => (!md && pageUrl(e) ? ` <${pageUrl(e)}>` : ""); + const list = (items, detail) => { + for (const i of items) out.push(`- ${name(i.entry)} (${i.entry.license})${detail ? `: ${detail(i)}` : ""}${ref(i.entry)}`); + }; + + out.push(md ? "# Credits" : "CREDITS\n======="); + out.push( + "", + `Made from a shortlist on ${source}${date ? ` on ${date}` : ""}. Each licence was checked at its source on the date its catalog entry shows; re-read the source before you ship.` + ); + + if (owed.credits.length) { + heading("Credits to ship"); + for (const c of owed.credits) { + if (c.line) out.push(md ? `- ${c.line}` : ` ${c.line}`); + else out.push(`- ${name(c.entry)}${ref(c.entry)}: no canned credit line; see the entry.`); + } + } + if (owed.notices.length) { + heading("Notices to keep with the files"); + out.push("Carry each licence and copyright notice with what you redistribute. This is not a credits-screen line.", ""); + list(owed.notices); + } + if (owed.perFile.length) { + heading("Check each file"); + out.push("Some files in these sources qualify and some do not. Check the licence of each file you take.", ""); + list(owed.perFile); + } + if (owed.openQuestions.length) { + heading("Open questions"); + out.push("These entries are marked needs review: something about their terms is not settled.", ""); + list(owed.openQuestions); + } + if (owed.unclear.length) { + heading("Unclear credit"); + out.push("Whether credit is required is not recorded. Read the entry's Notes.", ""); + list(owed.unclear); + } + if (owed.noCredit.length) { + heading("No credit needed"); + list(owed.noCredit); + } + return `${out.join("\n").replace(/\n{3,}/g, "\n\n")}\n`; +} diff --git a/site/lib/shared.mjs b/site/lib/shared.mjs index 21d05e9..47c5793 100644 --- a/site/lib/shared.mjs +++ b/site/lib/shared.mjs @@ -8,6 +8,12 @@ export const PERSPECTIVE_LABELS = { "2d_flat": "flat UI", }; +/** What each `maintenance` value tells a reader (checks.mjs V22). */ +export const MAINTENANCE_NOTES = { + archived: "The source repository is archived: read-only, no fixes or updates.", + inactive: "The source has had no new commits for over three years.", +}; + /** One-line meaning of each status, matching the homepage legend. */ export const STATUS_NOTES = { active: "License spot-checked at the source; the entry carries dated evidence.", diff --git a/site/lib/stacks.mjs b/site/lib/stacks.mjs index 1c1f63b..b43fb83 100644 --- a/site/lib/stacks.mjs +++ b/site/lib/stacks.mjs @@ -156,34 +156,7 @@ export function parseStack(text, { file, terms = [] }) { }; } -/** - * What the picks owe, one row per entry (an entry picked for two needs is - * listed once with both). `picked` is [{ need, entry }] with payload entries. - */ -export function owes(picked) { - const byId = new Map(); - for (const { need, entry } of picked) { - if (byId.has(entry.id)) byId.get(entry.id).needs.push(need); - else byId.set(entry.id, { entry, needs: [need] }); - } - const items = [...byId.values()]; - const credit = (i) => i.entry.attribution_required; - return { - credits: items.filter((i) => credit(i) === true).map((i) => ({ ...i, line: i.entry.attribution_string || null })), - noCredit: items.filter((i) => credit(i) === false), - unclear: items.filter((i) => credit(i) !== true && credit(i) !== false), - perFile: items.filter((i) => i.entry.commercial === "varies"), - openQuestions: items.filter((i) => i.entry.status === "needs-review"), - }; -} - -/** Every canned credit line, one per line, in pick order. */ -export function copyAllText(owed) { - return owed.credits - .filter((c) => c.line) - .map((c) => c.line) - .join("\n"); -} +export { copyAllText, owes } from "./owes.mjs"; /** * The stack files under /stacks: `files` are the top-level .md files diff --git a/site/license-vocabulary.json b/site/license-vocabulary.json index 5f61da9..814248a 100644 --- a/site/license-vocabulary.json +++ b/site/license-vocabulary.json @@ -18,6 +18,7 @@ "BSD-2-Clause": { "spdx": "BSD-2-Clause", "attribution": "notice" }, "BSD-3-Clause": { "spdx": "BSD-3-Clause", "attribution": "notice" }, "MPL-2.0": { "spdx": "MPL-2.0", "attribution": "notice" }, + "GPL-2.0-only": { "spdx": "GPL-2.0-only", "attribution": "notice" }, "GPL-2.0-or-later": { "spdx": "GPL-2.0-or-later", "attribution": "notice" }, "GPL-3.0-or-later": { "spdx": "GPL-3.0-or-later", "attribution": "notice" }, "GPL-2.0": { @@ -60,6 +61,15 @@ "note": "Source does not state it plainly. Pairs with status: needs-review." } }, + "families": { + "_doc": "Groups for the site's Licence filter. Every license value above belongs to exactly one family (lib.test.mjs checks this).", + "public-domain": { "label": "CC0 / public domain", "licenses": ["CC0", "Unlicense", "public-domain"] }, + "cc-by": { "label": "CC-BY (credit)", "licenses": ["CC-BY", "CC-BY-3.0", "CC-BY-4.0"] }, + "permissive": { "label": "Permissive (MIT, Apache, BSD, OFL)", "licenses": ["MIT", "ISC", "Apache-2.0", "BSD-2-Clause", "BSD-3-Clause", "SIL OFL", "CDLA-Permissive-2.0"] }, + "copyleft": { "label": "Copyleft (GPL, MPL, ODbL)", "licenses": ["GPL-2.0", "GPL-2.0-only", "GPL-2.0-or-later", "GPL-3.0", "GPL-3.0-or-later", "MPL-2.0", "ODbL"] }, + "custom": { "label": "Publisher's own terms", "licenses": ["custom"] }, + "mixed": { "label": "Varies or unknown", "licenses": ["varies", "unknown"] } + }, "attribution_waiver_marker": "- Attribution waived:", "deprecation_reason_marker": "- Deprecated:" } diff --git a/site/public/app.js b/site/public/app.js index 6920a40..29917fd 100644 --- a/site/public/app.js +++ b/site/public/app.js @@ -23,9 +23,14 @@ commercialOnly: false, noAttr: false, perspective: "any", + license: "any", + format: "any", sort: "name", }; const state = { ...DEFAULTS }; + // Licence families and format groups come from the build (license-vocabulary.json, format-vocabulary.json). + const LICENSE_FAMILIES = data.filters?.licenseFamilies || {}; + const FORMAT_GROUPS = data.filters?.formatGroups || {}; const categoryLabels = data.categories || {}; const repo = data.site?.repo || "https://github.com/TMHSDigital/Free-Game-Dev-Assets"; @@ -49,6 +54,10 @@ side_scroller: "side-scroller", "2d_flat": "flat UI", }; + const MAINTENANCE_NOTES = { + archived: "The source repository is archived: read-only, no fixes or updates.", + inactive: "The source has had no new commits for over three years.", + }; // Searchable words per perspective. A 3/4 pack is what most people mean by a top-down // RPG, so it answers "top down" too. const PERSPECTIVE_SEARCH = { @@ -116,6 +125,8 @@ pick("cat", "category", ["all", ...Object.keys(categoryLabels)]); pick("sort", "sort", Object.keys(SORTS)); pick("view", "perspective", ["any", ...Object.keys(PERSPECTIVE_LABELS)]); + pick("licence", "license", ["any", ...Object.keys(LICENSE_FAMILIES)]); + pick("format", "format", ["any", ...Object.keys(FORMAT_GROUPS)]); if (p.has("q")) state.q = p.get("q"); const bool = (key, field) => { const v = p.get(key); @@ -136,6 +147,8 @@ if (state.q.trim()) p.set("q", state.q.trim()); if (state.sort !== DEFAULTS.sort) p.set("sort", state.sort); if (state.perspective !== DEFAULTS.perspective) p.set("view", state.perspective); + if (state.license !== DEFAULTS.license) p.set("licence", state.license); + if (state.format !== DEFAULTS.format) p.set("format", state.format); const bool = (key, field) => { if (state[field] !== DEFAULTS[field]) p.set(key, state[field] ? "1" : "0"); }; @@ -168,6 +181,11 @@ if (state.noAttr && entry.attribution_required !== false) return false; if (state.perspective !== "any" && entry.camera_perspective !== state.perspective) return false; + if (state.license !== "any" && entry.licenseFamily !== state.license) return false; + if (state.format !== "any") { + const wanted = FORMAT_GROUPS[state.format]?.formats || []; + if (!(entry.formats || []).some((f) => wanted.includes(f))) return false; + } return true; } @@ -209,19 +227,20 @@ /* ------------------------------------------------------------- search */ // Each entry's searchable text, normalised once at load, in three fields. - // Name and tags are what a reader means by a word, so a hit there ranks - // above one in the other metadata, which ranks above a summary-only hit. + // Name, publisher and tags are what a reader means by a word, so a hit there + // ranks above one in the other metadata, which ranks above a summary-only + // hit. Tags no longer repeat the publisher or licence (V19, V21), so those + // fields are searched directly. const FIELD_WEIGHTS = [3, 2, 1]; const searchIndex = new Map( data.entries.map((e) => [ e.id, [ - normalize([e.name, ...(e.tags || [])].join(" ")), + normalize([e.name, e.publisher || "", ...(e.tags || [])].join(" ")), normalize( [ e.license, e.category, - e.publisher || "", PERSPECTIVE_SEARCH[e.camera_perspective] || "", ...(e.formats || []), ...(e.subcategories || []), @@ -302,12 +321,16 @@ ? `${escapeHtml(PERSPECTIVE_LABELS[entry.camera_perspective] || entry.camera_perspective)}` : "", ].join(""); + // The same badge as build.mjs maintenanceFlagHtml (titles from shared.mjs MAINTENANCE_NOTES). + const maintenance = entry.maintenance + ? ` ${escapeHtml(entry.maintenance)}` + : ""; return ``; @@ -384,6 +408,10 @@ key: "perspective", label: `view: ${PERSPECTIVE_LABELS[state.perspective] || state.perspective}`, }); + if (state.license !== DEFAULTS.license) + chips.push({ key: "license", label: `licence: ${LICENSE_FAMILIES[state.license] || state.license}` }); + if (state.format !== DEFAULTS.format) + chips.push({ key: "format", label: `format: ${FORMAT_GROUPS[state.format]?.label || state.format}` }); if (!state.active) chips.push({ key: "active", label: "hiding active" }); if (!state.review) chips.push({ key: "review", label: "hiding needs-review" }); if (state.deprecated) chips.push({ key: "deprecated", label: "showing deprecated" }); @@ -682,6 +710,25 @@ apply(); }); + const selects = [ + ["#license-family", "license", LICENSE_FAMILIES], + ["#format-group", "format", Object.fromEntries(Object.entries(FORMAT_GROUPS).map(([k, g]) => [k, g.label]))], + ]; + for (const [sel, field, choices] of selects) { + const el = $(sel); + el.insertAdjacentHTML( + "beforeend", + Object.entries(choices) + .map(([value, label]) => ``) + .join("") + ); + el.value = state[field]; + el.addEventListener("change", (e) => { + state[field] = e.target.value; + apply(); + }); + } + const sort = $("#sort"); sort.value = state.sort; sort.addEventListener("change", (e) => { @@ -788,6 +835,8 @@ $("#filter-no-attr").checked = state.noAttr; $("#sort").value = state.sort; $("#perspective").value = state.perspective; + $("#license-family").value = state.license; + $("#format-group").value = state.format; } /* --------------------------------------------------------------- init */ diff --git a/site/public/index.html b/site/public/index.html index 6872ed2..ff84e4d 100644 --- a/site/public/index.html +++ b/site/public/index.html @@ -138,6 +138,18 @@

Catalog

+ +