{"id":385,"url":"https://github.com/davisonio/awesome-gif","last_synced_at":"2025-10-31T18:30:39.029Z","repository":{"id":38206408,"uuid":"79741499","full_name":"davisonio/awesome-gif","owner":"davisonio","description":"A curated list of awesome GIF resources.","archived":false,"fork":false,"pushed_at":"2023-03-14T05:16:38.000Z","size":183,"stargazers_count":585,"open_issues_count":2,"forks_count":47,"subscribers_count":12,"default_branch":"master","last_synced_at":"2024-05-21T13:16:08.333Z","etag":null,"topics":["awesome","awesome-list","gif"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"cc0-1.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/davisonio.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":"contributing.md","funding":null,"license":"license.txt","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":"2017-01-22T19:57:19.000Z","updated_at":"2024-05-21T03:24:52.000Z","dependencies_parsed_at":"2024-01-12T17:45:24.587Z","dependency_job_id":null,"html_url":"https://github.com/davisonio/awesome-gif","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/davisonio%2Fawesome-gif","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davisonio%2Fawesome-gif/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davisonio%2Fawesome-gif/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davisonio%2Fawesome-gif/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/davisonio","download_url":"https://codeload.github.com/davisonio/awesome-gif/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239223679,"owners_count":19602835,"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":["awesome","awesome-list","gif"],"created_at":"2024-01-05T20:12:53.467Z","updated_at":"2025-10-31T18:30:38.986Z","avatar_url":"https://github.com/davisonio.png","language":null,"funding_links":[],"categories":["Media","Technical","Others","Uncategorized","Live Site:   [searchAwesome](https://search-awesome.vercel.app/)","多媒体","Other Lists","媒体","Themed Directories"],"sub_categories":["awesome-*","Uncategorized","TeX Lists","Updated this month"],"readme":"# Awesome GIF [![Awesome](https://awesome.re/badge-flat.svg)](https://awesome.re)\n\n\u003e A curated list of awesome [GIF](https://en.wikipedia.org/wiki/GIF) resources.\n\nA list of tools, scripts, libraries, examples \u0026 other resources related to the Graphics Interchange Format (GIF).\n\n## Contents\n\n\u003c!--lint disable awesome-toc--\u003e\n- [General Tools](#general-tools)\n- [Utilities](#utilities)\n- [Libraries](#libraries)\n\t- [ActionScript](#actionscript)\n\t- [C++](#c)\n\t- [C#](#c-sharp)\n\t- [Haxe](#haxe)\n\t- [Java](#java)\n\t- [JavaScript](#javascript)\n\t- [PHP](#php)\n\t- [Objective-C](#objective-c)\n\t- [Swift](#swift)\n- [GUI](#gui)\n- [Hosting](#hosting)\n- [Online Tools](#online-tools)\n- [Community](#community)\n- [Scripts](#scripts)\n\t- [Frames to GIF](#frames-to-gif)\n\t- [GIF to frames](#gif-to-frames)\n\t- [High quality GIF](#high-quality-gif)\n\t- [Optimize GIF](#optimize-gif)\n\t- [Lossy GIF Compressor](#lossy-gif-compressor)\n\t- [Making GIF from video](#making-gif-from-video)\n\t- [Cinemagraphs](#cinemagraphs)\n\t- [Perfect loop](#perfect-loop)\n\t- [YouTube video to GIF](#youtube-video-to-gif)\n\t- [Grabbing each frame of an HTML5 canvas](#grabbing-each-frame-of-an-html5-canvas)\n- [Miscellaneous](#miscellaneous)\n\n## General Tools\n\n- [FFmpeg](https://www.ffmpeg.org)\n- [ImageMagick](http://www.imagemagick.org/script/index.php)\n- [GraphicsMagick](http://www.graphicsmagick.org/) - GraphicsMagick is usually faster than ImageMagick.\n- [MoviePy](https://zulko.github.io/moviepy/) - Python module for video editing.\n\n## Utilities\n\n- [Gifgen](https://github.com/lukechilds/gifgen) - Simple high quality GIF encoding.\n- [Gifify](https://github.com/jclem/gifify) - Convert screen recording into GIF.\n- [Gifs](https://github.com/jglovier/gifs) - Storage place for GIFs.\n- [Gifshot](https://github.com/yahoo/gifshot) - Create animated GIFs from media by Yahoo. ([demo](http://yahoo.github.io/gifshot/))\n- [Gifsockets](https://github.com/videlalvaro/gifsockets) - Real Time communication library using Animated GIFs as a transport.\n- [X-gif](https://github.com/geelen/x-gif) - A web component for flexible GIF playback.\n- [GifW00t](https://github.com/yaronn/GifW00t) - JavaScript web recorder.\n- [gif-machine](https://github.com/lelandbatey/gif-machine) - GIF creation from YouTube videos.\n- [gifstreaming](https://github.com/jbochi/gifstreaming) - Live video streaming server.\n- [Screengif](https://github.com/dergachev/screengif) - Create animated GIF screencasts.\n- [vnc-over-gif](https://github.com/sidorares/vnc-over-gif) - Serves screen updates as animated GIF over http.\n- [gifdeck](https://github.com/jaipandya/gifdeck) - Convert your SlideShares into animated GIFs.\n- [Gifbot](https://github.com/schuyler/gifbot) - GIF search for Slack.\n- [Gif-camera](https://github.com/FuzzyWobble/GIF-Camera) - Create animated GIFs using webcam.\n- [Gifline](https://github.com/zehfernandes/gifline) - Chrome extension to put GIFs in your emails.\n- [Gifdrop](https://github.com/markjaquith/gifdrop) - Create a repository for your collection of GIF images.\n- [Gh-gif](https://github.com/node-gh/gh-gif) - NodeGH plugin for commenting on pull requests/issues using GIF reactions.\n- [Tty2gif](https://github.com/z24/tty2gif) - Record scripts and their outputs into both binary and GIF formats.\n- [Giftoppr](https://github.com/desktoppr/giftoppr) - Sync your favourite GIFs with Dropbox.\n- [Gifit](https://github.com/Fauntleroy/GIFit) - Chrome extension to make a GIF from a YouTube video.\n- [Ccapture.js](https://github.com/spite/ccapture.js) - Capture animations created with HTML5 canvas.\n- [Kap](https://getkap.co/) - Beautiful open-source app to capture your screen and export to GIF.\n- [Gifit (the other one)](https://github.com/rotblauer/gifit) - Get a search resulting giphy GIF in markdown in stdout, ala `$ gifit kittens`.\n- [gifski](https://github.com/ImageOptim/gifski) - High-quality GIF encoder based on libimagequant.\n- [Gifcurry](https://github.com/lettier/gifcurry) - Open-source, Haskell-built editor for GIF makers.\n\n## Libraries\n\n### ActionScript\n\n- [Flash Animated GIF Library](https://github.com/theturtle32/Flash-Animated-GIF-Library) - AS3 library for playing Animated GIFs in Flash.\n\n### C++\n\n- [Node-gif](https://github.com/pkrumins/node-gif) - C++ library to make GIF.\n- [Gif-h](https://github.com/charlietangora/gif-h) - C++ one-header library for the creation of animated GIFs.\n- [msf_gif](https://github.com/notnullnotvoid/msf_gif) - C/C++ single-header library for creating animated GIFs.\n\n\u003ch3 id=\"c-sharp\"\u003eC#\u003c/h2\u003e\n\n- [dot-screencap](https://github.com/Speiser/dot-screencap) - A simple libary to record your screen and save it as animated GIF.\n- [WpfAnimatedGif](https://github.com/XamlAnimatedGif/WpfAnimatedGif) - A simple library to display animated GIF images in WPF.\n- [XamlAnimatedGif](https://github.com/XamlAnimatedGif/XamlAnimatedGif) - A simple library to display animated GIF images in XAML apps (WPF, WinRT, Windows Phone).\n- [AnimatedGif](https://github.com/mrousavy/AnimatedGif) - A high performance .NET library for reading and creating animated GIFs.\n\n### Haxe\n\n- [Gif](https://github.com/snowkit/gif) - Haxe GIF encoder.\n\n### Java\n\n- [Android-gif-drawable](https://github.com/koral--/android-gif-drawable) - Views and Drawable for displaying animated GIFs on Android.\n- [gifanimateddrawable](https://github.com/Hipmob/gifanimateddrawable) - Use an animated GIF as an Android Drawable.\n- [GifView](https://github.com/RoiSoleil/GifView) - Android library to deal with GIF.\n- [Gif Movie View](https://github.com/sbakhtiarov/gif-movie-view) - Android View widget for displaying GIF animations.\n- [GifImageView](https://github.com/felipecsl/GifImageView) - Android ImageView that handles animated GIF images.\n- [Gif-animation](https://github.com/extrapixel/gif-animation) - Processing library to play and export GIF.\n- [Android-gif-encoder](https://github.com/nbadal/android-gif-encoder) - Animated GIF encoder for Android.\n- [GIFDroid](https://github.com/curtislarson/GIFDroid) - Android video to GIF converter.\n- [Android-GifStitch](https://github.com/CaptPhunkosis/Android-GifStitch) - Create and share animated GIFs.\n\n### JavaScript\n\n- [Gif.js](https://github.com/jnordberg/gif.js) - Create GIF from the DOM.\n- [Omggif](https://github.com/deanm/omggif) - GIF 89a encoder and decoder.\n- [Animated_GIF](https://github.com/sole/Animated_GIF) - JavaScript library for creating animated GIFs.\n- [Gifffer](https://github.com/krasimir/gifffer) - JavaScript library that prevents the autoplaying of the animated GIFs.\n- [Gifplayer](https://github.com/rubentd/gifplayer) - JQuery plugin to play and stop animated GIFs.\n- [Jsgif](https://github.com/shachaf/jsgif) - JavaScript GIF parser and player.\n- [node-gify](https://github.com/tj/node-gify) - JavaScript convert videos to GIFs using ffmpeg and gifsicle.\n- [Gifencoder](https://github.com/eugeneware/gifencoder) - Server side animated GIF generation for Node.js.\n- [Gif-video](https://github.com/hughsk/gif-video) - JavaScript Convert a GIF image into an HTML5-ready video.\n- [Gif-player](https://github.com/apankrat/gif-player) - On-demand GIF loader/player in JavaScript.\n- [GifgifLab-face](https://github.com/Viral-MediaLab/gifgifLab-face) - Facial-emotion detectors.\n- [node-youtube](https://github.com/javascipt/node-youtube) - YouTube to snapshots and GIFs.\n\n### PHP\n\n- [GifCreator](https://github.com/Sybio/GifCreator) - PHP class that creates animated GIF from multiple images.\n- [Spacer.gif](https://github.com/msng/spacer.gif) - PHP script offering spacer.gif 1x1.\n- [GifFrameExtractor](https://github.com/Sybio/GifFrameExtractor) - PHP class that separates all the frames of an animated GIF.\n\n### Objective-C\n\n- [UIimage from GIF](https://github.com/mayoff/uiimage-from-animated-gif) - UIImage category that loads animated GIFs.\n- [GIFRefreshControl](https://github.com/cyndibaby905/GIFRefreshControl) - \"Twitter music\" and \"Yahoo! Weather\" like pull-to-refresh control.\n- [UIImageView-PlayGIF](https://github.com/yfme/UIImageView-PlayGIF) - UIImageView category/subclass for playing GIF.\n- [FLAnimatedImage](https://github.com/Flipboard/FLAnimatedImage) - GIF engine for iOS by FlipBoard.\n- [Animated-GIF-iPhone](https://github.com/arturogutierrez/Animated-GIF-iPhone) - Support for Animated GIF on iOS.\n- [UzysAnimatedGifPullToRefresh](https://github.com/uzysjung/UzysAnimatedGifPullToRefresh) - PullToRefresh using animated GIF to any scrollView.\n- [SvGifView](https://github.com/smileEvday/SvGifView) - iOS load and display GIF.\n- [GifHUD](https://github.com/cemolcay/GiFHUD) - iOS progress hud for displaying only animated GIF images.\n- [Video-Background GIF](https://github.com/ElvinJin/Video-Background-GIF) - iOS Video Background GIF.\n- [AnimatedGifExample](https://github.com/kasatani/AnimatedGifExample) - iOS animated and transparent GIFs.\n\n### Swift\n\n- [SwiftyGif](https://github.com/kirualex/SwiftyGif) - High performance \u0026 easy to use Gif engine.\n- [Gifu](https://github.com/kaishin/gifu) - Animated GIF support for iOS in Swift.\n\n## GUI\n\n- [Glyph](http://www.glyph.video/) - Tool for generating seamlessly looping GIFs and cinemagraphs from videos.\n- [Qgifer](https://sourceforge.net/projects/qgifer/)\n- [GifPro](https://github.com/unixpickle/GifPro) - GIF encoder for Mac.\n\n## Hosting\n\n- [Gfycat](https://gfycat.com) - Maximum GIF/video length: 15 seconds.  Maximum file upload is 300Mb.\n- [Imgur](https://imgur.com) - Maximum file upload is 50MB.\n\n## Online Tools\n\n- [Vid2gif](https://imgur.com/vidgif) - Video to GIF by imgur.\n- [EzGif](https://ezgif.com/) - Online GIF maker and image editor.\n- [Giflr](https://giflr.com/) - A web app for making or remixing animated GIFs.\n\n## Community\n\n- [Giphy.com](https://giphy.com)\n- [/r/educationalgifs](https://www.reddit.com/r/educationalgifs/)\n\n## Scripts\n\n### Frames to GIF\n\nFFmpeg\n```bash\nffmpeg -f image2 -i image%d.jpg animated.gif\n```\n\nImagemagick\n```bash\nconvert   -delay 20   -loop 0   frames*.png   animated.gif\n```\nBash script (```frames2gif.sh```) for GraphicsMagick, ImageMagick, FFmpeg\n```bash\n#!/bin/bash\nif [ $# -ne 5 ]; then\n    echo \"please provide the moviename and directory where to store the frames\"\n    echo \"./frames2gif.sh [directory] [movie.mp4] [filename.gif] [gm|im|ffmpeg] [png|jpg]\"\n    exit 1\nfi\n    if [ \"png\" == \"$5\" ]; then\n        suffix=\"png\"\n    else\n        suffix=\"jpg\"\n    fi\n\n    CONVERT=$(which convert)\n    GM=$(which gm)\n    FFMPEG=$(which ffmpeg)\n    FFPROBE=$(which ffprobe)\n    FPS=$($FFPROBE -show_streams -select_streams v -i \"$2\"  2\u003e/dev/null | grep \"r_frame_rate\" | cut -d'=' -f2 | cut -d'/' -f1)\n    echo \"FPS: ${FPS}\"\nif [ \"im\" == \"$4\" ]; then # use imagemagick\n    FPS=$(echo \"1 / ${FPS} * 100\" |bc -l)\n    $CONVERT \"$1/*.${suffix}\"  -delay ${FPS} -loop 0 \"$3\"\nelif [ \"gm\" == \"$4\" ]; then # use graphicsmagick\n    FPS=$(echo \"1 / ${FPS} * 100\" |bc -l)\n    $GM convert \"$1/*.${suffix}\"  -delay ${FPS} -loop 0 \"$3\"\nelse # use crappy gif-algorithm from ffmpeg\n    $FFMPEG -f image2 -framerate ${FPS} -i \"$1/%08d.${suffix}\" \"$3\"\nfi\n```\nFrom [DeepDreamVideo](https://github.com/graphific/DeepDreamVideo), [source](https://github.com/graphific/DeepDreamVideo/blob/master/frames2gif.sh)\n\n\n### GIF to frames\n\n```bash\nffmpeg -i video.mpg image%d.jpg\n```\n```bash\nconvert -coalesce animated.gif image%05d.png\n```\n\n### High quality GIF\n\nwith ffmpeg / based on this [article](http://blog.pkh.me/p/21-high-quality-gif-with-ffmpeg.html)\n\n- Generate a palette :\n\n```bash\n#!/bin/sh\nstart_time=30\nduration=3\nffmpeg -y -ss $start_time -t $duration -i input.avi \\\n-vf fps=10,scale=320:-1:flags=lanczos,palettegen palette.png\n```\n- Output the GIF using the palette :\n\n```bash\n#!/bin/sh\nstart_time=30\nduration=3\nffmpeg -ss $start_time -t $duration -i input.avi -i palette.png -filter_complex \\\n\"fps=10,scale=320:-1:flags=lanczos[x];[x][1:v]paletteuse\" output.gif\n```\n\n### Optimize GIF\n\n```\nconvert -layers Optimize output.gif output_optimized.gif\n```\n\n### Lossy GIF Compressor\n\n```bash\n./gifsicle -O3 --lossy=80 -o lossy-compressed.gif input.gif\n\n```\n[Lossy Gif](https://kornel.ski/lossygif)\n\n\n### Making GIF from video\n\n```python\nfrom moviepy.editor import *\n\nclip = (VideoFileClip(\"input.avi\")\n        .subclip((4,00.00),(5,00.00))\n        .resize(0.3))\nclip.write_gif(\"output.gif\")\n\n```\n\u003c!--lint ignore double-link--\u003e\n[article](http://zulko.github.io/blog/2014/01/23/making-animated-gifs-from-video-files-with-python/#converting-a-video-excerpt-into-a-gif)\n\n### Cinemagraphs\n\nFreezing a region\n\n```python\nfrom moviepy.editor import *\n\nclip = (VideoFileClip(\"input.avi\")\n        .subclip((4,00.00),(5,00.00))\n        .resize(0.3)\n        .fx(vfx.freeze_region, outside_region=(170, 230, 380, 320)))\nclip.write_gif(\"output.gif\", fps=15)\n```\n\u003c!--lint ignore double-link--\u003e\n[article](http://zulko.github.io/blog/2014/01/23/making-animated-gifs-from-video-files-with-python/#freezing-a-region)\n\n```bash\nffmpeg \\\n-ss ${starttime} -t ${duration} -i ${vidfile}                         `# body of loop` \\\n-ss TODO ${starttime} MINUS ${duration} -t ${fadetime} -i ${vidfile}  `# lead-in for crossfade` \\\n-loop 1 -i ${stillfile}                                               `# masked still image` \\\n-filter_complex \"\n  [0:v]setpts=PTS-STARTPTS[vid];                                      `# speed adjustment - not needed here, so noop`\n  color=white,scale=3840x2160,fade=in:st=0:d=${fadetime}[alpha];      `# crossfade alpha, double length ahead of speed change`\n  [1:v][alpha]alphamerge[am];                                         `# apply alpha to lead-in`\n  [am]setpts=PTS+(${duration}-${fadetime})/TB[layer2];                  `# speed adjustment and offset for lead-in`\n  [vid][layer2]overlay[oo];                                           `# overlay for crossfade`\n  [oo][2:v]overlay=shortest=1[out1];                                  `# overlay still image`\n  [out1]crop=w=${cropfactor}*iw:h=${cropfactor}*ih:y=${yoffset}*ih,scale=${outputwidth}:-1, `# crop and scale`\n  eq=gamma=${gamma}:contrast=${contrast}:saturation=${saturation},unsharp                   `# final adjustments`\n\" -an output.mp4\n```\n\n### Perfect Loop\n\n```python\nimport moviepy.editor as mp\nfrom moviepy.video.tools.cuts import FramesMatches\n\nclip = mp.VideoFileClip(\"input.avi\").resize(0.3)\nscenes = FramesMatches.from_clip(clip, 10, 3)\n\nselected_scenes = scenes.select_scenes(2, 1, 4, 0.5)\nselected_scenes.write_gifs(clip.resize(width=450), \"./outputs_directory\")\n\n```\n[article](http://zulko.github.io/blog/2015/02/01/extracting-perfectly-looping-gifs-from-videos-with-python-and-moviepy/)\n\n### YouTube video to GIF\n\n- Download it via youtube-dl and then convert it.\n\n```\nyoutube-dl https://www.youtube.com/watch?v=V2XpsaLqXc8\n```\n\n[Youtube-dl](https://rg3.github.io/youtube-dl/)\n\n### Grabbing each frame of an HTML5 Canvas\n\nUsing [PhantomJS](https://phantomjs.org).\n\nExample with this [canvas](http://www.effectgames.com/demos/canvascycle/?sound=0).\n\n```javascript\nvar webPage = require('webpage');\nvar fs = require('fs');\nvar page = webPage.create();\n\nvar NB_FRAME = 100;\nvar current = 0;\n\npage.open('http://www.effectgames.com/demos/canvascycle/?sound=0',\nfunction(status) {\n  if (status === \"success\") {\n      var current = 0;\n      var grabber = setInterval(function () {\n          var frame = page.evaluate(function() {\n           return document.getElementById('mycanvas').toDataURL(\"image/png\").split(\",\")[1];\n          });\n          fs.write(\"./frame-\" + current + \".png\",atob(frame), 'wb');\n      if (++current === NB_FRAME) {\n         window.clearInterval(grabber);\n         phantom.exit(0);\n      }\n    }, 1000);\n  }\n});\n```\n\n## Miscellaneous\n\n- [Why is the GIF I created so slow?](https://superuser.com/questions/569924/why-is-the-gif-i-created-so-slow/569967) - Using ImageMagick to solve problems concerning GIF speed.\n\n## Use\n\nThe best ways to use this list are:\n\n- By browing the [contents](#contents).\n- By using \u003ckbd\u003ecommand\u003c/kbd\u003e + \u003ckbd\u003eF\u003c/kbd\u003e to search the contents\n\n## Credits\n\nBy [Craig Davison](https://davison.io) and contributors.\n\nBased on a [recovered list](https://github.com/sindresorhus/awesome/issues/872) by [Ismail Baaj](https://ismailbaaj.fr).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdavisonio%2Fawesome-gif","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdavisonio%2Fawesome-gif","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdavisonio%2Fawesome-gif/lists"}