Install
$ agentstack add skill-avenoxai-avenoxskills-avenox-graphics ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ● Filesystem access Used
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Graphics — HyperFrames cutaways → composite
Brand source of truth: brand/frame.md. Define it once, then never deviate inside a job. (Reference implementation: warm paper #f3efe4, ink #1b1712, one golden accent #e8b23a, a serif display face + a grotesk UI face, plus a mascot. Deliberately anti-AI-slop — no neon, no gradient mesh, no glassmorphism, no 3D gloss.)
Pipeline
- Project:
cd "$STUDIO_JOBS//graphics" && npx hyperframes init gfx
(one-time; installs a headless chromium — slow first run, background it).
- One composition per beat = a standalone
.html. Reuse the brand
template below. Each is full-screen 1920×1080 — a cutaway (opaque, replaces footage) or a transparent overlay.
- Render serially (render reads
index.html):
``bash for f in *.html; do n="${f%.html}"; [ "$n" = index ] && continue cp "$f" index.html npx hyperframes render -f 60 --resolution landscape -o "renders/$n.mp4" done ``
- Composite all cutaways onto the cut via ffmpeg, each at its timecode.
Composition contract (HyperFrames)
#rootwithdata-composition-id="main" data-start data-duration data-width data-height.- Every timed element:
class="clip"+data-start data-duration data-track-index. - ONE paused GSAP timeline registered:
window.__timelines["main"] = gsap.timeline({paused:true}). HyperFrames seeks it per frame, so everything must be seek-safe: use fromTo/set, and position every tween on tl.
- Deterministic only — no
Date.now(), noMath.random(), no runtime
fetch. Web fonts via `` are fine.
- Render flags:
-f 60,--resolution landscape(1920×1080),--format mp4
(use mov/webm for alpha overlays).
Brand template
- Fonts via a single `` to your webfont provider — renders fine in
headless chrome.
html,body{background:}+ a paper div, radial vignette, and an SVG
feTurbulence grain at opacity .05 / mix-blend-mode: multiply. Fix the turbulence seed or the grain is nondeterministic and frames will flicker.
- Kicker (grotesk, tracked caps) → title (serif, heavy) → accent underline
(scaleX wipe) → mascot (assets/mascot.png).
Mascot transparency (keying a mascot off an ivory plate)
HSV key — saturated body colors and black ink survive, low-saturation cream becomes alpha:
import numpy as np
from PIL import Image
im = Image.open(src).convert('RGB')
a = np.asarray(im) / 255.
mx = a.max(2)
s = np.where(mx > 1e-6, (mx - a.min(2)) / np.maximum(mx, 1e-6), 0)
bg = (s 0.60)
out = np.dstack([np.asarray(im), np.where(bg, 0, 255).astype('uint8')])
img = Image.fromarray(out, 'RGBA')
img.crop(img.getbbox()).save(dst)
Tune 0.22 / 0.60 to your plate. Too aggressive and you eat highlights on the subject.
Compositing cutaways onto the cut
Per cutaway input: [i:v]setpts=PTS+{START}/TB,format=yuv420p[ovi], then [prev][ovi]overlay=enable='between(t,{START},{END})':eof_action=pass[vi].
Keep the base audio (-map 0:a). Hardware encode with h264_videotoolbox -b:v 18M.
Gotchas
- npx/hyperframes need the SSL cert fix:
export SSL_CERT_FILE=$(python3 -c 'import certifi;print(certifi.where())') (and REQUESTS_CA_BUNDLE) or downloads fail.
hyperframes initfirst run is slow (chromium download) — background it.- Blended is the better default. Prefer animated **overlays on the live
screen (lower-thirds, kinetic titles, callouts — rendered transparent as .mov/.webm with --format mov) for most beats. Reserve full-screen cutaways** for the intro, outro, and genuine dead zones where the screen shows nothing useful. Replacing a screen that has useful content loses information — overlay it instead.
- Placement: grab the frame at the target timecode (
ffmpeg -ss), look at
it, and place graphics in empty safe zones — never over a face or important UI. Optional: HyperFrames remove-background matting to sit graphics behind the subject.
- Don't over-animate. Restraint reads as premium; constant motion reads as
a template.
- Render time scales with frame count — keep cutaways short (5–26s). Long
sustained pieces get expensive fast.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: avenoxai
- Source: avenoxai/avenoxskills
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.