| 44-video-presentations |
01 |
content-renderer |
| remotion |
| video |
| presentations |
| workspace-package |
| typescript |
| content-jobs |
|
| phase |
provides |
| 40-job-infrastructure |
content_jobs table, renderContent switch pattern, contentJobRunner dispatch |
|
|
| packages/content-renderer workspace package with remotion 4.0.445 |
| PitchDeck and DemoVideo Remotion compositions (Series-based, calculateMetadata) |
| getBundlePath (cached bundle) and renderPresentationComposition (concurrency:1) exports |
| UI-safe compositions/index.ts sub-export (no bundler/renderer imports) |
| content_job.progress LiveEventType in shared constants |
| PresentationBundle interface in ContentBundle union |
| presentation case in renderContent dispatching to presentation-renderer stub |
|
| 44-video-presentations/44-02 (server renderer uses getBundlePath, renderPresentationComposition) |
| 44-video-presentations/44-03 (UI consumes PresentationBundle, compositions sub-export) |
|
| added |
patterns |
| remotion@4.0.445 |
| @remotion/bundler@4.0.445 |
| @remotion/renderer@4.0.445 |
|
| Remotion isolated in packages/content-renderer/ workspace package — webpack bundler must not enter Vite/tsc server context |
| getBundlePath caches bundle path at module level — called once at startup, reused per render |
| compositions/index.ts is UI-safe (no @remotion/bundler or @remotion/renderer imports) |
| tsconfig.json overrides module to CommonJS + moduleResolution Node — required for Remotion's rspack internal resolution |
| calculateMetadata static function on component for dynamic duration based on slide count |
| Stub renderer pattern |
| throws "not implemented" to satisfy tsc module resolution (plan 02 replaces) |
|
|
|
| created |
modified |
| packages/content-renderer/package.json |
| packages/content-renderer/tsconfig.json |
| packages/content-renderer/src/index.ts |
| packages/content-renderer/src/Root.tsx |
| packages/content-renderer/src/compositions/index.ts |
| packages/content-renderer/src/compositions/PitchDeck.tsx |
| packages/content-renderer/src/compositions/DemoVideo.tsx |
| packages/content-renderer/src/components/SlideFrame.tsx |
| packages/content-renderer/src/components/TitleSlide.tsx |
| server/src/services/renderers/presentation-renderer.ts |
|
| packages/shared/src/constants.ts |
| server/src/services/renderers/types.ts |
| server/src/services/content-job-runner.ts |
|
|
| Remotion workspace package uses CommonJS module resolution (no type:module) — Remotion rspack bundler requires CommonJS |
| getBundlePath caches bundle path at module level — bundle() called once, not per-render |
| compositions/index.ts is UI-safe sub-export — no @remotion/bundler or @remotion/renderer imports |
| renderPresentationComposition uses concurrency:1 to avoid competing with LLM inference |
| renderMedia called with outputLocation:null to get Buffer return from RenderMediaResult |
| presentation-renderer.ts stub added to satisfy tsc module resolution — plan 02 implements real renderer |
| renderContent extended with optional companyId and jobId params for presentation SSE progress events |
|
| Remotion isolated workspace package: webpack context never enters server tsc/Vite context |
| calculateMetadata on component exports enables dynamic durationInFrames from slide count |
| UI-safe sub-export: compositions/index.ts imports only from remotion (not bundler/renderer) |
|
|
3min |
2026-04-04 |