@officexapp/vidfarm-devcli 0.21.39 → 0.21.43
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/.agents/skills/editor-capabilities/SKILL.md +16 -0
- package/.agents/skills/vidfarm/SKILL.md +31 -6
- package/.agents/skills/vidfarm/harnesses/README.md +1 -0
- package/.agents/skills/vidfarm/harnesses/explainer.HARNESS.md +11 -0
- package/.agents/skills/vidfarm/harnesses/product-demo.HARNESS.md +2 -0
- package/.agents/skills/vidfarm/harnesses/product-explainer.HARNESS.md +242 -0
- package/.agents/skills/vidfarm/recipes/bulk-scripting-with-a-harness.md +1 -1
- package/.agents/skills/vidfarm/recipes/cutout-graphics-for-explainers.md +2 -0
- package/.agents/skills/vidfarm/recipes/onboard-a-new-director.md +10 -8
- package/.agents/skills/vidfarm/references/automation-and-local-dev.md +21 -8
- package/.agents/skills/vidfarm/references/content-ideas.md +113 -0
- package/.agents/skills/vidfarm/references/editor-workflows.md +36 -3
- package/.agents/skills/vidfarm/references/onboarding.md +64 -1
- package/.agents/skills/vidfarm/references/primitives.md +67 -0
- package/.agents/skills/vidfarm-media/SKILL.md +50 -0
- package/SKILL.director.md +347 -27
- package/SKILL.md +6 -3
- package/crowdsourcing.md +49 -1
- package/dist/src/cli.js +579 -19
- package/dist/src/devcli/consult.js +389 -0
- package/dist/src/devcli/cost-mode.js +8 -0
- package/dist/src/devcli/experiments.js +10 -5
- package/dist/src/devcli/qa-check.js +74 -0
- package/dist/src/devcli/skill-docs.js +103 -0
- package/dist/src/services/brainstorm-prompts.js +132 -0
- package/experimental/unique-product-explainers.md +855 -0
- package/experiments.md +33 -2
- package/package.json +10 -1
- package/src/assets/SELLING_AWARENESS_STAGES.md +579 -0
- package/src/assets/SELLING_WITH_HOOKS.md +377 -0
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
// The brainstorm/consultation prompts — ONE source of truth for both runners.
|
|
2
|
+
//
|
|
3
|
+
// Two things run this chain and they must ask for the same thing:
|
|
4
|
+
//
|
|
5
|
+
// 1. The CLOUD primitives (`POST /api/v1/primitives/brainstorm/*`), which send
|
|
6
|
+
// the prompt to a provider on the user's saved key or the wallet.
|
|
7
|
+
// 2. The KEYLESS LOCAL path (`vidfarm consult <step>`), which prints the same
|
|
8
|
+
// prompt for the agent already driving the terminal to answer itself. No
|
|
9
|
+
// provider key, no wallet, no network.
|
|
10
|
+
//
|
|
11
|
+
// If these two ever drift, a director gets a different consultation depending on
|
|
12
|
+
// where they ran it — so the builders live here, pure, and both callers import
|
|
13
|
+
// them. This module has NO backend imports and touches no filesystem: the big
|
|
14
|
+
// reference documents are passed IN, because the cloud reads them off the
|
|
15
|
+
// primitive asset directory and the CLI may not ship them at all.
|
|
16
|
+
/** Drop the trailing "Reference lessons" block when no text was supplied, so a
|
|
17
|
+
* keyless caller does not emit a dangling header with nothing under it. */
|
|
18
|
+
function withReference(lines, header, text) {
|
|
19
|
+
if (!text || !text.trim()) {
|
|
20
|
+
return lines;
|
|
21
|
+
}
|
|
22
|
+
return [...lines, "", header, text];
|
|
23
|
+
}
|
|
24
|
+
export function buildHooksPrompt(offerDescription, count, refs = {}) {
|
|
25
|
+
return withReference([
|
|
26
|
+
"You are Vidfarm's elite paid-social hook strategist.",
|
|
27
|
+
"Your job is to generate high-upside ad hooks for TikTok-native creative.",
|
|
28
|
+
"Bias toward hooks that feel native to TikTok, but keep raw persuasive power more important than surface trendiness.",
|
|
29
|
+
"Max creativity. Do not hold back. Be as diverse as possible while staying relevant to the offer.",
|
|
30
|
+
"Use many angle families across the set: pain, status, curiosity, gossip, confession, myth-busting, shock, taboo, mechanism, objection, identity, urgency, pattern interrupt, transformation, proof, enemy, mistake, secret, social proof, aspiration, and contrarian frames.",
|
|
31
|
+
"Each hook should be sharp, testable, and materially different from the others.",
|
|
32
|
+
`Generate exactly ${count} hooks.`,
|
|
33
|
+
"Return strict JSON only with shape {\"hooks\":[{\"hook\":\"...\",\"explanation\":\"...\"}]}.",
|
|
34
|
+
"Explanation should be 1-3 sentences on why the hook works and what angle it is leveraging.",
|
|
35
|
+
"",
|
|
36
|
+
"Offer details:",
|
|
37
|
+
offerDescription.trim()
|
|
38
|
+
], "Reference lessons to apply:", refs.hooks).join("\n");
|
|
39
|
+
}
|
|
40
|
+
export function buildAwarenessStagesPrompt(offerDescription, refs = {}) {
|
|
41
|
+
return withReference([
|
|
42
|
+
"You are Vidfarm's direct-response strategist.",
|
|
43
|
+
"The user is not sure what type of ads to produce.",
|
|
44
|
+
"Use Eugene Schwartz-style awareness-stage reasoning to recommend what kinds of ads to make first.",
|
|
45
|
+
"Write a practical response for TikTok-first performance marketing, but keep the advice broadly useful for paid social.",
|
|
46
|
+
"Do not return JSON. Return a clear markdown string.",
|
|
47
|
+
"Include:",
|
|
48
|
+
"- which awareness stages are most promising first",
|
|
49
|
+
"- why those stages fit this offer",
|
|
50
|
+
"- what ad types/messages belong in each stage",
|
|
51
|
+
"- what to test before moving to deeper or broader awareness stages",
|
|
52
|
+
"- a short next-step recommendation",
|
|
53
|
+
"",
|
|
54
|
+
"Offer details:",
|
|
55
|
+
offerDescription.trim()
|
|
56
|
+
], "Reference lessons to apply:", refs.awareness).join("\n");
|
|
57
|
+
}
|
|
58
|
+
export function buildAnglesPrompt(payload, refs = {}) {
|
|
59
|
+
const head = [
|
|
60
|
+
"You are Vidfarm's senior direct-response angle strategist.",
|
|
61
|
+
"Generate persuasive advertising angles for TikTok-native ads.",
|
|
62
|
+
"Persuasive depth matters more than format gimmicks. The user wants raw winning angles to test.",
|
|
63
|
+
"Do not mention templates, scenes, or production mechanics. Focus on the strategic angle itself.",
|
|
64
|
+
"Create major diversity across the set: pain, myths, enemies, mechanisms, shocking truths, confessions, gossip/social proof, objections, hidden costs, status, identity, aspiration, taboo, mistake, urgency, proof, authority, trend hijack, curiosity, and contrarian frames.",
|
|
65
|
+
"Favor known winning angle archetypes while still making them specific to the offer.",
|
|
66
|
+
`Generate exactly ${payload.count} angles.`,
|
|
67
|
+
"Return strict JSON only with shape {\"angles\":[{\"angle\":\"...\",\"explanation\":\"...\"}]}",
|
|
68
|
+
"Explanation should say why the angle fits this awareness state and what persuasive lever it uses.",
|
|
69
|
+
"",
|
|
70
|
+
`Problem awareness: ${payload.problem_awareness}`,
|
|
71
|
+
`Solution awareness: ${payload.solution_awareness}`,
|
|
72
|
+
`Derived stage note: ${describeAwarenessSelection(payload.problem_awareness, payload.solution_awareness)}`,
|
|
73
|
+
"",
|
|
74
|
+
"Offer details:",
|
|
75
|
+
payload.offer_description.trim()
|
|
76
|
+
];
|
|
77
|
+
const withAwareness = withReference(head, "Reference lessons to apply from awareness stages:", refs.awareness);
|
|
78
|
+
return withReference(withAwareness, "Reference lessons to apply from hooks:", refs.hooks).join("\n");
|
|
79
|
+
}
|
|
80
|
+
export function buildColdstartPrompt(userMessage, count) {
|
|
81
|
+
return [
|
|
82
|
+
"You are Vidfarm's TikTok growth strategist.",
|
|
83
|
+
"The customer has no idea where to start.",
|
|
84
|
+
"Generate the best possible foundational Q&A questions for the customer and AI to discuss so they can build a strong TikTok strategy from zero.",
|
|
85
|
+
"The goal is to produce questions whose answers can later power awareness-stage selection, angle generation, hooks, scripts, and template choice.",
|
|
86
|
+
`Generate exactly ${count} questions.`,
|
|
87
|
+
"You must include questions covering, at minimum:",
|
|
88
|
+
"- one-line offer",
|
|
89
|
+
"- one-paragraph offer",
|
|
90
|
+
"- product pricing and checkout experience (for example appstore payments, Stripe web checkout, Shopify, invoicing, or sales call)",
|
|
91
|
+
"- precise target customer psyche",
|
|
92
|
+
"- customer pain in their own words",
|
|
93
|
+
"- customer desire and dream outcome",
|
|
94
|
+
"- awareness levels or uncertainty about them",
|
|
95
|
+
"Add more strong questions beyond those when useful.",
|
|
96
|
+
"Return strict JSON only with shape {\"questions\":[{\"question\":\"...\",\"why_it_matters\":\"...\"}]}",
|
|
97
|
+
"Questions should be phrased so the user can answer them in a single markdown file for future use.",
|
|
98
|
+
"At least one question should explicitly encourage them to save these answers into an OFFER.md file (or OFFER_<NAME>.md when they run more than one offer), kept locally or in Vidfarm cloud files, for reuse inside Vidfarm.",
|
|
99
|
+
"",
|
|
100
|
+
"User message:",
|
|
101
|
+
userMessage.trim()
|
|
102
|
+
].join("\n");
|
|
103
|
+
}
|
|
104
|
+
export function buildProductPlacementPrompt(offerDescription, count) {
|
|
105
|
+
return [
|
|
106
|
+
"You are Vidfarm's native-advertising product-placement strategist.",
|
|
107
|
+
"You are watching the attached video. Study what is actually on screen: scenes, actions, objects, spoken lines, on-screen text, transitions, and emotional beats.",
|
|
108
|
+
"Your job is to find the highest-leverage moments to organically place the user's product into THIS video so it feels native rather than bolted on.",
|
|
109
|
+
"Bias toward placements that ride the existing attention, emotion, or story beat of the moment. Native and believable beats loud and interruptive.",
|
|
110
|
+
"Consider many placement types: on-screen prop/set dressing, character interaction with the product, verbal mention or callout, text/caption overlay, sticker or lower-third, b-roll cutaway, screen/UI replacement, before/after demo, and end-card CTA.",
|
|
111
|
+
`Identify exactly ${count} distinct product-placement opportunities, ordered from strongest to weakest.`,
|
|
112
|
+
"Each opportunity must reference a real, specific moment you actually saw in the video, with an approximate timestamp or range (for example \"0:04\" or \"0:12-0:18\").",
|
|
113
|
+
"Return strict JSON only with shape {\"opportunities\":[{\"timestamp\":\"...\",\"scene\":\"...\",\"placement_type\":\"...\",\"placement_idea\":\"...\",\"why_it_works\":\"...\"}]}.",
|
|
114
|
+
"\"scene\" briefly describes what is happening on screen at that moment. \"placement_idea\" is the concrete, actionable way to insert the product. \"why_it_works\" explains the persuasion/attention logic.",
|
|
115
|
+
"",
|
|
116
|
+
"Product / offer to place:",
|
|
117
|
+
offerDescription.trim()
|
|
118
|
+
].join("\n");
|
|
119
|
+
}
|
|
120
|
+
export function describeAwarenessSelection(problemAwareness, solutionAwareness) {
|
|
121
|
+
if (problemAwareness === "problem_unaware" && solutionAwareness === "solution_unaware") {
|
|
122
|
+
return "Lead with unaware-style pattern interrupts, identity, curiosity, story, and emotionally resonant entry points before surfacing the problem.";
|
|
123
|
+
}
|
|
124
|
+
if (problemAwareness === "problem_aware" && solutionAwareness === "solution_unaware") {
|
|
125
|
+
return "Lead with sharp articulation of the pain and consequences, then reveal a new possible solution path.";
|
|
126
|
+
}
|
|
127
|
+
if (problemAwareness === "problem_aware" && solutionAwareness === "solution_aware") {
|
|
128
|
+
return "Lead with strong solution-category promises, differentiation, mechanism, and proof.";
|
|
129
|
+
}
|
|
130
|
+
return "Lead with high-curiosity or identity-first entry points that bridge people from vague discomfort toward the existence of a real solution category.";
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=brainstorm-prompts.js.map
|