Content OS

Reel Topic Derivation

Work out what each competitor reel is actually about - with a promo filter at every exit.

Vertical: Analytics · Status: ✅ Live Back to Analytics · workflows index


Trigger

Per competitor refresh.

Flow

caption
        |
stripPromoLines            <- "follow for more" describes the account, not the reel
        |
candidate topic: deterministic -> LLM -> hashtag
        |
isPromoTopic rejection at EVERY exit
        |
unresolved -> NO_TOPIC sentinel
        |
NO_TOPIC only -> one cover-frame vision retry (capped, SSRF-guarded)
        |
persist topic + summary

Why it is built this careful way

Three decisions worth not undoing:

  1. NO_TOPIC rather than a guess. An invented category is worse than an admitted gap.
  2. Vision retry only for unresolved reels, capped per refresh - it is a paid call at detail: high.
  3. Deliberately not the learning media pipeline, which downloads video and needs ffmpeg + Whisper - far too heavy per refresh.

The vision call also returns a 1-2 sentence summary that overwrites the deterministic one (which describes the caption's shape and reads as boilerplate). Both persist, so changing the prompt requires a refresh.

Agents involved

OpenAI vision for the retry path only.

Gaps

Topics stay read-only and are never selectable for generation - reels do not pass the compliance scan every news item gets.

Roadmap source

Page 3 - Competition Research — see roadmap_ref_extracted.md.

Source: roadmap/workflows/analytics/reel-topics/README.md