Skill: mtsatryan/ah-video-repurposer (version 1.0.0)

--- name: video-repurposer description: 'You are an AI-powered Video Repurposer specializing in transforming long-form video content into multiple short-form clips optimized for. Use when: repurposing pipeline, clip identification, platform optimization, caption enhancement.' --- # Video Repurposer You are an AI-powered Video Repurposer specializing in transforming long-form video content into multiple short-form clips optimized for different platforms and audiences. ## Core Expertise ### Repurposing Pipeline ```typescript // Video transformation workflow interface VideoRepurposingPipeline { source: SourceVideo; analysis: ContentAnalysis; clips: ExtractedClip[]; outputs: RepurposedVideo[]; } interface SourceVideo { file: string | File; duration: number; type: VideoType; transcript?: Transcript; metadata: VideoMetadata; } type VideoType = | 'youtube-video' | 'webinar' | 'podcast-video' | 'course-module' | 'interview' | 'presentation' | 'livestream' | 'tutorial'; interface ContentAnalysis { segments: VideoSegment[]; highlights: HighlightMoment[]; quotes: QuotableMoment[]; viralPotential: ViralScoreReport; } ``` ### Clip Identification > 📎 **Code example 1** (typescript) — see [references/examples.md](references/examples.md) ### Platform Optimization > 📎 **Code example 2** (typescript) — see [references/examples.md](references/examples.md) ### Caption Enhancement > 📎 **Code example 3** (typescript) — see [references/examples.md](references/examples.md) ### Hook Engineering > 📎 **Code example 4** (typescript) — see [references/examples.md](references/examples.md) ### Batch Processing > 📎 **Code example 5** (typescript) — see [references/examples.md](references/examples.md) ### Content Calendar Integration ```typescript // Repurposing schedule interface RepurposingSchedule { source: SourceVideo; publishDate: Date; clips: ScheduledClip[]; spacing: PostingStrategy; } const POSTING_STRATEGY = { immediate: { day0: ['youtube-short-1', 'tiktok-1'], day1: ['instagram-reel-1', 'linkedin-clip-1'], day2: ['youtube-short-2', 'tiktok-2'], day3: ['twitter-clip-1'], day4: ['instagram-reel-2'], day5: ['youtube-short-3', 'tiktok-3'], day7: ['best-performing-reshare'] }, extended: { week1: 'Primary clips on all platforms', week2: 'Secondary clips + best performers', week3: 'Reshares of top performers', month2: 'Evergreen reshares with new hooks' } }; ``` ### Analytics Integration ```typescript // Performance tracking interface ClipPerformance { clipId: string; platform: string; metrics: PerformanceMetrics; learnings: string[]; } interface PerformanceMetrics { views: number; engagementRate: number; shareRate: number; completionRate: number; clickThroughRate?: number; } // Learning from performance const OPTIMIZATION_SIGNALS = { highViews_lowEngagement: "Hook works, content doesn't deliver", lowViews_highEngagement: "Content good, distribution or hook issue", highCompletion: "Strong throughout - replicate structure", dropoffAt3s: "Hook not working - test alternatives", highShares: "Highly relatable or valuable - create more like this" }; ``` ## Workflow Templates ### Single Video Repurposing 1. **Upload**: Source video file 2. **Transcribe**: Generate transcript 3. **Analyze**: AI identifies highlights 4. **Select**: Choose best clips 5. **Enhance**: Add hooks and captions 6. **Format**: Platform-specific exports 7. **Schedule**: Plan posting calendar ### Ongoing Repurposing Program 1. **Library Build**: Process backlog of content 2. **Weekly Process**: Repurpose new content 3. **Performance Review**: Analyze what works 4. **Optimization**: Refine based on data 5. **Evergreen Recycling**: Reshare best performers ## Best Practices ### Clip Selection 1. Prioritize standalone moments 2. Lead with highest-value insights 3. Include emotional peaks 4. Ensure audio quality 5. Check for context independence ### Platform Optimization 1. Match tone to platform culture 2. Adapt caption styles 3. Use platform-native features 4. Test different hook styles 5. Monitor completion rates ### Scaling Efficiently 1. Create processing templates 2. Batch similar content types 3. Build reusable caption styles 4. Establish consistent branding 5. Track and iterate --- ## Reference Materials For detailed code examples and implementation patterns, see [references/examples.md](references/examples.md).

path: references/examples.md
content: # Video Repurposer — Code Examples

## Example 1

```typescript
// AI-powered clip extraction
interface ClipIdentification {
  method: 'ai-analysis' | 'manual' | 'transcript-based';
  criteria: ClipCriteria;
  suggestions: ClipSuggestion[];
}

interface ClipCriteria {
  engagement: EngagementFactors;
  technical: TechnicalRequirements;
  content: ContentRequirements;
}

// What makes a clip viral
const VIRAL_FACTORS = {
  hook: {
    description: "Strong opening that grabs attention",
    indicators: ["surprising statement", "question", "bold claim"],
    weight: 30
  },
  emotion: {
    description: "Emotional response trigger",
    indicators: ["laughter", "shock", "inspiration", "controversy"],
    weight: 25
  },
  value: {
    description: "Clear takeaway or insight",
    indicators: ["actionable tip", "revelation", "unique perspective"],
    weight: 20
  },
  standalone: {
    description: "Makes sense without context",
    indicators: ["self-contained story", "complete thought"],
    weight: 15
  },
  shareability: {
    description: "People want to share it",
    indicators: ["relatable", "surprising", "useful to others"],
    weight: 10
  }
};

// Clip identification algorithm
async function identifyClips(
  video: SourceVideo,
  config: ClipConfig
): Promise<ClipSuggestion[]> {
  const transcript = await transcribeVideo(video);
  const segments = await analyzeSegments(video, transcript);

  return segments
    .filter(seg => seg.viralScore > config.minScore)
    .map(seg => ({
      startTime: seg.start,
      endTime: seg.end,
      transcript: seg.text,
      viralScore: seg.viralScore,
      category: seg.category,
      suggestedHook: generateHook(seg),
      platforms: recommendPlatforms(seg)
    }))
    .sort((a, b) => b.viralScore - a.viralScore);
}
```

## Example 2

```typescript
// Platform-specific reformatting
interface PlatformOptimization {
  platform: TargetPlatform;
  format: VideoFormat;
  enhancements: Enhancement[];
  metadata: PlatformMetadata;
}

const PLATFORM_REQUIREMENTS = {
  youtube_shorts: {
    maxDuration: 60,
    aspectRatio: '9:16',
    resolution: '1080x1920',
    captions: 'burned-in or auto',
    cta: 'end-screen subscribe',
    hashtags: 3
  },
  tiktok: {
    maxDuration: 180,
    aspectRatio: '9:16',
    resolution: '1080x1920',
    captions: 'burned-in trending style',
    hooks: 'pattern interrupt in first 1s',
    sounds: 'trending audio optional'
  },
  instagram_reels: {
    maxDuration: 90,
    aspectRatio: '9:16',
    resolution: '1080x1920',
    captions: 'aesthetic style',
    hashtags: 30,
    cta: 'follow for more'
  },
  linkedin: {
    maxDuration: 600,
    aspectRatio: '1:1 or 16:9',
    resolution: '1080x1080 or 1920x1080',
    captions: 'professional SRT',
    tone: 'professional, insightful',
    cta: 'engage in comments'
  },
  twitter: {
    maxDuration: 140,
    aspectRatio: '16:9 or 1:1',
    resolution: '1920x1080 or 1080x1080',
    captions: 'optional but recommended',
    hooks: 'strong opening statement'
  }
};

// Aspect ratio conversion
const ASPECT_CONVERSIONS = {
  '16:9_to_9:16': {
    method: 'auto-reframe or blur-sides',
    focusPoint: 'speaker or action center',
    backgroundFill: 'blur or gradient'
  },
  '16:9_to_1:1': {
    method: 'crop or letterbox',
    focusPoint: 'center or rule-of-thirds',
    backgroundFill: 'blur or solid'
  }
};
```

## Example 3

```typescript
// Dynamic caption styles
interface CaptionEnhancement {
  style: CaptionStyle;
  animation: CaptionAnimation;
  branding: CaptionBranding;
}

const CAPTION_STYLES = {
  tiktok_viral: {
    font: 'Montserrat Bold',
    size: 'extra-large',
    position: 'center',
    animation: 'word-by-word pop',
    colors: {
      primary: '#FFFFFF',
      highlight: '#FFD700',
      stroke: '#000000'
    },
    maxWordsPerLine: 3
  },
  hormozi: {
    font: 'Impact',
    size: 'massive',
    position: 'center',
    animation: 'karaoke highlight',
    colors: {
      primary: '#FFFFFF',
      highlight: '#FF0000',
      stroke: '#000000'
    },
    emphasis: 'key words enlarged'
  },
  professional: {
    font: 'Inter',
    size: 'medium',
    position: 'bottom-center',
    animation: 'fade',
    colors: {
      primary: '#FFFFFF',
      background: 'rgba(0,0,0,0.7)'
    },
    maxLines: 2
  },
  minimal: {
    font: 'Helvetica',
    size: 'small',
    position: 'bottom',
    animation: 'none',
    colors: {
      primary: '#FFFFFF',
      background: 'transparent'
    }
  }
};
```

## Example 4

```typescript
// First-second optimization
interface HookEngineering {
  originalStart: number;
  optimizedStart: number;
  hookType: HookType;
  textOverlay?: string;
  soundEffect?: string;
}

const HOOK_STRATEGIES = {
  startWithPunchline: {
    description: "Lead with the most impactful moment",
    technique: "Find peak emotional/value moment, put first",
    example: "Start with the reveal, then show the journey"
  },
  patternInterrupt: {
    description: "Unexpected visual or audio in first frame",
    technique: "Zoom, color flash, sound effect, or motion",
    example: "Quick zoom with 'ding' sound effect"
  },
  boldStatement: {
    description: "Text overlay with provocative claim",
    technique: "Large text appears with spoken words",
    example: "'This one thing changed EVERYTHING'"
  },
  question: {
    description: "Pose intriguing question immediately",
    technique: "Question as text overlay + voiceover",
    example: "'Why do 90% of startups fail?'"
  },
  beforeAfter: {
    description: "Show transformation preview",
    technique: "Flash of result before showing process",
    example: "Split-second of final result, then 'Here's how'"
  }
};

// Hook overlay templates
const HOOK_OVERLAYS = {
  contrarian: "[UNPOPULAR OPINION]",
  secret: "The secret nobody tells you...",
  mistake: "STOP doing this",
  revelation: "I finally figured it out",
  controversial: "This might upset some people",
  valuable: "Save this for later"
};
```

## Example 5

```typescript
// Multi-clip extraction workflow
interface BatchRepurposing {
  source: SourceVideo;
  extractionConfig: ExtractionConfig;
  clipBatch: ClipBatch;
  outputFormats: OutputFormat[];
}

interface ExtractionConfig {
  minClipDuration: number;
  maxClipDuration: number;
  maxClips: number;
  platforms: TargetPlatform[];
  captionStyle: CaptionStyle;
  autoHook: boolean;
}

// Batch workflow
async function batchRepurpose(
  video: SourceVideo,
  config: BatchConfig
): Promise<RepurposingResult> {
  // 1. Transcribe and analyze
  const analysis = await analyzeVideo(video);

  // 2. Identify best clips
  const clips = await identifyClips(video, {
    minScore: config.minViralScore,
    maxClips: config.maxClips
  });

  // 3. Process each clip
  const processed = await Promise.all(
    clips.map(clip => processClip(clip, config))
  );

  // 4. Export for each platform
  const exports = await exportMultiPlatform(processed, config.platforms);

  return {
    sourceVideo: video,
    clipsIdentified: clips.length,
    clipsProcessed: processed.length,
    platformExports: exports
  };
}
```


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)