Scrolling Text GIF
Create animated scrolling text GIFs with custom fonts, colors, speed, and direction. Pure client-side GIF encoder, no uploads required.
About
Animated GIF banners with scrolling text remain one of the most compatible image formats across email clients, forums, and legacy web platforms. Unlike MP4 or WebP animations, GIF89a is universally rendered without JavaScript or video decoders. This tool constructs the binary GIF file entirely in your browser using the LZW compression algorithm specified in the GIF89a standard. No server upload occurs. Frame count is computed as (W + Tw) รท ฮด, where W is canvas width, Tw is rendered text width, and ฮด is the per-frame pixel shift. Choosing too small a ฮด inflates file size exponentially. A 400px wide banner at ฮด = 2px can produce over 300 frames.
The tool approximates smooth motion by adjusting the inter-frame delay. GIF frame timing has a minimum resolution of 10ms (100fps theoretical maximum), but most renderers clamp values below 20ms to ~100ms. This tool defaults to 50ms per frame for reliable playback. Note: anti-aliased text rendering against non-white backgrounds may introduce dithering artifacts due to the 256-color palette constraint of GIF.
Formulas
The total number of frames required for one complete scroll cycle depends on direction. For horizontal scrolling:
For vertical scrolling, replace W with canvas height H and Tw with total text block height Th.
The effective animation duration for one loop:
Where d is the inter-frame delay in milliseconds. Estimated file size scales with:
Where W = canvas width in pixels, H = canvas height in pixels, Tw = rendered text width measured via Canvas measureText, ฮด = pixel shift per frame (scroll speed), d = frame delay in ms, C = number of colors in the palette, S = approximate output size in bytes.
LZW compression encodes pixel index streams using variable-length codes starting at (log2(C) + 1) bits, growing up to 12 bits maximum per the GIF specification.
Reference Data
| Parameter | Recommended Range | Effect on File Size | Notes |
|---|---|---|---|
| Canvas Width | 200 - 600px | Linear | Wider = more frames for full scroll |
| Canvas Height | 30 - 120px | Linear | Match font size + padding |
| Font Size | 14 - 72px | Indirect (taller canvas) | Larger text needs taller canvas |
| Scroll Speed (ฮด) | 1 - 8px/frame | Inverse (fewer frames) | ฮด = 1 is smoothest but largest |
| Frame Delay | 30 - 100ms | None (metadata only) | Below 20ms is clamped by browsers |
| Color Depth | 2 - 256 colors | Logarithmic | Fewer colors = smaller LZW output |
| Text Length | 1 - 200 chars | Linear (more frames) | Longer text = wider rendered width |
| Direction: Left | - | - | Classic marquee style (most common) |
| Direction: Right | - | - | Reversed reading; used for RTL languages |
| Direction: Up | - | - | Credits-style vertical scroll |
| Direction: Down | - | - | Ticker-tape style |
| Loop Count | 0 (infinite) | None | GIF NETSCAPE extension; 0 = forever |
| Background: Solid | - | Best compression | Uniform pixels compress well with LZW |
| Anti-Aliasing | On by default | Increases palette usage | Canvas fillText applies subpixel AA |
| Max File Size (practical) | < 5MB | - | Most platforms reject larger GIFs |