@mevdragon/vidfarm-devcli 0.2.13 → 0.3.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 (200) hide show
  1. package/README.md +11 -4
  2. package/SKILL.director.md +97 -0
  3. package/SKILL.platform.md +66 -6
  4. package/dist/src/cli.js +137 -1524
  5. package/dist/src/dev-serve.js +169 -0
  6. package/package.json +5 -24
  7. package/.env.example +0 -60
  8. package/auto-create-hyperframe-templates/AUTO_CREATE_HYPERFRAME_TEMPLATES.md +0 -275
  9. package/auto-create-hyperframe-templates/extractor-system-prompt.md +0 -128
  10. package/auto-create-hyperframe-templates/input-manifest.schema.json +0 -56
  11. package/auto-create-hyperframe-templates/lambda-memory-estimator.md +0 -118
  12. package/auto-create-hyperframe-templates/production-graph.schema.json +0 -314
  13. package/auto-create-hyperframe-templates/runbook.md +0 -198
  14. package/auto-create-hyperframe-templates/scripts/create-hyperframe-template.mjs +0 -368
  15. package/auto-create-hyperframe-templates/template-plan.schema.json +0 -311
  16. package/auto-create-hyperframe-templates/template-planner-prompt.md +0 -144
  17. package/auto-create-templates/AUTO_CREATE_TEMPLATES.md +0 -599
  18. package/auto-create-templates/extractor-system-prompt.md +0 -119
  19. package/auto-create-templates/production-graph.schema.json +0 -276
  20. package/auto-create-templates/runbook.md +0 -140
  21. package/auto-create-templates/template-plan.schema.json +0 -301
  22. package/auto-create-templates/template-planner-prompt.md +0 -137
  23. package/dist/src/account-pages-legacy.js +0 -9336
  24. package/dist/src/account-pages-legacy.js.map +0 -1
  25. package/dist/src/account-pages.js +0 -61
  26. package/dist/src/account-pages.js.map +0 -1
  27. package/dist/src/app.js +0 -14023
  28. package/dist/src/app.js.map +0 -1
  29. package/dist/src/cli.js.map +0 -1
  30. package/dist/src/composition-runtime.js +0 -581
  31. package/dist/src/composition-runtime.js.map +0 -1
  32. package/dist/src/config.js +0 -140
  33. package/dist/src/config.js.map +0 -1
  34. package/dist/src/context.js +0 -492
  35. package/dist/src/context.js.map +0 -1
  36. package/dist/src/dev-app-legacy.js +0 -694
  37. package/dist/src/dev-app-legacy.js.map +0 -1
  38. package/dist/src/dev-app.js +0 -6
  39. package/dist/src/dev-app.js.map +0 -1
  40. package/dist/src/domain.js +0 -2
  41. package/dist/src/domain.js.map +0 -1
  42. package/dist/src/editor-chat-history.js +0 -82
  43. package/dist/src/editor-chat-history.js.map +0 -1
  44. package/dist/src/editor-chat.js +0 -311
  45. package/dist/src/editor-chat.js.map +0 -1
  46. package/dist/src/frontend/flockposter-cache-store.js +0 -124
  47. package/dist/src/frontend/flockposter-cache-store.js.map +0 -1
  48. package/dist/src/frontend/homepage-client.js +0 -117
  49. package/dist/src/frontend/homepage-client.js.map +0 -1
  50. package/dist/src/frontend/homepage-shared.js +0 -4
  51. package/dist/src/frontend/homepage-shared.js.map +0 -1
  52. package/dist/src/frontend/homepage-store.js +0 -28
  53. package/dist/src/frontend/homepage-store.js.map +0 -1
  54. package/dist/src/frontend/homepage-view.js +0 -260
  55. package/dist/src/frontend/homepage-view.js.map +0 -1
  56. package/dist/src/frontend/page-runtime-client.js +0 -103
  57. package/dist/src/frontend/page-runtime-client.js.map +0 -1
  58. package/dist/src/frontend/page-runtime-store.js +0 -9
  59. package/dist/src/frontend/page-runtime-store.js.map +0 -1
  60. package/dist/src/frontend/sentry.js +0 -42
  61. package/dist/src/frontend/sentry.js.map +0 -1
  62. package/dist/src/frontend/template-editor-chat.js +0 -3767
  63. package/dist/src/frontend/template-editor-chat.js.map +0 -1
  64. package/dist/src/help-page.js +0 -333
  65. package/dist/src/help-page.js.map +0 -1
  66. package/dist/src/homepage.js +0 -919
  67. package/dist/src/homepage.js.map +0 -1
  68. package/dist/src/hyperframes/composition.js +0 -180
  69. package/dist/src/hyperframes/composition.js.map +0 -1
  70. package/dist/src/index.js +0 -16
  71. package/dist/src/index.js.map +0 -1
  72. package/dist/src/instrument.js +0 -30
  73. package/dist/src/instrument.js.map +0 -1
  74. package/dist/src/lib/crypto.js +0 -45
  75. package/dist/src/lib/crypto.js.map +0 -1
  76. package/dist/src/lib/dev-log.js +0 -54
  77. package/dist/src/lib/dev-log.js.map +0 -1
  78. package/dist/src/lib/display-name.js +0 -11
  79. package/dist/src/lib/display-name.js.map +0 -1
  80. package/dist/src/lib/ids.js +0 -24
  81. package/dist/src/lib/ids.js.map +0 -1
  82. package/dist/src/lib/images.js +0 -19
  83. package/dist/src/lib/images.js.map +0 -1
  84. package/dist/src/lib/json.js +0 -15
  85. package/dist/src/lib/json.js.map +0 -1
  86. package/dist/src/lib/template-dna.js +0 -543
  87. package/dist/src/lib/template-dna.js.map +0 -1
  88. package/dist/src/lib/template-paths.js +0 -28
  89. package/dist/src/lib/template-paths.js.map +0 -1
  90. package/dist/src/lib/template-style-options.js +0 -203
  91. package/dist/src/lib/template-style-options.js.map +0 -1
  92. package/dist/src/lib/time.js +0 -7
  93. package/dist/src/lib/time.js.map +0 -1
  94. package/dist/src/lib/video-quality-harness.js +0 -60
  95. package/dist/src/lib/video-quality-harness.js.map +0 -1
  96. package/dist/src/page-runtime.js +0 -2
  97. package/dist/src/page-runtime.js.map +0 -1
  98. package/dist/src/page-shell.js +0 -2393
  99. package/dist/src/page-shell.js.map +0 -1
  100. package/dist/src/primitive-context.js +0 -299
  101. package/dist/src/primitive-context.js.map +0 -1
  102. package/dist/src/primitive-registry.js +0 -2181
  103. package/dist/src/primitive-registry.js.map +0 -1
  104. package/dist/src/primitive-sdk.js +0 -4
  105. package/dist/src/primitive-sdk.js.map +0 -1
  106. package/dist/src/primitives/remotion/html-image.js +0 -30
  107. package/dist/src/primitives/remotion/html-image.js.map +0 -1
  108. package/dist/src/primitives/remotion/media-slideshow.js +0 -60
  109. package/dist/src/primitives/remotion/media-slideshow.js.map +0 -1
  110. package/dist/src/react-page-shell.js +0 -35
  111. package/dist/src/react-page-shell.js.map +0 -1
  112. package/dist/src/ready-post-schedule-component.js +0 -1515
  113. package/dist/src/ready-post-schedule-component.js.map +0 -1
  114. package/dist/src/registry.js +0 -296
  115. package/dist/src/registry.js.map +0 -1
  116. package/dist/src/runtime.js +0 -31
  117. package/dist/src/runtime.js.map +0 -1
  118. package/dist/src/services/api-call-history.js +0 -249
  119. package/dist/src/services/api-call-history.js.map +0 -1
  120. package/dist/src/services/auth.js +0 -152
  121. package/dist/src/services/auth.js.map +0 -1
  122. package/dist/src/services/billing.js +0 -231
  123. package/dist/src/services/billing.js.map +0 -1
  124. package/dist/src/services/chat-threads.js +0 -92
  125. package/dist/src/services/chat-threads.js.map +0 -1
  126. package/dist/src/services/fork-access.js +0 -94
  127. package/dist/src/services/fork-access.js.map +0 -1
  128. package/dist/src/services/ghostcut.js +0 -132
  129. package/dist/src/services/ghostcut.js.map +0 -1
  130. package/dist/src/services/hyperframes.js +0 -1014
  131. package/dist/src/services/hyperframes.js.map +0 -1
  132. package/dist/src/services/job-capacity.js +0 -14
  133. package/dist/src/services/job-capacity.js.map +0 -1
  134. package/dist/src/services/job-logs.js +0 -197
  135. package/dist/src/services/job-logs.js.map +0 -1
  136. package/dist/src/services/jobs.js +0 -136
  137. package/dist/src/services/jobs.js.map +0 -1
  138. package/dist/src/services/media-processing.js +0 -743
  139. package/dist/src/services/media-processing.js.map +0 -1
  140. package/dist/src/services/primitive-media-lambda.js +0 -280
  141. package/dist/src/services/primitive-media-lambda.js.map +0 -1
  142. package/dist/src/services/providers.js +0 -2870
  143. package/dist/src/services/providers.js.map +0 -1
  144. package/dist/src/services/rate-limits.js +0 -237
  145. package/dist/src/services/rate-limits.js.map +0 -1
  146. package/dist/src/services/remotion.js +0 -688
  147. package/dist/src/services/remotion.js.map +0 -1
  148. package/dist/src/services/serverless-auth.js +0 -374
  149. package/dist/src/services/serverless-auth.js.map +0 -1
  150. package/dist/src/services/serverless-jobs.js +0 -1074
  151. package/dist/src/services/serverless-jobs.js.map +0 -1
  152. package/dist/src/services/serverless-provider-keys.js +0 -401
  153. package/dist/src/services/serverless-provider-keys.js.map +0 -1
  154. package/dist/src/services/serverless-records.js +0 -1086
  155. package/dist/src/services/serverless-records.js.map +0 -1
  156. package/dist/src/services/serverless-template-configs.js +0 -67
  157. package/dist/src/services/serverless-template-configs.js.map +0 -1
  158. package/dist/src/services/storage.js +0 -382
  159. package/dist/src/services/storage.js.map +0 -1
  160. package/dist/src/services/template-certification.js +0 -475
  161. package/dist/src/services/template-certification.js.map +0 -1
  162. package/dist/src/services/template-loader.js +0 -99
  163. package/dist/src/services/template-loader.js.map +0 -1
  164. package/dist/src/services/template-runtime-bundles.js +0 -217
  165. package/dist/src/services/template-runtime-bundles.js.map +0 -1
  166. package/dist/src/services/template-sources.js +0 -1017
  167. package/dist/src/services/template-sources.js.map +0 -1
  168. package/dist/src/services/video-normalization.js +0 -2
  169. package/dist/src/services/video-normalization.js.map +0 -1
  170. package/dist/src/services/webhooks.js +0 -62
  171. package/dist/src/services/webhooks.js.map +0 -1
  172. package/dist/src/template-editor-pages.js +0 -6624
  173. package/dist/src/template-editor-pages.js.map +0 -1
  174. package/dist/src/template-editor-shell.js +0 -2713
  175. package/dist/src/template-editor-shell.js.map +0 -1
  176. package/dist/src/template-sdk.js +0 -4
  177. package/dist/src/template-sdk.js.map +0 -1
  178. package/dist/src/worker.js +0 -17
  179. package/dist/src/worker.js.map +0 -1
  180. package/public/assets/homepage-app.js +0 -54
  181. package/public/assets/homepage-client-app.js +0 -80
  182. package/public/assets/page-runtime-client-app.js +0 -94
  183. package/readme.secret.md +0 -89
  184. package/templates/vidfarm_template_0000/README.md +0 -106
  185. package/templates/vidfarm_template_0000/SKILL.md +0 -266
  186. package/templates/vidfarm_template_0000/assets/Abel-Regular.ttf +0 -0
  187. package/templates/vidfarm_template_0000/assets/DMSerifDisplay-Regular.ttf +0 -0
  188. package/templates/vidfarm_template_0000/assets/Montserrat[wght].ttf +0 -0
  189. package/templates/vidfarm_template_0000/assets/SourceCodePro[wght].ttf +0 -0
  190. package/templates/vidfarm_template_0000/assets/TikTokSans-SemiBold.ttf +0 -0
  191. package/templates/vidfarm_template_0000/assets/Yesteryear-Regular.ttf +0 -0
  192. package/templates/vidfarm_template_0000/composition.json +0 -11
  193. package/templates/vidfarm_template_0000/src/lib/images.js +0 -221
  194. package/templates/vidfarm_template_0000/src/remotion/Root.js +0 -33
  195. package/templates/vidfarm_template_0000/src/remotion/index.js +0 -3
  196. package/templates/vidfarm_template_0000/src/sdk.js +0 -3
  197. package/templates/vidfarm_template_0000/src/style-options.js +0 -200
  198. package/templates/vidfarm_template_0000/src/template-dna.js +0 -9
  199. package/templates/vidfarm_template_0000/src/template.js +0 -1566
  200. package/templates/vidfarm_template_0000/template.config.json +0 -21
@@ -1,119 +0,0 @@
1
- # Production Graph Extractor Prompt
2
-
3
- You are a Vidfarm template production analyst.
4
-
5
- Your job is to inspect one TikTok or short-form source format and extract the repeatable production process as structured JSON. Do not merely describe the video. Convert it into a reusable template recipe that can be implemented with Vidfarm operations, Remotion, AI image/video generation, TTS, STT, OCR, and user-supplied media slots.
6
-
7
- The viral DNA is the primary steering contract. The visual DNA is only preservation-critical when it materially supports the viral mechanism. Decide this explicitly before extracting implementation details.
8
-
9
- Return only JSON matching `production-graph.schema.json`.
10
-
11
- ## Inputs You May Receive
12
-
13
- - source notes
14
- - original URL and creator
15
- - full source video or preview images
16
- - contact sheet
17
- - representative frames
18
- - ffprobe metadata
19
- - scene cut list
20
- - STT transcript with word timestamps
21
- - OCR text from frames
22
- - viral DNA JSON
23
- - visual DNA JSON
24
- - viral steering and visual preservation decision, if already produced
25
-
26
- ## Extraction Rules
27
-
28
- - Treat all supplied media as one format.
29
- - Separate viral mechanism, visual system, and production implementation.
30
- - Use viral DNA to decide what the template must optimize for: hook, curiosity, emotional tension, status, proof, payoff, retention, share/save behavior, or native credibility.
31
- - Evaluate visual DNA through that viral lens. Mark each visual trait as critical, supportive, optional, or low-importance. Do not preserve visual details merely because they are visible.
32
- - Ignore TikTok platform chrome unless the creator-authored format intentionally imitates an app surface.
33
- - Identify which elements are fixed, variable, optional, or generated.
34
- - Extract exact or inferred durations for scenes, captions, overlays, transitions, zooms, holds, and loop points.
35
- - Treat timing as a reusable control surface. If a source slot has a duration, decide whether future users should be able to override it.
36
- - Strongly identify TikTok-native typography: font family match, weight, case, outline, shadow, background chip, word highlight, line wrapping, line height, and fallback font stack.
37
- - Classify every important readable text surface as deterministic overlay text, source-media text, or AI-rendered poster/artifact text. Important captions, subtitles, UI labels, offers, prices, claims, and CTAs should default to deterministic overlay text unless the format is explicitly poster/artifact-native.
38
- - Treat fonts as an allowlist decision. Prefer approved Vidfarm font IDs where possible: `tiktok_sans_semibold`, `montserrat_semibold`, `source_code_pro_bold`, `georgia_bold`, or `abel`. Mark custom or AI-rendered typography as source-critical only when the viral mechanism depends on it.
39
- - When a text background color appears, classify it as an inline highlight chip unless the source clearly uses a deliberate poster panel. Record that the chip must be measured per wrapped line and must not become a full-width caption box or paragraph wash.
40
- - When white creator-authored TikTok captions appear, distinguish native radial black halo/outline from web-style directional drop shadow. Record centered multi-layer shadow/blur requirements when the shadow radiates around the glyphs.
41
- - When captions wrap across lines, record block-level rendering requirements: one shared font size and line height for the full multiline caption, shadow/outline applied to the whole block, and any per-line chip geometry derived after the shared layout. Do not recommend independently trimmed per-line text images.
42
- - Prefer deterministic Remotion/HTML composition for layout, captions, overlays, app UI, and final edit.
43
- - Do not force Remotion when it would become brittle. If the format depends on organic visual detail, character acting, cinematic continuity, generated texture, painterly style, or complex physical motion, mark it as AI-native prompt/reference or hybrid.
44
- - Use AI image/video only for assets that require generative content.
45
- - Use TTS/STT when audio drives timing, narration, or captions.
46
- - Identify compliance risks and avoid making copyrighted media or celebrity likenesses a required dependency.
47
-
48
- ## Required Analysis Dimensions
49
-
50
- Extract:
51
-
52
- - first-frame hook
53
- - viewer promise and payoff
54
- - viral steering rules that must survive every adaptation
55
- - visual preservation importance and rationale
56
- - timeline beats
57
- - scene/shot list
58
- - text overlays and captions
59
- - audio/narration/music/sfx
60
- - timing controls and duration ranges
61
- - font and caption styling controls
62
- - camera moves and edit rhythm
63
- - UI/screenshot/app surfaces
64
- - generated-image or generated-video needs
65
- - media replacement slots
66
- - Remotion ceiling risk: what would become too brittle if hand-assembled
67
- - architecture fit: `remotion`, `ai_native_reference`, `hybrid`, or `manual_review`
68
- - character bible and identity consistency requirements when the same AI-generated character appears across scenes
69
- - storyboard/keyframe workflow requirements for full AI character videos
70
- - pointing/circling/magnifying/highlight effects
71
- - transition rules
72
- - safe areas and layout constraints
73
- - provider/tool dependencies
74
- - validation checklist
75
- - output quality harness gates: preflight, asset check, composition check, final-output check, and targeted retry rules
76
-
77
- ## Implementation Classification
78
-
79
- For every meaningful element choose one implementation:
80
-
81
- - `remotion`: deterministic layout, captions, overlays, cuts, zooms, UI, final render
82
- - `html_canvas`: static or frame-based graphic composition
83
- - `ai_image`: generated still image or edited reference
84
- - `ai_video`: generated motion clip
85
- - `ai_native_reference`: whole asset or scene generated from source DNA and reference attachments instead of deterministic layer reconstruction
86
- - `tts`: generated speech
87
- - `stt`: transcription and word timing
88
- - `ocr`: source text extraction
89
- - `user_upload`: caller must provide media
90
- - `external_clip`: caller-provided clip; do not fetch copyrighted media automatically
91
- - `media_search`: optional search/reference gathering
92
- - `manual_review`: human must approve or adjust
93
-
94
- ## Full AI Character Video Detection
95
-
96
- If the source appears to be a full AI-generated video with recurring characters, extract it as a character-consistency workflow. Look for consistent faces, wardrobe, body shape, art material, recurring props, repeated locations, or the same mascot/person acting across multiple scenes.
97
-
98
- When detected, the production graph should require:
99
-
100
- - `create_character_cards`: character sprite/reference cards and a character bible
101
- - `create_storyboard`: image storyboard or keyframes for the full video
102
- - `generate_scene_videos`: one generated video clip per scene
103
- - `stitch_video`: final Remotion assembly for clips, captions, audio, timing, and overlays
104
-
105
- Do not recommend frame-by-frame character acting in Remotion. Remotion is the editor/stitcher for this case; AI image/video generation owns the character motion and scene content.
106
-
107
- ## Output Bias
108
-
109
- Be concrete. A production graph should be implementable.
110
-
111
- Bad: "Use engaging captions and quick cuts."
112
-
113
- Good: "Render 2-line white uppercase captions centered at y=178 with black 2px shadow, max 22 characters per line, timed to word groups of 700-1400 ms. Insert 1.08x punch-in zoom on every sentence start."
114
-
115
- Typography bias: if the format uses creator-authored captions or overlays, default to TikTok-native typography. Prefer TikTok Sans Semibold when available; otherwise choose the closest checked-in or system fallback and record the fallback explicitly. Tune TikTok Sans wrapping, size, and line spacing separately from Montserrat or generic sans defaults. If a background color is present, describe inline line chips that hug the text. If a white caption needs contrast, describe a radial black halo/outline instead of a large one-direction web shadow.
116
-
117
- Viral preservation bias: if a choice conflicts between visual sameness and viral effectiveness, preserve the viral mechanism first. Example: if the source wins because of a shocking first-frame claim, preserve the claim structure and pacing even if the background scene changes. If it wins because of a recognizable fake-chat, notification, or game UI container, then visual preservation is likely critical.
118
-
119
- Architecture bias: Remotion is excellent for deterministic layout and edit assembly, but brittle for highly organic visuals. Prefer AI-native reference prompting when exact layer reconstruction would be more fragile than asking a capable image/video model to regenerate the style and scene directly.
@@ -1,276 +0,0 @@
1
- {
2
- "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "title": "Vidfarm Auto Template Production Graph",
4
- "type": "object",
5
- "required": [
6
- "format_summary",
7
- "classification",
8
- "viral_mechanics",
9
- "viral_steering",
10
- "visual_preservation",
11
- "visual_system",
12
- "timeline",
13
- "replaceable_slots",
14
- "production_strategy",
15
- "dependencies",
16
- "validation"
17
- ],
18
- "properties": {
19
- "format_summary": {
20
- "type": "object",
21
- "required": ["title", "one_sentence", "source_kind", "duration_ms"],
22
- "properties": {
23
- "title": { "type": "string" },
24
- "one_sentence": { "type": "string" },
25
- "source_kind": { "type": "string" },
26
- "duration_ms": { "type": "integer", "minimum": 0 },
27
- "aspect_ratio": { "type": "string" },
28
- "resolution": { "type": "string" }
29
- }
30
- },
31
- "classification": {
32
- "type": "object",
33
- "required": ["difficulty", "primary_container", "recognition_mode", "recommended_architecture"],
34
- "properties": {
35
- "difficulty": { "enum": ["easy", "medium", "hard"] },
36
- "primary_container": { "type": "string" },
37
- "recognition_mode": { "enum": ["presentation-centric", "character-centric", "vibe-centric", "mixed"] },
38
- "recommended_architecture": {
39
- "enum": [
40
- "static_composite",
41
- "ai_image",
42
- "ai_native_reference",
43
- "slideshow_remotion",
44
- "captioned_source_clip",
45
- "ui_shell_remotion",
46
- "ugc_edit",
47
- "storyboard_to_video",
48
- "full_ai_character_video",
49
- "animated_explainer",
50
- "hybrid"
51
- ]
52
- }
53
- }
54
- },
55
- "viral_mechanics": {
56
- "type": "object",
57
- "properties": {
58
- "hook": { "type": "string" },
59
- "curiosity_gap": { "type": "string" },
60
- "emotional_trigger": { "type": "string" },
61
- "payoff": { "type": "string" },
62
- "loop_or_rewatch_driver": { "type": "string" }
63
- }
64
- },
65
- "viral_steering": {
66
- "type": "object",
67
- "required": ["must_preserve", "must_not_dilute", "generation_rules", "validation_checks"],
68
- "properties": {
69
- "must_preserve": { "type": "array", "items": { "type": "string" } },
70
- "must_not_dilute": { "type": "array", "items": { "type": "string" } },
71
- "generation_rules": { "type": "array", "items": { "type": "string" } },
72
- "validation_checks": { "type": "array", "items": { "type": "string" } }
73
- }
74
- },
75
- "visual_preservation": {
76
- "type": "object",
77
- "required": ["importance", "preserve_because", "preserve", "can_change"],
78
- "properties": {
79
- "importance": { "enum": ["critical", "supportive", "optional", "low"] },
80
- "preserve_because": { "type": "string" },
81
- "preserve": { "type": "array", "items": { "type": "string" } },
82
- "can_change": { "type": "array", "items": { "type": "string" } },
83
- "decision_notes": { "type": "array", "items": { "type": "string" } }
84
- }
85
- },
86
- "visual_system": {
87
- "type": "object",
88
- "properties": {
89
- "must_preserve": { "type": "array", "items": { "type": "string" } },
90
- "can_adapt": { "type": "array", "items": { "type": "string" } },
91
- "caption_rules": { "type": "array", "items": { "type": "string" } },
92
- "layout_rules": { "type": "array", "items": { "type": "string" } },
93
- "style_rules": { "type": "array", "items": { "type": "string" } }
94
- }
95
- },
96
- "timeline": {
97
- "type": "array",
98
- "items": {
99
- "type": "object",
100
- "required": ["id", "start_ms", "end_ms", "duration_ms", "role", "asset_kind", "replaceability", "implementation"],
101
- "properties": {
102
- "id": { "type": "string" },
103
- "start_ms": { "type": "integer", "minimum": 0 },
104
- "end_ms": { "type": "integer", "minimum": 0 },
105
- "duration_ms": { "type": "integer", "minimum": 0 },
106
- "role": { "type": "string" },
107
- "description": { "type": "string" },
108
- "asset_kind": {
109
- "enum": [
110
- "source_video",
111
- "generated_video",
112
- "generated_image",
113
- "uploaded_image",
114
- "uploaded_video",
115
- "rendered_ui",
116
- "text",
117
- "audio",
118
- "shape",
119
- "effect"
120
- ]
121
- },
122
- "replaceability": { "enum": ["fixed", "variable", "optional", "generated"] },
123
- "implementation": {
124
- "enum": [
125
- "remotion",
126
- "html_canvas",
127
- "ai_image",
128
- "ai_video",
129
- "tts",
130
- "stt",
131
- "ocr",
132
- "user_upload",
133
- "external_clip",
134
- "media_search",
135
- "manual_review"
136
- ]
137
- },
138
- "inputs": { "type": "array", "items": { "type": "string" } },
139
- "outputs": { "type": "array", "items": { "type": "string" } },
140
- "timing_notes": { "type": "string" },
141
- "layout_notes": { "type": "string" },
142
- "safe_area_notes": { "type": "string" },
143
- "validation_notes": { "type": "string" }
144
- }
145
- }
146
- },
147
- "timing_controls": {
148
- "type": "object",
149
- "properties": {
150
- "total_duration_ms": { "type": "integer", "minimum": 0 },
151
- "user_configurable": { "type": "boolean" },
152
- "default_scene_duration_ms": { "type": "integer", "minimum": 0 },
153
- "default_transition_ms": { "type": "integer", "minimum": 0 },
154
- "default_hold_ms": { "type": "integer", "minimum": 0 },
155
- "min_slot_duration_ms": { "type": "integer", "minimum": 0 },
156
- "max_slot_duration_ms": { "type": "integer", "minimum": 0 },
157
- "caption_timing_mode": {
158
- "enum": ["transcript_word_timestamps", "fixed_groups", "manual_timestamps", "none"]
159
- },
160
- "notes": { "type": "array", "items": { "type": "string" } }
161
- }
162
- },
163
- "typography_controls": {
164
- "type": "object",
165
- "properties": {
166
- "user_configurable": { "type": "boolean" },
167
- "recommended_font": { "type": "string" },
168
- "fallback_fonts": { "type": "array", "items": { "type": "string" } },
169
- "font_size_rules": { "type": "array", "items": { "type": "string" } },
170
- "caption_style_rules": { "type": "array", "items": { "type": "string" } },
171
- "tiktok_native_match_notes": { "type": "array", "items": { "type": "string" } }
172
- }
173
- },
174
- "replaceable_slots": {
175
- "type": "array",
176
- "items": {
177
- "type": "object",
178
- "required": ["name", "kind", "required", "description"],
179
- "properties": {
180
- "name": { "type": "string" },
181
- "kind": {
182
- "enum": ["text", "image", "video", "audio", "product", "person", "app_screen", "url", "stat", "brand", "style", "cta"]
183
- },
184
- "required": { "type": "boolean" },
185
- "description": { "type": "string" },
186
- "constraints": { "type": "array", "items": { "type": "string" } },
187
- "default_generation_prompt": { "type": "string" }
188
- }
189
- }
190
- },
191
- "production_strategy": {
192
- "type": "object",
193
- "required": ["architecture_fit", "stages"],
194
- "properties": {
195
- "architecture_fit": {
196
- "enum": ["remotion", "ai_native_reference", "hybrid", "manual_review"]
197
- },
198
- "remotion_ceiling_risk": {
199
- "enum": ["low", "medium", "high"]
200
- },
201
- "architecture_rationale": { "type": "string" },
202
- "ai_native_reference_plan": {
203
- "type": "object",
204
- "properties": {
205
- "needed": { "type": "boolean" },
206
- "reference_inputs": { "type": "array", "items": { "type": "string" } },
207
- "prompt_contract": { "type": "array", "items": { "type": "string" } },
208
- "when_to_avoid_remotion": { "type": "array", "items": { "type": "string" } }
209
- }
210
- },
211
- "character_workflow": {
212
- "type": "object",
213
- "properties": {
214
- "detected": { "type": "boolean" },
215
- "consistency_level": { "enum": ["none", "light", "strict", "identity_locked"] },
216
- "characters": {
217
- "type": "array",
218
- "items": {
219
- "type": "object",
220
- "required": ["name", "role", "visual_identity"],
221
- "properties": {
222
- "name": { "type": "string" },
223
- "role": { "type": "string" },
224
- "visual_identity": { "type": "array", "items": { "type": "string" } },
225
- "wardrobe": { "type": "array", "items": { "type": "string" } },
226
- "props": { "type": "array", "items": { "type": "string" } },
227
- "reference_card_requirements": { "type": "array", "items": { "type": "string" } }
228
- }
229
- }
230
- },
231
- "required_operations": {
232
- "type": "array",
233
- "items": {
234
- "enum": ["create_character_cards", "create_storyboard", "generate_scene_videos", "stitch_video"]
235
- }
236
- },
237
- "storyboard_requirements": { "type": "array", "items": { "type": "string" } },
238
- "scene_video_requirements": { "type": "array", "items": { "type": "string" } }
239
- }
240
- },
241
- "stages": {
242
- "type": "array",
243
- "items": {
244
- "type": "object",
245
- "required": ["name", "purpose", "tools"],
246
- "properties": {
247
- "name": { "type": "string" },
248
- "purpose": { "type": "string" },
249
- "tools": { "type": "array", "items": { "type": "string" } },
250
- "outputs": { "type": "array", "items": { "type": "string" } }
251
- }
252
- }
253
- }
254
- }
255
- },
256
- "dependencies": {
257
- "type": "object",
258
- "properties": {
259
- "needs_remotion": { "type": "boolean" },
260
- "needs_ai_image": { "type": "boolean" },
261
- "needs_ai_video": { "type": "boolean" },
262
- "needs_tts": { "type": "boolean" },
263
- "needs_stt": { "type": "boolean" },
264
- "needs_ocr": { "type": "boolean" },
265
- "provider_notes": { "type": "array", "items": { "type": "string" } }
266
- }
267
- },
268
- "validation": {
269
- "type": "object",
270
- "properties": {
271
- "checks": { "type": "array", "items": { "type": "string" } },
272
- "known_risks": { "type": "array", "items": { "type": "string" } }
273
- }
274
- }
275
- }
276
- }
@@ -1,140 +0,0 @@
1
- # Auto-Create Template Runbook
2
-
3
- Use this runbook when a source TikTok/video should become a Vidfarm template.
4
-
5
- ## 1. Create A Run Folder
6
-
7
- ```bash
8
- RUN_ID="<format-slug>-$(date +%Y%m%d-%H%M%S)"
9
- mkdir -p "auto-create-templates/runs/${RUN_ID}"/{source,frames,audio,transcripts,ocr,motion,dna,extraction,plan}
10
- ```
11
-
12
- Copy source media and notes into `source/`.
13
-
14
- ## 2. Extract Basic Media Artifacts
15
-
16
- ```bash
17
- ffprobe -v error -show_entries format=duration:stream=codec_type,width,height,avg_frame_rate -of json source/source.mp4 \
18
- > "auto-create-templates/runs/${RUN_ID}/source/ffprobe.json"
19
-
20
- ffmpeg -y -i source/source.mp4 \
21
- -vf "fps=1/2,scale=240:-1,tile=3x4" \
22
- -frames:v 1 "auto-create-templates/runs/${RUN_ID}/frames/contact-sheet.jpg"
23
-
24
- ffmpeg -y -i source/source.mp4 \
25
- -vn -ac 1 -ar 16000 "auto-create-templates/runs/${RUN_ID}/audio/source.wav"
26
- ```
27
-
28
- Add scene detection, OCR, and STT with whichever local tool/provider is available. The important part is writing results into the run folder so the extraction prompt can cite concrete timing and text.
29
-
30
- ## 3. Scaffold Template And Run DNA
31
-
32
- ```bash
33
- npx @mevdragon/vidfarm-devcli generate-template \
34
- --slug-id <slug_id> \
35
- --template-dir ./templates/vidfarm_template_<slug> \
36
- --source-notes-path ./drafts/<format_slug>/source.md \
37
- --source-preview-dir ./drafts/<format_slug>/preview \
38
- --link-to-original "<original_url>"
39
- ```
40
-
41
- If DNA did not run during scaffold:
42
-
43
- ```bash
44
- npx @mevdragon/vidfarm-devcli analyze-viral-dna --template-dir ./templates/vidfarm_template_<slug>
45
- npx @mevdragon/vidfarm-devcli analyze-visual-dna --template-dir ./templates/vidfarm_template_<slug>
46
- ```
47
-
48
- Copy `research/viral_dna.extraction.json` and `research/visual_dna.extraction.json` into the run folder.
49
-
50
- ## 4. Decide Viral Steering And Visual Preservation
51
-
52
- Before generating the production graph, create:
53
-
54
- ```txt
55
- auto-create-templates/runs/<run_id>/dna/preservation_decision.json
56
- ```
57
-
58
- This decision must be viral-first:
59
-
60
- - extract the hook, tension, payoff, retention, and share/save mechanics from viral DNA
61
- - decide which visual traits materially support those mechanics
62
- - mark visual preservation as `critical`, `supportive`, `optional`, or `low`
63
- - list what must be preserved and what can vary
64
-
65
- Do not preserve visual traits blindly. Some formats win because of the visual container; others win because of premise, pacing, voice, or story.
66
-
67
- ## 5. Decide Architecture Fit
68
-
69
- Before generating the production graph, also decide whether the format is:
70
-
71
- - `remotion`: deterministic layout/edit assembly is robust
72
- - `ai_native_reference`: source-faithful prompt/reference generation is more robust than layer reconstruction
73
- - `hybrid`: AI generates complex assets; Remotion assembles, captions, crops, times, and packages
74
- - `manual_review`: legal, likeness, copyright, or complexity risk needs human approval
75
-
76
- Mark `remotion_ceiling_risk` as `low`, `medium`, or `high`. High risk means the source has organic visual style, complex character acting, cinematic motion, dense texture, or too many brittle layers to rebuild deterministically.
77
-
78
- Also detect whether this is a `full_ai_character_video`. If the same generated character, mascot, clay figure, anime figure, game character, or illustrated persona appears across multiple scenes, plan the character workflow:
79
-
80
- - `create_character_cards`
81
- - `create_storyboard`
82
- - `generate_scene_videos`
83
- - `stitch_video`
84
-
85
- The key decision is whether identity consistency is `light`, `strict`, or `identity_locked`. Strict and identity-locked workflows should create reusable character cards before storyboarding.
86
-
87
- ## 6. Generate Production Graph
88
-
89
- Send the extractor prompt, source notes, media artifacts, DNA files, preservation decision, and contact sheet to a multimodal model.
90
-
91
- Write the result to:
92
-
93
- ```txt
94
- auto-create-templates/runs/<run_id>/extraction/production_graph.json
95
- ```
96
-
97
- Validate against:
98
-
99
- ```txt
100
- auto-create-templates/production-graph.schema.json
101
- ```
102
-
103
- ## 7. Generate Template Plan
104
-
105
- Send the template planner prompt plus `production_graph.json`.
106
-
107
- Write the result to:
108
-
109
- ```txt
110
- auto-create-templates/runs/<run_id>/plan/template_plan.json
111
- ```
112
-
113
- Validate against:
114
-
115
- ```txt
116
- auto-create-templates/template-plan.schema.json
117
- ```
118
-
119
- ## 8. Implement
120
-
121
- Implementation should usually happen in this order:
122
-
123
- 1. update `src/template.ts` metadata and schemas
124
- 2. persist viral steering and visual preservation rules in metadata, prompt constants/comments, and docs
125
- 3. implement operation workflows
126
- 4. add Remotion composition only when the architecture fit calls for it
127
- 5. wire storage outputs and manifests
128
- 6. update template-local `SKILL.md`
129
- 7. add representative smoke test payloads
130
-
131
- ## 9. Validate
132
-
133
- ```bash
134
- npx @mevdragon/vidfarm-devcli validate-template --template-id <slug_id>
135
- npx @mevdragon/vidfarm-devcli session
136
- ```
137
-
138
- Launch at least one local job through the standard operation endpoint and inspect output artifacts.
139
-
140
- The generated output should be checked for viral compliance, not just render correctness.