You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 0a848de
Browse filesBrowse the repository at this point in the historyBrowse files
ai-assets: a dated Steam quote, what an ai-generated entry obliges, and a complete list
docs/ai-assets.md said only "check current Valve guidelines". It now quotes
the Steamworks Content Survey's generative-AI section (read 2026-11-03),
says what shipping an ai-generated entry means for that survey, and lists
every entry tagged ai-generated, with a link to the live search.
Soundza gains the tag: its Notes say some library sounds are AI-generated.
V37 keeps this true: an entry whose body says content is or are
AI-generated must carry the tag, and the guide must link every tagged entry.
Closes#180
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LpkeXRUqm7oDedPDk3QWtK
Copy file name to clipboardExpand all lines: CONTRIBUTING.md
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -54,6 +54,7 @@ To add a starter stack (one pick per need for a kind of game), follow [`stacks/R
54
54
-`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.
55
55
- `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. A format outside every group is still searchable and shown on the card, but the Format filter cannot select it.
56
56
-`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.
57
+
-`ai-generated` tag: required when the source says any of its content is AI-generated (V37; the body sentence "some sounds are AI-generated" without the tag fails). Add the entry to the list in [`docs/ai-assets.md`](docs/ai-assets.md) in the same change; the validator checks that list too.
57
58
- 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.
58
59
-`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.
59
60
-`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.
Copy file name to clipboardExpand all lines: docs/ai-assets.md
+33-2Lines changed: 33 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,6 @@
1
1
# AI-generated assets — catalog policy
2
2
3
-
Last reviewed 2026-10-23. Court rulings and platform rules on AI content change quickly: **re-verify** dates and rulings before relying on them.
3
+
Last reviewed 2026-11-03. Court rulings and platform rules on AI content change quickly: **re-verify** dates and rulings before relying on them.
4
4
5
5
## Practical catalog rules
6
6
@@ -12,14 +12,45 @@ Last reviewed 2026-10-23. Court rulings and platform rules on AI content change
12
12
13
13
## Platform notes (verify live)
14
14
15
-
-**Steam**: research notes player-facing generative assets may require store disclosure; internal coding assistants may not. Check current Valve guidelines.
15
+
-**Steam**: the Content Survey you fill in before review has a section on generative AI.
16
+
The live [Content Survey page](https://partner.steamgames.com/doc/gettingstarted/contentsurvey)
17
+
(read 2026-11-03) says it "is concerned with the use of AI in creating content that ships
18
+
with your game, and is consumed by players. This includes content such as artwork, sound,
19
+
narrative, localization, etc.", and that AI tools used only for development efficiency
20
+
are "not the focus of this section". It splits AI content into "Pre-Generated: Any kind of
21
+
content that ships with your game and is consumed by players that is created with the
22
+
help of AI tools during development" and "Live-Generated", content made while the game
23
+
runs, for which "you'll need to tell us what kind of guardrails you're putting on your
24
+
AI to ensure it's not generating illegal content."
16
25
-**US copyright**: research cites human-authorship requirements for registration; pure machine output may be unprotected — that does **not** clear third-party training-data or likeness claims.
17
26
-**Voice/likeness**: generating a real performer’s voice without rights is high risk regardless of model license.
18
27
28
+
## What an `ai-generated` entry obliges you to disclose
29
+
30
+
An entry tagged `ai-generated` holds content that its source says was made with AI tools,
31
+
in whole or in part. If you ship any of it, it is content "created with the help of AI
32
+
tools" that players consume, so on Steam it belongs in the Pre-Generated part of the
33
+
Content Survey, whoever ran the generator. Describe which assets and where they came
34
+
from. The same holds for a library that mixes human and AI files, such as Soundza, if a
35
+
file you use is labelled AI on its page. Other stores have their own rules; read them
36
+
before you submit.
37
+
19
38
## Mixed catalogs (human CC0 vs generator)
20
39
21
40
[3DTexel](../catalog/shaders-vfx/3dtexel-decals.md) ships a **human-authored CC0 decal library** on the same site as paid premium files and AI generators. The catalog entry is the human CC0 set only. Footer (2026-08-29): free assets CC0; premium and AI assets use a separate 3DTexel License. Do not treat generator output as that CC0 grant.
22
41
42
+
## Entries tagged ai-generated
43
+
44
+
These entries carry the `ai-generated` tag; the validator keeps this list complete (V37).
45
+
The [live search](https://tmhsdigital.github.io/Free-Game-Dev-Assets/?q=ai-generated) shows
46
+
the same set.
47
+
48
+
-[BitNuker Fantasy Environments Sampler](../catalog/2d/bitnuker-fantasy-environments-sampler.md)
Copy file name to clipboardExpand all lines: site/checks.test.mjs
+11Lines changed: 11 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -38,6 +38,8 @@ import {
38
38
checkTitleMatchesName,
39
39
checkValueAliases,
40
40
checkValueSpellings,
41
+
checkAiGuide,
42
+
checkAiTag,
41
43
checkCreditPlaceholders,
42
44
checkLimits,
43
45
checkKnownKeys,
@@ -901,6 +903,15 @@ rejects("V34 rejects an allowlisted licence missing from the vocabulary", checkP
901
903
rejects("V34 rejects a required licence the caption would not credit",checkPreviewVocabulary({licenses: {"OGA-BY-3.0": {attribution: "required"}}},["OGA-BY-3.0"],()=>false),"would lack the creator credit");
902
904
rejects("V34 rejects a credit on a licence that does not ask for one",checkPreviewVocabulary({licenses: {MIT: {attribution: "notice"}}},["MIT"],()=>true),"carry a credit the licence does not ask for");
903
905
906
+
/* V37: AI-generated content stays tagged and listed ------------------------ */
907
+
accepts("V37 accepts a tagged entry",checkAiTag("ok.md",{tags: ["ai-generated"]},"Some sounds are AI-generated."));
908
+
accepts("V37 ignores a denial",checkAiTag("ok.md",{tags: []},"itch metadata: No generative AI was used. The audio is not AI-generated."));
909
+
accepts("V37 ignores a mention that is not a claim",checkAiTag("ok.md",{tags: []},"Built for AI-generated pixel art that is off-grid."));
910
+
rejects("V37 rejects an untagged claim",checkAiTag("bad.md",{tags: ["loops"]},"- Some library sounds are AI-generated and labelled."),"has no ai-generated tag");
911
+
rejects("V37 rejects a partly-AI claim",checkAiTag("bad.md",{},"The pack is partly AI-generated."),"has no ai-generated tag");
912
+
accepts("V37 accepts a guide that links every tagged entry",checkAiGuide("- [S](../catalog/audio/s.md)",["catalog/audio/s.md"]));
913
+
rejects("V37 rejects a guide missing a tagged entry",checkAiGuide("nothing",["catalog/audio/s.md"]),"does not link catalog/audio/s.md");
914
+
904
915
/* V36: limits is one short plain line ------------------------------------- */
905
916
accepts("V36 accepts a short plain line",checkLimits("ok.md",{limits: "Tree packs are Unreal-only; no standalone redistribution"}));
906
917
accepts("V36 ignores a missing field",checkLimits("ok.md",{}));
0 commit comments