LPC Spritesheet/Character Generator Attribution Project

LPC Spritesheet/Character Generator Attribution Project

Hi everyone,

There are several projects that have gathered character sprites in the Liberated Pixel Cup (LPC)-style, with the goal of letting developers generate various character sprites with different bodies, clothes, weapons, etc. These are impressive tools that showcase the work of this community. However, near as I can tell, none are properly attributing the art that is used. I am going to make an effort to do so. Medium-term, I have a few other goals to improve the generator(s) and art, but this thread will focus on the attribution issue.

First, why this is important: attribution (aka crediting, i.e. documenting who made a particular asset) is fundamental to free and open source art (and software). First, to know that something can be used freely, you have to know who made it and have evidence that they have agreed to license the art under a permissive license. Attributing art is a requirement of most such licenses---the agreement you are making with the author is that you will acknowledge their contribution to your project in a reasonable way (usually for games that means in the game's credits and/or on the game's website). Finally, it's the decent and respectful thing to do---artists put a lot of work into the art they release for the community to use, asking only in return that their work be acknowledged. All of this is particularly important for these generator tools, since they are shared with the broader game development community and generate a lot of interest; however, if a developer or artist comes to this art through a tool/collection that does not have proper attribution, they have basically no chance of getting back to the original artist or artwork. It also generates confusion and disappointment when people want to use these assets, but can't because the licensing information is not clear.

To properly attribute a piece of work, one must list at least the author, the license, and the original source of the work (generally a URL); the work's title should be included if available. For a large, complicated collection of assets like the LPC spritesheets, it's not adequate to simply say "authors X, Y, and Z contributed to this work." You must be able to say specifically "Author X did sprite 1 available under CC-BY-SA 3.0 at , ...." A curious user should be able to find the artist of a specific asset without much trouble. Therefore a proper attribution file will map image filenames to their author/license/url/(title). Many open source game projects (e.g. The Mana World, Wesnoth, Stendhal) have a CREDITS text file which does this; see this example from The Mana World/Evol Online. This is what we need to produce.

Some history of these projects that may be helpful:

  • makrohn created a "universal sprite sheet"---a single GIMP .xcf file which would contain all the sprites created during the original LPC competition: thread / Github repository. Many others contributed to this effort, including joewhite, Mark Weyer, and JaidynReiman aka jrconway3 (jrconway3 also created a fork with lots of additional art which was eventually merged upstream; notably, jrconway3 and joewhite added a set of Ruby scripts to recolor hair sprites and generate the full spritesheet from 4 frames of animation).
  • guarav0 created a web-based generator app to assemble spritesheets from makrohn's universal sprite sheet (source code). The two projects were maintained in separate repositories, but were of course closely linked.
  • For the last several years, castlonia has mantained an updated fork of guarav0's generator (source). He also merged the contents of makrohn's spritesheets in
  • Several other forks either of guarav0 or castelonia's generators have been started over the years: ElizaWy was working on one, and recently ElectricBrainUK's project inspired me to make this post. Notably, Basto started working on a generator and art collection with the explicit goal of improving/simplifying attribution, but it seems that project has been dormant for a while.

I mention all of this, because it shows how many people have been involved and also why it is now a challenge to track down attribution information. None of the projects had a proper, comprehensive attribution file as I described above. Many small edits were made over time; lots of assets were remixed or just recolored; some changes were submitted to OGA as full submissions, while others were pull requests on GitHub or even comments on an OGA forum post.

So, where to start:

  • This AUTHORS.txt file was created by makrohn and updated alongside their repository and jrconway3's; it has not been updated for castelonia's repository, so it's missing anything added by them (since 06/2018). It lists authors, but not filenames, URLs or licenses. It is sometimes but not always straightforward to tell what filenames each item refers to.
  • castelonia started adding attribution information to the generator code directly. However, this only applies to a small number of assets and is only the URL.
  • elmenreges' art collection on OGA contains nearly all assets submitted to OGA in the LPC style, both during and after the competition. I say "nearly", because submissions from the contest itself are slightly weird/different and are listed only on this page---not in regular collections, search results, etc.
  • The commit histories of the various repositories above often mention the author of assets when they are added, which can help clarify where some assets came from.

Here's what I am now working on:

  • I created a CREDITS.CSV sheet with one row for each image file in castelonia's repository, and empty columns for author(s) and URL(s). I removed the auto-generated hair recolors for simplicity. There are 1451 entries in this file.
  • I converted the CREDITS.txt from elmenreges' art collection to a SUBMISSIONS.CSV file; this contains author, title, and license information for every URL. The mapping between rows in CREDITS.CSV and SUBMISSIONS.CSV is many-to-many, by submission URL.
  • I extracted the attributions from the index.html file in castelonia's generator and matched them to the filenames in CREDITS.CSV.
  • I have begun going through AUTHORS.txt; for each entry in that file, I find the relevant OGA submission(s) (if possible), identify the relevant filenames, and add the URL(s) for those files to CREDITS.CSV. Sometimes there is no OGA submission (for instance, not all of makrohn's edits made their way to OGA); in that case, I note the author(s) that contributed in a separate column. Then I check through any submissions identified---if they mention (or if I know/can tell) they are derived from other submssions, those get added to the stack. At the end of today, 188/1451 assets now have attribution information, so good progress. Usually I just noted the URL of the submission(s), then I'll go back and pull in the authors and licenses from SUBMISSIONS.CSV when I'm done
  • Once I make it through AUTHORS.txt, I plan to go through all remaining submissions from SUBMISSIONS.CSV and manually check whether any of their images are included in the generator. If so, I'll add the metadata to CREDITS.CSV
  • Once that is done, I plan to go through the git commit history for castelonia's repository and then for makrohn's original repository and make note of any attributions I have missed. Hopefully this will mostly be things like tweaks/bug fixes, etc.
  • At that point, there should be relatively few, if any, images in CREDITS.CSV that do not have attributions. I'll do reverse image searches for those spritesheets, as well as searches on the OGA forums. Anything that still can't be attributed will need to be discarded, but hopefully that will be nothing.

I've made the deliberate decision not to rename, move, delete, recolor, or otherwise mess with anything in my fork of castelonia's repository while I'm doing this, even though there's plenty I'm tempted to muck with :p This is to keep the focus on solving the attribution problem. We can always edit the attributions alongside renaming/refactoring (or match these attributions to forks, like ElectricBrainUK's, using the git commit histories).

While it's a big effort, I'm not sure it would be much easier with multiple people. I suspect it would be more work to figure out how to divide up the work than to just do it, especially because a lot of stuff requires some creativity/memory to figure out where things come from. That said, if anyone is very interested in helping and has an idea how to do so, let me know. ElectricBrainUK had mentioned trying to do some of this via reverse image search, and after studying the problem for a bit, I'm not sure that will work very well, but I won't stop anyone from trying!

I'm planning to post my results as I go, probably on github, in case I run out of steam and give up partway through---that way the community will at least have my partial efforts. But part of the reason for making this post is to create some accountability for myself :)

Any other input, suggestions, etc. are welcome!