@mevdragon/vidfarm-devcli 0.2.6 → 0.2.8

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 (56) hide show
  1. package/GETTING_STARTED.developers.md +25 -0
  2. package/README.md +44 -3
  3. package/SKILL.developer.md +147 -11
  4. package/dist/src/account-pages.js +1 -1
  5. package/dist/src/app.js +380 -13
  6. package/dist/src/cli.js +246 -59
  7. package/dist/src/config.js +4 -5
  8. package/dist/src/context.js +16 -0
  9. package/dist/src/db.js +67 -13
  10. package/dist/src/homepage.js +33 -1
  11. package/dist/src/lib/template-paths.js +10 -4
  12. package/dist/src/registry.js +9 -2
  13. package/dist/src/services/auth.js +2 -6
  14. package/dist/src/services/job-logs.js +4 -4
  15. package/dist/src/services/providers.js +470 -0
  16. package/dist/src/services/storage.js +13 -0
  17. package/dist/src/services/template-certification.js +16 -2
  18. package/dist/src/services/template-loader.js +17 -1
  19. package/dist/src/services/template-sources.js +338 -17
  20. package/{templates/template_0000 → dist/templates/vidfarm_template_0000}/src/remotion/Root.js +1 -0
  21. package/dist/templates/{template_0000 → vidfarm_template_0000}/src/template.js +9 -3
  22. package/package.json +4 -3
  23. package/templates/{template_0000 → vidfarm_template_0000}/README.md +23 -0
  24. package/templates/{template_0000 → vidfarm_template_0000}/package.json +0 -1
  25. package/templates/{template_0000 → vidfarm_template_0000}/src/sdk.ts +18 -0
  26. package/templates/{template_0000 → vidfarm_template_0000}/src/template.js +9 -3
  27. package/templates/{template_0000 → vidfarm_template_0000}/src/template.ts +10 -3
  28. package/templates/vidfarm_template_0000/tmp/solobacterium-moorei-slideshow.request.json +31 -0
  29. /package/dist/templates/{template_0000 → vidfarm_template_0000}/src/lib/images.js +0 -0
  30. /package/dist/templates/{template_0000 → vidfarm_template_0000}/src/remotion/index.js +0 -0
  31. /package/dist/templates/{template_0000 → vidfarm_template_0000}/src/sdk.js +0 -0
  32. /package/dist/templates/{template_0000 → vidfarm_template_0000}/src/style-options.js +0 -0
  33. /package/dist/templates/{template_0000 → vidfarm_template_0000}/src/template-dna.js +0 -0
  34. /package/templates/{template_0000 → vidfarm_template_0000}/SKILL.md +0 -0
  35. /package/templates/{template_0000 → vidfarm_template_0000}/assets/Abel-Regular.ttf +0 -0
  36. /package/templates/{template_0000 → vidfarm_template_0000}/assets/DMSerifDisplay-Regular.ttf +0 -0
  37. /package/templates/{template_0000 → vidfarm_template_0000}/assets/Montserrat[wght].ttf +0 -0
  38. /package/templates/{template_0000 → vidfarm_template_0000}/assets/SourceCodePro[wght].ttf +0 -0
  39. /package/templates/{template_0000 → vidfarm_template_0000}/assets/TikTokSans-SemiBold.ttf +0 -0
  40. /package/templates/{template_0000 → vidfarm_template_0000}/assets/Yesteryear-Regular.ttf +0 -0
  41. /package/templates/{template_0000 → vidfarm_template_0000}/composition.json +0 -0
  42. /package/templates/{template_0000 → vidfarm_template_0000}/research/preview/.gitkeep +0 -0
  43. /package/templates/{template_0000 → vidfarm_template_0000}/research/source_notes.md +0 -0
  44. /package/templates/{template_0000 → vidfarm_template_0000}/src/lib/images.js +0 -0
  45. /package/templates/{template_0000 → vidfarm_template_0000}/src/lib/images.ts +0 -0
  46. /package/{dist/templates/template_0000 → templates/vidfarm_template_0000}/src/remotion/Root.js +0 -0
  47. /package/templates/{template_0000 → vidfarm_template_0000}/src/remotion/Root.tsx +0 -0
  48. /package/templates/{template_0000 → vidfarm_template_0000}/src/remotion/index.js +0 -0
  49. /package/templates/{template_0000 → vidfarm_template_0000}/src/remotion/index.tsx +0 -0
  50. /package/templates/{template_0000 → vidfarm_template_0000}/src/sdk.js +0 -0
  51. /package/templates/{template_0000 → vidfarm_template_0000}/src/style-options.js +0 -0
  52. /package/templates/{template_0000 → vidfarm_template_0000}/src/style-options.ts +0 -0
  53. /package/templates/{template_0000 → vidfarm_template_0000}/src/template-dna.js +0 -0
  54. /package/templates/{template_0000 → vidfarm_template_0000}/src/template-dna.ts +0 -0
  55. /package/templates/{template_0000 → vidfarm_template_0000}/template.config.json +0 -0
  56. /package/templates/{template_0000 → vidfarm_template_0000}/tsconfig.json +0 -0
@@ -18,6 +18,8 @@ export interface TemplateAboutMetadata {
18
18
  visual_dna: string;
19
19
  preview_media: string[];
20
20
  link_to_original: string;
21
+ proposal_generator: string;
22
+ sample_prompts: string[];
21
23
  }
22
24
 
23
25
  export interface JobExecutionResult {
@@ -85,6 +87,14 @@ export interface TemplateJobContext {
85
87
  prompt: string;
86
88
  temperature?: number;
87
89
  }): Promise<{ text: string; usage: { inputTokens: number; outputTokens: number; costUsd: number } }>;
90
+ generateSpeech(input: {
91
+ provider: ProviderType;
92
+ model: string;
93
+ text: string;
94
+ voice?: string;
95
+ instructions?: string;
96
+ responseFormat?: "mp3" | "wav";
97
+ }): Promise<{ bytes: Uint8Array; contentType: string; usage: { inputTokens: number; outputTokens: number; costUsd: number } }>;
88
98
  generateImage(input: {
89
99
  provider: ProviderType;
90
100
  model: string;
@@ -105,6 +115,14 @@ export interface TemplateJobContext {
105
115
  maxWidthPercent: number;
106
116
  justification: string;
107
117
  }>;
118
+ transcribeSpeech(input: {
119
+ provider: ProviderType;
120
+ model: string;
121
+ audio: Uint8Array;
122
+ contentType?: string;
123
+ prompt?: string;
124
+ language?: string;
125
+ }): Promise<{ text: string; usage: { inputTokens: number; outputTokens: number; costUsd: number } }>;
108
126
  };
109
127
  remotion: {
110
128
  render(input: {
@@ -100,6 +100,12 @@ export const template0000Definition = defineTemplate({
100
100
  visual_dna: templateVisualDna,
101
101
  preview_media: [...TEMPLATE_PREVIEW_MEDIA],
102
102
  link_to_original: templateLinkToOriginal,
103
+ proposal_generator: "Given the director's product, customer, and angle, propose multiple slideshow concepts that fit this template's creator-native TikTok format. Return concrete post ideas that can either be used directly as single prompts or expanded into 10+ related prompts. Favor specific hooks, clear educational angles, founder stories, product proof, objections, comparisons, and repeatable series ideas.",
104
+ sample_prompts: [
105
+ "Make a 3-slide TikTok slideshow explaining why cold plunges feel so hard at first but get easier after a week. Use exact overlay text for each slide and generate matching cinematic background prompts.",
106
+ "Create a founder-story slideshow about launching a niche coffee brand, with one hook slide, one proof slide, and one CTA slide. Keep the tone creator-native and direct.",
107
+ "Build a product explainer slideshow for a posture-correcting desk setup. I want concise overlays, clean visual prompts, and output ready for optional Remotion rendering."
108
+ ],
103
109
  },
104
110
  skillPath,
105
111
  configSchema: z.object({
@@ -1407,7 +1413,7 @@ function resolveRemotionEntryPoint() {
1407
1413
  function resolveTemplateRuntimeConfig() {
1408
1414
  const candidates = [
1409
1415
  fileURLToPath(new URL("../template.config.json", import.meta.url)),
1410
- path.resolve(process.cwd(), "templates/template_0000/template.config.json"),
1416
+ path.resolve(process.cwd(), "templates/vidfarm_template_0000/template.config.json"),
1411
1417
  ];
1412
1418
  for (const candidate of candidates) {
1413
1419
  if (!existsSync(candidate)) {
@@ -1422,13 +1428,13 @@ function resolveSkillPath() {
1422
1428
  if (existsSync(builtPath)) {
1423
1429
  return builtPath;
1424
1430
  }
1425
- return path.resolve(process.cwd(), "templates/template_0000/SKILL.md");
1431
+ return path.resolve(process.cwd(), "templates/vidfarm_template_0000/SKILL.md");
1426
1432
  }
1427
1433
  function resolveOverlayFonts() {
1428
1434
  const resolved = Object.fromEntries(TEMPLATE_FONT_OPTIONS.map((option) => {
1429
1435
  const candidates = [
1430
1436
  fileURLToPath(new URL(`../assets/${option.assetFile}`, import.meta.url)),
1431
- path.resolve(process.cwd(), `templates/template_0000/assets/${option.assetFile}`),
1437
+ path.resolve(process.cwd(), `templates/vidfarm_template_0000/assets/${option.assetFile}`),
1432
1438
  ];
1433
1439
  for (const candidate of candidates) {
1434
1440
  if (existsSync(candidate)) {
@@ -190,6 +190,13 @@ export const template0000Definition = defineTemplate({
190
190
  visual_dna: templateVisualDna,
191
191
  preview_media: [...TEMPLATE_PREVIEW_MEDIA],
192
192
  link_to_original: templateLinkToOriginal,
193
+ proposal_generator:
194
+ "Given the director's product, customer, and angle, propose multiple slideshow concepts that fit this template's creator-native TikTok format. Return concrete post ideas that can either be used directly as single prompts or expanded into 10+ related prompts. Favor specific hooks, clear educational angles, founder stories, product proof, objections, comparisons, and repeatable series ideas.",
195
+ sample_prompts: [
196
+ "Make a 3-slide TikTok slideshow explaining why cold plunges feel so hard at first but get easier after a week. Use exact overlay text for each slide and generate matching cinematic background prompts.",
197
+ "Create a founder-story slideshow about launching a niche coffee brand, with one hook slide, one proof slide, and one CTA slide. Keep the tone creator-native and direct.",
198
+ "Build a product explainer slideshow for a posture-correcting desk setup. I want concise overlays, clean visual prompts, and output ready for optional Remotion rendering."
199
+ ],
193
200
  },
194
201
  skillPath,
195
202
  configSchema: z.object({
@@ -1988,7 +1995,7 @@ function resolveRemotionEntryPoint() {
1988
1995
  function resolveTemplateRuntimeConfig() {
1989
1996
  const candidates = [
1990
1997
  fileURLToPath(new URL("../template.config.json", import.meta.url)),
1991
- path.resolve(process.cwd(), "templates/template_0000/template.config.json"),
1998
+ path.resolve(process.cwd(), "templates/vidfarm_template_0000/template.config.json"),
1992
1999
  ];
1993
2000
 
1994
2001
  for (const candidate of candidates) {
@@ -2010,7 +2017,7 @@ function resolveSkillPath() {
2010
2017
  if (existsSync(builtPath)) {
2011
2018
  return builtPath;
2012
2019
  }
2013
- return path.resolve(process.cwd(), "templates/template_0000/SKILL.md");
2020
+ return path.resolve(process.cwd(), "templates/vidfarm_template_0000/SKILL.md");
2014
2021
  }
2015
2022
 
2016
2023
  function resolveOverlayFonts() {
@@ -2022,7 +2029,7 @@ function resolveOverlayFonts() {
2022
2029
  ),
2023
2030
  path.resolve(
2024
2031
  process.cwd(),
2025
- `templates/template_0000/assets/${option.assetFile}`,
2032
+ `templates/vidfarm_template_0000/assets/${option.assetFile}`,
2026
2033
  ),
2027
2034
  ];
2028
2035
 
@@ -0,0 +1,31 @@
1
+ {
2
+ "tracer": "solobacterium-moorei-slideshow-001",
3
+ "payload": {
4
+ "slides": [
5
+ {
6
+ "image_prompt": "Cinematic medical illustration of Solobacterium moorei associated with bad breath, dramatic close-up of the back of a human tongue with invisible odor vapor represented as subtle green sulfur haze, magnified bacteria overlay, clean educational health graphic, realistic but not gory, premium editorial lighting, vertical 9:16 composition, no extra text in image",
7
+ "caption": "Solobacterium moorei:\nthe bad-breath bacteria",
8
+ "duration_ms": 3600
9
+ },
10
+ {
11
+ "image_prompt": "Educational biology diagram showing Solobacterium moorei as an anaerobic oral bacterium living in tongue coating biofilm, labeled-style scientific infographic composition without actual readable text, cross-section of tongue surface, low-oxygen pockets, food debris, sulfur gas release, subtle gum irritation cues, clean modern medical illustration, vertical 9:16",
12
+ "caption": "Grows in low-oxygen tongue coating\nFeeds on debris\nReleases sulfur gases that cause odor",
13
+ "duration_ms": 4200
14
+ },
15
+ {
16
+ "image_prompt": "Healthy dental hygiene scene, child brushing teeth carefully while also brushing the tongue, foamy toothpaste, parent-supervised bathroom routine, clear action shot, fresh clean morning light, visible plaque-removal motion, optimistic health advertising style, vertical 9:16",
17
+ "caption": "Fight it with thorough brushing:\nteeth + tongue, twice a day",
18
+ "duration_ms": 3800
19
+ },
20
+ {
21
+ "image_prompt": "Mobile app promotion scene for Ticko: Kids Toothbrush Timer, cheerful bathroom setting, child using a smartphone timer while brushing teeth, playful clean dental-care branding, app badge style layout areas for App Store and Google Play callouts, feature the provided Ticko logo prominently on screen and in the environment, bright family-friendly colors, polished ad creative, vertical 9:16, no extra text beyond the preserved overlay caption",
22
+ "image_prompt_attachments": [
23
+ "https://play-lh.googleusercontent.com/DLb-Dx0aKT7iJSZ8F1jy2pQzZWeODE4L7pOkl1E6RXoSZ2FkQ1YLsFXMtCK1ddnxUvl5sXegkvEkiTxJlND_3g=s96-rw"
24
+ ],
25
+ "caption": "Keep brushing fun with Ticko:\nKids Toothbrush Timer\nDownload on iOS + Android",
26
+ "duration_ms": 4200
27
+ }
28
+ ],
29
+ "meta_details_prompt": "Create native TikTok metadata for a US parent and family-health audience. Keep it educational, clear, and non-alarmist. Mention that Solobacterium moorei is linked to bad breath, that brushing the tongue helps, and end with a soft CTA for Ticko: Kids Toothbrush Timer. Avoid medical overclaiming."
30
+ }
31
+ }