AddThisFeature

AI Image Captioning

Describe images so they can carry a visible caption and be found by search.

moderate AI Content

What it adds

A generated description stored per image, offered as a draft caption and indexed for search.

What your agent is told to do

5
  1. 1

    Store the generated description in its own field and decide explicitly whether each surface shows it, indexes it, or both. Do not write it into the alt attribute, which belongs to AI Image Alt Text and answers a different question.

  2. 2

    Offer the description as a draft caption the user can accept or rewrite, and leave any caption a human already wrote untouched unless they explicitly ask for a replacement.

  3. 3

    Index the description alongside the image's existing metadata so images become findable by what is in them, and reuse the app's existing search infrastructure rather than adding a parallel one.

  4. 4

    Have the model report what it could not determine, and render uncertainty plainly in the draft. A description that hedges is useful; one that confidently names the wrong object poisons search results.

  5. 5

    Run generation through the app's existing background-job system with a per-image and per-account cost ceiling, and make it resumable so a large library can be processed across multiple runs.

Edge cases it handles

8
  • A caption and an alt attribute are different artifacts. A caption adds context a sighted viewer cannot infer; alt text substitutes for the image entirely. Storing one in the other's field degrades both.
  • Real people must not be named or identified from an image alone. Allow a description of what a person is doing without asserting who they are, and do not infer relationships or affiliations.
  • Uncertain objects and unreadable text must be flagged as uncertain rather than resolved into a confident guess, and the draft must show that flag to the reviewer.
  • A user-written caption is authoritative. Regeneration must not replace it, and a bulk pass must skip images that already have human text.
  • Unsupported formats, images too small to describe, corrupt files, and images the account has marked private must be skipped cleanly with a recorded reason, not retried forever.
  • Decide before shipping whether images may be sent to the provider at all for a given account, and honour a workspace setting that forbids it rather than exempting the feature.
  • A refused, timed-out, or truncated response must leave the image with no description and a retryable status, and the surrounding page must render normally without one.
  • Regenerating descriptions across a library must not multiply cost invisibly; show the estimated volume and require confirmation before a bulk run starts.

Definition of done

9
  • Generated descriptions are stored in a dedicated field, separate from alt text.
  • Drafts are offered for approval and existing human captions are never overwritten.
  • Descriptions are indexed and images become findable by their content through the app's existing search.
  • Uncertain objects and unreadable text are marked as uncertain rather than guessed.
  • Real people are not identified by name from an image alone.
  • Unsupported, corrupt, or excluded images are skipped with a recorded reason and no retry loop.
  • Bulk generation runs in the background under a stated cost ceiling and is resumable.
  • The feature matches the existing design system.
  • No existing functionality is broken.

Related features

How it works

  1. 1

    Copy the link

    Grab the Markdown instruction URL for this feature.

  2. 2

    Give it to your AI

    Paste it into Claude Code, Cursor, v0, Lovable — whatever you build with.

  3. 3

    It inspects, then implements

    Your agent reads your existing app first, then adds the feature to fit it.

Works with your stack

These instructions are written to adapt. They tell the agent to detect your framework, match your existing design system, and reuse what you already have — rather than assuming a particular stack.

Need it tighter than that? Customize the feature and tell it exactly what you're running.