Stop tracking sprite GIFs — itch.io licenses forbid redistribution#26
Merged
Conversation
The 42 sprite GIFs under Sources/UI/Sprites/Assets/ and server/sprite-
assets/peak/ came from three itch.io packs whose licenses all permit
"use in your commercial project" but explicitly forbid redistributing
the raw assets:
- otter → RiLi_XL — "Free to use in any commercial projects.
Please do not redistribute this asset pack."
- sleepycat → ToffeeCraft — "Not redistribute or resell this assets."
- peak → quipinny — no license stated (= all rights reserved
by default).
Shipping the GIFs inside the compiled App Store binary is fine (that's
the licensed use). Hosting them in a public MIT-licensed source repo
is redistribution, which violates all three. Adding attribution does
not legalize redistribution under these terms.
This change:
- Gitignores `Sources/UI/Sprites/Assets/*.gif` and the entire
`server/sprite-assets/` tree; `git rm --cached` removes the 42 files
from tracking without deleting them from local working trees so
existing builds keep finding the sprites.
- Replaces the misleading hard-coded `author: "Community", license:
"CC0"` in SpritePackManager.loadBuiltinGIF with per-pack author /
license strings supplied by each loader, honestly attributing each
pack to its real creator and itch.io URL. Local builds that have the
sprites continue to surface the credits in the sprite manifest.
- Documents the situation in docs/sprites.md: explains the legal
reasoning, lists the three source URLs, and tells builders-from-
source how to recreate the asset layout for their own build.
- The app already handles the no-builtin-packs case gracefully
(SpritePackManager returns no built-in loaders → activePack is nil
→ mascot surfaces render in their fallback state), so a clean clone
builds and runs without the assets — just without mascots.
Closes #12.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
.giffiles (24 inSources/UI/Sprites/Assets/, 18 inserver/sprite-assets/peak/). All three packs come from itch.io with licenses that permit "use in your commercial project" but explicitly prohibit redistributing the raw assets — incompatible with hosting them in a public MIT-licensed source repo.git rm --cachedkeeps the files on disk so existing local builds still find the sprites;.gitignoreprevents accidental re-add.author: "Community", license: "CC0"literal inSpritePackManager.loadBuiltinGIFwith per-pack author/license strings (RiLi_XL / ToffeeCraft), supplied by each loader. The hard-coded "CC0" was the issue's specific lie.docs/sprites.mddocuments the legal situation, lists the three itch.io URLs, and explains the filename convention for anyone building from source.activePack?is optional-chained everywhere), so a clean clone builds and runs — just without mascots.License findings (per the itch.io product pages)
Test plan
swift package describeparses Package.swift cleanly with the newexcludeentry.Sources/UI/Sprites/Assets/*.gifstill exist on disk (24 files) so existing builds still find sprites.git ls-files Sources/UI/Sprites/Assets/ server/sprite-assets/returns onlyREADME.md.SpritePackManager.loadBuiltinGIF'sguard sheets.count == MascotMood.allCases.count else { return nil }already handles the missing-asset case;activePackis consistently optional-chained downstream (Sources/AppUI/SettingsMascotSection.swift:21,74,95,132).Closes #12.
🤖 Generated with Claude Code