@makeitvisible/cli 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +43 -0
- package/dist/bin/index.js +696 -82
- package/dist/bin/index.js.map +1 -1
- package/dist/index.d.ts +17 -62
- package/dist/index.js +143 -11
- package/dist/index.js.map +1 -1
- package/dist/types-BmNeVNFe.d.ts +62 -0
- package/dist/video/remotion/index.d.ts +2 -0
- package/dist/video/remotion/index.js +716 -0
- package/dist/video/remotion/index.js.map +1 -0
- package/dist/video/remotion/render.d.ts +111 -0
- package/dist/video/remotion/render.js +110 -0
- package/dist/video/remotion/render.js.map +1 -0
- package/dist/video/renderer.d.ts +154 -0
- package/dist/video/renderer.js +367 -0
- package/dist/video/renderer.js.map +1 -0
- package/package.json +15 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/video/remotion/theme.ts","../../../src/video/remotion/components.tsx","../../../src/video/remotion/Root.tsx","../../../src/video/remotion/index.tsx"],"names":["jsx","jsxs"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Design Tokens for Remotion\n *\n * Shared design tokens that mirror common UI frameworks.\n * These enable video components to have a professional look.\n */\n\n/**\n * Color palette - Dark mode (modern SaaS style)\n */\nexport const colors = {\n // Backgrounds\n background: \"#0A0A0B\",\n card: \"#141415\",\n popover: \"#1C1C1E\",\n\n // Text\n foreground: \"#FAFAFA\",\n mutedForeground: \"#A1A1A6\",\n\n // Accent colors\n primary: \"#10B981\", // Green\n primaryForeground: \"#FAFAFA\",\n\n // Secondary\n secondary: \"#27272A\",\n secondaryForeground: \"#FAFAFA\",\n\n // Destructive\n destructive: \"#EF4444\",\n destructiveForeground: \"#FAFAFA\",\n\n // Border\n border: \"#27272A\",\n\n // Chart colors\n chart: {\n 1: \"#10B981\",\n 2: \"#14B8A6\",\n 3: \"#0EA5E9\",\n 4: \"#F59E0B\",\n 5: \"#F97316\",\n },\n} as const;\n\n/**\n * Typography scale\n */\nexport const typography = {\n fontFamily: {\n sans: 'Inter, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n mono: 'JetBrains Mono, \"Fira Code\", Monaco, Consolas, monospace',\n },\n fontSize: {\n xs: 12,\n sm: 14,\n base: 16,\n lg: 18,\n xl: 20,\n \"2xl\": 24,\n \"3xl\": 30,\n \"4xl\": 36,\n \"5xl\": 48,\n \"6xl\": 60,\n },\n fontWeight: {\n normal: 400,\n medium: 500,\n semibold: 600,\n bold: 700,\n },\n lineHeight: {\n tight: 1.1,\n snug: 1.25,\n normal: 1.5,\n relaxed: 1.625,\n },\n} as const;\n\n/**\n * Spacing scale (in pixels)\n */\nexport const spacing = {\n 0: 0,\n 1: 4,\n 2: 8,\n 3: 12,\n 4: 16,\n 5: 20,\n 6: 24,\n 8: 32,\n 10: 40,\n 12: 48,\n 16: 64,\n 20: 80,\n 24: 96,\n} as const;\n\n/**\n * Border radius\n */\nexport const borderRadius = {\n none: 0,\n sm: 4,\n md: 6,\n lg: 8,\n xl: 12,\n \"2xl\": 16,\n full: 9999,\n} as const;\n\n/**\n * Animation timing\n */\nexport const animation = {\n fps: 30,\n duration: {\n fast: 8,\n normal: 15,\n slow: 30,\n slower: 45,\n },\n} as const;\n\n/**\n * Video dimensions\n */\nexport const dimensions = {\n \"1080p\": { width: 1920, height: 1080 },\n \"720p\": { width: 1280, height: 720 },\n \"480p\": { width: 854, height: 480 },\n square: { width: 1080, height: 1080 },\n vertical: { width: 1080, height: 1920 },\n} as const;\n\nexport const theme = {\n colors,\n typography,\n spacing,\n borderRadius,\n animation,\n dimensions,\n} as const;\n","/**\n * Remotion Components\n *\n * React components for video rendering with Remotion.\n * All components use inline styles for portability.\n */\n\nimport React from \"react\";\nimport {\n AbsoluteFill,\n Sequence,\n interpolate,\n useCurrentFrame,\n useVideoConfig,\n spring,\n} from \"remotion\";\nimport { colors, typography, spacing, borderRadius, animation } from \"./theme\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface VideoScene {\n id: string;\n type: string;\n title: string;\n content: string;\n durationInFrames: number;\n props?: Record<string, unknown>;\n}\n\nexport interface VideoStoryboard {\n title: string;\n totalDurationInFrames: number;\n scenes: VideoScene[];\n artifact: {\n title: string;\n description: string;\n source: { type: string; reference: string; url?: string };\n context: {\n summary: string;\n technicalDetails: string[];\n affectedComponents: string[];\n breakingChanges: boolean;\n keywords: string[];\n };\n guidelines: string[];\n };\n theme: {\n primaryColor: string;\n backgroundColor: string;\n foregroundColor: string;\n accentColor: string;\n mutedColor: string;\n cardColor: string;\n borderColor: string;\n fontFamily: string;\n };\n}\n\n// ============================================================================\n// Main Composition\n// ============================================================================\n\nexport const Main: React.FC<{ storyboard: VideoStoryboard }> = ({ storyboard }) => {\n const { width, height } = useVideoConfig();\n\n let currentFrame = 0;\n\n return (\n <div style={{ width, height, position: \"relative\", overflow: \"hidden\" }}>\n {storyboard.scenes.map((scene, index) => {\n const startFrame = currentFrame;\n currentFrame += scene.durationInFrames;\n\n return (\n <Sequence\n key={scene.id}\n from={startFrame}\n durationInFrames={scene.durationInFrames}\n name={`${scene.type}-${index}`}\n >\n <SceneRenderer scene={scene} storyboard={storyboard} />\n </Sequence>\n );\n })}\n </div>\n );\n};\n\n// ============================================================================\n// Scene Router\n// ============================================================================\n\nconst SceneRenderer: React.FC<{ scene: VideoScene; storyboard: VideoStoryboard }> = ({\n scene,\n storyboard,\n}) => {\n const { artifact } = storyboard;\n\n switch (scene.type) {\n case \"title\":\n return (\n <TitleScene\n title={scene.title}\n description={scene.content}\n keywords={scene.props?.keywords as string[] | undefined}\n sourceType={artifact.source.type}\n />\n );\n case \"overview\":\n return (\n <OverviewScene\n title={scene.title}\n summary={scene.content}\n componentCount={(scene.props?.componentCount as number) || 0}\n breakingChanges={(scene.props?.breakingChanges as boolean) || false}\n />\n );\n case \"walkthrough\":\n return (\n <WalkthroughScene\n title={scene.title}\n steps={(scene.props?.steps as string[]) || [scene.content]}\n stepIndex={(scene.props?.stepIndex as number) || 0}\n />\n );\n case \"code\":\n return (\n <CodeScene\n title={scene.title}\n files={(scene.props?.files as string[]) || []}\n totalFiles={(scene.props?.totalFiles as number) || 0}\n />\n );\n case \"code-highlight\":\n return (\n <CodeHighlightScene\n title={scene.title}\n snippets={(scene.props?.snippets as CodeSnippet[]) || []}\n />\n );\n case \"ui\":\n return (\n <UIScene\n title={scene.title}\n componentName={(scene.props?.componentName as string) || \"Component\"}\n description={scene.content}\n jsx={scene.props?.jsx as string | undefined}\n pattern={scene.props?.pattern as string | undefined}\n />\n );\n case \"outro\":\n return (\n <OutroScene\n title={scene.title}\n content={scene.content}\n guidelines={(scene.props?.guidelines as string[]) || []}\n />\n );\n default:\n return <DefaultScene title={scene.title} content={scene.content} />;\n }\n};\n\n// ============================================================================\n// Title Scene\n// ============================================================================\n\nconst TitleScene: React.FC<{\n title: string;\n description: string;\n keywords?: string[];\n sourceType?: string;\n}> = ({ title, description, keywords = [], sourceType }) => {\n const frame = useCurrentFrame();\n const { fps, durationInFrames } = useVideoConfig();\n\n const logoScale = spring({ frame, fps, config: { damping: 12, stiffness: 100 } });\n const titleOpacity = interpolate(frame, [15, 30], [0, 1], { extrapolateLeft: \"clamp\", extrapolateRight: \"clamp\" });\n const titleY = interpolate(frame, [15, 30], [30, 0], { extrapolateLeft: \"clamp\", extrapolateRight: \"clamp\" });\n const fadeOut = interpolate(frame, [durationInFrames - 15, durationInFrames], [1, 0], { extrapolateLeft: \"clamp\", extrapolateRight: \"clamp\" });\n\n return (\n <AbsoluteFill\n style={{\n backgroundColor: colors.background,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: spacing[16],\n opacity: fadeOut,\n fontFamily: typography.fontFamily.sans,\n }}\n >\n <div style={{ marginBottom: spacing[12], transform: `scale(${logoScale})` }}>\n <Logo />\n </div>\n\n {sourceType && (\n <div style={{ marginBottom: spacing[4], opacity: titleOpacity }}>\n <Badge>{formatSourceType(sourceType)}</Badge>\n </div>\n )}\n\n <div style={{ opacity: titleOpacity, transform: `translateY(${titleY}px)`, textAlign: \"center\", maxWidth: 1200 }}>\n <h1 style={{ color: colors.foreground, fontSize: typography.fontSize[\"5xl\"], fontWeight: typography.fontWeight.bold, margin: 0 }}>\n {title}\n </h1>\n </div>\n\n <div style={{ marginTop: spacing[6], opacity: titleOpacity, textAlign: \"center\", maxWidth: 900 }}>\n <p style={{ color: colors.mutedForeground, fontSize: typography.fontSize.lg, margin: 0, lineHeight: typography.lineHeight.relaxed }}>\n {description}\n </p>\n </div>\n\n {keywords.length > 0 && (\n <div style={{ marginTop: spacing[8], display: \"flex\", gap: spacing[2], opacity: interpolate(frame, [45, 60], [0, 1], { extrapolateLeft: \"clamp\", extrapolateRight: \"clamp\" }) }}>\n {keywords.slice(0, 5).map((kw, i) => <Badge key={i} variant=\"secondary\">{kw}</Badge>)}\n </div>\n )}\n </AbsoluteFill>\n );\n};\n\n// ============================================================================\n// Overview Scene\n// ============================================================================\n\nconst OverviewScene: React.FC<{\n title: string;\n summary: string;\n componentCount: number;\n breakingChanges: boolean;\n}> = ({ title, summary, componentCount, breakingChanges }) => {\n const frame = useCurrentFrame();\n const { fps, durationInFrames } = useVideoConfig();\n\n const fadeIn = interpolate(frame, [0, 15], [0, 1], { extrapolateLeft: \"clamp\", extrapolateRight: \"clamp\" });\n const fadeOut = interpolate(frame, [durationInFrames - 15, durationInFrames], [1, 0], { extrapolateLeft: \"clamp\", extrapolateRight: \"clamp\" });\n const cardScale = spring({ frame: frame - 15, fps, config: { damping: 12, stiffness: 100 } });\n\n return (\n <AbsoluteFill\n style={{\n backgroundColor: colors.background,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: spacing[16],\n opacity: fadeIn * fadeOut,\n fontFamily: typography.fontFamily.sans,\n }}\n >\n <h2 style={{ color: colors.primary, fontSize: typography.fontSize[\"4xl\"], fontWeight: typography.fontWeight.bold, marginBottom: spacing[8] }}>\n {title}\n </h2>\n\n <div style={{ transform: `scale(${Math.max(0, cardScale)})`, width: \"100%\", maxWidth: 900 }}>\n <Card>\n <p style={{ color: colors.foreground, fontSize: typography.fontSize.lg, lineHeight: typography.lineHeight.relaxed, margin: 0 }}>\n {summary}\n </p>\n </Card>\n </div>\n\n <div style={{ marginTop: spacing[10], display: \"flex\", gap: spacing[8], opacity: interpolate(frame, [30, 45], [0, 1], { extrapolateLeft: \"clamp\", extrapolateRight: \"clamp\" }) }}>\n <MetricCard label=\"Files Changed\" value={String(componentCount)} />\n <MetricCard label=\"Breaking Changes\" value={breakingChanges ? \"Yes\" : \"No\"} variant={breakingChanges ? \"destructive\" : \"default\"} />\n </div>\n </AbsoluteFill>\n );\n};\n\n// ============================================================================\n// Walkthrough Scene\n// ============================================================================\n\nconst WalkthroughScene: React.FC<{\n title: string;\n steps: string[];\n stepIndex: number;\n}> = ({ title, steps, stepIndex }) => {\n const frame = useCurrentFrame();\n const { durationInFrames } = useVideoConfig();\n\n const fadeIn = interpolate(frame, [0, 15], [0, 1], { extrapolateLeft: \"clamp\", extrapolateRight: \"clamp\" });\n const fadeOut = interpolate(frame, [durationInFrames - 15, durationInFrames], [1, 0], { extrapolateLeft: \"clamp\", extrapolateRight: \"clamp\" });\n\n return (\n <AbsoluteFill\n style={{\n backgroundColor: colors.background,\n display: \"flex\",\n flexDirection: \"column\",\n padding: spacing[16],\n opacity: fadeIn * fadeOut,\n fontFamily: typography.fontFamily.sans,\n }}\n >\n <h2 style={{ color: colors.primary, fontSize: typography.fontSize[\"3xl\"], fontWeight: typography.fontWeight.bold, marginBottom: spacing[10] }}>\n {title}\n </h2>\n\n <div style={{ flex: 1, display: \"flex\", flexDirection: \"column\", gap: spacing[4] }}>\n {steps.map((step, i) => (\n <StepItem key={i} step={step} number={stepIndex * 3 + i + 1} delay={20 + i * 15} frame={frame} />\n ))}\n </div>\n </AbsoluteFill>\n );\n};\n\nconst StepItem: React.FC<{ step: string; number: number; delay: number; frame: number }> = ({ step, number, delay, frame }) => {\n const opacity = interpolate(frame, [delay, delay + animation.duration.normal], [0, 1], { extrapolateLeft: \"clamp\", extrapolateRight: \"clamp\" });\n const translateX = interpolate(frame, [delay, delay + animation.duration.normal], [-30, 0], { extrapolateLeft: \"clamp\", extrapolateRight: \"clamp\" });\n\n return (\n <div\n style={{\n display: \"flex\",\n gap: spacing[4],\n alignItems: \"flex-start\",\n opacity,\n transform: `translateX(${translateX}px)`,\n padding: spacing[4],\n backgroundColor: colors.card,\n borderRadius: borderRadius.lg,\n border: `1px solid ${colors.border}`,\n }}\n >\n <div\n style={{\n width: 40,\n height: 40,\n borderRadius: borderRadius.full,\n backgroundColor: colors.primary,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n color: colors.primaryForeground,\n fontWeight: typography.fontWeight.bold,\n }}\n >\n {number}\n </div>\n <p style={{ color: colors.foreground, fontSize: typography.fontSize.base, lineHeight: typography.lineHeight.relaxed, margin: 0, paddingTop: spacing[2] }}>\n {step}\n </p>\n </div>\n );\n};\n\n// ============================================================================\n// Code Scene (File List)\n// ============================================================================\n\nconst CodeScene: React.FC<{\n title: string;\n files: string[];\n totalFiles: number;\n}> = ({ title, files, totalFiles }) => {\n const frame = useCurrentFrame();\n const { durationInFrames } = useVideoConfig();\n\n const fadeIn = interpolate(frame, [0, 15], [0, 1], { extrapolateLeft: \"clamp\", extrapolateRight: \"clamp\" });\n const fadeOut = interpolate(frame, [durationInFrames - 15, durationInFrames], [1, 0], { extrapolateLeft: \"clamp\", extrapolateRight: \"clamp\" });\n\n return (\n <AbsoluteFill\n style={{\n backgroundColor: colors.background,\n display: \"flex\",\n flexDirection: \"column\",\n padding: spacing[16],\n opacity: fadeIn * fadeOut,\n fontFamily: typography.fontFamily.sans,\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\", gap: spacing[4], marginBottom: spacing[8] }}>\n <FolderIcon />\n <h2 style={{ color: colors.primary, fontSize: typography.fontSize[\"3xl\"], fontWeight: typography.fontWeight.bold, margin: 0 }}>\n {title}\n </h2>\n <span style={{ marginLeft: \"auto\", color: colors.mutedForeground, fontSize: typography.fontSize.xl }}>\n {totalFiles} file{totalFiles !== 1 ? \"s\" : \"\"}\n </span>\n </div>\n\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: spacing[2] }}>\n {files.map((file, i) => (\n <FileItem key={file} file={file} index={i} frame={frame} />\n ))}\n {totalFiles > files.length && (\n <div style={{ color: colors.mutedForeground, fontSize: typography.fontSize.sm, padding: spacing[2] }}>\n +{totalFiles - files.length} more files\n </div>\n )}\n </div>\n </AbsoluteFill>\n );\n};\n\nconst FileItem: React.FC<{ file: string; index: number; frame: number }> = ({ file, index, frame }) => {\n const delay = index * 5;\n const opacity = interpolate(frame, [delay, delay + animation.duration.fast], [0, 1], { extrapolateLeft: \"clamp\", extrapolateRight: \"clamp\" });\n const translateX = interpolate(frame, [delay, delay + animation.duration.fast], [-20, 0], { extrapolateLeft: \"clamp\", extrapolateRight: \"clamp\" });\n\n return (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: spacing[3],\n padding: `${spacing[2]}px ${spacing[3]}px`,\n backgroundColor: colors.popover,\n borderRadius: borderRadius.md,\n border: `1px solid ${colors.border}`,\n opacity,\n transform: `translateX(${translateX}px)`,\n }}\n >\n <FileIcon />\n <span style={{ fontFamily: typography.fontFamily.mono, fontSize: typography.fontSize.sm, color: colors.foreground }}>\n {file}\n </span>\n </div>\n );\n};\n\n// ============================================================================\n// Code Highlight Scene\n// ============================================================================\n\ninterface CodeSnippet {\n file: string;\n code: string;\n language?: string;\n description?: string;\n changeType?: \"added\" | \"deleted\" | \"modified\" | \"context\";\n}\n\nconst CodeHighlightScene: React.FC<{\n title: string;\n snippets: CodeSnippet[];\n}> = ({ title, snippets }) => {\n const frame = useCurrentFrame();\n const { durationInFrames } = useVideoConfig();\n\n const fadeIn = interpolate(frame, [0, 15], [0, 1], { extrapolateLeft: \"clamp\", extrapolateRight: \"clamp\" });\n const fadeOut = interpolate(frame, [durationInFrames - 15, durationInFrames], [1, 0], { extrapolateLeft: \"clamp\", extrapolateRight: \"clamp\" });\n\n return (\n <AbsoluteFill\n style={{\n backgroundColor: colors.background,\n display: \"flex\",\n flexDirection: \"column\",\n padding: spacing[12],\n opacity: fadeIn * fadeOut,\n fontFamily: typography.fontFamily.sans,\n }}\n >\n <h3 style={{ color: colors.primary, fontSize: typography.fontSize[\"2xl\"], fontWeight: typography.fontWeight.semibold, marginBottom: spacing[6] }}>\n {title}\n </h3>\n\n <div style={{ flex: 1, display: \"flex\", gap: spacing[4] }}>\n {snippets.map((snippet, i) => (\n <CodeSnippetCard key={i} snippet={snippet} index={i} frame={frame} />\n ))}\n </div>\n </AbsoluteFill>\n );\n};\n\nconst CodeSnippetCard: React.FC<{ snippet: CodeSnippet; index: number; frame: number }> = ({ snippet, index, frame }) => {\n const delay = 15 + index * 10;\n const opacity = interpolate(frame, [delay, delay + animation.duration.normal], [0, 1], { extrapolateLeft: \"clamp\", extrapolateRight: \"clamp\" });\n\n const accentColor = snippet.changeType === \"added\" ? colors.primary : snippet.changeType === \"deleted\" ? colors.destructive : colors.chart[3];\n\n return (\n <div\n style={{\n flex: 1,\n display: \"flex\",\n flexDirection: \"column\",\n backgroundColor: colors.card,\n borderRadius: borderRadius.lg,\n border: `1px solid ${colors.border}`,\n overflow: \"hidden\",\n opacity,\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\", gap: spacing[2], padding: `${spacing[2]}px ${spacing[4]}px`, backgroundColor: colors.popover, borderBottom: `1px solid ${colors.border}` }}>\n <div style={{ width: 8, height: 8, borderRadius: borderRadius.full, backgroundColor: accentColor }} />\n <span style={{ fontSize: typography.fontSize.sm, fontFamily: typography.fontFamily.mono, color: colors.foreground }}>{snippet.file}</span>\n </div>\n {snippet.description && (\n <div style={{ padding: `${spacing[2]}px ${spacing[4]}px`, borderBottom: `1px solid ${colors.border}` }}>\n <span style={{ fontSize: typography.fontSize.sm, color: colors.mutedForeground }}>{snippet.description}</span>\n </div>\n )}\n <pre style={{ flex: 1, padding: spacing[4], margin: 0, fontFamily: typography.fontFamily.mono, fontSize: typography.fontSize.sm, color: colors.foreground, overflow: \"hidden\", whiteSpace: \"pre-wrap\" }}>\n {snippet.code}\n </pre>\n </div>\n );\n};\n\n// ============================================================================\n// UI Scene\n// ============================================================================\n\nconst UIScene: React.FC<{\n title: string;\n componentName: string;\n description: string;\n jsx?: string;\n pattern?: string;\n}> = ({ title, componentName, description, jsx, pattern }) => {\n const frame = useCurrentFrame();\n const { fps, durationInFrames } = useVideoConfig();\n\n const fadeIn = interpolate(frame, [0, 15], [0, 1], { extrapolateLeft: \"clamp\", extrapolateRight: \"clamp\" });\n const fadeOut = interpolate(frame, [durationInFrames - 15, durationInFrames], [1, 0], { extrapolateLeft: \"clamp\", extrapolateRight: \"clamp\" });\n const uiScale = spring({ frame: frame - 10, fps, config: { damping: 15, stiffness: 100 } });\n\n return (\n <AbsoluteFill\n style={{\n backgroundColor: colors.background,\n display: \"flex\",\n flexDirection: \"column\",\n padding: spacing[10],\n opacity: fadeIn * fadeOut,\n fontFamily: typography.fontFamily.sans,\n }}\n >\n <div style={{ marginBottom: spacing[6] }}>\n <h3 style={{ color: colors.primary, fontSize: typography.fontSize[\"2xl\"], fontWeight: typography.fontWeight.semibold, margin: 0 }}>{title}</h3>\n <p style={{ color: colors.mutedForeground, fontSize: typography.fontSize.sm, marginTop: spacing[1] }}>{description}</p>\n </div>\n\n <div style={{ flex: 1, display: \"flex\", alignItems: \"center\", justifyContent: \"center\", transform: `scale(${Math.max(0, uiScale)})` }}>\n <BrowserFrame title={componentName}>\n {jsx ? <div dangerouslySetInnerHTML={{ __html: convertJsxToHtml(jsx) }} /> : <PlaceholderUI pattern={pattern} name={componentName} />}\n </BrowserFrame>\n </div>\n\n <div style={{ position: \"absolute\", bottom: spacing[6], right: spacing[6] }}>\n <code style={{ backgroundColor: colors.card, border: `1px solid ${colors.border}`, borderRadius: borderRadius.md, padding: `${spacing[1]}px ${spacing[3]}px`, fontSize: typography.fontSize.xs, color: colors.mutedForeground, fontFamily: typography.fontFamily.mono }}>\n <{componentName} />\n </code>\n </div>\n </AbsoluteFill>\n );\n};\n\nconst BrowserFrame: React.FC<{ title: string; children: React.ReactNode }> = ({ title, children }) => (\n <div style={{ backgroundColor: colors.card, borderRadius: borderRadius.lg, border: `1px solid ${colors.border}`, boxShadow: \"0 25px 50px -12px rgba(0, 0, 0, 0.5)\", overflow: \"hidden\", maxWidth: \"90%\", maxHeight: \"80%\" }}>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: spacing[2], padding: `${spacing[2]}px ${spacing[4]}px`, backgroundColor: colors.popover, borderBottom: `1px solid ${colors.border}` }}>\n <div style={{ display: \"flex\", gap: 6 }}>\n <div style={{ width: 10, height: 10, borderRadius: \"50%\", backgroundColor: \"#FF5F56\" }} />\n <div style={{ width: 10, height: 10, borderRadius: \"50%\", backgroundColor: \"#FFBD2E\" }} />\n <div style={{ width: 10, height: 10, borderRadius: \"50%\", backgroundColor: \"#27CA40\" }} />\n </div>\n <div style={{ flex: 1, marginLeft: spacing[4], backgroundColor: colors.background, borderRadius: borderRadius.sm, padding: `${spacing[1]}px ${spacing[3]}px`, fontSize: typography.fontSize.xs, color: colors.mutedForeground }}>\n localhost:3000/{title.toLowerCase()}\n </div>\n </div>\n <div style={{ padding: spacing[8], backgroundColor: colors.background, minWidth: 600, minHeight: 300 }}>\n {children}\n </div>\n </div>\n);\n\nconst PlaceholderUI: React.FC<{ pattern?: string; name: string }> = ({ pattern, name }) => (\n <div style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"center\", height: \"100%\", color: colors.mutedForeground }}>\n <span>{pattern ? `${pattern}: ` : \"\"}{name}</span>\n </div>\n);\n\n// ============================================================================\n// Outro Scene\n// ============================================================================\n\nconst OutroScene: React.FC<{\n title: string;\n content: string;\n guidelines: string[];\n}> = ({ title, content, guidelines }) => {\n const frame = useCurrentFrame();\n const { fps } = useVideoConfig();\n\n const logoScale = spring({ frame, fps, config: { damping: 12, stiffness: 100 } });\n const fadeIn = interpolate(frame, [0, 15], [0, 1], { extrapolateLeft: \"clamp\", extrapolateRight: \"clamp\" });\n\n return (\n <AbsoluteFill\n style={{\n backgroundColor: colors.background,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: spacing[16],\n opacity: fadeIn,\n fontFamily: typography.fontFamily.sans,\n }}\n >\n <div style={{ marginBottom: spacing[8], transform: `scale(${logoScale})` }}>\n <Logo size={60} />\n </div>\n\n <h2 style={{ color: colors.primary, fontSize: typography.fontSize[\"3xl\"], fontWeight: typography.fontWeight.bold, marginBottom: spacing[4] }}>{title}</h2>\n <p style={{ color: colors.mutedForeground, fontSize: typography.fontSize.lg, textAlign: \"center\", maxWidth: 800 }}>{content}</p>\n\n {guidelines.length > 0 && (\n <Card style={{ marginTop: spacing[10], maxWidth: 700 }}>\n <span style={{ fontSize: typography.fontSize.xs, color: colors.mutedForeground, textTransform: \"uppercase\", letterSpacing: \"0.05em\" }}>Key Takeaways</span>\n <div style={{ marginTop: spacing[3], display: \"flex\", flexDirection: \"column\", gap: spacing[2] }}>\n {guidelines.slice(0, 3).map((g, i) => (\n <div key={i} style={{ display: \"flex\", alignItems: \"flex-start\", gap: spacing[2] }}>\n <CheckIcon />\n <span style={{ color: colors.foreground, fontSize: typography.fontSize.sm }}>{g}</span>\n </div>\n ))}\n </div>\n </Card>\n )}\n\n <div style={{ position: \"absolute\", bottom: spacing[8], display: \"flex\", alignItems: \"center\", gap: spacing[2] }}>\n <span style={{ color: colors.mutedForeground, fontSize: typography.fontSize.sm }}>Generated with</span>\n <span style={{ color: colors.primary, fontSize: typography.fontSize.sm, fontWeight: typography.fontWeight.semibold }}>Visible</span>\n </div>\n </AbsoluteFill>\n );\n};\n\n// ============================================================================\n// Default Scene\n// ============================================================================\n\nconst DefaultScene: React.FC<{ title: string; content: string }> = ({ title, content }) => {\n const frame = useCurrentFrame();\n const { durationInFrames } = useVideoConfig();\n\n const fadeIn = interpolate(frame, [0, 15], [0, 1], { extrapolateLeft: \"clamp\", extrapolateRight: \"clamp\" });\n const fadeOut = interpolate(frame, [durationInFrames - 15, durationInFrames], [1, 0], { extrapolateLeft: \"clamp\", extrapolateRight: \"clamp\" });\n\n return (\n <AbsoluteFill\n style={{\n backgroundColor: colors.background,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: spacing[16],\n opacity: fadeIn * fadeOut,\n fontFamily: typography.fontFamily.sans,\n }}\n >\n <h2 style={{ color: colors.foreground, fontSize: typography.fontSize[\"4xl\"], fontWeight: typography.fontWeight.bold }}>{title}</h2>\n <p style={{ color: colors.mutedForeground, fontSize: typography.fontSize.lg, textAlign: \"center\", maxWidth: 800 }}>{content}</p>\n </AbsoluteFill>\n );\n};\n\n// ============================================================================\n// UI Components\n// ============================================================================\n\nconst Card: React.FC<{ children: React.ReactNode; style?: React.CSSProperties }> = ({ children, style }) => (\n <div style={{ backgroundColor: colors.card, border: `1px solid ${colors.border}`, borderRadius: borderRadius.lg, padding: spacing[6], ...style }}>\n {children}\n </div>\n);\n\nconst Badge: React.FC<{ children: React.ReactNode; variant?: \"default\" | \"secondary\" }> = ({ children, variant = \"default\" }) => (\n <span\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n fontSize: typography.fontSize.xs,\n fontWeight: typography.fontWeight.medium,\n padding: `${spacing[1]}px ${spacing[2]}px`,\n borderRadius: borderRadius.full,\n backgroundColor: variant === \"secondary\" ? colors.secondary : `${colors.primary}22`,\n color: variant === \"secondary\" ? colors.secondaryForeground : colors.primary,\n border: variant === \"default\" ? \"none\" : `1px solid ${colors.border}`,\n }}\n >\n {children}\n </span>\n);\n\nconst MetricCard: React.FC<{ label: string; value: string; variant?: \"default\" | \"destructive\" }> = ({ label, value, variant = \"default\" }) => {\n const accentColor = variant === \"destructive\" ? colors.destructive : colors.primary;\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", alignItems: \"center\", padding: spacing[6], backgroundColor: colors.card, borderRadius: borderRadius.lg, border: `1px solid ${colors.border}`, minWidth: 200 }}>\n <span style={{ color: accentColor, fontSize: typography.fontSize[\"2xl\"], fontWeight: typography.fontWeight.bold }}>{value}</span>\n <span style={{ color: colors.mutedForeground, fontSize: typography.fontSize.sm, marginTop: spacing[1] }}>{label}</span>\n </div>\n );\n};\n\n// ============================================================================\n// Icons\n// ============================================================================\n\nconst Logo: React.FC<{ size?: number }> = ({ size = 80 }) => (\n <svg width={size} height={size} viewBox=\"0 0 100 100\">\n <circle cx={50} cy={50} r={45} fill={colors.primary} opacity={0.1} />\n <circle cx={50} cy={50} r={35} fill={colors.primary} opacity={0.2} />\n <ellipse cx={50} cy={50} rx={25} ry={15} fill=\"none\" stroke={colors.primary} strokeWidth={3} />\n <circle cx={50} cy={50} r={8} fill={colors.primary} />\n <circle cx={53} cy={47} r={3} fill={colors.foreground} />\n </svg>\n);\n\nconst FolderIcon: React.FC = () => (\n <svg width={40} height={40} viewBox=\"0 0 24 24\" fill=\"none\" stroke={colors.primary} strokeWidth={2}>\n <path d=\"M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z\" />\n </svg>\n);\n\nconst FileIcon: React.FC = () => (\n <svg width={16} height={16} viewBox=\"0 0 24 24\" fill=\"none\" stroke={colors.mutedForeground} strokeWidth={2}>\n <path d=\"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z\" />\n <polyline points=\"14,2 14,8 20,8\" />\n </svg>\n);\n\nconst CheckIcon: React.FC = () => (\n <svg width={16} height={16} viewBox=\"0 0 24 24\" fill=\"none\" stroke={colors.primary} strokeWidth={2} style={{ flexShrink: 0, marginTop: 2 }}>\n <polyline points=\"20,6 9,17 4,12\" />\n </svg>\n);\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nfunction formatSourceType(type: string): string {\n const map: Record<string, string> = { pr: \"Pull Request\", commit: \"Commit\", \"code-section\": \"Feature\", repository: \"Repository\" };\n return map[type] || type;\n}\n\nfunction convertJsxToHtml(jsx: string): string {\n return jsx.replace(/style=\\{\\{([^}]+)\\}\\}/g, (_, styles) => {\n const cssString = styles\n .split(\",\")\n .map((s: string) => {\n const [key, value] = s.split(\":\").map((x: string) => x.trim());\n if (!key || !value) return \"\";\n const cssKey = key.replace(/([A-Z])/g, \"-$1\").toLowerCase();\n const cssValue = value.replace(/[\"']/g, \"\");\n return `${cssKey}: ${cssValue}`;\n })\n .filter(Boolean)\n .join(\"; \");\n return `style=\"${cssString}\"`;\n });\n}\n","/**\n * Remotion Root\n *\n * Registers all video compositions.\n */\n\nimport React from \"react\";\nimport { Composition } from \"remotion\";\nimport { Main, VideoStoryboard } from \"./components\";\nimport { dimensions } from \"./theme\";\n\n/**\n * Default storyboard for preview\n */\nconst defaultStoryboard: VideoStoryboard = {\n title: \"Sample Feature\",\n totalDurationInFrames: 900,\n scenes: [\n {\n id: \"title\",\n type: \"title\",\n title: \"New Feature\",\n content: \"A sample video composition\",\n durationInFrames: 120,\n props: { keywords: [\"sample\", \"demo\"] },\n },\n {\n id: \"overview\",\n type: \"overview\",\n title: \"What Changed\",\n content: \"This is a sample overview scene.\",\n durationInFrames: 180,\n props: { componentCount: 5, breakingChanges: false },\n },\n {\n id: \"walkthrough\",\n type: \"walkthrough\",\n title: \"How It Works\",\n content: \"Step by step explanation\",\n durationInFrames: 240,\n props: { steps: [\"Step 1: Initialize\", \"Step 2: Process\", \"Step 3: Complete\"], stepIndex: 0 },\n },\n {\n id: \"code\",\n type: \"code\",\n title: \"Files Changed\",\n content: \"5 files affected\",\n durationInFrames: 180,\n props: { files: [\"src/index.ts\", \"src/utils.ts\", \"src/components/App.tsx\"], totalFiles: 5 },\n },\n {\n id: \"outro\",\n type: \"outro\",\n title: \"Summary\",\n content: \"Learn more about this feature\",\n durationInFrames: 180,\n props: { guidelines: [\"Test thoroughly\", \"Update documentation\"] },\n },\n ],\n artifact: {\n title: \"Sample Feature\",\n description: \"A sample feature for testing\",\n source: { type: \"code-section\", reference: \"sample\" },\n context: {\n summary: \"This is a sample feature.\",\n technicalDetails: [\"Detail 1\", \"Detail 2\"],\n affectedComponents: [\"src/index.ts\"],\n breakingChanges: false,\n keywords: [\"sample\"],\n },\n guidelines: [\"Test thoroughly\"],\n },\n theme: {\n primaryColor: \"#10B981\",\n backgroundColor: \"#0A0A0B\",\n foregroundColor: \"#FAFAFA\",\n accentColor: \"#10B981\",\n mutedColor: \"#A1A1A6\",\n cardColor: \"#141415\",\n borderColor: \"#27272A\",\n fontFamily: \"Inter, system-ui, sans-serif\",\n },\n};\n\nexport const RemotionRoot: React.FC = () => {\n return (\n <>\n <Composition\n id=\"Main\"\n component={Main}\n durationInFrames={900}\n fps={30}\n width={dimensions[\"1080p\"].width}\n height={dimensions[\"1080p\"].height}\n defaultProps={{ storyboard: defaultStoryboard }}\n calculateMetadata={async ({ props }) => ({\n durationInFrames: props.storyboard?.totalDurationInFrames || 900,\n })}\n />\n\n <Composition\n id=\"Main720p\"\n component={Main}\n durationInFrames={900}\n fps={30}\n width={dimensions[\"720p\"].width}\n height={dimensions[\"720p\"].height}\n defaultProps={{ storyboard: defaultStoryboard }}\n calculateMetadata={async ({ props }) => ({\n durationInFrames: props.storyboard?.totalDurationInFrames || 900,\n })}\n />\n\n <Composition\n id=\"MainSquare\"\n component={Main}\n durationInFrames={900}\n fps={30}\n width={dimensions.square.width}\n height={dimensions.square.height}\n defaultProps={{ storyboard: defaultStoryboard }}\n calculateMetadata={async ({ props }) => ({\n durationInFrames: props.storyboard?.totalDurationInFrames || 900,\n })}\n />\n\n <Composition\n id=\"MainVertical\"\n component={Main}\n durationInFrames={900}\n fps={30}\n width={dimensions.vertical.width}\n height={dimensions.vertical.height}\n defaultProps={{ storyboard: defaultStoryboard }}\n calculateMetadata={async ({ props }) => ({\n durationInFrames: props.storyboard?.totalDurationInFrames || 900,\n })}\n />\n </>\n );\n};\n","/**\n * Remotion Entry Point\n *\n * This file registers the Remotion compositions.\n */\n\nimport { registerRoot } from \"remotion\";\nimport { RemotionRoot } from \"./Root\";\n\nregisterRoot(RemotionRoot);\n"]}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Remotion Components
|
|
3
|
+
*
|
|
4
|
+
* React components for video rendering with Remotion.
|
|
5
|
+
* All components use inline styles for portability.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
interface VideoScene {
|
|
9
|
+
id: string;
|
|
10
|
+
type: string;
|
|
11
|
+
title: string;
|
|
12
|
+
content: string;
|
|
13
|
+
durationInFrames: number;
|
|
14
|
+
props?: Record<string, unknown>;
|
|
15
|
+
}
|
|
16
|
+
interface VideoStoryboard {
|
|
17
|
+
title: string;
|
|
18
|
+
totalDurationInFrames: number;
|
|
19
|
+
scenes: VideoScene[];
|
|
20
|
+
artifact: {
|
|
21
|
+
title: string;
|
|
22
|
+
description: string;
|
|
23
|
+
source: {
|
|
24
|
+
type: string;
|
|
25
|
+
reference: string;
|
|
26
|
+
url?: string;
|
|
27
|
+
};
|
|
28
|
+
context: {
|
|
29
|
+
summary: string;
|
|
30
|
+
technicalDetails: string[];
|
|
31
|
+
affectedComponents: string[];
|
|
32
|
+
breakingChanges: boolean;
|
|
33
|
+
keywords: string[];
|
|
34
|
+
};
|
|
35
|
+
guidelines: string[];
|
|
36
|
+
};
|
|
37
|
+
theme: {
|
|
38
|
+
primaryColor: string;
|
|
39
|
+
backgroundColor: string;
|
|
40
|
+
foregroundColor: string;
|
|
41
|
+
accentColor: string;
|
|
42
|
+
mutedColor: string;
|
|
43
|
+
cardColor: string;
|
|
44
|
+
borderColor: string;
|
|
45
|
+
fontFamily: string;
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Video dimensions
|
|
51
|
+
*/
|
|
52
|
+
declare const dimensions: {
|
|
53
|
+
readonly "1080p": {
|
|
54
|
+
readonly width: 1920;
|
|
55
|
+
readonly height: 1080;
|
|
56
|
+
};
|
|
57
|
+
readonly "720p": {
|
|
58
|
+
readonly width: 1280;
|
|
59
|
+
readonly height: 720;
|
|
60
|
+
};
|
|
61
|
+
readonly "480p": {
|
|
62
|
+
readonly width: 854;
|
|
63
|
+
readonly height: 480;
|
|
64
|
+
};
|
|
65
|
+
readonly square: {
|
|
66
|
+
readonly width: 1080;
|
|
67
|
+
readonly height: 1080;
|
|
68
|
+
};
|
|
69
|
+
readonly vertical: {
|
|
70
|
+
readonly width: 1080;
|
|
71
|
+
readonly height: 1920;
|
|
72
|
+
};
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Video Render Module
|
|
77
|
+
*
|
|
78
|
+
* Renders videos using Remotion's Node.js API.
|
|
79
|
+
* Everything is self-contained within the CLI.
|
|
80
|
+
*/
|
|
81
|
+
|
|
82
|
+
interface RenderOptions {
|
|
83
|
+
/** The storyboard to render */
|
|
84
|
+
storyboard: VideoStoryboard;
|
|
85
|
+
/** Output path for the video */
|
|
86
|
+
outputPath: string;
|
|
87
|
+
/** Resolution preset */
|
|
88
|
+
resolution?: keyof typeof dimensions;
|
|
89
|
+
/** Video codec */
|
|
90
|
+
codec?: "h264" | "h265" | "vp8" | "vp9";
|
|
91
|
+
/** Enable verbose logging */
|
|
92
|
+
verbose?: boolean;
|
|
93
|
+
/** Callback for progress updates */
|
|
94
|
+
onProgress?: (progress: number) => void;
|
|
95
|
+
}
|
|
96
|
+
interface RenderResult {
|
|
97
|
+
success: boolean;
|
|
98
|
+
outputPath?: string;
|
|
99
|
+
error?: string;
|
|
100
|
+
durationMs?: number;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Render a video from a storyboard
|
|
104
|
+
*/
|
|
105
|
+
declare function renderVideo(options: RenderOptions): Promise<RenderResult>;
|
|
106
|
+
/**
|
|
107
|
+
* Check if Remotion dependencies are available
|
|
108
|
+
*/
|
|
109
|
+
declare function isRemotionAvailable(): boolean;
|
|
110
|
+
|
|
111
|
+
export { type RenderOptions, type RenderResult, isRemotionAvailable, renderVideo };
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { bundle } from '@remotion/bundler';
|
|
2
|
+
import { selectComposition, renderMedia } from '@remotion/renderer';
|
|
3
|
+
import { existsSync, mkdirSync, writeFileSync } from 'fs';
|
|
4
|
+
import { dirname, join } from 'path';
|
|
5
|
+
import { fileURLToPath } from 'url';
|
|
6
|
+
|
|
7
|
+
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
8
|
+
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
9
|
+
}) : x)(function(x) {
|
|
10
|
+
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
11
|
+
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
12
|
+
});
|
|
13
|
+
var __dirname$1 = dirname(fileURLToPath(import.meta.url));
|
|
14
|
+
async function renderVideo(options) {
|
|
15
|
+
const startTime = Date.now();
|
|
16
|
+
try {
|
|
17
|
+
const {
|
|
18
|
+
storyboard,
|
|
19
|
+
outputPath,
|
|
20
|
+
resolution = "1080p",
|
|
21
|
+
codec = "h264",
|
|
22
|
+
verbose = false,
|
|
23
|
+
onProgress
|
|
24
|
+
} = options;
|
|
25
|
+
const outputDir = dirname(outputPath);
|
|
26
|
+
if (!existsSync(outputDir)) {
|
|
27
|
+
mkdirSync(outputDir, { recursive: true });
|
|
28
|
+
}
|
|
29
|
+
const propsPath = join(outputDir, ".video-props.json");
|
|
30
|
+
writeFileSync(propsPath, JSON.stringify({ storyboard }, null, 2));
|
|
31
|
+
if (verbose) {
|
|
32
|
+
console.log("Bundling Remotion project...");
|
|
33
|
+
}
|
|
34
|
+
const entryPoint = join(__dirname$1, "index.tsx");
|
|
35
|
+
const bundleLocation = await bundle({
|
|
36
|
+
entryPoint,
|
|
37
|
+
onProgress: (progress) => {
|
|
38
|
+
if (verbose) {
|
|
39
|
+
console.log(`Bundling: ${Math.round(progress * 100)}%`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
if (verbose) {
|
|
44
|
+
console.log("Bundle complete. Selecting composition...");
|
|
45
|
+
}
|
|
46
|
+
const compositionId = getCompositionId(resolution);
|
|
47
|
+
const composition = await selectComposition({
|
|
48
|
+
serveUrl: bundleLocation,
|
|
49
|
+
id: compositionId,
|
|
50
|
+
inputProps: { storyboard }
|
|
51
|
+
});
|
|
52
|
+
if (verbose) {
|
|
53
|
+
console.log(`Rendering ${composition.durationInFrames} frames at ${composition.width}x${composition.height}...`);
|
|
54
|
+
}
|
|
55
|
+
await renderMedia({
|
|
56
|
+
composition,
|
|
57
|
+
serveUrl: bundleLocation,
|
|
58
|
+
codec,
|
|
59
|
+
outputLocation: outputPath,
|
|
60
|
+
inputProps: { storyboard },
|
|
61
|
+
onProgress: ({ progress }) => {
|
|
62
|
+
if (onProgress) {
|
|
63
|
+
onProgress(progress);
|
|
64
|
+
}
|
|
65
|
+
if (verbose) {
|
|
66
|
+
console.log(`Rendering: ${Math.round(progress * 100)}%`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
const durationMs = Date.now() - startTime;
|
|
71
|
+
if (verbose) {
|
|
72
|
+
console.log(`Render complete in ${durationMs}ms`);
|
|
73
|
+
}
|
|
74
|
+
return {
|
|
75
|
+
success: true,
|
|
76
|
+
outputPath,
|
|
77
|
+
durationMs
|
|
78
|
+
};
|
|
79
|
+
} catch (error) {
|
|
80
|
+
return {
|
|
81
|
+
success: false,
|
|
82
|
+
error: error instanceof Error ? error.message : String(error),
|
|
83
|
+
durationMs: Date.now() - startTime
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
function getCompositionId(resolution) {
|
|
88
|
+
const map = {
|
|
89
|
+
"1080p": "Main",
|
|
90
|
+
"720p": "Main720p",
|
|
91
|
+
"480p": "Main720p",
|
|
92
|
+
// Use 720p for 480p
|
|
93
|
+
square: "MainSquare",
|
|
94
|
+
vertical: "MainVertical"
|
|
95
|
+
};
|
|
96
|
+
return map[resolution] || "Main";
|
|
97
|
+
}
|
|
98
|
+
function isRemotionAvailable() {
|
|
99
|
+
try {
|
|
100
|
+
__require.resolve("@remotion/bundler");
|
|
101
|
+
__require.resolve("@remotion/renderer");
|
|
102
|
+
return true;
|
|
103
|
+
} catch {
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export { isRemotionAvailable, renderVideo };
|
|
109
|
+
//# sourceMappingURL=render.js.map
|
|
110
|
+
//# sourceMappingURL=render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/video/remotion/render.ts"],"names":["__dirname"],"mappings":"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","file":"render.js","sourcesContent":["/**\n * Video Render Module\n *\n * Renders videos using Remotion's Node.js API.\n * Everything is self-contained within the CLI.\n */\n\nimport { bundle } from \"@remotion/bundler\";\nimport { renderMedia, selectComposition } from \"@remotion/renderer\";\nimport { existsSync, mkdirSync, writeFileSync } from \"fs\";\nimport { dirname, join } from \"path\";\nimport { fileURLToPath } from \"url\";\nimport type { VideoStoryboard } from \"./components\";\nimport { dimensions } from \"./theme\";\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\n\nexport interface RenderOptions {\n /** The storyboard to render */\n storyboard: VideoStoryboard;\n /** Output path for the video */\n outputPath: string;\n /** Resolution preset */\n resolution?: keyof typeof dimensions;\n /** Video codec */\n codec?: \"h264\" | \"h265\" | \"vp8\" | \"vp9\";\n /** Enable verbose logging */\n verbose?: boolean;\n /** Callback for progress updates */\n onProgress?: (progress: number) => void;\n}\n\nexport interface RenderResult {\n success: boolean;\n outputPath?: string;\n error?: string;\n durationMs?: number;\n}\n\n/**\n * Render a video from a storyboard\n */\nexport async function renderVideo(options: RenderOptions): Promise<RenderResult> {\n const startTime = Date.now();\n\n try {\n const {\n storyboard,\n outputPath,\n resolution = \"1080p\",\n codec = \"h264\",\n verbose = false,\n onProgress,\n } = options;\n\n // Ensure output directory exists\n const outputDir = dirname(outputPath);\n if (!existsSync(outputDir)) {\n mkdirSync(outputDir, { recursive: true });\n }\n\n // Write storyboard to temp file for props\n const propsPath = join(outputDir, \".video-props.json\");\n writeFileSync(propsPath, JSON.stringify({ storyboard }, null, 2));\n\n if (verbose) {\n console.log(\"Bundling Remotion project...\");\n }\n\n // Get the entry point path\n const entryPoint = join(__dirname, \"index.tsx\");\n\n // Bundle the project\n const bundleLocation = await bundle({\n entryPoint,\n onProgress: (progress) => {\n if (verbose) {\n console.log(`Bundling: ${Math.round(progress * 100)}%`);\n }\n },\n });\n\n if (verbose) {\n console.log(\"Bundle complete. Selecting composition...\");\n }\n\n // Select composition based on resolution\n const compositionId = getCompositionId(resolution);\n\n const composition = await selectComposition({\n serveUrl: bundleLocation,\n id: compositionId,\n inputProps: { storyboard },\n });\n\n if (verbose) {\n console.log(`Rendering ${composition.durationInFrames} frames at ${composition.width}x${composition.height}...`);\n }\n\n // Render the video\n await renderMedia({\n composition,\n serveUrl: bundleLocation,\n codec,\n outputLocation: outputPath,\n inputProps: { storyboard },\n onProgress: ({ progress }) => {\n if (onProgress) {\n onProgress(progress);\n }\n if (verbose) {\n console.log(`Rendering: ${Math.round(progress * 100)}%`);\n }\n },\n });\n\n const durationMs = Date.now() - startTime;\n\n if (verbose) {\n console.log(`Render complete in ${durationMs}ms`);\n }\n\n return {\n success: true,\n outputPath,\n durationMs,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n durationMs: Date.now() - startTime,\n };\n }\n}\n\n/**\n * Get composition ID for a resolution\n */\nfunction getCompositionId(resolution: keyof typeof dimensions): string {\n const map: Record<string, string> = {\n \"1080p\": \"Main\",\n \"720p\": \"Main720p\",\n \"480p\": \"Main720p\", // Use 720p for 480p\n square: \"MainSquare\",\n vertical: \"MainVertical\",\n };\n return map[resolution] || \"Main\";\n}\n\n/**\n * Check if Remotion dependencies are available\n */\nexport function isRemotionAvailable(): boolean {\n try {\n require.resolve(\"@remotion/bundler\");\n require.resolve(\"@remotion/renderer\");\n return true;\n } catch {\n return false;\n }\n}\n"]}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { A as ArtifactSource, a as ArtifactContext } from '../types-BmNeVNFe.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Visible API Client
|
|
5
|
+
*
|
|
6
|
+
* HTTP client for generating artifacts via the Visible API.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
interface ArtifactPayload {
|
|
10
|
+
title: string;
|
|
11
|
+
description: string;
|
|
12
|
+
source: ArtifactSource;
|
|
13
|
+
context: ArtifactContext;
|
|
14
|
+
guidelines: string[];
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Video Generation Types
|
|
19
|
+
*
|
|
20
|
+
* Types for video generation from artifacts.
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Code snippet with metadata for display in videos
|
|
25
|
+
*/
|
|
26
|
+
interface CodeSnippet {
|
|
27
|
+
/** File path */
|
|
28
|
+
file: string;
|
|
29
|
+
/** Code content */
|
|
30
|
+
code: string;
|
|
31
|
+
/** Starting line number (optional) */
|
|
32
|
+
startLine?: number;
|
|
33
|
+
/** Language for syntax highlighting */
|
|
34
|
+
language?: string;
|
|
35
|
+
/** Description of what this code shows */
|
|
36
|
+
description?: string;
|
|
37
|
+
/** Whether this is an addition (green), deletion (red), or neutral */
|
|
38
|
+
changeType?: "added" | "deleted" | "modified" | "context";
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Enhanced artifact payload with code content for video generation
|
|
42
|
+
*/
|
|
43
|
+
interface VideoArtifactPayload extends ArtifactPayload {
|
|
44
|
+
/** Relevant code snippets extracted from the analysis */
|
|
45
|
+
codeSnippets?: CodeSnippet[];
|
|
46
|
+
/** Full diff content (for diff-based analysis) */
|
|
47
|
+
diffContent?: string;
|
|
48
|
+
/** UI components identified (for potential screenshot/mock generation) */
|
|
49
|
+
uiComponents?: Array<{
|
|
50
|
+
name: string;
|
|
51
|
+
file: string;
|
|
52
|
+
props?: Record<string, unknown>;
|
|
53
|
+
}>;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Configuration for video generation
|
|
57
|
+
*/
|
|
58
|
+
interface VideoConfig {
|
|
59
|
+
/** Output directory for the video */
|
|
60
|
+
outputDir: string;
|
|
61
|
+
/** Output filename (without extension) */
|
|
62
|
+
filename?: string;
|
|
63
|
+
/** Video format */
|
|
64
|
+
format?: "mp4" | "webm";
|
|
65
|
+
/** Video resolution */
|
|
66
|
+
resolution?: VideoResolution;
|
|
67
|
+
/** Frames per second */
|
|
68
|
+
fps?: number;
|
|
69
|
+
/** Whether to generate a poster image */
|
|
70
|
+
generatePoster?: boolean;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Video resolution preset
|
|
74
|
+
*/
|
|
75
|
+
interface VideoResolution {
|
|
76
|
+
width: number;
|
|
77
|
+
height: number;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Theme/design tokens for video styling
|
|
81
|
+
*/
|
|
82
|
+
interface VideoTheme {
|
|
83
|
+
/** Primary brand color */
|
|
84
|
+
primaryColor: string;
|
|
85
|
+
/** Background color */
|
|
86
|
+
backgroundColor: string;
|
|
87
|
+
/** Foreground/text color */
|
|
88
|
+
foregroundColor: string;
|
|
89
|
+
/** Accent color */
|
|
90
|
+
accentColor: string;
|
|
91
|
+
/** Muted text color */
|
|
92
|
+
mutedColor: string;
|
|
93
|
+
/** Card background color */
|
|
94
|
+
cardColor: string;
|
|
95
|
+
/** Border color */
|
|
96
|
+
borderColor: string;
|
|
97
|
+
/** Font family */
|
|
98
|
+
fontFamily: string;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Result of video generation
|
|
102
|
+
*/
|
|
103
|
+
interface VideoGenerationResult {
|
|
104
|
+
/** Whether generation succeeded */
|
|
105
|
+
success: boolean;
|
|
106
|
+
/** Path to the generated video */
|
|
107
|
+
videoPath?: string;
|
|
108
|
+
/** Path to the poster image (if generated) */
|
|
109
|
+
posterPath?: string;
|
|
110
|
+
/** Error message if failed */
|
|
111
|
+
error?: string;
|
|
112
|
+
/** Generation duration in ms */
|
|
113
|
+
durationMs?: number;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Input for generating a video from an artifact
|
|
117
|
+
*/
|
|
118
|
+
interface GenerateVideoInput {
|
|
119
|
+
/** The artifact payload (can be enhanced with code content) */
|
|
120
|
+
artifact: ArtifactPayload | VideoArtifactPayload;
|
|
121
|
+
/** List of affected files (from analysis) */
|
|
122
|
+
files?: string[];
|
|
123
|
+
/** Code snippets to display in the video */
|
|
124
|
+
codeSnippets?: CodeSnippet[];
|
|
125
|
+
/** Video configuration */
|
|
126
|
+
config: VideoConfig;
|
|
127
|
+
/** Optional custom theme */
|
|
128
|
+
theme?: Partial<VideoTheme>;
|
|
129
|
+
/** Verbose logging */
|
|
130
|
+
verbose?: boolean;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Video Renderer
|
|
135
|
+
*
|
|
136
|
+
* Renders video using Remotion. Everything is self-contained in the CLI.
|
|
137
|
+
*/
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Generate a video from an artifact
|
|
141
|
+
*
|
|
142
|
+
* This function:
|
|
143
|
+
* 1. Creates a storyboard from the artifact
|
|
144
|
+
* 2. Writes the storyboard to a JSON file
|
|
145
|
+
* 3. Attempts to render with Remotion if available
|
|
146
|
+
* 4. Falls back to outputting props for manual rendering
|
|
147
|
+
*/
|
|
148
|
+
declare function generateVideo(input: GenerateVideoInput): Promise<VideoGenerationResult>;
|
|
149
|
+
/**
|
|
150
|
+
* Check if Remotion is available for rendering
|
|
151
|
+
*/
|
|
152
|
+
declare function isRemotionAvailable(): Promise<boolean>;
|
|
153
|
+
|
|
154
|
+
export { generateVideo, isRemotionAvailable };
|