calesthio/asset-continuity-management
Provider-independent asset continuity and version management for generated-media production. Use when an agent must track generated or reference assets, prompts, seeds, model/tool versions, manifests, approvals, edit decisions, derivatives, localization variants, metadata/provenance, and continuity QA across image, video, audio, avatar, product-ad, social, explainer, or film-style pipelines.
npx skills add https://github.com/calesthio/generative-media-skills --skill asset-continuity-management
Use this skill to keep generated-media projects reproducible, reviewable, and visually/aurally consistent across many assets, revisions, tools, and deliverables. Treat continuity as a production control system: every asset gets an ID, every change becomes an event, every derivative points back to its sources, and every continuity-critical choice is captured before more generation compounds the mistake.
This skill is provider-independent. Do not assume any particular generator exposes seeds, request IDs, input hashes, content credentials, prompt logs, or model versions. Capture them when available; explicitly record unknown, not_provided, or not_applicable when they are not.
Never manage continuity by memory, filenames alone, or chat history alone. Maintain a project-local continuity package with three living records:
asset_manifest: one row/object per file or generated unit.source_reference_ledger: one row/object per source, reference, prompt, seed, model/tool context, approval, and rights/usage constraint.continuity_bible: canonical descriptions and locked references for characters, products, locations, wardrobe, brand, voice, music, captions, and recurring design motifs.If the host pipeline already has artifact schemas, map these records into the native schemas rather than inventing parallel files. If no schema exists, use structured JSON, YAML, CSV, or tables that can be diffed and reviewed.
Before generating or editing media, create the minimum continuity control plane:
Recommended ID pattern:
<project>-<type>-<scene_or_unit>-<role>-v<major>.<minor>
Examples:
aurora-img-s03-heroProduct-v1.0aurora-vid-s05-brollCity-v2.1aurora-aud-narration-enUS-v1.3aurora-cap-final-esMX-v1.0Use IDs as stable production identifiers. Filenames may change for delivery, but the asset ID should remain traceable through manifests, review notes, embedded metadata when possible, and final handoff.
For every asset, capture as many of these fields as apply. A strong manifest favors explicit unknowns over blank cells.
asset_id: aurora-img-s03-heroProduct-v1.0
status: draft|candidate|approved|rejected|superseded|delivered
asset_type: image|video|audio|music|sfx|voice|avatar|caption|project-file|prompt|reference|composite|delivery
role: hero_product|character_ref|location_plate|wardrobe_ref|voice_take|music_bed|caption_track|final_master
scene_ids: [s03]
shot_ids: [s03_sh02]
file_path: projects/aurora/assets/images/aurora-img-s03-heroProduct-v1.0.png
checksum_sha256: "<hash after write>"
byte_size: 4821138
duration_or_dimensions: "2048x1152"
format_codec_profile: "PNG; sRGB" # or "MP4 H.264 High, AAC 48kHz"
colorspace_loudness_or_fps: "sRGB" # or "23.976 fps", "-16 LUFS integrated"
created_at_utc: "2026-07-10T18:41:00Z"
created_by: agent|human|vendor|tool
tool_provider: "not_provided|provider name"
tool_name: "not_provided|tool name"
model_or_engine: "not_provided|model id/version"
model_version_verified_at: "2026-07-10" # volatile; re-check at production time
request_or_job_id: "not_provided"
seed: "not_provided"
parameters:
aspect_ratio: "16:9"
guidance: "not_provided"
prompt_id: prompt-s03-heroProduct-v1.0
source_ids: [src-product-packshot-v1, ref-brand-board-v2]
parent_asset_ids: []
derived_asset_ids: [aurora-img-s03-heroProduct-v1.1]
c2pa_or_content_credential: present|absent|external|not_checked
embedded_metadata_checked: true
rights_usage_notes: "Client-owned packshot reference; no third-party logo beyond approved brand."
review_notes: "Approved for product shape, color, logo placement."
approval_record_ids: [approval-brand-2026-07-10-01]
supersedes: null
superseded_by: aurora-img-s03-heroProduct-v1.1
retention: keep_master|keep_review|archive|delete_after_delivery
Do not rely on generated filenames from providers. Rename or copy outputs into the project storage convention, then compute a checksum and record the original provider path or URL separately if it matters.
The source/reference ledger is the evidence trail. It should answer: "What did this asset depend on, what did we ask for, what did the tool return, and what constraints apply?"
Capture:
source_id: stable ID for each reference, source clip, brand file, script, storyboard, prompt, negative prompt, seed bundle, voice sample, music reference, font, LUT, product spec, character sheet, or location reference.Provider/platform rules are volatile. Re-check production-time rules for disclosure, content credentials, watermarking, model availability, pricing, supported inputs, retention, commercial-use terms, and safety policies when a project will ship publicly or commercially.
Create canonical entries for anything that must remain consistent. Each entry should contain the locked description, approved reference assets, banned variations, and QA checklist.
Use entries like these:
character:
id: char-maya-v1
canonical_description: "Late-30s field engineer, warm brown skin, shoulder-length black curls, amber safety glasses, navy utility jacket with orange stitching."
locked_reference_assets: [maya-turnaround-v1, maya-face-close-v2, maya-wardrobe-v1]
invariants:
- face shape and hair volume
- amber safety glasses
- navy/orange jacket
- calm, competent posture
allowed_variations:
- jacket may be zipped or open
- helmet on/off depending on scene safety
forbidden_variations:
- different hair color
- logo on jacket unless brand-approved
- age shift younger/older than brief
approval_required_for:
- face regeneration
- wardrobe redesign
- synthetic voice or avatar use
product:
id: product-orbit-bottle-v1
canonical_description: "Matte white insulated bottle, rounded square body, teal cap, vertical ORBIT wordmark centered on front."
locked_reference_assets: [orbit-packshot-front-v1, orbit-packshot-side-v1]
invariants:
- silhouette and cap color
- exact approved wordmark placement
- no invented claims, certifications, or UI labels
forbidden_variations:
- misspelled logo
- unapproved ingredient/feature claims
- altered capacity or materials
Also create entries for:
Every production unit should link scene/shot intent to assets and edit decisions:
scene_id: s03
shot_id: s03_sh02
story_function: "Reveal product solving the setup problem."
continuity_requirements:
character_ids: [char-maya-v1]
product_ids: [product-orbit-bottle-v1]
location_ids: [loc-lab-v1]
brand_ids: [brand-orbit-v1]
required_assets:
image: [aurora-img-s03-heroProduct-v1.0]
video: [aurora-vid-s03-productPushIn-v1.0]
audio: [aurora-aud-s03-vo-enUS-v1.0]
edit_decisions:
- cut_in: "00:00:18.500"
- cut_out: "00:00:23.000"
- transition: "match cut from blueprint line to bottle edge"
- caption_asset_id: aurora-cap-master-enUS-v1.0
qa:
- product wordmark readable and correct
- character glasses remain amber
- no extra invented text in background
For film-style or multi-shot video generation, link generated clips to the beat they cover. If a generated clip contains multiple internal shots, describe the internal shots with approximate time ranges and note any continuity breaks inside the clip.
Use semantic production versions:
v0.x: exploration, not approved.v1.0: first approved candidate for the unit.v1.x: minor fixes that preserve the approved concept, composition, and identity.v2.0: material change to prompt, model, seed, reference, edit intent, identity, product design, or approval basis.Before regenerating, decide whether the goal is:
Regeneration checklist:
Keep prompt records as first-class assets, not throwaway chat snippets.
prompt_id: prompt-s03-productPushIn-v2.0
target_asset_role: video product push-in
scene_ids: [s03]
prompt_text: |
A controlled studio push-in toward the matte white Orbit bottle...
negative_prompt: |
misspelled logo, extra labels, altered cap color, warped bottle shape...
continuity_constraints:
character_ids: []
product_ids: [product-orbit-bottle-v1]
location_ids: [loc-studio-v1]
references:
- source_id: orbit-packshot-front-v1
purpose: "shape/logo lock"
- source_id: brand-board-v2
purpose: "color and lighting"
parameters:
aspect_ratio: "16:9"
duration: "5s"
seed: "123456789"
model_context:
provider: "provider name or not_provided"
model: "model name/version or not_provided"
version_verified_at: "2026-07-10"
change_reason: "v2 uses approved packshot reference after v1 distorted cap."
For user-visible decisions, keep an append-only decision log. Do not silently mutate old decisions after a provider/model/reference/music/voice/runtime/approval choice changes. Append a revised decision with the same subject so review surfaces the current choice and the superseded choice.
Edit decisions are continuity events. Track:
If an edit changes meaning, claims, identity, or legal context, mark it as a new version and route it through the relevant approval gate.
Use boring, sortable names:
<project>_<asset-id>_<locale-or-platform>_<status>_<yyyymmdd>.<ext>
Example:
aurora_aurora-vid-s03-productPushIn-v2.0_master_approved_20260710.mp4
Rules:
final_final, provider download names, and destructive overwrites.For preservation-minded handoff, use open or widely supported formats when practical, and keep masters separate from platform transcodes. The Library of Congress Recommended Formats Statement is a useful reference for format sustainability, but delivery specs and client requirements remain binding.
Preserve metadata unless there is a privacy, safety, legal, or platform reason to remove it. When metadata is stripped by a tool or platform, record that event in the manifest.
Use these standards as guidance:
trainedAlgorithmicMedia identify media created using generative AI.Practical metadata checklist:
Treat each localized or platform-specific version as a derivative with explicit lineage:
asset_id: aurora-delivery-tiktok-esMX-v1.0
parent_asset_ids: [aurora-master-16x9-enUS-v1.0]
variant_type: localization+platform_reframe
locale: es-MX
platform: TikTok
changes:
- translated captions from approved en-US captions
- reframed 16:9 master to 9:16
- replaced end card legal line with approved Spanish version
approvals_required:
- localization reviewer
- brand/legal for claims and disclaimer
continuity_risks:
- cropped product wordmark in vertical frame
- subtitle covers required on-pack text
For localization, maintain:
Run continuity QA before approval gates and again before final delivery. Do not wait until the final render to find identity drift.
Check at four levels:
Mode-specific QA:
Use visual contact sheets and side-by-side comparisons for recurring entities. When reviewing video, sample key frames and scene boundaries; for generated clips, also inspect frames near the middle because drift often appears after the opening image.
A useful review package contains:
Ask reviewers to comment using asset IDs and timecodes, not screenshots alone. Convert review comments into manifest or decision-log events.
Example production intent: Create a 20-second product ad for a client-owned bottle with 16:9 master, 9:16 social cutdown, English VO, Spanish captions, and generated product B-roll.
Example approach:
product-orbit-bottle-v1, brand-orbit-v1, and voice-calm-enUS-v1.src-orbit-packshot-front-v1 and src-orbit-packshot-side-v1; compute checksums and mark origin as client-provided.aurora-vid-s03-productPushIn-v1.0 only after product/brand review.aurora-master-16x9-enUS-v1.0, then derive aurora-delivery-tiktok-enUS-v1.0 and aurora-delivery-tiktok-esMX-v1.0; each derivative points to the master and records crop/caption/localization changes.Example QA finding:
finding_id: qa-s03-002
asset_id: aurora-vid-s03-productPushIn-v1.0
severity: critical
finding: "The ORBIT wordmark changes to OR8IT for frames 74-96."
action: "Reject clip; regenerate or mask with approved packshot overlay."
continuity_bible_refs: [product-orbit-bottle-v1, brand-orbit-v1]
approval_needed: brand
Example production intent: Generate a 90-second explainer with one recurring host character across eight scenes.
Example controls:
character_id in every scene/shot record.Example manifest note:
asset_id: nebula-img-s06-hostWhiteboard-v1.0
parent_asset_ids: [nebula-img-character-turnaround-v1.0]
prompt_id: prompt-s06-hostWhiteboard-v1.0
continuity_tags: [char-host-v1, wardrobe-host-jacket-v1, loc-whiteboard-v1]
qa_status: rejected
qa_notes:
- "Hair length shortened materially from locked reference."
- "Jacket changed from forest green to black."
regeneration_control:
mode: repair
preserve:
- face shape
- forest green jacket
- shoulder-length hair
may_change:
- whiteboard diagram content
Escalate instead of improvising when:
NIST's AI RMF and Generative AI Profile are voluntary risk-management references, not production law. Use their governance posture-map risks, measure/monitor controls, manage residual risk, and document decisions-to structure escalation and review.
Factual grounding consulted and verified on 2026-07-10:
Volatile facts to re-check at production time: provider model IDs/versions, seed behavior, supported metadata/content-credential formats, platform synthetic-media disclosure rules, watermarking behavior, retention policies, pricing, regional availability, upload/download file transformations, and commercial-use terms.
Take calesthio/asset-continuity-management 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.