{"id":13592061,"url":"https://github.com/sgreben/yeetgif","last_synced_at":"2025-04-05T12:09:04.966Z","repository":{"id":45725724,"uuid":"151709018","full_name":"sgreben/yeetgif","owner":"sgreben","description":"gif effects CLI. single binary, no dependencies. linux, osx, windows. #1 workplace productivity booster. #yeetgif #eggplant #golang","archived":false,"fork":false,"pushed_at":"2023-03-06T22:38:06.000Z","size":46571,"stargazers_count":558,"open_issues_count":3,"forks_count":27,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-03-29T11:11:39.613Z","etag":null,"topics":["cli","discord","effects","eggplant","emoji","fried","gif","golang","graphics","hue","maymays","optimize","roll","shake","slack","tint","wobble","woke","yeet","zoom"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sgreben.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2018-10-05T11:10:53.000Z","updated_at":"2025-02-13T09:13:21.000Z","dependencies_parsed_at":"2024-01-14T04:38:06.174Z","dependency_job_id":"377fe538-e987-4730-b06d-7c0787294e57","html_url":"https://github.com/sgreben/yeetgif","commit_stats":{"total_commits":77,"total_committers":2,"mean_commits":38.5,"dds":"0.038961038961038974","last_synced_commit":"5d2067b9832898c2b1ac51bf6a5f107619038270"},"previous_names":[],"tags_count":37,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sgreben%2Fyeetgif","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sgreben%2Fyeetgif/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sgreben%2Fyeetgif/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sgreben%2Fyeetgif/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sgreben","download_url":"https://codeload.github.com/sgreben/yeetgif/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247332612,"owners_count":20921853,"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":["cli","discord","effects","eggplant","emoji","fried","gif","golang","graphics","hue","maymays","optimize","roll","shake","slack","tint","wobble","woke","yeet","zoom"],"created_at":"2024-08-01T16:01:05.357Z","updated_at":"2025-04-05T12:09:04.946Z","avatar_url":"https://github.com/sgreben.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"# yeetgif\n\nComposable GIF effects CLI, with reasonable defaults. Made for custom Slack/Discord emoji :)\n\n![terminal](doc/terminal.gif)\n\n- [Get it](#get-it)\n    - [Alternative 1: `go get`](#alternative-1-go-get)\n    - [Alternative 2: just download the binary](#alternative-2-just-download-the-binary)\n    - [Alternative 3: docker](#alternative-3-docker)\n- [Use it](#use-it)\n- [Hall of Fame](#hall-of-fame)\n- [Usage](#usage)\n    - [Conventions \u0026 tips](#conventions--tips)\n    - [roll](#roll)\n    - [wobble](#wobble)\n    - [pulse](#pulse)\n    - [zoom](#zoom)\n    - [shake](#shake)\n    - [woke](#woke)\n    - [fried](#fried)\n    - [hue](#hue)\n    - [tint](#tint)\n    - [resize](#resize)\n    - [crop](#crop)\n    - [optimize](#optimize)\n    - [compose](#compose)\n    - [crowd](#crowd)\n    - [erase](#erase)\n    - [chop](#chop)\n    - [text](#text)\n    - [emoji](#emoji)\n    - [rain](#rain)\n    - [cat](#cat)\n    - [meta](#meta)\n- [Licensing](#licensing)\n\n## Get it\n\n### Alternative 1: `go get`\n\n```sh\ngo get -u github.com/sgreben/yeetgif/cmd/gif\n```\n\n### Alternative 2: just download the binary\n\nEither from [the releases page](https://github.com/sgreben/yeetgif/releases/latest), or from the shell:\n\n```sh\n# Linux\ncurl -L https://github.com/sgreben/yeetgif/releases/download/1.23.6/gif_1.23.6_linux_x86_64.tar.gz | tar xz\n\n# OS X\ncurl -L https://github.com/sgreben/yeetgif/releases/download/1.23.6/gif_1.23.6_osx_x86_64.tar.gz | tar xz\n\n# Windows\ncurl -LO https://github.com/sgreben/yeetgif/releases/download/1.23.6/gif_1.23.6_windows_x86_64.zip\nunzip gif_1.23.6_windows_x86_64.zip\n```\n\n**NOTE**: To use the `optimize` command, you'll also need the [`giflossy`](https://github.com/kornelski/giflossy) fork of `gifsicle` installed:\n\n```sh\nbrew install giflossy\n```\n\nYou'll likely also want to have the binary in your `$PATH`. You can achieve this by adding this to your .bashrc (or .zshrc, ...):\n\n```sh\nexport PATH=\u003cdirectory-containing-the-gif-binary\u003e:$PATH\n```\n\n### Alternative 3: docker\n\n```sh\ndocker pull quay.io/sergey_grebenshchikov/yeetgif\ndocker tag quay.io/sergey_grebenshchikov/yeetgif gif # (optional)\n```\n\n## Use it\n\n```sh\n\u003cdoc/yeet.png gif fried | gif wobble  \u003edoc/yeet.gif\n```\n![before](doc/yeet.png)\n![after](doc/yeet.gif)\n\n\n```sh\ngif emoji aubergine | gif wobble \u003edoc/eggplant_wobble.gif\n```\n![before](doc/eggplant.png)\n![after](doc/eggplant_wobble.gif)\n\n## Hall of Fame\n\nPost a GIF made using yeetgif with either the\n\n- [`#yeetgif` Twitter hashtag](https://twitter.com/hashtag/yeetgif?f=tweets)\n- and/or the [`#yeetgif` Giphy hashtag](https://giphy.com/search/yeetgif-stickers)\n- and/or the [`#yeetgif` Imgur hashtag](https://imgur.com/t/yeetgif)\n\n~~Best~~ Most utterly demented ones end up below!\n\n\u003e No entries yet. Be the first :)\n\n## Usage\n\n```text\n\nUsage: gif [OPTIONS] COMMAND [arg...]\n\n                     \nOptions:             \n  -n                 Duplicate a single input image this many times (default 30)\n  -q, --quiet        Disable all log output (stderr)\n  -p, --pad          Pad images (default true)\n      --write-meta   Write command line options into output GIF metadata (default true)\n  -r, --raw          Raw (lossless, *not* GIF) image output, for re-piping to yeetgif\n  -d, --delay-ms     Frame delay in milliseconds (default [25])\n                     \nCommands:            \n  roll               (☭ ͜ʖ ☭)\n  wobble             🍆( ͡° ͜ʖ ͡°)🍆\n  pulse              ( ͡◉ ͜ʖ ͡◉)\n  zoom               (⌐▀͡ ̯ʖ▀)\n  shake              ˵(˵ ͡⚆ ͜ʖ ͡⚆˵)˵\n  woke               💯  W O K E F L A R E S ( ͡ 🅱️ ͜ʖ ͡ 🅱️ ) 💯\n  fried              fr͍͈i̗̟̲̻e͕̗d̬ m̷͔͊e̶̪̿m̷̙̈́é̵̤s̷̺͒\n  hue                ( ͡☆ ͜ʖ ͡☆)\n  tint               🎨༼ຈل͜ຈ༽\n  resize             (° ͜ʖ°)¯\\_( ͡☉ ͜ʖ ͡☉)_/¯\n  crop               ┬┴┬┴┤ ͜ʖ ͡°)\n  optimize           👌( ͡ᵔ ͜ʖ ͡ᵔ )👌\n  compose            (ﾉ ͡° ͜ʖ ͡°)ﾉ*:･ﾟ✧\n  crowd              (⟃ ͜ʖ ⟄) ͜ʖ ͡°)( ° ͜ʖ( ° ͜ʖ °)\n  erase              ( ͡° ͜ʖ ͡°)=ε/̵͇̿̿/'̿̿ ̿ ̿ ̿ ̿ ̿\n  chop               ✂️( ͡°Ĺ̯ ͡° )🔪\n  text               🅰️乁(˵ ͡☉ ͜ʖ ͡☉˵)┌🅱️\n  emoji              ╰( ͡° ͜ʖ ͡° )つ──☆*🤔\n  rain               。°。°( ͡° ͜ʖ ͡ °)°。°。°\n  scan               ( ͡ ⿳ ͜ʖ ͡ ⿳ )\n  noise              ·͙*̩̩͙˚̩̥̩̥( ͡▓▒ ͜ʖ ͡█░ )*̩̩͙:͙\n  cat                /ᐠ｡ꞈ｡ᐟ\\\n  meta               (🧠 ͡ಠ ʖ̯ ͡ಠ)┌\n                     \nRun 'gif COMMAND --help' for more information on a command.\n```\n\n### Conventions \u0026 tips\n\n- To find out how a given example was made, try running `gif meta show` on it (e.g. `\u003cyeet.gif gif meta show -p` will print the shell pipe of gif effects used to create `yeet.gif`).\n- Use the `--raw` (`-r`) option for intermediate pipe steps -- this is faster than re-encoding as GIF every time. Also it's lossless.\n- Options with bracketed default values (e.g. `--noise` of [`fried`](#fried)) can take comma-separated values - the points will be spread over the animation length, with intermediate values linearly interpolated.\n- To figure out what a parameter does, try out some values around its default value, as well as much larger/smaller ones.\n- To reduce GIF size, try specifying a smaller number of duplicates for static images (e.g. `gif -n 20`), `gif optimize`, and dropping frames `gif chop drop every \u003cN\u003e`.\n\n### roll\n\n![before](doc/eggplant.png)![after](doc/roll.gif)\n\n```text\n\nUsage: gif roll [OPTIONS]\n\n(☭ ͜ʖ ☭)\n                      \nOptions:              \n  -r, --revolutions   (default 1)\n  -s, --scale         (default 1)\n  -p, --phase         (default 0)\n  -c, --crop-scale    (default 1)\n```\n\n### wobble\n\n![before](doc/eggplant.png)![after](doc/wobble.gif)\n\n```text\n\nUsage: gif wobble [OPTIONS] [CUSTOM]\n\n🍆( ͡° ͜ʖ ͡°)🍆\n                    \nArguments:          \n  CUSTOM            comma-separated angles (°), e.g. 0,10,0,60,0 (default [])\n                    \nOptions:            \n  -f, --frequency   (default 1)\n  -a, --amplitude   (default 20)\n  -p, --phase       (default 0)\n  -t, --type        one of [sine snap saw sticky] (default sine)\n      --custom      (deprecated) (default [])\n```\n\n### pulse\n\n![before](doc/eggplant.png)![after](doc/pulse.gif)\n\n```text\n\nUsage: gif pulse [OPTIONS] [ZOOM_LEVELS_CSV]\n\n( ͡◉ ͜ʖ ͡◉)\n                    \nArguments:          \n  ZOOM_LEVELS_CSV   (default [])\n                    \nOptions:            \n  -0, --from        (default 0.9)\n  -1, --to          (default 1)\n  -f, --frequency   (default 1)\n  -p, --phase       (default 0)\n```\n\n### zoom\n\n![before](doc/eggplant.png)![after](doc/zoom.gif)\n\n```text\n\nUsage: gif zoom [OPTIONS] [ZOOM_LEVELS_CSV]\n\n(⌐▀͡ ̯ʖ▀)\n                    \nArguments:          \n  ZOOM_LEVELS_CSV   e.g. 1.0,1.5 to zoom from 100% to 150% (default [])\n```\n\n### shake\n\n![before](doc/eggplant.png)![after](doc/shake.gif)\n\n```text\n\nUsage: gif shake [OPTIONS]\n\n˵(˵ ͡⚆ ͜ʖ ͡⚆˵)˵\n                    \nOptions:            \n  -f, --frequency   (default [1])\n  -a, --amplitude   (default [7])\n  -r, --random      🌀 (default [0.75])\n```\n\n### woke\n\n![before](doc/yeet.png)![after](doc/woke.gif)\n\n```text\n\nUsage: gif woke [OPTIONS] POINTS\n\n💯  W O K E F L A R E S ( ͡ 🅱️ ͜ʖ ͡ 🅱️ ) 💯\n                          \nArguments:                \n  POINTS                  flare locations, JSON, e.g. \"[[123,456],[-100,23]]\" (default \u0026[])\n                          \nOptions:                  \n  -c, --clip              clip flares to image alpha (default true)\n  -t, --type              (default full)\n  -s, --scale             (default 0.9)\n  -u, --hue               (default 0.8)\n  -l, --lightness         (default 1)\n  -a, --alpha             (default 0.8)\n  -p, --alpha-pow         (default 2)\n      --alpha-threshold   (default 0.15)\n  -r, --random            🌀 (default 0.5)\n```\n\n### fried\n\n![before](doc/yeet.png)![after](doc/fried.gif)\n\n```text\n\nUsage: gif fried [OPTIONS]\n\nfr͍͈i̗̟̲̻e͕̗d̬ m̷͔͊e̶̪̿m̷̙̈́é̵̤s̷̺͒\n                     \nOptions:             \n      --clip         (default true)\n  -w, --walk         🌀 (default 10)\n  -i, --iterations   (default 1)\n  -a                 🅰️ (default [0.33])\n  -b                 🅱️ (default [0.2])\n  -c                 🆑 (default [0.9])\n  -n, --noise        🌀️ (default [1])\n      --noise1       🌀️ (default [0.02])\n      --noise2       🌀️ (default [0.5])\n      --noise3       🌀 (default [0.1])\n  -j, --jpeg         [0,100] (default [84])\n  -u, --saturation   (default [3])\n  -o, --contrast     (default [6])\n  -t, --tint         tint (default [0.4])\n```\n\n### hue\n\n![before](doc/eggplant.png)![after](doc/hue.gif)\n\n```text\n\nUsage: gif hue [OPTIONS] [HUE_OFFSETS_CSV]\n\n( ͡☆ ͜ʖ ͡☆)\n                    \nArguments:          \n  HUE_OFFSETS_CSV   (default [])\n                    \nOptions:            \n  -f, --frequency   (default 1)\n  -a, --amplitude   (default 0.1)\n  -x                (default [1])\n  -y                (default [1])\n  -m, --mode        one of [mul add sub pow sin] (default add)\n```\n\n### tint\n\n![before](doc/eggplant.png)![after](doc/tint.gif)\n\n```text\n\nUsage: gif tint [OPTIONS] [TINT_HUE_CSV]\n\n🎨༼ຈل͜ຈ༽\n                    \nArguments:          \n  TINT_HUE_CSV      (default [])\n                    \nOptions:            \n  -f, --frequency   (default 1)\n  -a, --amplitude   (default 0.95)\n  -x                (default [1])\n  -y                (default [1])\n  -m, --mode        one of [mul add sub pow sin] (default add)\n  -c, --center      (default 0.8608454902138696)\n```\n\n### resize\n\n```text\n\nUsage: gif resize [OPTIONS]\n\n(° ͜ʖ°)¯\\_( ͡☉ ͜ʖ ͡☉)_/¯\n                 \nOptions:         \n  -s, --scale    (default 1)\n  -x, --width    width (pixels) (default 0)\n  -y, --height   height (pixels) (default 0)\n```\n\n### crop\n\n```text\n\nUsage: gif crop [OPTIONS]\n\n┬┴┬┴┤ ͜ʖ ͡°)\n                    \nOptions:            \n  -t, --threshold   (default 0)\n```\n\n### optimize\n\n```text\n\nUsage: gif optimize [OPTIONS]\n\n👌( ͡ᵔ ͜ʖ ͡ᵔ )👌\n                    \nOptions:            \n      --kb          target file size (KB) (default 128)\n  -n, --no-resize   don't resize the image\n  -x, --width       target width (pixels) (default 0)\n  -y, --height      target height (pixels) (default 0)\n```\n\n### compose\n\n![before](doc/yeet.png)![before](doc/eggplant.png)![after](doc/compose.gif)\n\n```text\n\nUsage: gif compose [OPTIONS] INPUT\n\n(ﾉ ͡° ͜ʖ ͡°)ﾉ*:･ﾟ✧\n                   \nArguments:         \n  INPUT            \n                   \nOptions:           \n  -x               (default [0])\n  -y               (default [0])\n  -z, --z-order    one of [under over] (default over)\n  -p, --position   one of [center left right top bottom abs] (default center)\n  -s, --scale      (default [1])\n```\n\n### crowd\n\n![before](doc/wobble.gif)![after](doc/crowd.gif)\n\n```text\n\nUsage: gif crowd [OPTIONS]\n\n(⟃ ͜ʖ ⟄) ͜ʖ ͡°)( ° ͜ʖ( ° ͜ʖ °)\n                 \nOptions:         \n  -n             crowd size (default 3)\n      --flip     🌀 flip (default true)\n  -x             🌀 x (default 0.5)\n  -y             🌀 y (default 0.25)\n  -s, --scale    🌀 [0.0,1.0] (default 0.25)\n  -r, --rotate   🌀 [0.0,1.0] (default 0.1)\n  -a, --alpha    🌀 [0.0,1.0] (default 0)\n  -o, --offset   🌀 [0.0,1.0] (default 1)\n```\n\n### erase\n\n![before](doc/skeledance.gif)![after](doc/erase.gif)\n\n```text\n\nUsage: gif erase [OPTIONS]\n\n( ͡° ͜ʖ ͡°)=ε/̵͇̿̿/'̿̿ ̿ ̿ ̿ ̿ ̿\n                    \nOptions:            \n  -x, --sample-x    (default 3)\n  -y, --sample-y    (default 3)\n  -t, --tolerance   (default 0.2)\n  -u                (default 1)\n  -s                (default 0.5)\n  -l                (default 1)\n```\n\n### chop\n\n```text\n\nUsage: gif chop COMMAND [arg...]\n\n✂️( ͡°Ĺ̯ ͡° )🔪\n                   \nCommands:          \n  shuffle          \n  dup, duplicate   \n  drop             \n  rev, reverse     \n                   \nRun 'gif chop COMMAND --help' for more information on a command.\n```\n\n### text\n\n![before](doc/gunther.jpg)![after](doc/gunther.gif)\n\u003e woke | text | fried\n\n```text\n\nUsage: gif text [OPTIONS] [TEXT]\n\n🅰️乁(˵ ͡☉ ͜ʖ ͡☉˵)┌🅱️\n                             \nArguments:                   \n  TEXT                       (default \"#yeetgif\")\n                             \nOptions:                     \n  -a, --background-alpha     (default 0.7)\n  -s, --font-size            (default 18.5)\n  -y, --text-y               (default 0.3)\n  -p, --background-padding   (default 3)\n```\n\n### emoji\n\n![example](doc/emoji-terminal.gif)\n\u003e emoji | compose \u003c(emoji) | compose \u003c(emoji) | wobble | fried\n\n```text\n\nUsage: gif emoji [OPTIONS] EMOJI...\n\n╰( ͡° ͜ʖ ͡° )つ──☆*🤔\n                     \nArguments:           \n  EMOJI              one or more glob expressions\n                     \nOptions:             \n  -e, --exact        match the query exactly\n  -p, --pipe         overlay the emoji over input images (instead of just creating one)\n  -l, --list-only    just list matches\n  -s, --size         (default [128])\n  -a, --pipe-alpha   (default [1])\n```\n\n### rain\n\n![example](doc/rain.gif)\n\n\u003e emoji | rain\n\n![example](doc/rain-thonk.gif)\n\n\u003e emoji | roll | rain \u003c(emoji) \u003c(emoji)\n\n![example](doc/rain-scream.gif)\n\n\u003e emoji | pulse | rain \u003c(emoji) | compose | fried\n\n```text\n\nUsage: gif rain [OPTIONS] [INPUT...] [OPTIONS]\n\n。°。°( ͡° ͜ʖ ͡ °)°。°。°\n                                   \nArguments:                         \n  INPUT                            \n                                   \nOptions:                           \n  -d, --density                    (default 0.75)\n  -b, --bounciness                 (default [0.3])\n  -g, --gravity                    (default 900)\n  -s, --size                       (default 400)\n  -a, --bounds-alpha-threshold     (default 0.0625)\n  -v, --initial-linear-velocity    (default 300)\n  -l, --animation-length-factor    (default 1)\n  -x, --static-x                   (default 0.5)\n  -y, --static-y                   (default 0.5)\n      --wrap-max-overlap           (default 48)\n      --wrap-max-overlap-frames    (default 24)\n      --initial-angular-velocity   (default 2)\n      --bounds-points              (default 16)\n```\n\n### cat\n\n```text\n\nUsage: gif cat [INPUT...]\n\n/ᐠ｡ꞈ｡ᐟ\\\n               \nArguments:     \n  INPUT        \u003cfilename\u003e\n```\n\n### meta\n\n\n![input](doc/yeet.gif)\n```sh\n$ \u003cdoc/yeet.gif gif meta show\n\n[2018-10-05T13:08:57+02:00] gif fried\n[2018-10-05T13:08:58+02:00] gif wobble\n[2018-10-05T13:08:58+02:00] gif crop\n[2018-10-05T13:08:58+02:00] gif optimize -x 0\n\n$ \u003cdoc/yeet.gif gif meta show -p\n\ngif fried | gif wobble | gif crop | gif optimize -x 0\n\n$ \u003cdoc/yeet.gif gif meta show --raw\n\n{\"appName\":\"gif\",\"timestamp\":\"2018-10-05T13:08:57+02:00\",\"args\":[\"fried\"],\"version\":\"1.0.0-244bcd73467a0979cb872f0e90ba8a69d4764410\"}\n{\"appName\":\"gif\",\"timestamp\":\"2018-10-05T13:08:58+02:00\",\"args\":[\"wobble\"],\"version\":\"1.0.0-244bcd73467a0979cb872f0e90ba8a69d4764410\"}\n{\"appName\":\"gif\",\"timestamp\":\"2018-10-05T13:08:58+02:00\",\"args\":[\"crop\"],\"version\":\"1.0.0-244bcd73467a0979cb872f0e90ba8a69d4764410\"}\n{\"appName\":\"gif\",\"timestamp\":\"2018-10-05T13:08:58+02:00\",\"args\":[\"optimize\",\"-x\",\"0\"],\"version\":\"1.0.0-244bcd73467a0979cb872f0e90ba8a69d4764410\"}\n```\n\n```text\n\nUsage: gif meta COMMAND [arg...]\n\n(🧠 ͡ಠ ʖ̯ ͡ಠ)┌\n               \nCommands:      \n  show         show 🧠\n  add          add 🧠\n  clear        remove 🧠\n               \nRun 'gif meta COMMAND --help' for more information on a command.\n```\n\n## Licensing\n\n- `yeetgif` itself \u0026 any original code: [MIT License](LICENSE)\n- [Modified copy](pkg/imaging) of `github.com/disintegration/imaging`: [MIT License](pkg/imaging/LICENSE)\n- [Modified copy](pkg/ggtext) of `github.com/fogleman/gg`: [MIT License](pkg/ggtext/LICENSE.md)\n- [Roboto Regular TrueType Font](pkg/gifstatic/roboto.go): [Apache License 2.0](pkg/gifstatic/roboto.go-LICENSE)\n- [Twemoji](pkg/gifstatic/emoji_twitter.go) by [Twitter](https://twemoji.twitter.com): [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/)\n- [Modified portion](pkg/box2d) of `github.com/ByteArena/box2d` by [ByteArena (Go port)](github.com/ByteArena/box2d)/[Erin Catto (C++ original)](http://www.box2d.org): [MIT License](pkg/box2d/LICENSE.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsgreben%2Fyeetgif","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsgreben%2Fyeetgif","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsgreben%2Fyeetgif/lists"}