{"id":13661313,"url":"https://github.com/statico/spittoon","last_synced_at":"2025-04-15T14:59:10.914Z","repository":{"id":799932,"uuid":"500835","full_name":"statico/spittoon","owner":"statico","description":"🖼 Sequential-art comic-strip generator written in Ruby which uses RMagick (2005)","archived":false,"fork":false,"pushed_at":"2019-11-20T05:41:53.000Z","size":2596,"stargazers_count":135,"open_issues_count":0,"forks_count":23,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-04-15T14:59:03.851Z","etag":null,"topics":["comic-bubbles","comic-chat","comics","graphics","ruby","siggraph"],"latest_commit_sha":null,"homepage":"http://github.com/statico/spittoon","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/statico.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2010-02-03T15:49:57.000Z","updated_at":"2025-01-17T20:59:26.000Z","dependencies_parsed_at":"2022-07-17T00:46:10.599Z","dependency_job_id":null,"html_url":"https://github.com/statico/spittoon","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/statico%2Fspittoon","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/statico%2Fspittoon/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/statico%2Fspittoon/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/statico%2Fspittoon/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/statico","download_url":"https://codeload.github.com/statico/spittoon/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249094940,"owners_count":21211837,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["comic-bubbles","comic-chat","comics","graphics","ruby","siggraph"],"created_at":"2024-08-02T05:01:32.396Z","updated_at":"2025-04-15T14:59:10.892Z","avatar_url":"https://github.com/statico.png","language":"Ruby","readme":"Spittoon\n========\n\nSpittoon is a comic strip generator. It is an implementation of the [Microsoft Comic Chat](http://en.wikipedia.org/wiki/Microsoft_Comic_Chat) algorithm described in the paper, [Comic Chat (Reprinted from SIGGRAPH '96 Proceedings)](http://kurlander.net/DJ/Pubs/SIGGRAPH96.pdf).\n\n\u003cimg src=\"http://i.imgur.com/ZxeUH.png\" alt=\"\" title=\"Hosted by imgur.com\" /\u003e\n\nI wrote this as an experiment to learn Ruby in 2005. I had planned on making an ongoing comic strip, but it turned out that I wasn't very funny. I've now released it as open-source.\n\nLicense\n-------\n\nThe source code is licensed under the [MIT License](http://www.opensource.org/licenses/mit-license.php).\n\nThe images in the `artwork/` and `backgrounds/` directories are licensed under a [Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License](http://creativecommons.org/licenses/by-nc-sa/3.0/).\n\nGetting Started\n---------------\n\nFirst, install [RMagick](http://rmagick.rubyforge.org/).\n\nNext, `cd` to `examples/` and run:\n\n    ruby -I ../lib ../bin/make_comic.rb -c config.yaml -s spec -o example.png\n\nVoila -- a comic has been generated.\n\n...or not. Spittoon *may crash* on you. If it does, just re-run the generator. Spittoon picks variations at random and sometimes they simply don't work. When something doesn't fit, Spittoon bails. (Yes, I know this isn't great, but I had always planned on running this from a terminal where I could re-run the command easily.)\n\nChat Spec Scripts\n-----------------\n\nI called them \"specs\" because originally they were YAML files of \"chat specifications.\" This became a pain in the ass so I created a simpler but more magical text format.\n\nFor example:\n\n    a-\u003eb: hey! (happy/exclaiming)\n    b: hi! (positive)\n    c\n\nThis is a one-panel comic with three characters. The characters will be chosen at random (see `characters` in `config.yaml`) and assigned to `a`, `b`, and `c`. For specific characters you can use their names directly, e.g. `alice-\u003ebob`.\n\n`a-\u003eb` means that `a` will be looking at `b`. The direction of the other characters will be determined by who is speaking. It *is* possible to cram four or more characters in a panel and have multiple groups chatting with one another.\n\nOrder matters. The characters will be placed in the order defined in the spec. This makes things a little hairy when you want to have one character monologuing, but Spittoon tries to figure it out.\n\n`(happy/exlaiming)` picks the `happy` face and `exclaiming` pose from the artwork directory. You can specify exact faces and poses or you can specify a set which is named in `config.yaml`, such as `positive` or `negative`. You can specify just a face with `(facename)` and just the pose with `(/posename)`.\n\nTo create a new panel, simply re-use a character name. Since the same character can't appear twice in the same panel, this is the signal that a new panel is necessary.\n\nNarration is possible, meaning you can include a rectangular chat balloon which isn't pointing toward anyone. Unfortunately, it still needs to be attached to a character:\n\n    robin* back at the bat cave...\n    batman: are those steaks ready yet?\n\nSee the spec in `examples/spec` for another example.\n\nCustomization\n-------------\n\nThe basic idea of Spittoon was to write a minimal chat script (ideally being able to paste from IRC with few modifications) and have a comic be generated with random variations. It's supposed to be mostly hands-off.\n\nThere are a lot of options in `examples/config.yaml`. They're mostly self-obvious.\n\nPanel layouts, however, are hard-coded. How many panels you get in the strip is determined by the chat script -- more panels are added when a text balloon can't fit in a single strip. A 3-panel strip is always rendered vertically.\n\nWant better fonts? A great source for free and commercial comic fonts is [Blambot Comic Fonts](http://www.blambot.com/fonts_dialogue.shtml). A lot of comic fonts are dual-weight -- lowercase text produces normal-weight letters and uppercase text produces bold letters.\n\nDevelopment\n-----------\n\nI am not actively using or maintaining Spittoon, but I welcome your patches. Fork at your leisure.\n","funding_links":[],"categories":["Ruby"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstatico%2Fspittoon","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstatico%2Fspittoon","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstatico%2Fspittoon/lists"}