.agent-os/skills/asset-architect/SKILL.md
Frame-perfect visual asset workflows for website projects. Use when designing cinematic scroll animations, canvas-based sequences, AI video generation specs, or complete visual production pipelines for any business vertical.
npx skillsauth add ab-aswini/agent-kit-p1 asset-architectInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Philosophy: True cinematic storytelling through motion, not disconnected slides. Core Principle: START[N] + MOTION[N] + END[N] = START[N+1]
Trigger when user requests:
PHASE 1: Sequence Design (Frame Specifications)
↓
PHASE 2: Color Consistency Matrix
↓
PHASE 3: AI Video Tool Specifications
↓
PHASE 4: Technical Implementation Blueprint
↓
PHASE 5: Pre-Production Checklist
↓
PHASE 6: Client Pitch Materials
Question Set for User:
Output: Sequence Map
Sequence 1: [Start Point] → [End Point] (Duration: Xs)
Sequence 2: [Start Point] → [End Point] (Duration: Xs)
Sequence 3: [Start Point] → [End Point] (Duration: Xs)
### START FRAME (Frame 001)
SHOT TYPE: [Extreme Close-up / Close-up / Medium / Wide / Establishing]
Camera Position: [X meters distance, Y meters height, Z° angle]
Composition Breakdown:
- FOREGROUND (X% of frame):
- Primary elements: [Specific objects, their appearance]
- Colors: [Element]: #HEXCODE
- Textures: [Describe materials, surfaces]
- Focus state: [Sharp / Soft / Out of focus]
- MIDGROUND (Y% of frame):
- Secondary elements: [Specific objects]
- Focus state: [Sharp / Soft bokeh / Blurred]
- Color palette: [Element]: #HEXCODE
- BACKGROUND (Z% of frame):
- Context elements: [Environment, sky, walls]
- Focus state: [Usually soft / out of focus]
- Colors: [Element]: #HEXCODE
Technical Camera Settings:
- Focal Length: [Xmm equivalent]
- Aperture: f/X.X
- Focus Point: [Specific element at X distance]
- Depth of Field: [Xm before to Ym after]
Lighting Specification:
- Time of Day: [Morning / Midday / Golden Hour / Evening]
- Primary Light Source: [Sun / Window / Artificial]
- Light Direction: [Front-lit / Side-lit / Back-lit / Top-down]
- Light Quality: [Hard / Soft]
- Color Temperature: [X Kelvin]
Color Verification:
✓ Brand Primary (#HEXCODE) visible in [element]
✓ Brand Accent (#HEXCODE) visible in [element]
✓ Neutral Background (#HEXCODE) established
### MOTION DESCRIPTION (Frames 001-XXX)
Camera Movement Type:
- Primary: [Crane up/down, Dolly forward/back, Truck left/right, Orbit]
- Movement Quality: [Smooth linear / Ease-in / Ease-out / Ease-in-out]
Frame-by-Frame Transformation Logic:
**Frames 001-030 (0-1 second):**
- [Primary element] occupies [X%] of frame
- Camera at [position description]
- Focus on [element at distance X]
- [What's changing this second]
**Frames 031-060 (1-2 seconds):**
- [Continuation from previous]
- New elements entering: [description]
- Elements exiting: [description]
- Focus shift: [from where to where]
[Continue for complete sequence duration]
Same detailed format as START frame, with continuity checks:
CRITICAL: Verify END frame can serve as START frame for next sequence.
- Camera position achievable from next starting position ✓
- Lighting consistent with next sequence ✓
- Composition provides logical continuation ✓
- Color palette maintained ✓
END Frame Camera Position: [8m distance, 1.6m height, 0° angle]
NEXT Sequence START Position: [8m distance, 1.6m height, 0° angle] ✓ MATCH
Lighting Transition: [None / Gradual interior→exterior]
Color Consistency: [List hex codes present in both frames]
| Element | Hex Code | RGB | Where Used | Consistency Rule | Variation Allowed | | ------------- | -------- | ----- | ----------- | ------------------------- | ------------------ | | Brand Primary | #XXXXXX | R,G,B | [Locations] | Exact match required | Brightness ±5% max | | Brand Accent | #XXXXXX | R,G,B | [Locations] | Exact match required | None | | Background | #XXXXXX | R,G,B | [Locations] | Hue consistent | Brightness ±15% | | Text/Dark | #XXXXXX | R,G,B | [Locations] | High contrast (4.5:1 min) | None |
Lighting Temperature Map:
| Space Type | Color Temperature | Kelvin | Hex Approximation | | ----------------- | ----------------- | ---------- | ----------------- | | Exterior Daylight | Neutral/Cool | 5500K | #FFFFFA | | Interior Warm | Warm White | 3000-4000K | #FFF4E6 | | Interior Neutral | Neutral White | 4000-5000K | #FFFEF0 | | Golden Hour | Warm Golden | 3000-3500K | #FFE4B5 |
| Tool | Best For | Max Duration | Motion Control | Cost | | ---------------------- | ------------------------------- | ------------ | -------------- | ----------------- | | Runway Gen-3 Alpha | Photorealistic, precise camera | 10s | Excellent | High ($12+/s) | | Pika Labs | Fast turnaround, decent quality | 4s | Good | Medium ($1/s) | | Stable Video Diffusion | Open source, batch processing | Flexible | Moderate | Free (compute) | | Leonardo Motion | Illustrated/stylized | 4s | Low | Low ($0.30/frame) |
Sequence [N]: [Title]
Camera Motion: [Detailed movement description]
Starting Frame: [Upload image_start_N.jpg]
Ending Frame: [Upload image_end_N.jpg]
Duration: [X] seconds
Style: Photorealistic, cinematic, [vertical-specific style]
Avoid: text, watermarks, people, morphing, warping, sudden jumps
Advanced Settings:
- Motion Consistency: Maximum
- Temporal Coherence: High
- Camera Motion: [Dolly / Crane / Orbit / Pan / Tilt]
- Motion Strength: [5-7 for architectural]
[Comprehensive scene description]
Starting frame: [Detailed start composition, camera position, lighting]
Ending frame: [Detailed end composition, camera position, lighting]
Camera motion: [Movement type] [direction and path]
Style: photorealistic architectural photography
-neg: text, watermarks, logos, people, morphing
model: stabilityai/stable-video-diffusion-img2vid-xt
inputs:
image: sequence_N_start.jpg
prompt: [Detailed scene description]
negative_prompt: text, watermarks, morphing, distortion
parameters:
num_frames: [75-180 based on duration]
fps: 30
motion_bucket_id: [75-100 for architectural]
noise_aug_strength: 0.02
output:
format: "frames"
naming: "%04d.jpg"
// components/animations/SequenceManager.tsx
import { useEffect, useState, useRef, useCallback } from 'react';
interface Sequence {
id: string;
path: string;
frameCount: number;
}
export default function SequenceManager({ sequences, containerHeight }) {
const canvasRef = useRef<HTMLCanvasElement>(null);
const containerRef = useRef<HTMLDivElement>(null);
const [allFrames, setAllFrames] = useState(new Map());
const [loading, setLoading] = useState(true);
const [progress, setProgress] = useState(0);
const totalFrames = sequences.reduce((sum, seq) => sum + seq.frameCount, 0);
// Preload all sequences
useEffect(() => {
const loadAllSequences = async () => {
const frameMap = new Map();
let loadedTotal = 0;
for (const sequence of sequences) {
const frames = [];
for (let i = 1; i <= sequence.frameCount; i++) {
const img = new Image();
img.src = `${sequence.path}/${String(i).padStart(4, '0')}.jpg`;
await img.decode();
frames.push(img);
loadedTotal++;
setProgress(Math.round((loadedTotal / totalFrames) * 100));
}
frameMap.set(sequence.id, frames);
}
setAllFrames(frameMap);
setLoading(false);
};
loadAllSequences();
}, [sequences, totalFrames]);
// Scroll-driven frame rendering
const renderCurrentFrame = useCallback((scrollProgress) => {
const canvas = canvasRef.current;
if (!canvas || allFrames.size === 0) return;
const context = canvas.getContext('2d');
if (!context) return;
const dpr = window.devicePixelRatio || 1;
const rect = canvas.getBoundingClientRect();
canvas.width = rect.width * dpr;
canvas.height = rect.height * dpr;
context.scale(dpr, dpr);
const currentFrame = Math.floor(scrollProgress * totalFrames);
let frameCount = 0;
for (const sequence of sequences) {
const sequenceStart = frameCount;
if (currentFrame >= sequenceStart && currentFrame < sequenceStart + sequence.frameCount) {
const sequenceFrames = allFrames.get(sequence.id);
if (sequenceFrames) {
const frame = sequenceFrames[currentFrame - sequenceStart];
if (frame?.complete) {
context.clearRect(0, 0, canvas.width, canvas.height);
context.drawImage(frame, 0, 0, rect.width, rect.height);
}
}
break;
}
frameCount += sequence.frameCount;
}
}, [allFrames, sequences, totalFrames]);
useEffect(() => {
if (loading) return;
const handleScroll = () => {
const container = containerRef.current;
if (!container) return;
const rect = container.getBoundingClientRect();
const scrollProgress = Math.max(0, Math.min(1, -rect.top / (rect.height - window.innerHeight)));
renderCurrentFrame(scrollProgress);
};
window.addEventListener('scroll', handleScroll);
handleScroll();
return () => window.removeEventListener('scroll', handleScroll);
}, [loading, renderCurrentFrame]);
if (loading) {
return (
<div className="loading-container">
<div>Loading Sequences... {progress}%</div>
<div className="progress-bar" style={{ width: `${progress}%` }} />
</div>
);
}
return (
<div ref={containerRef} style={{ height: containerHeight, position: 'relative' }}>
<div style={{ position: 'sticky', top: 0, height: '100vh' }}>
<canvas ref={canvasRef} style={{ width: '100%', height: '100%', objectFit: 'cover' }} />
</div>
</div>
);
}
Wrong: Hotel exterior → Random room → Pool → Restaurant (no continuity) Right: Exterior → Entrance → Lobby → Room (logical journey)
Wrong: "Camera moves smoothly from outside to inside" Right: "Camera dollies forward from 8m to 3m, subject grows from 20% to 70% of frame over frames 1-90"
Wrong: Blue #1E88E5 → #2196F3 → #1976D2 across sequences Right: Brand Blue #1E88E5 exactly in all sequences
Wrong: Ground level → suddenly aerial → back inside Right: Ground → eye level crane up → logical entrance
Wrong: Bright exterior → suddenly dark interior Right: Gradual dimming over frames 120-150 as entering
Current: OTA bookings at 20-30% commission
Monthly OTA fees: ₹[X] × [Y bookings] × 25% = ₹[Z]
Annual savings with website: ₹[Z] × 12 = ₹[Total]
Website Investment: ₹[Cost]
Payback Period: ₹[Cost] / ₹[Z per month] = [N] months
Remember: Frame-perfect continuity is NON-NEGOTIABLE. Every sequence is a link in a cinematic chain — break one link and the entire experience falls apart.
development
Web application testing principles. E2E, Playwright, deep audit strategies.
development
Review UI code for Web Interface Guidelines compliance. Use when asked to "review my UI", "check accessibility", "audit design", "review UX", or "check my site against best practices".
testing
Advanced vulnerability analysis principles. OWASP 2025, Supply Chain Security, attack surface mapping, risk prioritization.
development
# Testing Skill > Loaded by: QA Division agents | Version: 1.0 ## Test Pyramid ``` / E2E \ <- Few, slow, expensive / Integr. \ <- Some, moderate / Unit \ <- Many, fast, cheap ``` ## Unit Test Pattern (Arrange, Act, Assert) ```python def test_user_creation(): # Arrange user_data = {"name": "Alice", "email": "[email protected]"} # Act user = UserService.create(user_data) # Assert assert user.name == "Alice" assert user.id is