remotion-claude-agent-demo 0.1.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.
Files changed (128) hide show
  1. package/README.md +160 -0
  2. package/apps/web/README.md +36 -0
  3. package/apps/web/env.example +20 -0
  4. package/apps/web/eslint.config.mjs +18 -0
  5. package/apps/web/next.config.ts +7 -0
  6. package/apps/web/package-lock.json +10348 -0
  7. package/apps/web/package.json +35 -0
  8. package/apps/web/postcss.config.mjs +7 -0
  9. package/apps/web/public/file.svg +1 -0
  10. package/apps/web/public/globe.svg +1 -0
  11. package/apps/web/public/next.svg +1 -0
  12. package/apps/web/public/vercel.svg +1 -0
  13. package/apps/web/public/window.svg +1 -0
  14. package/apps/web/src/app/.well-known/agent-card.json/route.ts +50 -0
  15. package/apps/web/src/app/background-tasks/[jobId]/cancel/route.ts +29 -0
  16. package/apps/web/src/app/events/stream/route.ts +58 -0
  17. package/apps/web/src/app/favicon.ico +0 -0
  18. package/apps/web/src/app/globals.css +174 -0
  19. package/apps/web/src/app/layout.tsx +34 -0
  20. package/apps/web/src/app/messages/answer/route.ts +57 -0
  21. package/apps/web/src/app/messages/stream/route.ts +381 -0
  22. package/apps/web/src/app/page.tsx +358 -0
  23. package/apps/web/src/app/tasks/[taskId]/cancel/route.ts +24 -0
  24. package/apps/web/src/app/tasks/[taskId]/route.ts +24 -0
  25. package/apps/web/src/app/tasks/route.ts +13 -0
  26. package/apps/web/src/components/chat/agent-blocks.tsx +111 -0
  27. package/apps/web/src/components/chat/ask-user-question-panel.tsx +172 -0
  28. package/apps/web/src/components/chat/session-sidebar.tsx +222 -0
  29. package/apps/web/src/components/chat/subagent-activity-sidebar.tsx +248 -0
  30. package/apps/web/src/components/chat/tool-blocks.tsx +550 -0
  31. package/apps/web/src/lib/a2a/activity-store.ts +150 -0
  32. package/apps/web/src/lib/a2a/client.ts +357 -0
  33. package/apps/web/src/lib/a2a/sse.ts +19 -0
  34. package/apps/web/src/lib/a2a/task-store.ts +111 -0
  35. package/apps/web/src/lib/a2a/types.ts +216 -0
  36. package/apps/web/src/lib/agent/answer-store.ts +109 -0
  37. package/apps/web/src/lib/agent/background-delivery.ts +343 -0
  38. package/apps/web/src/lib/agent/background-tool.ts +78 -0
  39. package/apps/web/src/lib/agent/background.ts +452 -0
  40. package/apps/web/src/lib/agent/chat.ts +543 -0
  41. package/apps/web/src/lib/agent/session-store.ts +26 -0
  42. package/apps/web/src/lib/chat/types.ts +44 -0
  43. package/apps/web/src/lib/env.ts +31 -0
  44. package/apps/web/src/lib/hooks/useA2AChat.ts +863 -0
  45. package/apps/web/src/lib/state/chat-atoms.ts +52 -0
  46. package/apps/web/src/lib/workspace.ts +9 -0
  47. package/apps/web/tsconfig.json +35 -0
  48. package/bin/remotion-agent.js +451 -0
  49. package/package.json +34 -0
  50. package/templates/.claude/CLAUDE.md +95 -0
  51. package/templates/.claude/README.md +129 -0
  52. package/templates/.claude/agents/composer-agent.md +188 -0
  53. package/templates/.claude/agents/crafter.md +181 -0
  54. package/templates/.claude/agents/creator.md +134 -0
  55. package/templates/.claude/agents/perceiver.md +92 -0
  56. package/templates/.claude/settings.json +36 -0
  57. package/templates/.claude/settings.local.json +39 -0
  58. package/templates/.claude/skills/agent-browser/SKILL.md +349 -0
  59. package/templates/.claude/skills/agent-browser/references/authentication.md +188 -0
  60. package/templates/.claude/skills/agent-browser/references/proxy-support.md +175 -0
  61. package/templates/.claude/skills/agent-browser/references/session-management.md +181 -0
  62. package/templates/.claude/skills/agent-browser/references/snapshot-refs.md +186 -0
  63. package/templates/.claude/skills/agent-browser/references/video-recording.md +162 -0
  64. package/templates/.claude/skills/agent-browser/templates/authenticated-session.sh +91 -0
  65. package/templates/.claude/skills/agent-browser/templates/capture-workflow.sh +68 -0
  66. package/templates/.claude/skills/agent-browser/templates/form-automation.sh +64 -0
  67. package/templates/.claude/skills/algorithmic-art/LICENSE.txt +202 -0
  68. package/templates/.claude/skills/algorithmic-art/SKILL.md +405 -0
  69. package/templates/.claude/skills/algorithmic-art/templates/generator_template.js +223 -0
  70. package/templates/.claude/skills/algorithmic-art/templates/viewer.html +599 -0
  71. package/templates/.claude/skills/asset-validator/SKILL.md +376 -0
  72. package/templates/.claude/skills/audio-video-sync/SKILL.md +219 -0
  73. package/templates/.claude/skills/bgm-manager/SKILL.md +334 -0
  74. package/templates/.claude/skills/remotion-best-practices/SKILL.md +45 -0
  75. package/templates/.claude/skills/remotion-best-practices/rules/3d.md +86 -0
  76. package/templates/.claude/skills/remotion-best-practices/rules/animations.md +29 -0
  77. package/templates/.claude/skills/remotion-best-practices/rules/assets/charts-bar-chart.tsx +173 -0
  78. package/templates/.claude/skills/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +100 -0
  79. package/templates/.claude/skills/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +108 -0
  80. package/templates/.claude/skills/remotion-best-practices/rules/assets.md +78 -0
  81. package/templates/.claude/skills/remotion-best-practices/rules/audio.md +172 -0
  82. package/templates/.claude/skills/remotion-best-practices/rules/calculate-metadata.md +104 -0
  83. package/templates/.claude/skills/remotion-best-practices/rules/can-decode.md +75 -0
  84. package/templates/.claude/skills/remotion-best-practices/rules/charts.md +58 -0
  85. package/templates/.claude/skills/remotion-best-practices/rules/compositions.md +141 -0
  86. package/templates/.claude/skills/remotion-best-practices/rules/display-captions.md +126 -0
  87. package/templates/.claude/skills/remotion-best-practices/rules/extract-frames.md +229 -0
  88. package/templates/.claude/skills/remotion-best-practices/rules/fonts.md +152 -0
  89. package/templates/.claude/skills/remotion-best-practices/rules/get-audio-duration.md +58 -0
  90. package/templates/.claude/skills/remotion-best-practices/rules/get-video-dimensions.md +68 -0
  91. package/templates/.claude/skills/remotion-best-practices/rules/get-video-duration.md +58 -0
  92. package/templates/.claude/skills/remotion-best-practices/rules/gifs.md +138 -0
  93. package/templates/.claude/skills/remotion-best-practices/rules/images.md +130 -0
  94. package/templates/.claude/skills/remotion-best-practices/rules/import-srt-captions.md +67 -0
  95. package/templates/.claude/skills/remotion-best-practices/rules/lottie.md +68 -0
  96. package/templates/.claude/skills/remotion-best-practices/rules/maps.md +403 -0
  97. package/templates/.claude/skills/remotion-best-practices/rules/measuring-dom-nodes.md +35 -0
  98. package/templates/.claude/skills/remotion-best-practices/rules/measuring-text.md +143 -0
  99. package/templates/.claude/skills/remotion-best-practices/rules/parameters.md +98 -0
  100. package/templates/.claude/skills/remotion-best-practices/rules/sequencing.md +118 -0
  101. package/templates/.claude/skills/remotion-best-practices/rules/tailwind.md +11 -0
  102. package/templates/.claude/skills/remotion-best-practices/rules/text-animations.md +20 -0
  103. package/templates/.claude/skills/remotion-best-practices/rules/timing.md +179 -0
  104. package/templates/.claude/skills/remotion-best-practices/rules/transcribe-captions.md +19 -0
  105. package/templates/.claude/skills/remotion-best-practices/rules/transitions.md +122 -0
  106. package/templates/.claude/skills/remotion-best-practices/rules/trimming.md +53 -0
  107. package/templates/.claude/skills/remotion-best-practices/rules/videos.md +171 -0
  108. package/templates/.claude/skills/remotion-components/SKILL.md +453 -0
  109. package/templates/.claude/skills/render-config/SKILL.md +290 -0
  110. package/templates/.claude/skills/script-writer/SKILL.md +59 -0
  111. package/templates/.claude/skills/style-director/script-writer/SKILL.md +82 -0
  112. package/templates/.claude/skills/style-director/style-director/SKILL.md +287 -0
  113. package/templates/.claude/skills/style-director/style-director/references/audience-and-scenarios.md +43 -0
  114. package/templates/.claude/skills/style-director/style-director/references/interaction-innovation.md +26 -0
  115. package/templates/.claude/skills/style-director/style-director/references/motion-grammar.md +66 -0
  116. package/templates/.claude/skills/style-director/style-director/references/quality-checklist.md +29 -0
  117. package/templates/.claude/skills/style-director/style-director/references/scene-recipes.md +38 -0
  118. package/templates/.claude/skills/style-director/style-director/references/visual-style-system.md +148 -0
  119. package/templates/.claude/skills/subtitle-composer/SKILL.md +304 -0
  120. package/templates/.claude/skills/subtitle-processor/SKILL.md +308 -0
  121. package/templates/.claude/skills/timeline-generator/SKILL.md +253 -0
  122. package/templates/.claude/skills/video-preflight-check/SKILL.md +353 -0
  123. package/templates/.claude/skills/voice-synthesizer/SKILL.md +296 -0
  124. package/templates/.claude/skills/voice-synthesizer/scripts/synthesize_voice.py +315 -0
  125. package/templates/.claude/skills/voice-synthesizer/scripts/tts_cli.py +142 -0
  126. package/templates/.claude/skills/web-design-guidelines/SKILL.md +36 -0
  127. package/templates/.claude/skills/youtube-downloader/SKILL.md +99 -0
  128. package/templates/.claude/skills/youtube-downloader/scripts/download_video.py +145 -0
@@ -0,0 +1,145 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ YouTube Video Downloader
4
+ Downloads videos from YouTube with customizable quality and format options.
5
+ """
6
+
7
+ import argparse
8
+ import sys
9
+ import subprocess
10
+ import json
11
+
12
+
13
+ def check_yt_dlp():
14
+ """Check if yt-dlp is installed, install if not."""
15
+ try:
16
+ subprocess.run(["yt-dlp", "--version"], capture_output=True, check=True)
17
+ except (subprocess.CalledProcessError, FileNotFoundError):
18
+ print("yt-dlp not found. Installing...")
19
+ subprocess.run([sys.executable, "-m", "pip", "install", "--break-system-packages", "yt-dlp"], check=True)
20
+
21
+
22
+ def get_video_info(url):
23
+ """Get information about the video without downloading."""
24
+ result = subprocess.run(
25
+ ["yt-dlp", "--dump-json", "--no-playlist", url],
26
+ capture_output=True,
27
+ text=True,
28
+ check=True
29
+ )
30
+ return json.loads(result.stdout)
31
+
32
+
33
+ def download_video(url, output_path="/mnt/user-data/outputs", quality="best", format_type="mp4", audio_only=False):
34
+ """
35
+ Download a YouTube video.
36
+
37
+ Args:
38
+ url: YouTube video URL
39
+ output_path: Directory to save the video
40
+ quality: Quality setting (best, 1080p, 720p, 480p, 360p, worst)
41
+ format_type: Output format (mp4, webm, mkv, etc.)
42
+ audio_only: Download only audio (mp3)
43
+ """
44
+ check_yt_dlp()
45
+
46
+ # Build command
47
+ cmd = ["yt-dlp"]
48
+
49
+ if audio_only:
50
+ cmd.extend([
51
+ "-x", # Extract audio
52
+ "--audio-format", "mp3",
53
+ "--audio-quality", "0", # Best quality
54
+ ])
55
+ else:
56
+ # Video quality settings
57
+ if quality == "best":
58
+ format_string = "bestvideo+bestaudio/best"
59
+ elif quality == "worst":
60
+ format_string = "worstvideo+worstaudio/worst"
61
+ else:
62
+ # Specific resolution (e.g., 1080p, 720p)
63
+ height = quality.replace("p", "")
64
+ format_string = f"bestvideo[height<={height}]+bestaudio/best[height<={height}]"
65
+
66
+ cmd.extend([
67
+ "-f", format_string,
68
+ "--merge-output-format", format_type,
69
+ ])
70
+
71
+ # Output template
72
+ cmd.extend([
73
+ "-o", f"{output_path}/%(title)s.%(ext)s",
74
+ "--no-playlist", # Don't download playlists by default
75
+ ])
76
+
77
+ cmd.append(url)
78
+
79
+ print(f"Downloading from: {url}")
80
+ print(f"Quality: {quality}")
81
+ print(f"Format: {'mp3 (audio only)' if audio_only else format_type}")
82
+ print(f"Output: {output_path}\n")
83
+
84
+ try:
85
+ # Get video info first
86
+ info = get_video_info(url)
87
+ print(f"Title: {info.get('title', 'Unknown')}")
88
+ print(f"Duration: {info.get('duration', 0) // 60}:{info.get('duration', 0) % 60:02d}")
89
+ print(f"Uploader: {info.get('uploader', 'Unknown')}\n")
90
+
91
+ # Download the video
92
+ subprocess.run(cmd, check=True)
93
+ print(f"\n✅ Download complete!")
94
+ return True
95
+ except subprocess.CalledProcessError as e:
96
+ print(f"\n❌ Error downloading video: {e}")
97
+ return False
98
+ except Exception as e:
99
+ print(f"\n❌ Error: {e}")
100
+ return False
101
+
102
+
103
+ def main():
104
+ parser = argparse.ArgumentParser(
105
+ description="Download YouTube videos with customizable quality and format"
106
+ )
107
+ parser.add_argument("url", help="YouTube video URL")
108
+ parser.add_argument(
109
+ "-o", "--output",
110
+ default="/mnt/user-data/outputs",
111
+ help="Output directory (default: /mnt/user-data/outputs)"
112
+ )
113
+ parser.add_argument(
114
+ "-q", "--quality",
115
+ default="best",
116
+ choices=["best", "1080p", "720p", "480p", "360p", "worst"],
117
+ help="Video quality (default: best)"
118
+ )
119
+ parser.add_argument(
120
+ "-f", "--format",
121
+ default="mp4",
122
+ choices=["mp4", "webm", "mkv"],
123
+ help="Video format (default: mp4)"
124
+ )
125
+ parser.add_argument(
126
+ "-a", "--audio-only",
127
+ action="store_true",
128
+ help="Download only audio as MP3"
129
+ )
130
+
131
+ args = parser.parse_args()
132
+
133
+ success = download_video(
134
+ url=args.url,
135
+ output_path=args.output,
136
+ quality=args.quality,
137
+ format_type=args.format,
138
+ audio_only=args.audio_only
139
+ )
140
+
141
+ sys.exit(0 if success else 1)
142
+
143
+
144
+ if __name__ == "__main__":
145
+ main()