Add animated text to GIFs for meme creation. Track text labels on moving subjects with keyframe-based animation and smooth interpolation.
The only actively maintained desktop app for animated GIF text editing.
- Keyframe Animation - Position, size, opacity, rotation, and color all animatable per-frame with smooth ease-in-out interpolation
- OpenCV Motion Tracking - Generate forward keyframes from the selected layer position with CSRT/KCF when available and optical-flow fallback
- Bezier Path Animation - Draw a four-point path and generate editable position keyframes over a chosen frame span
- Motion Presets - Generate editable Bounce, Wiggle, and Shake emphasis keyframes
- Easing Curve Picker - Choose per-keyframe cubic Bezier timing curves for interpolation
- Staggered Text Reveal - Reveal lines, words, or letters over time for animated captions
- Subtitle Import - Import SRT/VTT captions as timed editable text layers
- Unicode Export Fallbacks - Non-Latin captions use broader Windows font fallbacks during export rendering
- Separate Stroke & Shadow Styling - Tune stroke opacity plus shadow color/opacity independently
- Responsive Long Jobs - GIF loading, tracking, and export run in cancellable background workers
- Structured Diagnostics - Load, project, recent-file, tracking, and export failures write timestamped logs and appear in the in-app Diagnostics panel
- On-Canvas Editing - Click to select text, drag to reposition, drag corner handle to resize
- Onion Skinning - Ghost previous frame to track moving subjects
- Multiple Text Layers - Color-coded with individual timing controls
- Layer Timeline - Visual bars with keyframe diamonds and playhead
- Range Tools - Apply, copy, paste, delete, and visibility-limit keyframes across selected frame ranges
- Fade In/Out - Per-layer entry and exit animations
- Meme Presets - Classic Meme, Modern Clean, Subtitle, Bold Impact, Neon
- Background Box - Semi-transparent subtitle-style background
- Undo/Redo - Full 50-level undo history (Ctrl+Z / Ctrl+Y)
- Project Save/Load - Resume work later with
.giftextproject files - Versioned Project Schema - Project loads validate schema, paths, frame ranges, colors, opacity, and keyframe fields before applying state
- Multi-Format Export - GIF, WebP (with alpha), PNG sequence
- Zoom & Pan - Ctrl+wheel to zoom, middle-click to pan
- Drag & Drop - Drop GIF files directly onto the canvas
- Playback Speed - 0.25x to 4x preview speed
- Recent Files - Quick access to previously opened GIFs
- Multi-Line Text - Full text area with line break support
python -m venv .venv
.venv\Scripts\python -m pip install -r requirements.txt
python GifText.pyDependencies:
- Python 3.10+
- PyQt6
- Pillow
- OpenCV
- NumPy
- Load your GIF (or drag & drop it)
- Add text layers - one per person/object
- Type names in the text panel
- Drag each name above its subject on frame 1
- Mousewheel on canvas to step forward ~10 frames
- Drag names to follow movement (keyframes auto-created)
- Use Track Forward to generate motion keyframes when the subject is easy to follow
- Use Draw Path when a label should follow a deliberate arc or swoop
- Import
.srtor.vttcaptions when you want timed subtitle layers - Use Bounce, Wiggle, or Shake to add emphasis over the selected span
- Repeat until the end - interpolation fills the gaps smoothly
- Export as GIF, WebP, or PNG sequence
| Action | Input |
|---|---|
| Step frames | Mousewheel on canvas |
| Zoom | Ctrl + Mousewheel |
| Pan | Middle-click drag |
| Select text | Click text on canvas |
| Move text | Drag text on canvas |
| Resize text | Drag bottom-right corner handle |
| Undo / Redo | Ctrl+Z / Ctrl+Y |
| Save project | Ctrl+S |
- Python / PyQt6 for the GUI
- Pillow for GIF I/O and export rendering
- OpenCV and NumPy for forward motion tracking
- Single-file app with dependencies listed in
requirements.txt
.venv\Scripts\python -m pip install -r requirements-build.txt
.venv\Scripts\pyinstaller --clean GifText.specThe executable is written to dist\GifText.exe.
Failures are shown in the status bar, written to the right-side Diagnostics panel, and appended to timestamped logs under %USERPROFILE%\.giftext\logs\. Project files are validated before loading so invalid .giftext files do not replace the current document.
MIT