Skip to content
Back to skills

Asset Audit

ASecurity

Audit media assets BEFORE they enter scene cards, boxes or looks - alpha padding, dimensions, aspect, video properties, URL-reuse hazards, and whether a photo in a reference is a masked view of a larger one. Use before authoring scenes with new assets or when a styled card renders with mysterious edges or misalignment.

  • 6 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added November 5, 2026
ai-agentsgodebugging

Works with

  • cli

Security analysis

A100/100

Scanned November 5, 2026

npx -y skills add PicsArt/gen-ai-skills --skill asset-audit --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Asset Audit?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Asset Audit
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/picsart-asset-audit/badge)](https://www.skillsdirectory.com/skills/picsart-asset-audit)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: asset-audit
description: Audit media assets BEFORE they enter scene cards, boxes or looks - alpha padding, dimensions, aspect, video properties, URL-reuse hazards, and whether a photo in a reference is a masked view of a larger one. Use before authoring scenes with new assets or when a styled card renders with mysterious edges or misalignment.
metadata:
  category: workflow
  version: '1'
  ported-from: asset-audit 1 at 55.75.0
user-invocable: false
---

# Asset audit - check the media before blaming the scene

Most "the mask is broken / content is misaligned / corners aren't rounded" reports are ASSET
problems. Audit first; it takes a minute and saves a debugging afternoon.

## The checklist

1. **Alpha padding (the #1 trap).** Sticker-style PNGs bake transparent margins into the canvas:
   `fit: cover` covers the box with the FULL canvas, so the visible content sits inset and any
   rounding or mask lands in the transparent margin - the visible edge is the asset's own square
   boundary. Check it by looking: build a one-layer scene whose composition is the asset's own size
   (from `picsart_media_probe`), `background: "#ff00ffff"`, the asset with `fit: "contain"`, and
   look at it with `picsart_scene_contact_sheet` (`resolution` set to the composition size). No
   magenta inside the frame: clean. Magenta around the subject: a padded sticker; trim it, or use
   it deliberately as a decal with no look.
2. **Dimensions and aspect:** `picsart_media_probe` (no download; EXIF-corrected width and height,
   duration for video). Cover-fit crops from decoded dimensions - a 4:3 photo in a 9:16 card loses
   its sides; check the subject survives the crop. Also compare the asset's size with its largest
   placement box: `scale = max(box_w / own_w, box_h / own_h)`, and a scale above 1 is an upscale. A
   585x1024 photo in a 1080x1920 full-bleed box is stretched to nearly double. Rendering can decode
   an asset whose dimensions are omitted, but query and selection geometry cannot invent them: for
   `fit: "none"`, declare both `width` and `height` when the layer must be selectable or
   queryable, or use its intrinsic centre as the default transform anchor. Without them the source
   still renders at natural size, but `picsart_scene_query_layout` returns no bounds and the
   fallback pivot is the content origin. Do not add `content.bounds` as a workaround: `fit: "none"`
   has no destination box and rejects `bounds` and `align`. When a scene already declares an
   asset's `width`/`height`, compare them with the probe: a mismatch means the document describes
   a different file than the one that will load.
3. **Video specifics:** duration against the trim window you plan (a trim beyond the end freezes
   the last frame); first frames may decode dark or blank, so don't trim in exactly at 0 or at a
   scene cut; embedded audio (mute it unless wanted); reversed playback does NOT reverse audio.
4. **URL reuse:** fine. The same media URL in two different boxes renders correctly. Do NOT add a
   distinct `#fragment` per instance: it defeats content dedup, and it silently rewrites a URI that
   already carries a fragment of its own.
5. **SVG data-URIs:** encode only `< > space`; raw spaces in interpolated text are tolerated, raw
   `#` is not (colours as hex-without-# interpolated after `%23`). Declared width and height on the
   asset matter - undeclared dimensions break mask plus bounds combinations.
6. **Content vs box semantics:** an asset that is itself a full-bleed photo behaves under any fit;
   UI screenshots and renders with baked-in margins do not - measure where the content actually
   starts.

## Is the reference element MASKED?

When sourcing assets for a recreation of a reference video, decide for every photographic element
whether you are looking at a WHOLE asset or a MASKED VIEW of a larger one. Baking the mask into the
bitmap gives the right pixels and the wrong scene: the photo can no longer be swapped, the mask
cannot animate, and the "asset" is a screenshot of someone else's render. Narrow slivers cut from
the visible part of a card, or a full frame grabbed as a "photo", are this mistake.

How to tell, cheapest test first:

1. **Does content continue past the edge across frames?** A masked view is a WINDOW: as the card
   moves, grows, or the mask animates, NEW parts of the same photo appear at the edge while the
   rest stays registered. Sample the element at 3-4 timestamps in its own span
   (`picsart_media_video_stills`) and check whether its content translates WITH the box (a whole
   asset moving) or STAYS PUT while the box reveals more of it (a mask sliding over a fixed
   image). The second is a mask, always.
2. **Is a feature cut mid-stride?** A hard straight edge slicing a face, a hand, or a horizon
   mid-feature is a mask boundary; a real asset's edge lands where the photographer put it.
3. **Does the aspect ratio look impossible?** 238x1095 (1:4.6) is not a photograph anyone shot; it
   is a viewport. Compare the element's aspect against plausible source aspects (3:2, 4:3, 1:1,
   9:16).
4. **Corner geometry:** `picsart_media_inventory_diff` (reference as `a`, your candidate as `b`,
   same frame size, `times` of interest; it spends credits) reports whether corners are rounded
   against the local surround. A rounded photographic corner means a mask or a `rounded_corners`
   look, not a rounded photo. Leave `plate` at `auto` for cards over a uniform background; with it
   off, a pale-topped card can split into two invented elements.

What to author once identified: the FULL asset plus a `mask` (or the look that owns the shape),
never a pre-cut bitmap. The mask can then animate and the photo can be replaced. Source ONE
full-size asset, not a sliver cut to the mask's current opening: two slots showing one photo at two
scales bind the SAME URL, differing only by the host layer's scale.

Never take pixels from the reference clip itself as an asset; use what the user supplied, and a
stand-in only when none was.

## Debug heuristic

A styled card shows square edges but sibling cards are fine: suspect THIS asset's alpha (swap the
photo first, the scene second). A masked thing renders tiny or misplaced: mask plus explicit
bounds on one layer (use a boxed aux composition with a bounds-less masked layer inside). Content
invisible at layer start: fade-in or decode timing, start later.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

View all in ai-agents →

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.