thumbnails

A tool for working with Adology thumbnails, which are still images representing items such as videos. It provides image links, helps inspect what appears in the frame, and supports placing those images in HTML, PDFs, and slides.

In plain words
What is it for?
Use it to retrieve thumbnails for selected Adology posts, analyze their visual content, and embed the images in generated documents.
Why use it?
It prevents visual citations from using broken images, video files, or invented placeholders. It also separates finding suitable items from retrieving their images.

Skill for Claude CodeCodex

Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

agentmods
npx agentmods add skills/adologyai/content-intelligence-plugin/thumbnails
Any agent
npx skills add adologyai/content-intelligence-plugin --skill thumbnails
Clone the repo
git clone --depth 1 https://github.com/adologyai/content-intelligence-plugin

Made for: Claude Code, Codex.

Per session 146 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 1,505 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 1 finding. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5 $0.00146 $0.01505
Opus 5 $0.00073 $0.00753
Sonnet 5 $0.00029 $0.00301
Haiku 4.5 $0.00015 $0.00151

Measured yesterday against content hash 164392c85f55, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade A, and why

thumbnails scanned grade A with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured yesterday.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Makes network callslowCapability

Not a fault in itself. Listed so you know the mod talks to something, and to what.

import base64, mimetypes, urllib.request
skills/thumbnails/SKILL.md · 128 lines

How it starts

The opening of the file, as written. The whole thing — 128 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Thumbnails

Every item Adology returns from analyze carries a thumbnail in its base set — a poster image, so a video item resolves to a still frame rather than a video file. Alongside it is url, the post's own permalink. Those two fields are the whole visual citation.

An item with no stored asset comes back with an empty thumbnail. That's a real state, not an error: drop the item, or swap it for the next candidate, rather than rendering a broken image or inventing a placeholder.

Getting thumbnail URLs

Thumbnails ride on analyze. Two shapes cover almost everything:

  • You already know which posts you wantanalyze({ projectId, itemIds: [...] }). The by-id deep dive returns each item's full creative read plus url and thumbnail. This is the hydration step after any ranking: rank with query_items (which carries lift multiples, isOutlier, and externalUrl), collect the itemId values, then hydrate them here for the images and creative fields.
  • You want a set that matches a descriptionanalyze({ projectId, query, distribution }) with distribution: 'top' for the highest-engagement items per feed, 'recent' for newest, or 'exhaustive' with sortBy for a deterministic ranked page you can page through.

Add mediaTypeFilter: 'image' or 'video' to keep the set to one media class — worth doing whenever the question is about the frame itself, since a video's poster and a still image are different creative artifacts even though both arrive as a thumbnail.

Reading what's in the frame

For visual and first-frame analysis, ask analyze for the fields that describe the image rather than the copy: visualDescription, visualConcept, productDisplayStyle, productionStyle, creativeExecution, and narrativeFormat. Pair those with mediaTypeFilter so you're comparing like with like.

To quantify a visual pattern instead of reading individual frames, pivot on the scope's visual label dimensions. Discover which dimensions exist first — list_labels({ projectId }), or get_table_data({ projectId, listDimensions: true }) — then pivot: get_table_data({ projectId, rows: ['<visual dimension>'], columns: 'focalVsRest', focalBrand, metrics: ['count','useRate','medianLikes'], mediaTypes: ['video'] }). Assumed dimension names produce empty tables, so always take them from the discovery call.

Read the full file on GitHub · 128 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. yesterday First seen · 128 lines · 146 tokens per session scan A 164392c85f55

Subscribe to this mod's changes

thumbnails is a skill published in the GitHub repository adologyai/content-intelligence-plugin (2 stars, last pushed 27d ago), licensed Apache-2.0. It adds 146 tokens to every session and 1,505 once invoked, about $0.0007 per session on Opus 5. A static security scan graded it A with 1 finding (makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.

Related

Other skills, from other repositories

systematic-debugging

Use when encountering any bug, test failure, or unexpected behavior, before proposing fixes.

obra/superpowers · 21 tokens

chat-pet-sprite-creation

Use when creating or changing VS Code chat pet sprite art, sprite sheets, state animations, eye treatments, Stable/Insiders variants, or pet transitions under src/vs/workbench/contrib/chat/browser/widget/media/chatPet.

microsoft/vscode · 53 tokens

cpu-profile-analysis

Analyze V8/Chrome CPU profiles (.cpuprofile) and DevTools trace files (Trace-.json). Use when: profiling performance, investigating slow functions, comparing code paths, finding bottlenecks, analyzing timeToRequest, understanding call trees from sampling profiler data, analyzing layout/paint/rendering, investigating…

microsoft/vscode · 71 tokens

babysit-pr

Babysit a GitHub pull request after creation by continuously polling review comments, CI checks/workflow runs, and mergeability state until the PR is merged/closed or user help is required. Diagnose failures, retry likely flaky failures up to 3 times, auto-fix/push branch-related issues when appropriate, and keep…

openai/codex · 114 tokens

imagegen

Generate or edit raster images when the task benefits from AI-created bitmap visuals such as photos, illustrations, textures, sprites, mockups, or transparent-background cutouts. Use when Codex should create a brand-new image, transform an existing image, or derive visual variants from references, and the output…

openai/codex · 113 tokens

agent-host-chat-contributions

Build and review cross-cutting agent-host chat behavior through lifecycle contributions. Use when adding turn lifecycle side effects, prompt or context injection, restored-history transformation, protocol-action observation, or when reviewing changes that add code to AgentSideEffects or AgentService.

microsoft/vscode · 56 tokens