orchestrator
توصیف ساده را به انیمیشن منسجم و کد آمادهٔ اجرا تبدیل میکند.
این Skill درخواستهای متنی دربارهٔ انیمیشن را تحلیل میکند و عنصر، کنش، احساس، پلتفرم و هدف ارتباطی آن را تشخیص میدهد. سپس با ساختن مسیر روایی، ریتم صحنه، زنجیرهٔ پیامدها و وضعیتهای کامپوننت، یک حرکت هدفمند و داستانمند طراحی میکند.
پارامترهای timing، easing، شدت و اصول Disney بر اساس برند، پلتفرم و محدودیتهای دسترسی تنظیم میشوند. خروجی میتواند کد آماده برای CSS، GSAP، Framer Motion یا Remotion باشد و شامل حالت reduced motion و ملاحظات عملکردی نیز میشود.
چه چیزی میگیرید
- تحلیل خودکار نیت، احساس، عنصر و کنش از توضیح متنی
- انتخاب یا ترکیب recipe مناسب برای سناریوی انیمیشن
- تنظیم هماهنگ duration، easing، شدت و محدودیتهای برند و پلتفرم
- طراحی narrative arc، attention path و زنجیرهٔ cause-and-effect
- کد production-ready برای CSS، GSAP، Framer Motion یا Remotion
برای چه کاری خوب است
- طراحی سیستم موشن منسجم برای محصول، Design System یا برند
- ساخت انیمیشنهای معنادار برای تعاملهایی مثل موفقیت، خطا، راهنمایی و reveal
- تبدیل briefهای متنی و سطحبالا به کد قابل استفاده در وب، موبایل یا ویدیو
برای چه کاری نیست
- تغییر بسیار جزئی در یک keyframe یا تنظیم دستی یک easing ساده
- پروژههایی که فقط به انیمیشن تزئینی بدون هدف روایی یا تعاملی نیاز دارند
- زمانی که پلتفرم خروجی موردنیاز خارج از CSS، GSAP، Framer Motion و Remotion است
دربارهٔ این اسکیل
Motion Orchestrator
Autonomous decision engine for generating complete animations from high-level descriptions. The orchestrator parses input, applies narrative intentionality, resolves parameters via unified pipeline, selects appropriate Disney principles, and outputs production-ready code.
Orchestration Pipeline (v3.0 — Narrative + Resolution)
Input Description
│
▼
┌──────────────────┐
│ Input Parser │ → Extract: element, action, emotion, brand, platform
└────────┬─────────┘
│
▼
┌──────────────────┐
│ Intent Parser │ → What PURPOSE? (clarify/guide/confirm/warn/celebrate/reveal)
└────────┬─────────┘
│
▼
┌──────────────────┐
│ Journey State │ → Where emotionally? (curious/engaged/accomplished)
└────────┬─────────┘
│
▼
┌──────────────────┐
│ Narrative Arc │ → What story phase? (exposition/rising/climax/resolution)
└────────┬─────────┘
│
▼
┌──────────────────┐
│ Scene Composer │ → Dramaturgical structure (beats, pauses, rhythm)
└────────┬─────────┘
│
▼
┌──────────────────┐
│ Attention Path │ → Reading order (F-pattern/Z-pattern/center-out)
└────────┬─────────┘
│
▼
┌──────────────────┐
│ Consequence │ → Cause-effect chains (direct/ripple/cascade/echo)
└────────┬─────────┘
│
▼
┌──────────────────┐
│ Microstate │ → Component state machines (idle→active→success)
└────────┬─────────┘
│
▼
┌──────────────────┐
│ Recipe Matcher │ → Find matching recipe or compose new
└────────┬─────────┘
│
▼
┌──────────────────┐
│Parameter Resolver│ → Merge recipe + emotion + brand + platform
└────────┬─────────┘
│
▼
┌──────────────────┐
│Principle Select │ → Which Disney principles apply?
└────────┬─────────┘
│
▼
┌──────────────────┐
│Conflict Resolver │ → Handle competing requirements
└────────┬─────────┘
│
▼
┌──────────────────┐
│ Code Generator │ → Output for target platform
└────────┬─────────┘
│
▼
Complete Animation with Story
Narrative Layer (v3.0)
Intent Detection
Parse semantic purpose from the request:
| Keywords | Intent | Speed | Intensity |
|---|---|---|---|
| explain, show, reveal | clarify | measured | 0.4 |
| lead, direct, point | guide | deliberate | 0.5 |
| done, saved, submitted | confirm | responsive | 0.6 |
| error, danger, alert | warn | urgent | 0.8 |
| success, complete, win | celebrate | expressive | 1.0 |
| unveil, discover, unlock | reveal | dramatic | 0.7 |
Journey State Detection
Determine user's emotional position:
| Context | Journey State | Next States |
|---|---|---|
| First interaction | curious | engaged, confused |
| Active engagement | engaged | accomplished, frustrated |
| Task completed | accomplished | delighted, engaged |
| Multiple successes | delighted | neutral |
Arc Phase Selection
Map to Freytag's pyramid for UI:
| Duration | Arc Preset | Phases |
|---|---|---|
| <400ms | micro | incident → climax → resolution |
| 400-800ms | short | exposition → rising → climax → resolution |
| 800-2000ms | medium | all five phases |
| >2000ms | extended | full with sub-beats |
Consequence Chain Selection
| Pattern | Timing | Use Case |
|---|---|---|
direct | 0ms | Immediate feedback |
ripple | 30ms/step | Radiating effects |
cascade | 50ms/step | Sequential flow |
echo | 200ms | Delayed reflection |
Phase 1: Input Parser
Element Detection
| Keywords | Element Type |
|---|---|
| button, btn, cta | button |
| card, tile, panel | card |
| modal, dialog, overlay | modal |
| list, items, grid | list |
| toast, notification | toast |
| menu, dropdown | dropdown |
Action Detection
| Keywords | Action Type |
|---|---|
| click, press, tap | press |
| hover, mouse over | hover |
| enter, appear, show | entrance |
| exit, leave, close | exit |
| error, fail | error |
| success, complete | success |
Emotion Detection
| Keywords | Emotion |
|---|---|
| bouncy, fun, playful | playful |
| elegant, refined, subtle | professional |
| celebratory, exciting | celebratory |
| calming, gentle | calming |
| urgent, important | urgent |
Phase 2: Parameter Resolution
Resolution Order
Recipe (base) → Emotion (modifier) → Brand (constraint) → Platform (adaptation) → Bounds → Accessibility (override)
Resolution Algorithm
function resolveParameters(
recipe: Recipe,
emotions: WeightedEmotion[],
brand: Brand,
platform: Platform,
context: Context
): ResolvedParams {
// 1. Start with recipe base
let duration = recipe.duration;
let easing = recipe.easing;
let exaggeration = recipe.exaggeration ?? 1.0;
// 2. Blend emotions (weighted average for numeric, dominant for discrete)
const blendedEmotion = blendEmotions(emotions);
// 3. Apply blended emotion as modifier
if (blendedEmotion) {
duration *= blendedEmotion.durationMultiplier;
easing = blendedEmotion.easing ?? easing;
exaggeration *= blendedEmotion.exaggerationBoost ?? 1.0;
}
// 4. Apply brand constraints (caps, not multipliers)
if (brand) {
exaggeration = Math.min(exaggeration, brand.maxExaggeration);
if (!brand.allowsSquashStretch) squashStretch = "none";
}
// 5. Apply platform adaptation
duration *= platform.durationMultiplier;
// 6. Clamp to bounds
duration = clamp(duration, platform.minDuration, platform.maxDuration);
// 7. Accessibility override (bypasses all above)
if (context.reducedMotion) {
return recipe.reducedMotion ?? DEFAULT_REDUCED_MOTION;
}
return { duration, easing, exaggeration, ... };
}
Platform Multipliers
| Platform | Duration | Max | Min |
|---|---|---|---|
| web | 1.0× | 600ms | 50ms |
| video | 0.6× | 400ms | 50ms |
| mobile | 1.1× | 500ms | 50ms |
Resolution Checklist
- ☐ Emotions blended before applying (prevents stacking)
- ☐ Brand constraints enforced (caps exaggeration, disables features)
- ☐ Platform multiplier applied
- ☐ Duration clamped to bounds
- ☐ Reduced motion checked last (overrides all)
Phase 3: Principle Selection
Decision Tree
Does it bounce or impact?
Yes -> SQUASH-STRETCH
No -> Skip
Does it move through space?
Yes -> ARC-MOTION
No -> Linear path OK
Is it a significant action?
Yes -> ANTICIPATION (15-25% of total)
No -> Skip
Are there secondary elements?
Yes -> FOLLOW-THROUGH (10-30% stagger)
No -> Single element
Phase 4: Conflict Resolution
Priority Rules
- Accessibility > Everything - Reduced motion always wins
- Brand > Emotion - Brand consistency trumps momentary emotion
- Context > Defaults - Device capability limits animations
- Duration Conflicts - Average within brand bounds
function resolveConflicts(params: Parameters, context: Context): Parameters {
if (context.reducedMotion) {
params = applyReducedMotionLimits(params);
}
params = clampToBrandLimits(params, context.brand);
params = clampToDeviceLimits(params, context.device);
return params;
}
Phase 5: Output Generation
Platform Selection
| Platform | Output Format |
|---|---|
| CSS | Keyframes + transitions + media queries |
| GSAP | Timeline with tweens |
| Framer Motion | Variants + transitions |
| Remotion | Interpolate functions + spring |
Autonomous Generation Workflow
When generating animations autonomously:
- Parse the request using keyword detection
- Match to recipe or compose from principles
- Apply emotion if specified or inferred
- Apply brand constraints
- Check accessibility requirements
- Generate code for all platforms
- Include reduced motion alternative
- Document token references
Decision Checklist
- ☐ Element type identified
- ☐ Action type identified
- ☐ Platform identified (web/video/mobile)
- ☐ Emotion determined (explicit or inferred)
- ☐ Emotions blended if multiple
- ☐ Parameters resolved via resolution pipeline
- ☐ Brand constraints applied (caps, not stacking)
- ☐ Duration within platform bounds (50-600ms web, 50-400ms video)
- ☐ Intent parsed (clarify/guide/confirm/warn/celebrate/reveal)
- ☐ Journey state identified (curious/engaged/accomplished)
- ☐ Narrative arc selected (micro/short/medium/extended)
- ☐ Attention path planned (F-pattern/Z-pattern/center-out)
- ☐ Consequence chain defined (direct/ripple/cascade/echo)
- ☐ Microstate machine configured (component states + transitions)
- ☐ Disney principles selected
- ☐ Conflicts resolved
- ☐ Code generated for target platform
- ☐ Reduced motion included
- ☐ Performance considerations noted
- ☐ Determinism verified (same inputs = same outputs)
Related Skills
Core
choice-resolution/- Unified parameter resolution pipelinemotion-principles/- Disney 12 principleseasing/- Easing curve selectionduration/- Duration token selectionaccessibility/- Reduced motion requirementsanimation-recipes/- Recipe definitions and selectionemotion-mapping/- Emotion-to-parameter mappingplatform-adaptation/- Platform-specific adjustmentstools/- Platform-specific code generation
Narrative (v3.0)
intent/- Semantic motion purposeemotional-journey/- User emotional state machinenarrative-arc/- Story structure for motiondramaturgy/- Scene composition and pacingattention-choreography/- Reading order and gaze pathsconsequence/- Cause-effect animation chainsmicrostate/- Component state orchestration
See references/ for complete recipe matching tables and emotion mapping.