add or update alt text on your media
JavaScript 100%
CSS <1%
Shell <1%
HTML <1%

README.md

Altifier #

Scan your Bluesky posts for missing alt text and fix them with AI-generated descriptions.

Features #

  • Scan your posts: Enumerate all your Bluesky posts and replies, finding images that lack alt text
  • AI-powered alt text: Generates descriptive alt text using vision AI, following Section 508 guidelines
  • Review and edit: Preview generated alt text, edit inline, and approve before applying
  • Bluesky OAuth login: Authenticate securely with your Bluesky/ATProto account

What this does #

Altifier scans the image posts (app.bsky.feed.post records with app.bsky.embed.images) in your PDS, identifies images missing alt text, generates descriptions via AI, and lets you apply them by recreating your posts with alt text included.

Note: Recreating a post with alt text deletes the original and creates a new one. Likes, reposts, quotes, and replies on the original post are lost.

Development #

npm install
npm start

Build #

npm run build

The build/ directory contains the static site ready for deployment.

Deployment #

This app is a fully static React SPA and can be deployed to:

  • Wisp.place: wispctl deploy <handle> --path ./build --site altifier --spa
  • Tangled: Configure the repo's Sites settings with deploy directory /build
  • Any static host: Serve the build/ directory with SPA fallback to index.html

AI Setup #

Altifier uses Google Gemini 2.5 Flash (free tier) for alt text generation. Set your API key:

export REACT_APP_GEMINI_API_KEY=your_key_here
npm run build

Get a free API key at aistudio.google.com.

OAuth Configuration #

OAuth client metadata lives in:

  • src/contexts/AuthContext.js — clientMetadata object
  • public/client-metadata.json — served at /client-metadata.json

Both must match the deployed domain. Update them if you change domains.

License #

MIT