@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,140 +0,0 @@
1
- import { mkdirSync } from "node:fs";
2
- import path from "node:path";
3
- import dotenv from "dotenv";
4
- import { z } from "zod";
5
- dotenv.config();
6
- function normalizeEnvValue(value) {
7
- if (typeof value !== "string") {
8
- return value;
9
- }
10
- const trimmed = value.trim();
11
- const unquoted = ((trimmed.startsWith("\"") && trimmed.endsWith("\""))
12
- || (trimmed.startsWith("'") && trimmed.endsWith("'")))
13
- ? trimmed.slice(1, -1).trim()
14
- : trimmed;
15
- return unquoted === "" ? undefined : unquoted;
16
- }
17
- const optionalSampleRate = z.preprocess((value) => value === "" || value == null ? undefined : value, z.coerce.number().min(0).max(1).optional());
18
- const schema = z.object({
19
- NODE_ENV: z.enum(["development", "test", "production"]).default("development"),
20
- VIDFARM_DEPLOYMENT_TARGET: z.string().optional(),
21
- VIDFARM_RUNTIME_BACKEND: z.literal("serverless").default("serverless"),
22
- VIDFARM_DEBUG_LOGS: z.string().default("false"),
23
- VIDFARM_LOAD_LOCAL_TEMPLATES: z.enum(["auto", "true", "false"]).default("auto"),
24
- PORT: z.coerce.number().default(3000),
25
- VIDFARM_DATA_DIR: z.string().default("./data"),
26
- ENCRYPTION_SECRET: z.string().default("development-encryption-secret-change-me"),
27
- API_KEY_SALT: z.string().default("development-api-key-salt"),
28
- WEBHOOK_SECRET: z.string().default("development-webhook-secret"),
29
- DEFAULT_JOB_DELAY_SECONDS: z.coerce.number().default(20),
30
- MAX_JOB_WALL_CLOCK_SECONDS: z.coerce.number().default(6 * 60 * 60),
31
- STALE_RUNNING_JOB_SECONDS: z.coerce.number().default(60 * 60),
32
- PROVIDER_LEASE_WAIT_TIMEOUT_SECONDS: z.coerce.number().default(5 * 60),
33
- PROVIDER_LEASE_INLINE_WAIT_SECONDS: z.coerce.number().default(5),
34
- PROVIDER_LEASE_STEP_WAIT_SECONDS: z.coerce.number().int().min(1).default(60),
35
- PROVIDER_LEASE_MAX_STEP_WAIT_SECONDS: z.coerce.number().int().min(1).default(12 * 60 * 60),
36
- MAX_ACTIVE_JOBS_PER_CUSTOMER: z.coerce.number().int().min(1).default(30),
37
- STORAGE_DRIVER: z.enum(["local", "s3"]).default("local"),
38
- AWS_REGION: z.string().default("us-east-1"),
39
- AWS_S3_BUCKET: z.string().default(""),
40
- AWS_S3_ENDPOINT: z.string().optional(),
41
- AWS_ACCESS_KEY_ID: z.string().optional(),
42
- AWS_SECRET_ACCESS_KEY: z.string().optional(),
43
- PUBLIC_BASE_URL: z.string().optional(),
44
- PUBLIC_EDITOR_CHAT_URL: z.string().url().optional(),
45
- VIDFARM_USER_ID: z.string().optional(),
46
- VIDFARM_API_KEY: z.string().optional(),
47
- VIDFARM_STAGING_BOOTSTRAP_USER_ID: z.string().optional(),
48
- VIDFARM_STAGING_BOOTSTRAP_EMAIL: z.string().optional(),
49
- VIDFARM_STAGING_BOOTSTRAP_API_KEY: z.string().optional(),
50
- EDITOR_CHAT_URL: z.string().url().optional(),
51
- RESEND_API_KEY: z.string().optional(),
52
- RESEND_FROM_EMAIL: z.string().default("vidfarm@fwd.zoomgtm.com"),
53
- FLOCKPOSTER_API_URL: z.string().url().optional(),
54
- VIDFARM_ZIP_LAMBDA_URL: z.string().url().optional(),
55
- VIDFARM_ZIP_LAMBDA_SECRET: z.string().optional(),
56
- VIDFARM_PRIMITIVE_MEDIA_LAMBDA_URL: z.string().url().optional(),
57
- VIDFARM_PRIMITIVE_MEDIA_LAMBDA_SECRET: z.string().optional(),
58
- VIDFARM_BILLING_URL: z.string().url().optional(),
59
- VIDFARM_BILLING_SECRET: z.string().optional(),
60
- VIDFARM_MIN_RENDER_WALLET_BALANCE_USD: z.coerce.number().default(1),
61
- OPENAI_API_KEY: z.string().optional(),
62
- OPENROUTER_API_KEY: z.string().optional(),
63
- GEMINI_API_KEY: z.string().optional(),
64
- PERPLEXITY_API_KEY: z.string().optional(),
65
- GHOSTCUT_KEY: z.string().optional(),
66
- GHOSTCUT_SECRET: z.string().optional(),
67
- GHOSTCUT_USD_PER_30S: z.coerce.number().min(0).default(0.10),
68
- RAPIDAPI_KEY: z.string().optional(),
69
- RAPIDAPI_VIDEO_DOWNLOAD_URL: z.string().url().default("https://snap-video3.p.rapidapi.com/download"),
70
- RAPIDAPI_VIDEO_DOWNLOAD_HOST: z.string().default("snap-video3.p.rapidapi.com"),
71
- RAPIDAPI_VIDEO_DOWNLOAD_BASE_COST_USD: z.coerce.number().min(0).default(0.005),
72
- RAPIDAPI_VIDEO_DOWNLOAD_LAMBDA_COST_USD: z.coerce.number().min(0).default(0.0002),
73
- RAPIDAPI_REMOVE_BACKGROUND_URL: z.string().url().default("https://remove-background18.p.rapidapi.com/public/remove-background/url"),
74
- RAPIDAPI_REMOVE_BACKGROUND_HOST: z.string().default("remove-background18.p.rapidapi.com"),
75
- RAPIDAPI_REMOVE_BACKGROUND_COST_USD: z.coerce.number().min(0).default(0.005),
76
- SUPERAGENCY_KEY: z.string().optional(),
77
- ARTIFACT_SIGNING_SECRET: z.string().optional(),
78
- REMOTION_REGION: z.string().default("us-east-1"),
79
- REMOTION_BUCKET_NAME: z.string().optional(),
80
- REMOTION_SITE_NAME: z.string().optional(),
81
- REMOTION_FUNCTION_NAME: z.string().optional(),
82
- REMOTION_SERVE_URL: z.string().optional(),
83
- REMOTION_COMPOSITION_ID: z.string().default("template-0000"),
84
- REMOTION_AWS_ACCESS_KEY_ID: z.string().optional(),
85
- REMOTION_AWS_SECRET_ACCESS_KEY: z.string().optional(),
86
- REMOTION_MODE: z.enum(["auto", "mock", "local", "lambda"]).default("auto"),
87
- HYPERFRAMES_LAMBDA_STACK_NAME: z.string().default("hyperframes-vidfarm-prod"),
88
- HYPERFRAMES_RENDER_REGION: z.string().optional(),
89
- HYPERFRAMES_RENDER_BUCKET_NAME: z.string().optional(),
90
- HYPERFRAMES_LAMBDA_BUCKET_NAME: z.string().optional(),
91
- HYPERFRAMES_RENDER_STATE_MACHINE_ARN: z.string().optional(),
92
- HYPERFRAMES_STATE_MACHINE_ARN: z.string().optional(),
93
- HYPERFRAMES_RENDER_MEMORY_MB: z.coerce.number().int().min(512).default(3072),
94
- MOCK_PROVIDER_RESPONSES: z.string().optional(),
95
- VIDFARM_ADMIN_EMAILS: z.string().default(""),
96
- VIDFARM_GITHUB_TOKEN: z.string().optional(),
97
- GITHUB_TOKEN: z.string().optional(),
98
- TEMPLATE_SOURCE_ROOT: z.string().default("./data/template-sources"),
99
- VIDFARM_RATE_LIMITS_TABLE_NAME: z.string().optional(),
100
- VIDFARM_SERVERLESS_MAIN_TABLE_NAME: z.string().optional(),
101
- VIDFARM_JOB_STATE_MACHINE_ARN: z.string().optional(),
102
- SENTRY_DSN: z.string().optional(),
103
- SENTRY_ENVIRONMENT: z.string().optional(),
104
- SENTRY_RELEASE: z.string().optional(),
105
- SENTRY_TRACES_SAMPLE_RATE: optionalSampleRate,
106
- SENTRY_ENABLE_LOGS: z.string().default("true"),
107
- SENTRY_SEND_DEFAULT_PII: z.string().default("false"),
108
- SENTRY_DEBUG_ROUTE: z.string().default("false"),
109
- PUBLIC_SENTRY_DSN: z.string().optional(),
110
- PUBLIC_SENTRY_TRACES_SAMPLE_RATE: optionalSampleRate,
111
- PUBLIC_SENTRY_REPLAYS_SESSION_SAMPLE_RATE: optionalSampleRate,
112
- PUBLIC_SENTRY_REPLAYS_ON_ERROR_SAMPLE_RATE: optionalSampleRate,
113
- PUBLIC_SENTRY_ENABLE_LOGS: z.string().default("true"),
114
- PUBLIC_SENTRY_SEND_DEFAULT_PII: z.string().default("true"),
115
- PUBLIC_SENTRY_TRACE_PROPAGATION_TARGETS: z.string().default("")
116
- });
117
- const normalizedEnv = Object.fromEntries(Object.entries(process.env).map(([key, value]) => [key, normalizeEnvValue(value)]));
118
- const parsed = schema.parse(normalizedEnv);
119
- const dataDir = path.resolve(parsed.VIDFARM_DATA_DIR);
120
- mkdirSync(dataDir, { recursive: true });
121
- const templateSourceRoot = path.resolve(parsed.TEMPLATE_SOURCE_ROOT);
122
- mkdirSync(templateSourceRoot, { recursive: true });
123
- const publicBaseUrl = parsed.PUBLIC_BASE_URL || `http://localhost:${parsed.PORT}`;
124
- export const config = {
125
- ...parsed,
126
- VIDFARM_DATA_DIR: dataDir,
127
- TEMPLATE_SOURCE_ROOT: templateSourceRoot,
128
- PUBLIC_BASE_URL: publicBaseUrl,
129
- ARTIFACT_SIGNING_SECRET: parsed.ARTIFACT_SIGNING_SECRET || parsed.SUPERAGENCY_KEY || "",
130
- isProduction: parsed.NODE_ENV === "production",
131
- mockProviders: parsed.MOCK_PROVIDER_RESPONSES === "true" ||
132
- (parsed.MOCK_PROVIDER_RESPONSES == null && parsed.NODE_ENV !== "production"),
133
- minRenderWalletBalanceUsd: parsed.VIDFARM_MIN_RENDER_WALLET_BALANCE_USD,
134
- debugLogs: parsed.VIDFARM_DEBUG_LOGS === "true" || parsed.VIDFARM_DEPLOYMENT_TARGET === "serverless-staging",
135
- adminEmails: parsed.VIDFARM_ADMIN_EMAILS
136
- .split(",")
137
- .map((value) => value.trim().toLowerCase())
138
- .filter(Boolean),
139
- };
140
- //# sourceMappingURL=config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
@@ -1,492 +0,0 @@
1
- import { existsSync, readFileSync, statSync } from "node:fs";
2
- import path from "node:path";
3
- import { config } from "./config.js";
4
- import { createId } from "./lib/ids.js";
5
- import { estimateNormalizationCostUsd, normalizeVideoAsset } from "./services/video-normalization.js";
6
- export function createTemplateJobContext(input) {
7
- const templateConfig = {};
8
- const prefix = input.storage.templateJobPrefix(input.template.id, input.customer.id, input.job.id);
9
- const buildArtifactUrl = (storageKey, fallbackUrl) => fallbackUrl ?? input.storage.getPublicUrl(storageKey) ?? buildTemplateMediaUrl(storageKey);
10
- const templatePreviewMediaUrls = resolveTemplatePreviewMediaUrls(input.template, input.storage);
11
- const jobPreviewMediaPolicy = parseTemplatePreviewMediaPolicy(input.job.payload._templatePreviewMediaPolicy);
12
- return {
13
- env: config.isProduction ? "production" : "development",
14
- customer: input.customer,
15
- template: {
16
- id: input.template.id,
17
- slugId: input.template.slugId,
18
- previewMediaUrls: templatePreviewMediaUrls,
19
- previewMediaPolicy: jobPreviewMediaPolicy
20
- },
21
- templateConfig,
22
- logger: {
23
- debug(message, metadata = {}) {
24
- void input.jobs.addLogEvent({
25
- id: createId("evt"),
26
- jobId: input.job.id,
27
- level: "debug",
28
- message,
29
- metadata,
30
- progress: null,
31
- artifactKey: null,
32
- createdAt: new Date().toISOString()
33
- });
34
- },
35
- info(message, metadata = {}) {
36
- void input.jobs.addLogEvent({
37
- id: createId("evt"),
38
- jobId: input.job.id,
39
- level: "info",
40
- message,
41
- metadata,
42
- progress: null,
43
- artifactKey: null,
44
- createdAt: new Date().toISOString()
45
- });
46
- },
47
- warn(message, metadata = {}) {
48
- void input.jobs.addLogEvent({
49
- id: createId("evt"),
50
- jobId: input.job.id,
51
- level: "warn",
52
- message,
53
- metadata,
54
- progress: null,
55
- artifactKey: null,
56
- createdAt: new Date().toISOString()
57
- });
58
- },
59
- error(message, metadata = {}) {
60
- void input.jobs.addLogEvent({
61
- id: createId("evt"),
62
- jobId: input.job.id,
63
- level: "error",
64
- message,
65
- metadata,
66
- progress: null,
67
- artifactKey: null,
68
- createdAt: new Date().toISOString()
69
- });
70
- },
71
- progress(progress, message, metadata = {}) {
72
- void input.jobs.addLogEvent({
73
- id: createId("evt"),
74
- jobId: input.job.id,
75
- level: "info",
76
- message,
77
- metadata,
78
- progress,
79
- artifactKey: typeof metadata.artifactKey === "string" ? metadata.artifactKey : null,
80
- createdAt: new Date().toISOString()
81
- });
82
- void input.jobs.updateJobStatus({
83
- id: input.job.id,
84
- status: "running",
85
- progress
86
- });
87
- }
88
- },
89
- jobs: {
90
- async enqueueChild({ operationName, workflowName, payload, providerHint }) {
91
- const child = await input.jobs.enqueueChildJob({
92
- templateId: input.template.id,
93
- operationName,
94
- workflowName,
95
- tracer: input.job.tracer,
96
- payload,
97
- customerId: input.customer.id,
98
- parentJobId: input.job.id,
99
- providerHint
100
- });
101
- return { jobId: child.id };
102
- }
103
- },
104
- storage: {
105
- async putJson(key, value) {
106
- const stored = await input.storage.putJson(`${prefix}/${key}`, value);
107
- const artifactUrl = buildArtifactUrl(stored.key, stored.url);
108
- await insertArtifact("json", stored.key, artifactUrl, {});
109
- return {
110
- ...stored,
111
- url: artifactUrl
112
- };
113
- },
114
- async putText(key, value, contentType = "text/plain; charset=utf-8") {
115
- const stored = await input.storage.putText(`${prefix}/${key}`, value, contentType);
116
- const artifactUrl = buildArtifactUrl(stored.key, stored.url);
117
- await insertArtifact("text", stored.key, artifactUrl, { contentType });
118
- return {
119
- ...stored,
120
- url: artifactUrl
121
- };
122
- },
123
- async putBuffer(key, value, options = {}) {
124
- const stored = await input.storage.putBuffer(`${prefix}/${key}`, value, options.contentType);
125
- const artifactUrl = buildArtifactUrl(stored.key, stored.url);
126
- await insertArtifact(options.kind ?? "binary", stored.key, artifactUrl, {
127
- ...(options.metadata ?? {}),
128
- contentType: options.contentType ?? null
129
- });
130
- return {
131
- ...stored,
132
- url: artifactUrl
133
- };
134
- },
135
- getPublicUrl(key) {
136
- const storageKey = `${prefix}/${key}`;
137
- return input.storage.getPublicUrl(storageKey) ?? buildTemplateMediaUrl(storageKey);
138
- }
139
- },
140
- billing: {
141
- async record(record) {
142
- await input.billing.record({
143
- customerId: input.customer.id,
144
- jobId: input.job.id,
145
- tracer: input.job.tracer,
146
- templateId: input.template.id,
147
- type: record.type,
148
- costUsd: record.costUsd,
149
- chargeUsd: record.chargeUsd ?? Number((record.costUsd * 1.2).toFixed(4)),
150
- costCenterSlug: record.costCenterSlug,
151
- idempotencyKey: record.idempotencyKey,
152
- occurredAtMs: record.occurredAtMs,
153
- metadata: record.metadata
154
- });
155
- }
156
- },
157
- providers: {
158
- listAvailableProviders() {
159
- return input.providers.listAvailableProviders(input.customer.id);
160
- },
161
- async generateText(request) {
162
- return input.providers.generateText({
163
- customerId: input.customer.id,
164
- jobId: input.job.id,
165
- workerId: input.workerId,
166
- ...request
167
- });
168
- },
169
- async generateSpeech(request) {
170
- return input.providers.generateSpeech({
171
- customerId: input.customer.id,
172
- jobId: input.job.id,
173
- workerId: input.workerId,
174
- ...request
175
- });
176
- },
177
- async generateImage(request) {
178
- return input.providers.generateImage({
179
- customerId: input.customer.id,
180
- jobId: input.job.id,
181
- workerId: input.workerId,
182
- ...request
183
- });
184
- },
185
- async analyzeImageLayout(request) {
186
- return input.providers.analyzeImageLayout({
187
- customerId: input.customer.id,
188
- jobId: input.job.id,
189
- workerId: input.workerId,
190
- ...request
191
- });
192
- },
193
- async transcribeSpeech(request) {
194
- return input.providers.transcribeSpeech({
195
- customerId: input.customer.id,
196
- jobId: input.job.id,
197
- workerId: input.workerId,
198
- ...request
199
- });
200
- }
201
- },
202
- remotion: {
203
- async render(request) {
204
- const templateRemotionConfig = resolveTemplateRemotionConfigForTemplate(input.template.id);
205
- const templateServeUrl = templateRemotionConfig?.serveUrl;
206
- const serveUrl = config.isProduction
207
- ? templateServeUrl
208
- : nonBlank(request.serveUrl) ?? templateServeUrl;
209
- const render = await input.remotion.render({
210
- ...request,
211
- serveUrl,
212
- framesPerLambda: request.framesPerLambda ?? templateRemotionConfig?.framesPerLambda,
213
- outputKey: request.outputKey ? `${prefix}/${request.outputKey}` : undefined
214
- });
215
- const estimatedCostUsd = "estimatedCostUsd" in render.metadata ? render.metadata.estimatedCostUsd : null;
216
- const chargeUsd = "chargeUsd" in render.metadata ? render.metadata.chargeUsd : null;
217
- if (render.metadata.mode === "lambda" && typeof estimatedCostUsd === "number" && estimatedCostUsd > 0) {
218
- await input.billing.record({
219
- customerId: input.customer.id,
220
- jobId: input.job.id,
221
- tracer: input.job.tracer,
222
- templateId: input.template.id,
223
- type: "render",
224
- costUsd: estimatedCostUsd,
225
- chargeUsd: typeof chargeUsd === "number" ? chargeUsd : undefined,
226
- costCenterSlug: "remotion_lambda",
227
- idempotencyKey: `remotion_lambda:${render.renderId}`,
228
- occurredAtMs: Date.now(),
229
- metadata: {
230
- ...render.metadata,
231
- render_id: render.renderId,
232
- output_url: render.outputUrl,
233
- composition_id: typeof render.metadata.compositionId === "string"
234
- ? render.metadata.compositionId
235
- : request.compositionId,
236
- }
237
- });
238
- }
239
- return render;
240
- }
241
- },
242
- hyperframes: {
243
- async render(request) {
244
- const hyperframesOutputKey = `renders/vidfarm/templates/${input.template.id}/${input.customer.id}/${input.job.id}/output.mp4`;
245
- const render = await input.hyperframes.render({
246
- ...request,
247
- outputKey: hyperframesOutputKey,
248
- wait: true
249
- });
250
- let outputUrl = render.outputUrl;
251
- let platformOutputKey = null;
252
- if (render.outputS3Uri) {
253
- const output = await input.hyperframes.readRenderOutput(render.outputS3Uri);
254
- platformOutputKey = `${prefix}/${request.outputKey || "renders/output.mp4"}`;
255
- const stored = await input.storage.putBuffer(platformOutputKey, output.bytes, output.contentType);
256
- outputUrl = buildArtifactUrl(stored.key, stored.url);
257
- await insertArtifact("video", stored.key, outputUrl, {
258
- operation: "hyperframes-render",
259
- contentType: output.contentType,
260
- renderId: render.renderId,
261
- outputS3Uri: render.outputS3Uri
262
- });
263
- }
264
- const estimatedCostUsd = typeof render.metadata.estimatedCostUsd === "number" ? render.metadata.estimatedCostUsd : null;
265
- const chargeUsd = typeof render.metadata.chargeUsd === "number" ? render.metadata.chargeUsd : null;
266
- if (estimatedCostUsd !== null && estimatedCostUsd > 0) {
267
- await input.billing.record({
268
- customerId: input.customer.id,
269
- jobId: input.job.id,
270
- tracer: input.job.tracer,
271
- templateId: input.template.id,
272
- type: "render",
273
- costUsd: estimatedCostUsd,
274
- chargeUsd: typeof chargeUsd === "number" ? chargeUsd : undefined,
275
- costCenterSlug: "hyperframes_lambda",
276
- idempotencyKey: `hyperframes_lambda:${render.renderId}`,
277
- occurredAtMs: Date.now(),
278
- metadata: {
279
- ...render.metadata,
280
- render_id: render.renderId,
281
- output_url: outputUrl,
282
- signed_output_url: render.outputUrl,
283
- output_s3_uri: render.outputS3Uri,
284
- platform_output_key: platformOutputKey
285
- }
286
- });
287
- }
288
- return {
289
- renderId: render.renderId,
290
- outputUrl,
291
- outputS3Uri: render.outputS3Uri,
292
- metadata: {
293
- ...render.metadata,
294
- outputUrl,
295
- signedOutputUrl: render.outputUrl,
296
- platformOutputKey
297
- }
298
- };
299
- }
300
- },
301
- media: {
302
- async normalizeVideo(request) {
303
- const normalized = await normalizeVideoAsset({
304
- sourceUrl: request.sourceUrl,
305
- maxWidth: request.maxWidth,
306
- maxHeight: request.maxHeight,
307
- crf: request.crf,
308
- preset: request.preset,
309
- maxVideoBitrateKbps: request.maxVideoBitrateKbps,
310
- audioBitrateKbps: request.audioBitrateKbps
311
- });
312
- const stored = await input.storage.putBuffer(`${prefix}/${request.outputKey}`, normalized.bytes, normalized.contentType);
313
- const artifactUrl = buildArtifactUrl(stored.key, stored.url);
314
- await insertArtifact("video", stored.key, artifactUrl, {
315
- ...(request.metadata ?? {}),
316
- operation: "normalize-video",
317
- contentType: normalized.contentType,
318
- normalization: normalized.metadata
319
- });
320
- await input.billing.record({
321
- customerId: input.customer.id,
322
- jobId: input.job.id,
323
- tracer: input.job.tracer,
324
- templateId: input.template.id,
325
- type: "cpu_estimate",
326
- costUsd: estimateNormalizationCostUsd(normalized.metadata),
327
- costCenterSlug: "video_normalization",
328
- idempotencyKey: `video_normalization:${input.job.id}:${request.outputKey}`,
329
- occurredAtMs: Date.now(),
330
- metadata: {
331
- ...(request.metadata ?? {}),
332
- operation: "normalize-video",
333
- source_url: request.sourceUrl,
334
- output_key: `${prefix}/${request.outputKey}`,
335
- normalization: normalized.metadata
336
- }
337
- });
338
- return {
339
- ...stored,
340
- url: artifactUrl,
341
- contentType: normalized.contentType,
342
- normalization: normalized.metadata
343
- };
344
- }
345
- }
346
- };
347
- async function insertArtifact(kind, storageKey, publicUrl, metadata) {
348
- await input.jobs.insertArtifact({
349
- id: createId("art"),
350
- jobId: input.job.id,
351
- customerId: input.customer.id,
352
- templateId: input.template.id,
353
- kind,
354
- storageKey,
355
- publicUrl,
356
- metadata
357
- });
358
- }
359
- }
360
- function parseTemplatePreviewMediaPolicy(value) {
361
- if (value === "include" || value === "exclude" || value === "auto") {
362
- return value;
363
- }
364
- if (value === true) {
365
- return "include";
366
- }
367
- if (value === false) {
368
- return "exclude";
369
- }
370
- return "auto";
371
- }
372
- function resolveTemplatePreviewMediaUrls(template, storage) {
373
- return uniqueStrings(template.about.preview_media
374
- .filter(isImagePreviewReference)
375
- .map((entry) => resolveTemplatePreviewMediaUrl(template, storage, entry))
376
- .filter((entry) => Boolean(entry)));
377
- }
378
- function resolveTemplatePreviewMediaUrl(template, storage, entry) {
379
- if (/^https?:\/\//i.test(entry)) {
380
- return entry;
381
- }
382
- const normalizedEntry = entry.replace(/^\/+/, "");
383
- if (normalizedEntry.startsWith("templates/")) {
384
- return resolveBundledTemplateAssetFromStorageKey(template, normalizedEntry)
385
- ? buildTemplateMediaUrl(normalizedEntry)
386
- : storage.getPublicUrl(normalizedEntry) ?? buildTemplateMediaUrl(normalizedEntry);
387
- }
388
- const templateAboutPrefix = storage.templateAboutKey(template.id, "");
389
- const storageAssetPath = normalizedEntry.startsWith(templateAboutPrefix)
390
- ? normalizedEntry.slice(templateAboutPrefix.length)
391
- : normalizedEntry.startsWith("about/")
392
- ? normalizedEntry.slice("about/".length)
393
- : normalizedEntry;
394
- const storageKey = storage.templateAboutKey(template.id, storageAssetPath);
395
- return resolveBundledTemplateAsset(template, storageAssetPath)
396
- ? buildTemplateMediaUrl(storageKey)
397
- : storage.getPublicUrl(storageKey) ?? buildTemplateMediaUrl(storageKey);
398
- }
399
- function isImagePreviewReference(entry) {
400
- return /\.(png|jpe?g|webp)(?:$|[?#])/i.test(entry);
401
- }
402
- function uniqueStrings(values) {
403
- return Array.from(new Set(values.filter((value) => value.trim().length > 0)));
404
- }
405
- function buildTemplateMediaUrl(storageKey) {
406
- return `${config.PUBLIC_BASE_URL.replace(/\/$/, "")}/template-media?key=${encodeURIComponent(storageKey)}`;
407
- }
408
- function resolveBundledTemplateAssetFromStorageKey(template, storageKey) {
409
- const match = /^templates\/([^/]+)\/about\/(.+)$/.exec(storageKey.replace(/^\/+/, ""));
410
- if (!match || match[1] !== template.id) {
411
- return null;
412
- }
413
- return resolveBundledTemplateAsset(template, match[2]);
414
- }
415
- function resolveBundledTemplateAsset(template, assetPath) {
416
- if (!template.skillPath || !assetPath) {
417
- return null;
418
- }
419
- const normalizedAssetPath = assetPath.replace(/^\/+/, "");
420
- if (!normalizedAssetPath || normalizedAssetPath.includes("\\") || normalizedAssetPath.split("/").some((segment) => !segment || segment === "." || segment === "..")) {
421
- return null;
422
- }
423
- let templateRoot = path.resolve(template.skillPath);
424
- try {
425
- if (existsSync(templateRoot) && !statSync(templateRoot).isDirectory()) {
426
- templateRoot = path.dirname(templateRoot);
427
- }
428
- }
429
- catch {
430
- return null;
431
- }
432
- const candidates = normalizedAssetPath.startsWith("about/")
433
- ? [normalizedAssetPath]
434
- : [`about/${normalizedAssetPath}`, normalizedAssetPath];
435
- for (const candidate of candidates) {
436
- const resolved = path.resolve(templateRoot, candidate);
437
- if ((resolved === templateRoot || resolved.startsWith(`${templateRoot}${path.sep}`)) && existsSync(resolved)) {
438
- return resolved;
439
- }
440
- }
441
- return null;
442
- }
443
- function resolveTemplateRemotionServeUrl(templateId) {
444
- return resolveTemplateRemotionConfigForTemplate(templateId)?.serveUrl;
445
- }
446
- function resolveTemplateRemotionConfigForTemplate(templateId) {
447
- if (nonBlank(config.REMOTION_SERVE_URL)) {
448
- return undefined;
449
- }
450
- return undefined;
451
- }
452
- function readTemplateRemotionConfig(modulePath) {
453
- const templateRoot = findTemplateRoot(modulePath);
454
- if (!templateRoot) {
455
- return null;
456
- }
457
- const configPath = path.join(templateRoot, "template.config.json");
458
- if (!existsSync(configPath)) {
459
- return null;
460
- }
461
- try {
462
- const parsed = JSON.parse(readFileSync(configPath, "utf8"));
463
- return parsed.remotion ?? null;
464
- }
465
- catch {
466
- return null;
467
- }
468
- }
469
- function findTemplateRoot(modulePath) {
470
- let current = path.dirname(modulePath);
471
- for (let index = 0; index < 10; index += 1) {
472
- if (existsSync(path.join(current, "template.config.json"))) {
473
- return current;
474
- }
475
- const parent = path.dirname(current);
476
- if (parent === current) {
477
- break;
478
- }
479
- current = parent;
480
- }
481
- return null;
482
- }
483
- function nonBlank(value) {
484
- const trimmed = value?.trim();
485
- return trimmed ? trimmed : undefined;
486
- }
487
- function normalizePositiveInteger(value) {
488
- return typeof value === "number" && Number.isFinite(value) && value > 0
489
- ? Math.floor(value)
490
- : undefined;
491
- }
492
- //# sourceMappingURL=context.js.map