GIF VALIDATOR
A Vencord userplugin that finds broken Discord favorite GIFs and removes them with a
confirmation step. It reads your favorites straight out of Discord's in-memory
FrecencyUserSettings proto store, validates each URL with a HEAD request from
Vencord's main process (so CORS doesn't block it), and saves changes by dispatching
Discord's own settings-update flux event.
Inspired by jakeayy/gif-validator, a Bun CLI that does the same job from outside Discord. The plugin avoids the CLI's self-bot territory entirely — no token handling, no impersonated Chrome headers, no manual protobuf encoding. Everything runs through your already-authenticated client.
↓ VIEW ON GITHUBHOW IT WORKS
- Reads favorites from Discord's in-memory FrecencyUserSettings store
- Validates URLs via main-process HEAD requests (CORS-free)
- Falls back to
GET Range: bytes=0-0on 405 responses - Re-numbers
order0..n-1 after deletion to keep favorites tidy - Saves via
USER_SETTINGS_PROTO_UPDATEwithpartial: true - Concurrency limiter capped at 8 to avoid Tenor / Discord rate limits
UI
- Validate button injected into the GIF picker subview header
- Toolbox action and settings-panel button as alternate entry points
- Three-state modal: idle, running with progress bar, done with checkbox list
- Broken GIFs pre-checked, valid ones inspectable via toggle
- Cancel mid-validation preserves whatever results landed so far
- Theme-aware text color via Discord's CSS variables (dark + light)
SETTINGS
concurrency(default 2): parallel HEAD requests, clamped to 8timeoutMs(default 8000): per-request timeoutrequireImageOrVideoContentType(default on): strict MIME checktreatRedirectsAsValid(default on): native bridge follows redirects
LIMITATIONS
- Tenor placeholders — some removed GIFs return 200 with a generic image
- Hosts with browser-fingerprint checks may report false-broken
-
Schema drift — if Discord renames
favoriteGifsthe plugin reports "couldn't read favorites"