Get the overall mood of a video's comment section in one call — positive/neutral/negative percentages, a plain-English summary, the recurring themes people bring up, and a representative quote per side. No NLP pipeline to build, host, or tune: send the same video URL you'd send for a transcript, add one field.
"What do people think of this video" is a question every creator, brand-monitoring tool, and research pipeline asks — and today the honest answer is DIY: scrape the comments yourself, wire up a sentiment classifier (or ship every comment to an LLM one at a time), aggregate the labels, and hope your prompt handles sarcasm and thread noise reasonably. The tooling that exists for this is either a raw comment-scraping library with no sentiment layer at all, or a thin listing on an API marketplace that just proxies a generic classifier per comment. FrameFetch does the whole rollup — fetch, read, aggregate — in one priced call.
Add "comment_sentiment" to fields on /v1/extract (or /v1/batch) and FrameFetch auto-includes "comments" as its input — fetched via yt-dlp's info-json pass on YouTube. One Groq chat-completion call (llama-3.3-70b-versatile, temperature 0, JSON mode) then reads up to 100 of the fetched comments (each truncated to 280 characters) and judges the comment section as a whole — not by scoring each comment individually and averaging.
curl -X POST https://framefetch.net/v1/extract \
-H "Authorization: Bearer <your-key>" \
-H "Content-Type: application/json" \
-d '{
"url": "https://www.youtube.com/watch?v=jNQXAC9IVRw",
"fields": ["comments", "comment_sentiment"],
"comments_cap": 50
}'"comments": { "items": [ { "text": "This made my day!", "author": "@zoofan", "like_count": 42, "reply_count": 2 } ], "total_fetched": 50, "cap_applied": 50, "sort": "top" }, "comment_sentiment": { "positive_pct": 78, "neutral_pct": 18, "negative_pct": 4, "summary": "Viewers overwhelmingly find the clip charming and nostalgic, with a few noting the low video quality.", "top_themes": ["nostalgia", "elephants", "video quality"], "representative": { "positive": "This made my day!" } }
This is the real response shape from FrameFetch's docs — comments.items only ever carries the display author handle, never a user id, profile URL, or avatar.
| Field | Shape | What it captures |
|---|---|---|
positive_pct / neutral_pct / negative_pct | integers | Sum to exactly 100 (renormalized server-side via largest-remainder rounding if the model's raw split is off by a point or two) |
summary | string | 2-3 plain-English sentences characterizing how the audience reacted overall |
top_themes | string[] | Up to 5 short recurring themes across the comments, most common first |
representative | { positive?, negative? } | One short exemplar comment per polarity, quoted from the actual input, when the model found a good one for that side |
No per-comment output: comment_sentiment is deliberately a rollup, not a labeled list of every comment — that keeps it a flat, predictable price regardless of how many comments were fetched, and keeps the answer skimmable instead of another wall of JSON.
Comment sentiment needs comments to read, and FrameFetch's one reliable public comment source today is YouTube (via yt-dlp's info-json comments pass). Reddit's own public comment source — the unauthenticated thread JSON API — worked the same way until Reddit deprecated unauthenticated access to it on 2026-05-28; every request now returns a hard 403 regardless of proxy or user-agent, so comments and comment_sentiment on Reddit now degrade the same way TikTok, Instagram, and Pinterest already did (they never had a reliable public comment source to begin with). All four are simply omitted with a warning, never billed. Check GET /v1/platforms (the comments capability flag) before requesting it, rather than finding out from a warning after the fact.
comment_sentiment requires at least 5 fetched comments to run at all — a comment section that thin isn't statistically meaningful to summarize, and letting the model guess anyway would just manufacture a false sense of confidence. Fewer than 5 (or the underlying comments fetch having failed) omits comment_sentiment with a warning in the response's warnings array, and it is not charged. A model or parse failure — unparseable JSON, a degenerate all-zero percentage split — degrades the same way.
Priced flat rather than per-comment, because the model reads a fixed batch (up to 100 comments) regardless of how many were actually fetched: $0.006 per call for comment_sentiment, on top of the $0.0045 comments call it rides on — $0.0105 total when both are actually produced in the same call. Both are billed independently and additively: requesting comment_sentiment alone still bills the underlying comments fetch it depends on. See the full rate card.
Treated exactly like digest and structured: best-effort, never a hard failure of the whole call. An unsupported platform, a fetch/parse failure on the underlying comments, fewer than 5 comments, or an unparseable model response all omit comment_sentiment, append a plain-English string to the top-level warnings array, and are not billed — the rest of the response (transcript, metadata, frames) stays intact. These degrade cases never surface as an HTTP error code, only as a warning string.
FrameFetch ships an MCP server at POST https://framefetch.net/mcp. The framefetch_extract tool takes the same fields: ["comments", "comment_sentiment"] plus a top-level comments_cap argument — identical behavior to the HTTP API, no separate tool. See the MCP setup guide for a working client config.
An aggregated read of how a video's audience feels overall, derived from its top-level comments: positive_pct/neutral_pct/negative_pct (summing to 100), a 2-3 sentence summary, up to 5 recurring top_themes, and one representative quote per polarity when a good one exists. Add comment_sentiment to fields; it auto-includes comments as its input.
YouTube only — the one platform FrameFetch has a reliable public comment source for. Reddit's unauthenticated comment API was deprecated by Reddit on 2026-05-28; TikTok, Instagram, and Pinterest never had a reliable public comment source. All four omit both comments and comment_sentiment with a warning, never a charge.
Yes — at least 5 fetched comments. Below that, a comment section is too thin to summarize meaningfully, so comment_sentiment is omitted with a warning and the call is not charged for it. This is a real floor, not a formality: a 2-comment thread would just make the LLM guess.
One Groq chat-completion call (llama-3.3-70b-versatile, temperature 0, JSON mode) reads up to 100 of the fetched comments (each truncated to 280 characters) and judges the comment section as a whole, not per-comment. The three percentages are renormalized server-side (largest-remainder rounding) so they always sum to exactly 100.
A flat $0.006 per call for comment_sentiment, on top of the $0.0045 comments call it rides on ($0.0105 total when both are actually produced) — charged only when the sentiment rollup is actually produced.
Yes — comments (which comment_sentiment auto-includes) returns up to comments_cap raw top-level comments with text, a display author handle, like_count, and reply_count. Request it directly if you want the list without the LLM rollup.