feat(orchestrator): render slideshow video inline with daily-loop (9eb) - #22
Open
MukhammadIbrokhimov wants to merge 1 commit into
Open
feat(orchestrator): render slideshow video inline with daily-loop (9eb)#22MukhammadIbrokhimov wants to merge 1 commit into
MukhammadIbrokhimov wants to merge 1 commit into
Conversation
… follow-up) After slideshow-draft generates the storyboard, daily-loop now invokes slideshow-render synchronously so the approval card always refers to a real mp4 instead of a storyboard.json. Render failures propagate through callSkill's existing try/catch, so an ffmpeg crash surfaces as the slideshow mode's normal "skipped" result. formatTemplateA also prefers video over storyboard when both are present in draft.media — otherwise the approval card would advertise the internal storyboard artifact instead of the rendered video. - daily-loop.js: callSkill's slideshow branch now calls slideshowRender. - bin/orchestrator.js: wires slideshowRender with real fetch / say / ffmpeg, reusing the existing runSub. - shared/constants.js: primaryMedia picks video > image > others. Closes openclaw-9eb.
There was a problem hiding this comment.
Pull request overview
This PR integrates the slideshow-render skill into the orchestrator’s daily loop so slideshow drafts are rendered to an MP4 before the approval message is sent, and updates the approval-card formatting to prefer showing the rendered video when multiple media artifacts are present.
Changes:
- Run
slideshowRendersynchronously afterslideshowDraftduring the daily-loop slideshow path. - Update
formatTemplateAto select “primary” media (prefervideooverimageover others) and add test coverage for the slideshow storyboard+video case. - Wire
renderSlideshow()intobin/orchestrator.jsskill loading so the CLI daily-loop hasslideshowRenderavailable.
Reviewed changes
Copilot reviewed 4 out of 5 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| workspace-mirror/skills/shared/tests/constants.test.js | Adds coverage ensuring template A surfaces rendered video over storyboard. |
| workspace-mirror/skills/shared/constants.js | Introduces primary-media selection so approval cards prefer video when present. |
| workspace-mirror/skills/orchestrator/daily-loop.test.js | Adds tests asserting slideshow render call order and render-failure behavior. |
| workspace-mirror/skills/orchestrator/daily-loop.js | Calls slideshowRender after slideshowDraft in slideshow mode. |
| workspace-mirror/skills/orchestrator/bin/orchestrator.js | Wires renderSlideshow into orchestrator skill loading as slideshowRender. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Comment on lines
+55
to
+65
| const result = await skills.slideshowDraft.run({ topic: topic.topic, niche: topic.niche }); | ||
| // Render the mp4 immediately so the approval card refers to a real video | ||
| // rather than only a storyboard.json. Render failures propagate through | ||
| // callSkill's caller so they show up in the daily-loop summary. | ||
| await skills.slideshowRender.run({ | ||
| draftId: result.draft.id, | ||
| storyboard: result.storyboard, | ||
| draft: result.draft, | ||
| }); | ||
| return result.draft; | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
slideshow-renderskill (shipped in PR feat(slideshow-render): assemble images + TTS into 1080x1920 mp4 (E2) #21) into the daily-loop. Afterslideshow-draftproduces the storyboard,slideshow-renderruns synchronously to generate the mp4 before the approval card is sent — so the user reviews a real video rather than just a storyboard.json reference.callSkill's existing try/catch, surfacing as the slideshow mode's normal skipped-result (nosendForApproval, summary DM mentions the failure reason).formatTemplateAnow prefersvideo>image> others when a draft has multiple media entries — otherwise the approval card would advertise the storyboard rather than the rendered video.Closes openclaw-9eb.
Test plan
npm testin every workspace-mirror package — 357 tests pass across all 16 packagesdaily-loop: slideshow mode invokes slideshowRender between slideshowDraft and sendForApproval (call-order verified)daily-loop: render failure →result.ok=false, nosendForApprovalfor that draftconstants:formatTemplateAshows🎬 Media: video, 60seven when storyboard ismedia[0]node --check bin/orchestrator.jspasses; bin-startup integration tests still greendeploy-live.mjs+setup.mjs: run the daily-loop once and confirm~/openclaw-drafts/pending/<slide-id>/media/video.mp4exists and playsNotes
Embedding the video into the Telegram approval message (via
sendVideo) is intentionally not in scope —telegram-client.jsonly hassendMessagetoday. The card still shows the draft ID, so the user cancd ~/openclaw-drafts/pending/<id>/media/. That's "links to" per the 9eb acceptance criteria; "embeds" can be a follow-up if desired.