calesthio/precise-video-description
Provider-independent production guidance for converting observed video into precise, objective, temporally ordered language. Use for shot descriptions, searchable metadata, dataset captions, reference logs, generation-prompt handoffs, and analysis across subject, scene, motion, spatial, and camera aspects; not for deciding what to shoot, accessibility captions, creative interpretation, or provider-specific video analysis APIs.
npx skills add https://github.com/calesthio/generative-media-skills --skill precise-video-description
Use this skill when an existing video must be represented faithfully in production language. The output should let another agent or reviewer reconstruct what is visibly present, where it is, how it changes, and how the camera records it without inventing intent or atmosphere.
This skill describes observed media. It does not direct a future shot, infer a filmmaker's psychology, write accessibility captions, or execute a provider API.
The five-aspect structure below is informed by Lin et al.'s CHAI video-language specification and professional cinematography practice. Sources were checked 2026-07-14. CHAI's complete CameraBench-Pro primitive catalog was not fully available under a stable public package during authoring; do not reconstruct or copy an unavailable taxonomy from screenshots.
Before watching in detail, record:
Description depth depends on use. A search index may need concise shot-level fields; a training dataset or VFX handoff may need time-bounded state changes. Length is never a substitute for accuracy.
CHAI organizes precise video language into five aspects. Use them as coverage lanes, not a mandatory paragraph order.
Describe visible people, animals, objects, and graphics:
Do not infer identity, age, gender, ethnicity, diagnosis, emotion, occupation, or relationship beyond visible evidence or supplied metadata. Prefer “the person in the yellow coat” over ambiguous numbering or pronouns.
Describe environment and presentation context:
Separate composited overlays from physical scene objects. Avoid mood statements such as “inspiring” unless quoting approved creative direction rather than describing pixels.
Describe observable subject/object activity in temporal order:
Choose the most specific supported verb. Do not upgrade walking to running, reaching to taking, or correlation to causation without visible evidence.
Describe composition and relationships in the image:
Always name the reference frame when ambiguity matters: “moves toward frame-right,” “raises the subject's left hand,” or “passes behind the foreground post.” For camera-facing subjects, subject-left and frame-right may correspond; never collapse them.
Describe observable capture behavior:
Distinguish translation from rotation and focal-length change:
Do not assert an exact focal length from appearance alone unless metadata or calibrated analysis supports it. Use “wide field of view with visible edge distortion” rather than fabricated millimeters.
Use a multi-pass review:
For difficult clips, view at normal speed, slower playback, and isolated representative frames. Preserve the original playback interpretation; slow review is an inspection method, not evidence that source motion is slow.
Use intervals and state transitions rather than a bag of terms.
shot_id: shot-014
start: 00:00:12.400
end: 00:00:17.800
subject:
start: person in yellow coat, profile, frame-left
change: turns toward camera and lifts a parcel
scene: rain-covered street; red sign in midground
motion: walks left-to-right, stops, then raises parcel
spatial:
start: full shot, subject frame-left, sign frame-right
end: medium shot, subject centered, sign partly occluded
camera: smooth lateral track, then short hold; no observable zoom
uncertainty: exact focal length not established
This is an example schema, not a required format.
Record both start and end states for properties that change: shot size, angle, focus plane, subject count, spatial depth, camera movement, or overlays. Keep edit transitions separate from continuous camera movement.
Use source timecode or exact frame numbers when required. State rounding and time-origin policy. Do not imply frame accuracy from rounded decimal seconds.
Create definitions only for terms the project needs. Each entry should have:
High-risk confusions include dolly versus zoom, pan versus lateral translation, high angle versus high camera height, full shot versus close-up, bird's-eye versus broadly elevated view, shallow focus versus blur from motion, and object motion versus camera tracking.
If reviewers cannot distinguish a term reliably, use more literal geometry until the glossary is improved.
Exclude:
Use uncertainty that says what cannot be resolved and why:
The framing tightens, but the shot does not provide enough parallax or metadata to distinguish a slow dolly-in from a zoom-in.
Do not use “possibly” to decorate every sentence. If uncertainty is immaterial to the use case, choose a literal observable description such as “the subject becomes larger in frame.”
Primitive labels are evidence, not a finished description. Compose prose that:
For downstream generation prompts, keep an explicit distinction between observed source description and desired future direction. A description says what happened; a prompt may request what should happen.
Detailed descriptions can expose faces, locations, screens, health/financial information, badges, license plates, private actions, or copyrighted story content even when video files are not redistributed.
CHAI's public test artifacts and model have their own licenses/cards; the paper's arXiv distribution license does not grant unrestricted reuse of every underlying professional video or unreleased primitive example.
This is a complete example, not a mandatory formula.
Intent: create a production-search description for a six-second dialogue shot.
Observed video: A woman in a dark jacket stands at a kitchen counter. A man remains soft in the doorway. She raises her eyes toward him while the frame gradually tightens.
Structured result:
Coherent description: “In a dim kitchen, a woman in a dark jacket stands left of center at the counter while a man remains out of focus at the frame-right doorway. She raises her eyes toward him and speaks. During the eye movement, the camera moves smoothly forward from a medium view to a shoulders-and-head framing, keeping focus on her near eye; the man stays soft at the edge.”
Likely failure: calling the move a zoom because the subject grows in frame. Repair by checking parallax/background change and using literal tightening language if unresolved.
This is a complete example, not a mandatory formula.
Intent: produce dataset metadata for a five-second side-view game clip.
Observed video: A small armored character travels toward frame-right while platforms move frame-left. The framing stays side-on. A score overlay remains at top-left. The clip contains one hard cut near the end.
Description: “A small armored character runs toward frame-right across elevated platforms in a side-view game scene. The character remains near the left third while the platforms move toward frame-left, consistent with a camera that tracks the character laterally; exact world-versus-camera displacement cannot be recovered from the rendered view alone. A numeric score overlay stays fixed at the top-left. Near the end, a hard cut changes to a closer side-on view of the same character.”
Why this works: it distinguishes screen motion from uncertain world motion, identifies the overlay as graphics, and separates the edit from camera movement.
Likely failure: claiming the character's world speed or lens from rendered pixels. Keep those fields unknown unless game telemetry or metadata is supplied.
Verified 2026-07-14:
Take calesthio/precise-video-description from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.