@mevdragon/vidfarm-devcli 0.2.14 → 0.3.1
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 +11 -4
- package/SKILL.director.md +100 -0
- package/SKILL.platform.md +66 -6
- package/dist/src/cli.js +135 -1527
- package/package.json +5 -24
- package/.env.example +0 -60
- package/auto-create-hyperframe-templates/AUTO_CREATE_HYPERFRAME_TEMPLATES.md +0 -275
- package/auto-create-hyperframe-templates/extractor-system-prompt.md +0 -128
- package/auto-create-hyperframe-templates/input-manifest.schema.json +0 -56
- package/auto-create-hyperframe-templates/lambda-memory-estimator.md +0 -118
- package/auto-create-hyperframe-templates/production-graph.schema.json +0 -314
- package/auto-create-hyperframe-templates/runbook.md +0 -198
- package/auto-create-hyperframe-templates/scripts/create-hyperframe-template.mjs +0 -368
- package/auto-create-hyperframe-templates/template-plan.schema.json +0 -311
- package/auto-create-hyperframe-templates/template-planner-prompt.md +0 -144
- package/auto-create-templates/AUTO_CREATE_TEMPLATES.md +0 -599
- package/auto-create-templates/extractor-system-prompt.md +0 -119
- package/auto-create-templates/production-graph.schema.json +0 -276
- package/auto-create-templates/runbook.md +0 -140
- package/auto-create-templates/template-plan.schema.json +0 -301
- package/auto-create-templates/template-planner-prompt.md +0 -137
- package/dist/src/account-pages-legacy.js +0 -9338
- package/dist/src/account-pages-legacy.js.map +0 -1
- package/dist/src/account-pages.js +0 -52
- package/dist/src/account-pages.js.map +0 -1
- package/dist/src/app.js +0 -13711
- package/dist/src/app.js.map +0 -1
- package/dist/src/cli.js.map +0 -1
- package/dist/src/composition-runtime.js +0 -581
- package/dist/src/composition-runtime.js.map +0 -1
- package/dist/src/config.js +0 -140
- package/dist/src/config.js.map +0 -1
- package/dist/src/context.js +0 -492
- package/dist/src/context.js.map +0 -1
- package/dist/src/dev-app-legacy.js +0 -694
- package/dist/src/dev-app-legacy.js.map +0 -1
- package/dist/src/dev-app.js +0 -6
- package/dist/src/dev-app.js.map +0 -1
- package/dist/src/dev-serve.js.map +0 -1
- package/dist/src/domain.js +0 -2
- package/dist/src/domain.js.map +0 -1
- package/dist/src/editor-chat-history.js +0 -82
- package/dist/src/editor-chat-history.js.map +0 -1
- package/dist/src/editor-chat.js +0 -312
- package/dist/src/editor-chat.js.map +0 -1
- package/dist/src/editor-dark-theme.js +0 -1128
- package/dist/src/editor-dark-theme.js.map +0 -1
- package/dist/src/frontend/flockposter-cache-store.js +0 -124
- package/dist/src/frontend/flockposter-cache-store.js.map +0 -1
- package/dist/src/frontend/homepage-client.js +0 -117
- package/dist/src/frontend/homepage-client.js.map +0 -1
- package/dist/src/frontend/homepage-shared.js +0 -4
- package/dist/src/frontend/homepage-shared.js.map +0 -1
- package/dist/src/frontend/homepage-store.js +0 -28
- package/dist/src/frontend/homepage-store.js.map +0 -1
- package/dist/src/frontend/homepage-view.js +0 -260
- package/dist/src/frontend/homepage-view.js.map +0 -1
- package/dist/src/frontend/page-runtime-client.js +0 -124
- package/dist/src/frontend/page-runtime-client.js.map +0 -1
- package/dist/src/frontend/page-runtime-store.js +0 -9
- package/dist/src/frontend/page-runtime-store.js.map +0 -1
- package/dist/src/frontend/sentry.js +0 -42
- package/dist/src/frontend/sentry.js.map +0 -1
- package/dist/src/frontend/template-editor-chat.js +0 -3760
- package/dist/src/frontend/template-editor-chat.js.map +0 -1
- package/dist/src/help-page.js +0 -333
- package/dist/src/help-page.js.map +0 -1
- package/dist/src/homepage.js +0 -919
- package/dist/src/homepage.js.map +0 -1
- package/dist/src/hyperframes/composition.js +0 -180
- package/dist/src/hyperframes/composition.js.map +0 -1
- package/dist/src/index.js +0 -16
- package/dist/src/index.js.map +0 -1
- package/dist/src/instrument.js +0 -30
- package/dist/src/instrument.js.map +0 -1
- package/dist/src/lib/crypto.js +0 -45
- package/dist/src/lib/crypto.js.map +0 -1
- package/dist/src/lib/dev-log.js +0 -54
- package/dist/src/lib/dev-log.js.map +0 -1
- package/dist/src/lib/display-name.js +0 -11
- package/dist/src/lib/display-name.js.map +0 -1
- package/dist/src/lib/ids.js +0 -24
- package/dist/src/lib/ids.js.map +0 -1
- package/dist/src/lib/images.js +0 -19
- package/dist/src/lib/images.js.map +0 -1
- package/dist/src/lib/json.js +0 -15
- package/dist/src/lib/json.js.map +0 -1
- package/dist/src/lib/template-dna.js +0 -543
- package/dist/src/lib/template-dna.js.map +0 -1
- package/dist/src/lib/template-paths.js +0 -28
- package/dist/src/lib/template-paths.js.map +0 -1
- package/dist/src/lib/template-style-options.js +0 -203
- package/dist/src/lib/template-style-options.js.map +0 -1
- package/dist/src/lib/time.js +0 -7
- package/dist/src/lib/time.js.map +0 -1
- package/dist/src/lib/video-quality-harness.js +0 -60
- package/dist/src/lib/video-quality-harness.js.map +0 -1
- package/dist/src/page-runtime.js +0 -2
- package/dist/src/page-runtime.js.map +0 -1
- package/dist/src/page-shell.js +0 -1315
- package/dist/src/page-shell.js.map +0 -1
- package/dist/src/primitive-context.js +0 -299
- package/dist/src/primitive-context.js.map +0 -1
- package/dist/src/primitive-registry.js +0 -2181
- package/dist/src/primitive-registry.js.map +0 -1
- package/dist/src/primitive-sdk.js +0 -4
- package/dist/src/primitive-sdk.js.map +0 -1
- package/dist/src/primitives/remotion/html-image.js +0 -30
- package/dist/src/primitives/remotion/html-image.js.map +0 -1
- package/dist/src/primitives/remotion/media-slideshow.js +0 -60
- package/dist/src/primitives/remotion/media-slideshow.js.map +0 -1
- package/dist/src/react-page-shell.js +0 -35
- package/dist/src/react-page-shell.js.map +0 -1
- package/dist/src/ready-post-schedule-component.js +0 -1515
- package/dist/src/ready-post-schedule-component.js.map +0 -1
- package/dist/src/registry.js +0 -296
- package/dist/src/registry.js.map +0 -1
- package/dist/src/runtime.js +0 -31
- package/dist/src/runtime.js.map +0 -1
- package/dist/src/services/api-call-history.js +0 -249
- package/dist/src/services/api-call-history.js.map +0 -1
- package/dist/src/services/auth.js +0 -152
- package/dist/src/services/auth.js.map +0 -1
- package/dist/src/services/billing.js +0 -231
- package/dist/src/services/billing.js.map +0 -1
- package/dist/src/services/chat-threads.js +0 -92
- package/dist/src/services/chat-threads.js.map +0 -1
- package/dist/src/services/fork-access.js +0 -93
- package/dist/src/services/fork-access.js.map +0 -1
- package/dist/src/services/fork-manifest.js +0 -43
- package/dist/src/services/fork-manifest.js.map +0 -1
- package/dist/src/services/ghostcut.js +0 -132
- package/dist/src/services/ghostcut.js.map +0 -1
- package/dist/src/services/hyperframes.js +0 -1014
- package/dist/src/services/hyperframes.js.map +0 -1
- package/dist/src/services/job-capacity.js +0 -14
- package/dist/src/services/job-capacity.js.map +0 -1
- package/dist/src/services/job-logs.js +0 -197
- package/dist/src/services/job-logs.js.map +0 -1
- package/dist/src/services/jobs.js +0 -136
- package/dist/src/services/jobs.js.map +0 -1
- package/dist/src/services/media-processing.js +0 -743
- package/dist/src/services/media-processing.js.map +0 -1
- package/dist/src/services/primitive-media-lambda.js +0 -280
- package/dist/src/services/primitive-media-lambda.js.map +0 -1
- package/dist/src/services/providers.js +0 -2870
- package/dist/src/services/providers.js.map +0 -1
- package/dist/src/services/rate-limits.js +0 -237
- package/dist/src/services/rate-limits.js.map +0 -1
- package/dist/src/services/remotion.js +0 -688
- package/dist/src/services/remotion.js.map +0 -1
- package/dist/src/services/serverless-auth.js +0 -374
- package/dist/src/services/serverless-auth.js.map +0 -1
- package/dist/src/services/serverless-jobs.js +0 -1074
- package/dist/src/services/serverless-jobs.js.map +0 -1
- package/dist/src/services/serverless-provider-keys.js +0 -401
- package/dist/src/services/serverless-provider-keys.js.map +0 -1
- package/dist/src/services/serverless-records.js +0 -1088
- package/dist/src/services/serverless-records.js.map +0 -1
- package/dist/src/services/serverless-template-configs.js +0 -67
- package/dist/src/services/serverless-template-configs.js.map +0 -1
- package/dist/src/services/storage.js +0 -383
- package/dist/src/services/storage.js.map +0 -1
- package/dist/src/services/template-certification.js +0 -475
- package/dist/src/services/template-certification.js.map +0 -1
- package/dist/src/services/template-loader.js +0 -99
- package/dist/src/services/template-loader.js.map +0 -1
- package/dist/src/services/template-runtime-bundles.js +0 -217
- package/dist/src/services/template-runtime-bundles.js.map +0 -1
- package/dist/src/services/template-sources.js +0 -1017
- package/dist/src/services/template-sources.js.map +0 -1
- package/dist/src/services/video-normalization.js +0 -2
- package/dist/src/services/video-normalization.js.map +0 -1
- package/dist/src/services/webhooks.js +0 -62
- package/dist/src/services/webhooks.js.map +0 -1
- package/dist/src/template-editor-pages.js +0 -2491
- package/dist/src/template-editor-pages.js.map +0 -1
- package/dist/src/template-editor-shell.js +0 -2702
- package/dist/src/template-editor-shell.js.map +0 -1
- package/dist/src/template-sdk.js +0 -4
- package/dist/src/template-sdk.js.map +0 -1
- package/dist/src/worker.js +0 -17
- package/dist/src/worker.js.map +0 -1
- package/public/assets/homepage-app.js +0 -54
- package/public/assets/homepage-client-app.js +0 -80
- package/public/assets/page-runtime-client-app.js +0 -94
- package/readme.secret.md +0 -89
- package/templates/vidfarm_template_0000/README.md +0 -106
- package/templates/vidfarm_template_0000/SKILL.md +0 -266
- package/templates/vidfarm_template_0000/assets/Abel-Regular.ttf +0 -0
- package/templates/vidfarm_template_0000/assets/DMSerifDisplay-Regular.ttf +0 -0
- package/templates/vidfarm_template_0000/assets/Montserrat[wght].ttf +0 -0
- package/templates/vidfarm_template_0000/assets/SourceCodePro[wght].ttf +0 -0
- package/templates/vidfarm_template_0000/assets/TikTokSans-SemiBold.ttf +0 -0
- package/templates/vidfarm_template_0000/assets/Yesteryear-Regular.ttf +0 -0
- package/templates/vidfarm_template_0000/composition.json +0 -11
- package/templates/vidfarm_template_0000/src/lib/images.js +0 -221
- package/templates/vidfarm_template_0000/src/remotion/Root.js +0 -33
- package/templates/vidfarm_template_0000/src/remotion/index.js +0 -3
- package/templates/vidfarm_template_0000/src/sdk.js +0 -3
- package/templates/vidfarm_template_0000/src/style-options.js +0 -200
- package/templates/vidfarm_template_0000/src/template-dna.js +0 -9
- package/templates/vidfarm_template_0000/src/template.js +0 -1566
- 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.
|