# gif

Published articles for gif.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Pure Codename One Text Editing Without Native Overlays

DevFeed: [Pure Codename One Text Editing Without Native Overlays](<https://devfeed.tech/articles/pure-codename-one-text-editing-without-native-overlays-19552.md>)

Original publisher: [Read original article](<https://www.codenameone.com/blog/text-input-without-native-overlay/>)

Author: Shai Almog

Published: 2026-07-27T00:00:00Z

Content type: article

Language: en

Sources: [CodeName One](<https://devfeed.tech/sources/codename-one.md>)

Topics: [ui](<https://devfeed.tech/topics/ui.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [component](<https://devfeed.tech/tags/component.md>), [formatting](<https://devfeed.tech/tags/formatting.md>), [gif](<https://devfeed.tech/tags/gif.md>), [image](<https://devfeed.tech/tags/image.md>), [jpeg](<https://devfeed.tech/tags/jpeg.md>), [native](<https://devfeed.tech/tags/native.md>), [port](<https://devfeed.tech/tags/port.md>)

### AI overview

A new semantic port contract lets Codename One handle text painting, selection, rich editing, clipboard formats, and bidirectional layout while platform ports provide keyboard and input-method events. The opt-in path supports text composition, undo and redo, selection geometry, and multi-format clipboard content without a visible native field.

### Source excerpt

A semantic port contract lets Codename One own text painting, selection, rich editing, clipboard formats, and bidirectional layout while the platform supplies keyboard and IME operations.

## How to Add "Convert to GIF" to Thunar on Linux (XFCE)

DevFeed: [How to Add "Convert to GIF" to Thunar on Linux (XFCE)](<https://devfeed.tech/articles/how-to-add-convert-to-gif-to-thunar-on-linux-xfce-25163.md>)

Original publisher: [Read original article](<https://www.ivanmorgillo.com/2025/11/12/how-to-add-convert-to-gif-to-thunar-on-linux-xfce/>)

Author: Ivan Morgillo

Published: 2025-11-12T09:05:34Z

Content type: tutorial

Language: en

Sources: [Ivan Morgillo](<https://devfeed.tech/sources/ivan-morgillo.md>)

Topics: [FFmpeg (Fast Forward Moving Picture Experts Group)](<https://devfeed.tech/topics/ffmpeg.md>), [xfce](<https://devfeed.tech/topics/xfce.md>), [Linux](<https://devfeed.tech/topics/linux.md>), [Scripting, bash](<https://devfeed.tech/topics/scripting-bash.md>)

Tags: [custom-action](<https://devfeed.tech/tags/custom-action.md>), [ffmpeg](<https://devfeed.tech/tags/ffmpeg.md>), [gif](<https://devfeed.tech/tags/gif.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [linux](<https://devfeed.tech/tags/linux.md>), [script](<https://devfeed.tech/tags/script.md>), [shell](<https://devfeed.tech/tags/shell.md>), [shell-script](<https://devfeed.tech/tags/shell-script.md>), [thunar](<https://devfeed.tech/tags/thunar.md>), [video](<https://devfeed.tech/tags/video.md>), [xfce](<https://devfeed.tech/tags/xfce.md>)

### AI overview

A tutorial for adding a right-click Convert to GIF action to the Thunar file manager on Linux XFCE. It uses FFmpeg, Zenity, libnotify-bin, and a shell script to convert video files to GIFs.

### Source excerpt

Add a right-click Convert to GIF action to the Thunar file manager on Linux XFCE using FFmpeg and a shell script -- turn any video into a GIF in two clicks.

## A Cornucopia of Updates Make Discord on Desktop Fresher Than a Crisp Fall Breeze

DevFeed: [A Cornucopia of Updates Make Discord on Desktop Fresher Than a Crisp Fall Breeze](<https://devfeed.tech/articles/a-cornucopia-of-updates-make-discord-on-desktop-fresher-than-a-crisp-fall-breeze-192.md>)

Original publisher: [Read original article](<https://discord.com/blog/a-cornucopia-of-updates-make-discord-on-desktop-fresher-than-a-crisp-fall-breeze>)

Author: Clyde

Published: 2025-11-06T00:00:00Z

Content type: article

Language: en

Sources: [Discord Blog](<https://devfeed.tech/sources/discord-blog.md>)

Topics: [Discord](<https://devfeed.tech/topics/discord.md>), [Emoji](<https://devfeed.tech/topics/emoji.md>), [Image](<https://devfeed.tech/topics/image.md>), [servers](<https://devfeed.tech/topics/servers.md>)

Tags: [app](<https://devfeed.tech/tags/app.md>), [desktop](<https://devfeed.tech/tags/desktop.md>), [discord](<https://devfeed.tech/tags/discord.md>), [features](<https://devfeed.tech/tags/features.md>), [gif](<https://devfeed.tech/tags/gif.md>), [image](<https://devfeed.tech/tags/image.md>), [improvements](<https://devfeed.tech/tags/improvements.md>), [server](<https://devfeed.tech/tags/server.md>), [servers](<https://devfeed.tech/tags/servers.md>), [updates](<https://devfeed.tech/tags/updates.md>)

### AI overview

Discord's desktop updates include faster emoji creation with in-chat cropping, rotation, previews, naming, and server selection. The article also highlights a redesigned Settings page, easier Group DM customization, expanded game integrations, and Family Center improvements.

### Source excerpt

This fall, emoji making gets faster, the Settings page gets a redesign, Group DMs are easier to customize, more games gain support for special Discord-powered capabilities, and Family Center gets some expanded features. Take a peek at what's new this season!

## Enhancing Myntra App performance: Transitioning from GIFs to Videos

DevFeed: [Enhancing Myntra App performance: Transitioning from GIFs to Videos](<https://devfeed.tech/articles/enhancing-myntra-app-performance-transitioning-from-gifs-to-videos-20135.md>)

Original publisher: [Read original article](<https://medium.com/myntra-engineering/enhancing-myntra-app-performance-transitioning-from-gifs-to-videos-2aa275a29c34?source=rss----7484818e9f88---4>)

Author: Kartik Sharma

Published: 2025-08-30T07:00:01Z

Content type: article

Language: en

Sources: [Myntra](<https://devfeed.tech/sources/myntra.md>)

Topics: [App](<https://devfeed.tech/topics/app.md>), [image animation](<https://devfeed.tech/topics/image-animation.md>), [Mobile](<https://devfeed.tech/topics/mobile.md>), [Playback](<https://devfeed.tech/topics/playback.md>), [Android](<https://devfeed.tech/topics/android.md>), [iOS](<https://devfeed.tech/topics/ios.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [app](<https://devfeed.tech/tags/app.md>), [gif](<https://devfeed.tech/tags/gif.md>), [h-264](<https://devfeed.tech/tags/h-264.md>), [ios](<https://devfeed.tech/tags/ios.md>), [mobile-app-performance](<https://devfeed.tech/tags/mobile-app-performance.md>), [performance](<https://devfeed.tech/tags/performance.md>), [videos](<https://devfeed.tech/tags/videos.md>)

### AI overview

Myntra describes transitioning animated content in its Android and iOS apps from GIFs to video formats. The article attributes the change to GIFs' high memory usage, lower visual quality, large file sizes, and resulting performance and loading concerns, while comparing alternatives including WebP, APNG, and H.264/HLS video.

### Source excerpt

Introduction In the fast-paced world of e-commerce, every millisecond and every pixel counts. At Myntra, where visual content drives discovery and engagement, we embarked on a critical mission: to revolutionise how animations are delivered in our Android and iOS apps. This journey led us to transition from the ubiquitous GIF format to more efficient video formats, unlocking significant performance gains and a superior user experience. Background on GIFs The Graphics Interchange Format (GIF) has been a widely-used format for looping animations since its introduction in 1987. Its simplicity and broad compatibility made it a go-to choice in mobile apps. However, despite its ubiquity, GIFs come with several drawbacks that can negatively impact app performance and user experience. Challenges with GIFs in Myntra App At Myntra, we used GIFs extensively for animations in our home and brand page's widgets. Our existing Image components provided easy GIF playback. However, GIFs came with some serious drawbacks in native mobile environments: High Memory Usage: GIFs often lead to Out of Memory (OOM) errors, especially on low-end devices. Low Quality: Limited frame rates and poor bitmap quality degraded the visual experience. Large File Sizes: GIF assets were large, increasing network load and loading times. To mitigate these issues temporarily, we implemented several workarounds. These included optimising GIF assets and imposing restrictions on the file size of GIFs during the ingestion process. However, these were interim solutions and the move to an alternate was necessary for a more permanent and effective fix. Exploring Alternatives Before settling on a solution, we explored several alternatives to GIFs: WebP: This format offers better compression and quality than GIFs. It has broad web support and is native on Android, but is only supported natively on iOS versions 14 and above. APNG (Animated PNG): APNG provides excellent image quality and strong web browser support. Howe

## Easy way to upload, transform and deliver files and images (Sponsored)

DevFeed: [Easy way to upload, transform and deliver files and images (Sponsored)](<https://devfeed.tech/articles/easy-way-to-upload-transform-and-deliver-files-and-images-sponsored-37480.md>)

Original publisher: [Read original article](<https://davidwalsh.name/easy-way-to-upload-transform-and-deliver-files-and-images>)

Author: David Walsh

Published: 2025-03-24T22:58:30Z

Content type: article

Language: en

Sources: [David Walsh](<https://devfeed.tech/sources/david-walsh.md>)

Topics: [file](<https://devfeed.tech/topics/file.md>), [Image](<https://devfeed.tech/topics/image.md>), [Developer experience](<https://devfeed.tech/topics/developer-experience.md>), [Back end](<https://devfeed.tech/topics/backend.md>), [Python](<https://devfeed.tech/topics/python.md>)

Tags: [ascii](<https://devfeed.tech/tags/ascii.md>), [back-end](<https://devfeed.tech/tags/back-end.md>), [conversion](<https://devfeed.tech/tags/conversion.md>), [documentation](<https://devfeed.tech/tags/documentation.md>), [files](<https://devfeed.tech/tags/files.md>), [gif](<https://devfeed.tech/tags/gif.md>), [images](<https://devfeed.tech/tags/images.md>), [python](<https://devfeed.tech/tags/python.md>), [qr-code](<https://devfeed.tech/tags/qr-code.md>), [sponsored](<https://devfeed.tech/tags/sponsored.md>), [uncategorized](<https://devfeed.tech/tags/uncategorized.md>)

### AI overview

This sponsored developer article presents Filestack as a service for uploading, transforming, and delivering files and images. It describes a file-uploading interface, integrations with services such as Google Drive, Dropbox, GitHub, Facebook, and Instagram, a Python library for back-end uploads, documentation, and transformations for images, videos, and documents.

### Source excerpt

Managing media is a really difficult task if you try to do all of it yourself, especially if the media comes from other sources. The file can be submitted in any state and size, but what if you need something really specific? You can code it all yourself or you can use an awesome service [...] The post Easy way to upload, transform and deliver files and images (Sponsored) appeared first on David Walsh Blog.

## Haskell: Game Programming with GIF Streams

DevFeed: [Haskell: Game Programming with GIF Streams](<https://devfeed.tech/articles/haskell-game-programming-with-gif-streams-30819.md>)

Original publisher: [Read original article](<https://hookrace.net/blog/haskell-game-programming-with-gif-streams/>)

Published: 2023-09-06T22:00:00Z

Content type: tutorial

Language: en

Sources: [Dennis Felsing](<https://devfeed.tech/sources/dennis-felsing.md>)

Topics: [Haskell](<https://devfeed.tech/topics/haskell.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [Code](<https://devfeed.tech/topics/code.md>), [image animation](<https://devfeed.tech/topics/image-animation.md>), [HTTP](<https://devfeed.tech/topics/http.md>), [browser](<https://devfeed.tech/topics/browser.md>)

Tags: [animation](<https://devfeed.tech/tags/animation.md>), [browser](<https://devfeed.tech/tags/browser.md>), [gif](<https://devfeed.tech/tags/gif.md>), [haskell](<https://devfeed.tech/tags/haskell.md>), [http](<https://devfeed.tech/tags/http.md>), [programming](<https://devfeed.tech/tags/programming.md>)

### AI overview

A tutorial for implementing the Snake game in Haskell using the gifstream framework. The game generates animated GIF frames through an HTTP server, displays them in a browser, and accepts WASD input from the terminal.

### Source excerpt

Note: This is translated from the German original, which was used as a homework for the Programming Paradigms course at Karlsruhe Institute of Technology a long long time ago when I was co-holding the practical courses. Snake is a computer game in which a snake has to be moved through a playing field. Eating food increases the snake's length. When the snake collides with a wall or itself the game ends. In this homework you will implement Snake in Haskell. For this you will require the framework from the gifstream repository. The output of the game happens in an animated GIF stream, which you can watch in your browser. 64 colors are supported, which can be respresented as Int tuples of (0,0,0) up to (3,3,3). type RGB = (Int,Int,Int) A single frame of a GIF is defined as a list of rows, wherein each row is a list of RGB values. type Frame = [[RGB]] The framework provides a \texttt{server} function, which runs an HTTP server on the supplied port. The server sends each client a new frame of the GIF animation at the set interval. In the passed logic function new frames will be generated dynamically. server :: PortNumber -> Int -> Logic -> IO () The Snake.hs file contains the basis for writing the Snake game. Compile the game and run it (You'll need to install the network and random Haskell packages too): $ ghc -O3 -threaded Snake.hs [1 of 2] Compiling GifStream ( GifStream.hs, GifStream.o ) [2 of 2] Compiling Main ( Snake.hs, Snake.o ) Linking Snake ... $ ./Snake Listening on http://127.0.0.1:5002/ Open the supplied address in a browser. By pressing the WASD keys in the terminal you can influence the GIF in your browser. Other participants in your network can watch the GIF stream as well, by using your network IP address instead of 127.0.0.1. Furthermore it is possible to record the GIF stream and watch it later: wget -O game.gif http://127.0.0.1:5002/ The most important function in Snake.hs is logic: logic wait getInput sendFrame = initialState >>= go where go (State ol

## Improving color quantization heuristics

DevFeed: [Improving color quantization heuristics](<https://devfeed.tech/articles/improving-color-quantization-heuristics-26113.md>)

Original publisher: [Read original article](<http://blog.pkh.me/p/39-improving-color-quantization-heuristics.html>)

Published: 2022-12-31T12:00:43Z

Content type: article

Language: en

Sources: [The Last Static Blog RSS](<https://devfeed.tech/sources/the-last-static-blog-rss.md>)

Topics: [quantization](<https://devfeed.tech/topics/quantization.md>), [color](<https://devfeed.tech/topics/color.md>), [Algorithm](<https://devfeed.tech/topics/algorithm.md>), [FFmpeg (Fast Forward Moving Picture Experts Group)](<https://devfeed.tech/topics/ffmpeg.md>), [Compression](<https://devfeed.tech/topics/compression.md>), [image animation](<https://devfeed.tech/topics/image-animation.md>)

Tags: [algorithm](<https://devfeed.tech/tags/algorithm.md>), [article](<https://devfeed.tech/tags/article.md>), [blog](<https://devfeed.tech/tags/blog.md>), [color](<https://devfeed.tech/tags/color.md>), [compression](<https://devfeed.tech/tags/compression.md>), [ffmpeg](<https://devfeed.tech/tags/ffmpeg.md>), [gif](<https://devfeed.tech/tags/gif.md>), [math](<https://devfeed.tech/tags/math.md>), [prog](<https://devfeed.tech/tags/prog.md>), [quantization](<https://devfeed.tech/tags/quantization.md>)

### AI overview

The article examines improvements to color quantization heuristics, including evaluating color distances in a perceptually uniform color space such as OkLab instead of using Euclidean distance between RGB values. It explains palette quantization as reducing an image's colors to a smaller representative subset, with applications including compression, limited-palette codecs such as GIF, and artistic effects.

### Source excerpt

In 2015, I wrote an article about how the palette color quantization was improved in FFmpeg in order to make nice animated GIF files. For some reason, to this day this is one of my most popular article. As time passed, my experience with colors grew and I ended up being quite ashamed and frustrated with the state of these filters. A lot of the code was naive (when not terribly wrong), despite the apparent good results. One of the major change I wanted to do was to evaluate the color distances using a perceptually uniform color space, instead of using a naive euclidean distance of RGB triplets. As usual it felt like a week-end long project; after all, all I have to do is change the distance function to work in a different space, right? Well, if you're following my blog you might have noticed I've add numerous adventures that stacked up on each others: I had to work out the colorspace with integer arithmetic first ...which forced me to look into integer division more deeply ...which confronted me to all sort of undefined behaviours in the process And when I finally reached the point where I could make the switch to OkLab (the perceptual colorspace), a few experiments showed that the flavor of the core algorithm I was using might contain some fundamental flaws, or at least was not implementing optimal heuristics. So here we go again, quickly enough I find myself starting a new research study in the pursuit of understanding how to put pixels on the screen. This write-up is the story of yet another self-inflicted struggle. Palette quantization But what is palette quantization? It essentially refers to the process of reducing the number of available colors of an image down to a smaller subset. In sRGB, an image can have up to 16.7 million colors. In practice though it's generally much less, to the surprise of no one. Still, it's not rare to have a few hundreds of thousands different colors in a single picture. Our goal is to reduce that to something like 256 colors that r

## time.gif

DevFeed: [time.gif](<https://devfeed.tech/articles/time-gif-30840.md>)

Original publisher: [Read original article](<https://hookrace.net/blog/time.gif/>)

Published: 2017-08-10T22:00:00Z

Content type: article

Language: en

Sources: [Dennis Felsing](<https://devfeed.tech/sources/dennis-felsing.md>)

Topics: [Haskell](<https://devfeed.tech/topics/haskell.md>), [Code](<https://devfeed.tech/topics/code.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [HTTP](<https://devfeed.tech/topics/http.md>), [IO](<https://devfeed.tech/topics/io.md>)

Tags: [2017](<https://devfeed.tech/tags/2017.md>), [browsers](<https://devfeed.tech/tags/browsers.md>), [cpu](<https://devfeed.tech/tags/cpu.md>), [encoding](<https://devfeed.tech/tags/encoding.md>), [gif](<https://devfeed.tech/tags/gif.md>), [haskell](<https://devfeed.tech/tags/haskell.md>), [http](<https://devfeed.tech/tags/http.md>), [programming](<https://devfeed.tech/tags/programming.md>), [server](<https://devfeed.tech/tags/server.md>)

### AI overview

time.gif is an endless GIF that displays the current UTC time. Written in Haskell, it generates each frame dynamically and streams the frames over an HTTP connection. The article notes Safari compatibility issues and describes optimizations for CPU use, connection capacity, and bandwidth.

### Source excerpt

This is an endless GIF that always shows the current time in UTC: Source Code (From reports it doesn't seem to work on Safari, other browsers should be fine.) time.gif is written in Haskell and works by dynamically generating each frame of the GIF and slowly feeding them over the HTTP connection. There is no guarantee that this GIF shows a reasonable time and this is just for fun anyway, so better don't build your next project based on the time from this GIF. If my server is overloaded, you can try compiling it yourself and run it locally. Update: Optimized, runs at less than 1% CPU with 500 simultaneous connections open, LZW encoding reduces bandwidth from 4 KB/s to 300 B/s. -- Wait for incoming connections and start delivering a GIF to them loop :: Int -> FrameSignal -> Socket -> IO () loop delay frameSignal sock = do (conn, _) <- accept sock forkIO $ body conn loop delay frameSignal sock where body c = do f <- receiveMSignal frameSignal sendAll c $ msg $ initialFrame (delay `div` 10000) f nextFrame c nextFrame c = do f <- receiveMSignal frameSignal sendAll c $ frame (delay `div` 10000) f nextFrame c msg content = B.intercalate "\r\n" [ "HTTP/1.0 200 OK" , "Server: gifstream/0.1" , "Content-Type: image/gif" , "Content-Transfer-Encoding: binary" , "Cache-Control: no-cache" , "Cache-Control: no-store" , "Cache-Control: no-transform" , "" , content ] This is cannibalized from gifstream, which lets you play snake and have people watch a GIF livestream. It was actually created as a Christmas exercise for students of the Programming Paradigms course at KIT. Discuss on Hacker News (2022-10-27) (previous thread from 2017-08-12)

## Animated Gif Support

DevFeed: [Animated Gif Support](<https://devfeed.tech/articles/animated-gif-support-19194.md>)

Original publisher: [Read original article](<https://www.codenameone.com/blog/animated-gif-support/>)

Author: Shai Almog

Published: 2017-08-07T00:00:00Z

Content type: article

Language: en

Sources: [CodeName One](<https://devfeed.tech/sources/codename-one.md>)

Topics: [image animation](<https://devfeed.tech/topics/image-animation.md>), [Library](<https://devfeed.tech/topics/library.md>), [Usability](<https://devfeed.tech/topics/usability.md>)

Tags: [animation](<https://devfeed.tech/tags/animation.md>), [battery](<https://devfeed.tech/tags/battery.md>), [blog](<https://devfeed.tech/tags/blog.md>), [blog-post](<https://devfeed.tech/tags/blog-post.md>), [display](<https://devfeed.tech/tags/display.md>), [gif](<https://devfeed.tech/tags/gif.md>), [image](<https://devfeed.tech/tags/image.md>), [library](<https://devfeed.tech/tags/library.md>), [memory](<https://devfeed.tech/tags/memory.md>), [post](<https://devfeed.tech/tags/post.md>), [usability](<https://devfeed.tech/tags/usability.md>)

### AI overview

This blog post announces animated GIF support in Codename One through a new cn1lib, explaining that GIFs can be used as plug-in images in places such as labels and background styles. It notes resource, memory, and battery costs, and describes limitations including incompatibility with native map markers.

### Source excerpt

So you know how you write a blog post just before you go on vacation, press publish and never check that it actually got published... Funny thing, that's exactly what I did and the blog post mentioning that I was on "vacation" for a couple of weeks never got published. Anyway, other people have been busy while I was "away" but I got a couple of things done too including animated gif support.

## PinchZoomTextView Library Released

DevFeed: [PinchZoomTextView Library Released](<https://devfeed.tech/articles/pinchzoomtextview-library-released-22827.md>)

Original publisher: [Read original article](<http://androidessence.com/pinchzoomtextview-library-released/>)

Author: Adam McNeilly

Published: 2016-11-27T00:00:00Z

Content type: release

Language: en

Sources: [Android Essence](<https://devfeed.tech/sources/android-essence.md>)

Topics: [Library](<https://devfeed.tech/topics/library.md>)

Tags: [gif](<https://devfeed.tech/tags/gif.md>), [library](<https://devfeed.tech/tags/library.md>), [override](<https://devfeed.tech/tags/override.md>), [screen](<https://devfeed.tech/tags/screen.md>), [view](<https://devfeed.tech/tags/view.md>), [zoom](<https://devfeed.tech/tags/zoom.md>)

### AI overview

The article announces a library that lets users pinch to zoom in and out of an Android TextView, changing its font size. It explains that the library overrides the view's onTouchEvent() method and directs readers to GitHub for more details.

### Source excerpt

I was recently asked if there was a way to increase/decrease the font size of a TextView by pinching on it, just as you can with many iamges. Well, it turns out that's quite possible! All you have to do is override the onTouchEvent() method of your view, which is exactly what I do in my latest library, which allows you to pinch your screen to zoom in and out of a TextView. Check out the sample gif below: