cue-ai 0.9.2 → 0.9.4

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 (278) hide show
  1. package/CHANGELOG.md +4 -3
  2. package/README.md +154 -394
  3. package/bin/cue-learnings +30 -4
  4. package/bin/cue-review-progress +0 -0
  5. package/bin/cue-review-watch +0 -0
  6. package/dist/cue.js +4328 -3108
  7. package/package.json +1 -1
  8. package/plugins/cue/commands/cue-switch.md +1 -1
  9. package/plugins/cue/commands/cue.md +1 -1
  10. package/profiles/backend/profile.yaml +4 -0
  11. package/profiles/browser/profile.yaml +4 -0
  12. package/profiles/career/profile.yaml +2 -13
  13. package/profiles/commerce/profile.yaml +0 -2
  14. package/profiles/coolify/profile.yaml +0 -1
  15. package/profiles/core/profile.yaml +78 -11
  16. package/profiles/dash-merge-test/profile.yaml +6 -1
  17. package/profiles/designer/profile.yaml +9 -1
  18. package/profiles/dropshipping/profile.yaml +69 -0
  19. package/profiles/frontend/profile.yaml +4 -0
  20. package/profiles/google-ads/profile.yaml +34 -0
  21. package/profiles/google-analytics/profile.yaml +34 -0
  22. package/profiles/google-drive/profile.yaml +34 -0
  23. package/profiles/gstack/profile.yaml +117 -29
  24. package/profiles/marketing/profile.yaml +0 -1
  25. package/profiles/media/README.md +70 -0
  26. package/profiles/media/profile.yaml +104 -0
  27. package/profiles/nano-banana/profile.yaml +52 -0
  28. package/profiles/ops/profile.yaml +1 -2
  29. package/profiles/secops/profile.yaml +3 -0
  30. package/profiles/skill-writer/profile.yaml +15 -0
  31. package/profiles/video/profile.yaml +3 -0
  32. package/profiles/web-frontend-base/profile.yaml +6 -0
  33. package/profiles/webshop/profile.yaml +0 -1
  34. package/profiles/webshop-google/profile.yaml +1 -0
  35. package/profiles/x-growth-bot/profile.yaml +2 -0
  36. package/resources/icons/generate-icons.py +2 -128
  37. package/resources/mcps/configs/claude.sanitized.json +88 -20
  38. package/resources/mcps/configs/claude_runtime.sanitized.json +40 -1
  39. package/resources/mcps/configs/codex.sanitized.json +29 -0
  40. package/resources/skills/skills/career/job-hunter/LICENSE +21 -0
  41. package/resources/skills/skills/career/job-hunter/README.md +323 -0
  42. package/resources/skills/skills/career/job-hunter/SKILL.md +91 -0
  43. package/resources/skills/skills/career/job-hunter/agents/README.md +96 -0
  44. package/resources/skills/skills/career/job-hunter/agents/apply-assessment-prep.md +195 -0
  45. package/resources/skills/skills/career/job-hunter/agents/apply-ats-scan.md +155 -0
  46. package/resources/skills/skills/career/job-hunter/agents/apply-bias-audit.md +224 -0
  47. package/resources/skills/skills/career/job-hunter/agents/apply-cover-letter.md +69 -0
  48. package/resources/skills/skills/career/job-hunter/agents/apply-decode-jd.md +117 -0
  49. package/resources/skills/skills/career/job-hunter/agents/apply-fit-score.md +183 -0
  50. package/resources/skills/skills/career/job-hunter/agents/apply-linkedin-audit.md +74 -0
  51. package/resources/skills/skills/career/job-hunter/agents/apply-linkedin-scrape.md +255 -0
  52. package/resources/skills/skills/career/job-hunter/agents/apply-portfolio-brief.md +123 -0
  53. package/resources/skills/skills/career/job-hunter/agents/apply-reality-check.md +164 -0
  54. package/resources/skills/skills/career/job-hunter/agents/apply-reference-prep.md +150 -0
  55. package/resources/skills/skills/career/job-hunter/agents/apply-rejection-analysis.md +172 -0
  56. package/resources/skills/skills/career/job-hunter/agents/apply-resume.md +70 -0
  57. package/resources/skills/skills/career/job-hunter/agents/apply-skills-gap-filler.md +109 -0
  58. package/resources/skills/skills/career/job-hunter/agents/career-internal.md +94 -0
  59. package/resources/skills/skills/career/job-hunter/agents/career-linkedin-content.md +173 -0
  60. package/resources/skills/skills/career/job-hunter/agents/career-linkedin-scanner.md +262 -0
  61. package/resources/skills/skills/career/job-hunter/agents/career-network-message.md +108 -0
  62. package/resources/skills/skills/career/job-hunter/agents/career-promote.md +102 -0
  63. package/resources/skills/skills/career/job-hunter/agents/career-review.md +71 -0
  64. package/resources/skills/skills/career/job-hunter/agents/interview-debrief.md +117 -0
  65. package/resources/skills/skills/career/job-hunter/agents/interview-mock.md +171 -0
  66. package/resources/skills/skills/career/job-hunter/agents/interview-panel-decoder.md +152 -0
  67. package/resources/skills/skills/career/job-hunter/agents/interview-prep.md +184 -0
  68. package/resources/skills/skills/career/job-hunter/agents/interview-question-bank.md +133 -0
  69. package/resources/skills/skills/career/job-hunter/agents/interview-research.md +148 -0
  70. package/resources/skills/skills/career/job-hunter/agents/offer-compare.md +117 -0
  71. package/resources/skills/skills/career/job-hunter/agents/offer-counteroffer.md +144 -0
  72. package/resources/skills/skills/career/job-hunter/agents/offer-deadline-manager.md +148 -0
  73. package/resources/skills/skills/career/job-hunter/agents/offer-negotiate.md +126 -0
  74. package/resources/skills/skills/career/job-hunter/agents/offer-schedule.md +99 -0
  75. package/resources/skills/skills/career/job-hunter/agents/offer-thankyou.md +80 -0
  76. package/resources/skills/skills/career/job-hunter/agents/search-company-research.md +146 -0
  77. package/resources/skills/skills/career/job-hunter/agents/search-follow-up.md +129 -0
  78. package/resources/skills/skills/career/job-hunter/agents/search-ghost-job-detector.md +152 -0
  79. package/resources/skills/skills/career/job-hunter/agents/search-inbox-scan.md +193 -0
  80. package/resources/skills/skills/career/job-hunter/agents/search-interview-scorecard.md +164 -0
  81. package/resources/skills/skills/career/job-hunter/agents/search-jobs.md +149 -0
  82. package/resources/skills/skills/career/job-hunter/agents/search-momentum-check.md +194 -0
  83. package/resources/skills/skills/career/job-hunter/agents/search-outreach.md +85 -0
  84. package/resources/skills/skills/career/job-hunter/agents/search-referral-finder.md +124 -0
  85. package/resources/skills/skills/career/job-hunter/agents/search-salary.md +96 -0
  86. package/resources/skills/skills/career/job-hunter/agents/search-send-email.md +109 -0
  87. package/resources/skills/skills/career/job-hunter/agents/search-tracker-update.md +127 -0
  88. package/resources/skills/skills/career/job-hunter/inputs/README.md +26 -0
  89. package/resources/skills/skills/career/job-hunter/inputs/apply-linkedin-url.txt +8 -0
  90. package/resources/skills/skills/career/job-hunter/inputs/interview-context.md +24 -0
  91. package/resources/skills/skills/career/job-hunter/inputs/job-description.md +20 -0
  92. package/resources/skills/skills/career/job-hunter/inputs/job-search-criteria.md +36 -0
  93. package/resources/skills/skills/career/job-hunter/inputs/my-linkedin.md +24 -0
  94. package/resources/skills/skills/career/job-hunter/inputs/my-resume.md +28 -0
  95. package/resources/skills/skills/career/job-hunter/inputs/search-outreach-target.md +24 -0
  96. package/resources/skills/skills/career/job-hunter/rules/README.md +37 -0
  97. package/resources/skills/skills/career/job-hunter/rules/writing-rules.md +81 -0
  98. package/resources/skills/skills/design/banana/SKILL.md +375 -0
  99. package/resources/skills/skills/design/banana/references/cost-tracking.md +47 -0
  100. package/resources/skills/skills/design/banana/references/gemini-models.md +236 -0
  101. package/resources/skills/skills/design/banana/references/mcp-tools.md +145 -0
  102. package/resources/skills/skills/design/banana/references/post-processing.md +192 -0
  103. package/resources/skills/skills/design/banana/references/presets.md +69 -0
  104. package/resources/skills/skills/design/banana/references/prompt-engineering.md +481 -0
  105. package/resources/skills/skills/design/banana/scripts/batch.py +97 -0
  106. package/resources/skills/skills/design/banana/scripts/cost_tracker.py +191 -0
  107. package/resources/skills/skills/design/banana/scripts/edit.py +159 -0
  108. package/resources/skills/skills/design/banana/scripts/generate.py +168 -0
  109. package/resources/skills/skills/design/banana/scripts/presets.py +154 -0
  110. package/resources/skills/skills/design/banana/scripts/setup_mcp.py +151 -0
  111. package/resources/skills/skills/design/banana/scripts/validate_setup.py +133 -0
  112. package/resources/skills/skills/gstack/ship/SKILL.md +13 -0
  113. package/resources/skills/skills/media/3d-logo-animation/SKILL.md +59 -0
  114. package/resources/skills/skills/media/action-figure-generator/SKILL.md +48 -0
  115. package/resources/skills/skills/media/ad-creative/SKILL.md +79 -0
  116. package/resources/skills/skills/media/ai-clipping/SKILL.md +194 -0
  117. package/resources/skills/skills/media/ai-clipping/scripts/run-ai-clipping.sh +200 -0
  118. package/resources/skills/skills/media/ai-fight-scene/SKILL.md +132 -0
  119. package/resources/skills/skills/media/amazon-product-listing/SKILL.md +68 -0
  120. package/resources/skills/skills/media/animal-video-generator/SKILL.md +59 -0
  121. package/resources/skills/skills/media/award-ceremony-video/SKILL.md +87 -0
  122. package/resources/skills/skills/media/blog-header/SKILL.md +61 -0
  123. package/resources/skills/skills/media/brand-kit/SKILL.md +72 -0
  124. package/resources/skills/skills/media/brochures/SKILL.md +65 -0
  125. package/resources/skills/skills/media/cartoon-dance-animation/SKILL.md +62 -0
  126. package/resources/skills/skills/media/character-story-video/SKILL.md +84 -0
  127. package/resources/skills/skills/media/chibi-collage-effect/SKILL.md +63 -0
  128. package/resources/skills/skills/media/cinema-director/SKILL.md +93 -0
  129. package/resources/skills/skills/media/cinema-director/scripts/generate-film.sh +78 -0
  130. package/resources/skills/skills/media/color-analysis-board/SKILL.md +71 -0
  131. package/resources/skills/skills/media/core-edit/SKILL.md +48 -0
  132. package/resources/skills/skills/media/core-edit/edit-image.sh +54 -0
  133. package/resources/skills/skills/media/core-edit/enhance-image.sh +191 -0
  134. package/resources/skills/skills/media/core-edit/lipsync.sh +144 -0
  135. package/resources/skills/skills/media/core-edit/video-effects.sh +193 -0
  136. package/resources/skills/skills/media/core-media/SKILL.md +49 -0
  137. package/resources/skills/skills/media/core-media/create-music.sh +169 -0
  138. package/resources/skills/skills/media/core-media/generate-image.sh +161 -0
  139. package/resources/skills/skills/media/core-media/generate-video.sh +137 -0
  140. package/resources/skills/skills/media/core-media/image-to-video.sh +228 -0
  141. package/resources/skills/skills/media/core-media/schema_data.json +18708 -0
  142. package/resources/skills/skills/media/core-media/upload.sh +41 -0
  143. package/resources/skills/skills/media/core-platform/SKILL.md +41 -0
  144. package/resources/skills/skills/media/core-platform/check-result.sh +37 -0
  145. package/resources/skills/skills/media/core-platform/setup.sh +31 -0
  146. package/resources/skills/skills/media/couple-grid-creator/SKILL.md +47 -0
  147. package/resources/skills/skills/media/design-guide/SKILL.md +73 -0
  148. package/resources/skills/skills/media/drone-style-video/SKILL.md +61 -0
  149. package/resources/skills/skills/media/fashion-try-on/SKILL.md +61 -0
  150. package/resources/skills/skills/media/floor-plan-rendering/SKILL.md +56 -0
  151. package/resources/skills/skills/media/freeze-effect-video/SKILL.md +100 -0
  152. package/resources/skills/skills/media/giant-product-showcase/SKILL.md +61 -0
  153. package/resources/skills/skills/media/instagram-post/SKILL.md +58 -0
  154. package/resources/skills/skills/media/interior-design/SKILL.md +61 -0
  155. package/resources/skills/skills/media/interior-design-visualizer/SKILL.md +57 -0
  156. package/resources/skills/skills/media/jewelry-product-video/SKILL.md +61 -0
  157. package/resources/skills/skills/media/kdenlive/SKILL.md +106 -0
  158. package/resources/skills/skills/media/kdenlive/scripts/assemble.sh +57 -0
  159. package/resources/skills/skills/media/kdenlive/scripts/common.sh +30 -0
  160. package/resources/skills/skills/media/kdenlive/scripts/inspect.sh +19 -0
  161. package/resources/skills/skills/media/kdenlive/scripts/reframe.sh +22 -0
  162. package/resources/skills/skills/media/kdenlive/scripts/render.sh +16 -0
  163. package/resources/skills/skills/media/kdenlive/scripts/title-card.sh +25 -0
  164. package/resources/skills/skills/media/keyboard-art-maker/SKILL.md +44 -0
  165. package/resources/skills/skills/media/logo-branding/SKILL.md +70 -0
  166. package/resources/skills/skills/media/logo-creator/SKILL.md +80 -0
  167. package/resources/skills/skills/media/logo-creator/scripts/create-logo.sh +38 -0
  168. package/resources/skills/skills/media/logo-generator/SKILL.md +56 -0
  169. package/resources/skills/skills/media/multi-angle-reshoot/SKILL.md +70 -0
  170. package/resources/skills/skills/media/multi-angle-shots/SKILL.md +73 -0
  171. package/resources/skills/skills/media/music-video/SKILL.md +61 -0
  172. package/resources/skills/skills/media/nano-banana/SKILL.md +80 -0
  173. package/resources/skills/skills/media/nano-banana/scripts/generate-nano-art.sh +54 -0
  174. package/resources/skills/skills/media/one-shot-video/SKILL.md +56 -0
  175. package/resources/skills/skills/media/photo-pack-generator/SKILL.md +205 -0
  176. package/resources/skills/skills/media/photo-pack-generator/scripts/generate-pack.sh +241 -0
  177. package/resources/skills/skills/media/product-ad-cinematic/SKILL.md +78 -0
  178. package/resources/skills/skills/media/product-campaign/SKILL.md +76 -0
  179. package/resources/skills/skills/media/product-showcase-video/SKILL.md +60 -0
  180. package/resources/skills/skills/media/product-video-ad-maker/SKILL.md +59 -0
  181. package/resources/skills/skills/media/rednote-cover/SKILL.md +57 -0
  182. package/resources/skills/skills/media/seedance-2/SKILL.md +632 -0
  183. package/resources/skills/skills/media/seedance-2/scripts/generate-seedance.sh +701 -0
  184. package/resources/skills/skills/media/selfie-with-celebrities/SKILL.md +64 -0
  185. package/resources/skills/skills/media/social-media-video/SKILL.md +277 -0
  186. package/resources/skills/skills/media/social-media-video/scripts/run-social-video.sh +316 -0
  187. package/resources/skills/skills/media/social-pack/SKILL.md +58 -0
  188. package/resources/skills/skills/media/storyboard/SKILL.md +57 -0
  189. package/resources/skills/skills/media/storyboard-to-cooking-video/SKILL.md +143 -0
  190. package/resources/skills/skills/media/talking-baby-video/SKILL.md +57 -0
  191. package/resources/skills/skills/media/ugc-ads-workflow/SKILL.md +70 -0
  192. package/resources/skills/skills/media/ugc-lifestyle-try-on/SKILL.md +65 -0
  193. package/resources/skills/skills/media/ugc-video-factory/SKILL.md +134 -0
  194. package/resources/skills/skills/media/ui-design/SKILL.md +81 -0
  195. package/resources/skills/skills/media/ui-design/scripts/generate-mockup.sh +49 -0
  196. package/resources/skills/skills/media/url-to-design/SKILL.md +61 -0
  197. package/resources/skills/skills/media/workflow/SKILL.md +197 -0
  198. package/resources/skills/skills/media/workflow/scripts/discover-workflow.sh +18 -0
  199. package/resources/skills/skills/media/workflow/scripts/generate-workflow.sh +33 -0
  200. package/resources/skills/skills/media/workflow/scripts/interactive-run.sh +16 -0
  201. package/resources/skills/skills/media/workflow/scripts/list-workflows.sh +20 -0
  202. package/resources/skills/skills/media/workflow/scripts/run-workflow.sh +34 -0
  203. package/resources/skills/skills/media/youtube-shorts/SKILL.md +173 -0
  204. package/resources/skills/skills/media/youtube-shorts/scripts/run-youtube-shorts.sh +141 -0
  205. package/resources/skills/skills/media/youtube-thumbnail/SKILL.md +66 -0
  206. package/resources/skills/skills/meta/cue-developer/references/architecture.md +2 -2
  207. package/resources/skills/skills/meta/cue-usage/SKILL.md +1 -1
  208. package/resources/skills/skills/meta/profile-fit-monitor/SKILL.md +2 -2
  209. package/resources/skills/skills/meta/profile-optimizer/SKILL.md +1 -1
  210. package/resources/skills/skills/meta/profile-suggest/SKILL.md +7 -7
  211. package/resources/skills/skills/meta/profile-summon/SKILL.md +159 -0
  212. package/resources/skills/skills/meta/profile-summon/evals/evals.json +53 -0
  213. package/resources/skills/skills/meta/save-profile/SKILL.md +1 -1
  214. package/resources/skills/skills/meta/skill-reviewer/SKILL.md +3 -0
  215. package/resources/skills/skills/meta/skill-reviewer/references/tdd-for-skills.md +55 -0
  216. package/resources/skills/skills/research/find-skills/SKILL.md +1 -1
  217. package/resources/skills/skills/review/code-review-deep/SKILL.md +20 -0
  218. package/resources/skills/skills/security/trivy-scan/SKILL.md +139 -0
  219. package/resources/skills/skills/security/trivy-scan/scripts/ensure-trivy.sh +21 -0
  220. package/resources/skills/skills/tools/ccusage/SKILL.md +142 -0
  221. package/src/commands/_index.ts +8 -0
  222. package/src/commands/ai.ts +2 -2
  223. package/src/commands/auto-detect.test.ts +74 -0
  224. package/src/commands/auto-detect.ts +9 -7
  225. package/src/commands/cli.test.ts +20 -4
  226. package/src/commands/cli.ts +36 -20
  227. package/src/commands/create-profile.ts +2 -2
  228. package/src/commands/debug.ts +2 -2
  229. package/src/commands/discover.ts +14 -4
  230. package/src/commands/export-docker.ts +1 -1
  231. package/src/commands/features-batch1.test.ts +1 -1
  232. package/src/commands/gates.ts +1 -1
  233. package/src/commands/import-profile.ts +1 -1
  234. package/src/commands/init.ts +15 -11
  235. package/src/commands/install.test.ts +192 -0
  236. package/src/commands/install.ts +610 -0
  237. package/src/commands/launch-handoff.e2e.test.ts +33 -1
  238. package/src/commands/launch.e2e.test.ts +15 -10
  239. package/src/commands/launch.ts +73 -116
  240. package/src/commands/materialize.ts +2 -2
  241. package/src/commands/prune.ts +1 -1
  242. package/src/commands/security-audit.ts +1 -1
  243. package/src/commands/shell.ts +7 -7
  244. package/src/commands/skill-report.ts +1 -1
  245. package/src/commands/skills.ts +3 -3
  246. package/src/commands/snapshot.ts +2 -2
  247. package/src/commands/summon.test.ts +116 -0
  248. package/src/commands/summon.ts +338 -0
  249. package/src/commands/trigger-gaps.ts +1 -1
  250. package/src/commands/use.ts +47 -3
  251. package/src/commands/watch-live.ts +5 -5
  252. package/src/commands/watch.ts +8 -8
  253. package/src/index.ts +2 -0
  254. package/src/lib/active-sessions.test.ts +3 -3
  255. package/src/lib/active-sessions.ts +4 -4
  256. package/src/lib/auto-detect.test.ts +172 -8
  257. package/src/lib/auto-detect.ts +191 -136
  258. package/src/lib/codex-persona-parity.test.ts +58 -0
  259. package/src/lib/companion-detect.test.ts +43 -1
  260. package/src/lib/companion-detect.ts +35 -0
  261. package/src/lib/credentials-sync.test.ts +121 -1
  262. package/src/lib/credentials-sync.ts +95 -1
  263. package/src/lib/cwd-resolver.test.ts +8 -8
  264. package/src/lib/cwd-resolver.ts +2 -2
  265. package/src/lib/dashboard-merge.test.ts +9 -4
  266. package/src/lib/dashboard-server.ts +1 -1
  267. package/src/lib/picker.test.ts +1 -1
  268. package/src/lib/picker.ts +5 -5
  269. package/src/lib/profile-merge.test.ts +8 -0
  270. package/src/lib/profile-names.test.ts +3 -3
  271. package/src/lib/runtime-install.ts +166 -0
  272. package/src/lib/runtime-materializer.test.ts +137 -0
  273. package/src/lib/runtime-materializer.ts +105 -2
  274. package/src/lib/skill-router.test.ts +38 -0
  275. package/src/lib/skill-router.ts +65 -4
  276. package/profiles/eu-tender-research/README.md +0 -48
  277. package/profiles/eu-tender-research/logo.png +0 -0
  278. package/profiles/eu-tender-research/profile.yaml +0 -108
@@ -0,0 +1,58 @@
1
+ ---
2
+ slug: muapi-instagram-post
3
+ name: muapi-instagram-post
4
+ version: "1.0.0"
5
+ description: Create a polished, on-brand Instagram post — square or portrait hero image with matching caption and hashtags.
6
+ acceptLicenseTerms: true
7
+ ---
8
+
9
+
10
+ # Instagram Post
11
+
12
+ **Create a polished, on-brand Instagram post — square or portrait hero image with matching caption and hashtags.**
13
+
14
+ ## Inputs
15
+
16
+ | Name | Type | Required | Default | Description |
17
+ |:---|:---|:---|:---|:---|
18
+ | `brief` | text | yes | — | What the post is about (e.g. "summer coffee launch at our café, warm golden vibes"). |
19
+ | `brand_style` | text | no | modern, vibrant, clean typography, lifestyle photography aesthetic | Brand personality and visual style tags. |
20
+ | `format` | text | no | 1:1 | Post format — "1:1" for feed square, "4:5" for portrait feed, "9:16" for Reels. |
21
+
22
+
23
+ ## Steps
24
+
25
+ This skill produces one polished Instagram-ready visual + caption. Use the plan if generating more than one variant.
26
+
27
+ ### Phase A — Generate the hero image
28
+
29
+ 1. Write a detailed, atmosphere-rich image prompt based on `{{brief}}` and `{{brand_style}}`:
30
+ - Include lighting direction, color palette, mood, subject placement, and lens feel.
31
+ - Optimize for Instagram aesthetics: clean, punchy, single focal point.
32
+ - Append style tags: `{{brand_style}}, social media photography, highly detailed`.
33
+ 2. Call `muapi image generate` (model=nano-banana-2, aspect_ratio=`{{format}}`).
34
+ 3. If the user provided a product or subject image in the session, prefer `muapi image edit` instead to maintain visual consistency.
35
+
36
+ ### Phase B — Caption & Hashtags
37
+
38
+ After the image is generated, compose and return:
39
+ - **Caption**: 2–4 lines. Hook line first (punchy, curiosity-driving), then brand message, then CTA.
40
+ - **Hashtags**: 15–20 targeted hashtags (mix of niche, mid-tier, and broad). Format as a separate block.
41
+
42
+ ## Notes
43
+ - Prioritize scroll-stopping first impressions — the image must visually communicate the brief within 2 seconds.
44
+ - If `format` is `9:16` (Reels cover), note that text overlays are common; include a suggestion for on-screen text placement.
45
+ - Do NOT generate multiple variants unless the user explicitly asks.
46
+
47
+ ## Trigger Keywords
48
+
49
+ `instagram post`, `ig post`, `instagram`, `feed post`, `instagram creative`
50
+
51
+
52
+ ---
53
+
54
+ ## Notes for the Executing Agent
55
+
56
+ - This recipe is LLM-orchestrated: read each phase, gather any missing inputs from the user, then call `muapi` CLI commands. Use `muapi auth configure` first if `MUAPI_API_KEY` is unset.
57
+ - For model IDs without a CLI alias yet, fall back to the raw endpoint via `curl -X POST https://api.muapi.ai/api/v1/<endpoint> -H "x-api-key: $MUAPI_API_KEY" -H 'content-type: application/json' -d '{...}'` and poll with `muapi predict wait <request_id>`.
58
+ - Substitute `{{input_name}}` placeholders with the user's actual inputs before issuing each call.
@@ -0,0 +1,61 @@
1
+ ---
2
+ slug: muapi-interior-design
3
+ name: muapi-interior-design
4
+ version: "1.0.0"
5
+ description: Create professional interior design visualizations — redesign existing rooms, generate new room concepts, or visualize specific furniture styles in a space.
6
+ acceptLicenseTerms: true
7
+ ---
8
+
9
+
10
+ # Interior Design
11
+
12
+ **Create professional interior design visualizations — redesign existing rooms, generate new room concepts, or visualize specific furniture styles in a space.**
13
+
14
+ ## Inputs
15
+
16
+ | Name | Type | Required | Default | Description |
17
+ |:---|:---|:---|:---|:---|
18
+ | `room_type` | text | yes | — | The type of room (e.g. "modern living room", "scandinavian kitchen", "luxury master bedroom", "minimalist home office"). |
19
+ | `design_style` | text | no | modern minimalist | The aesthetic direction (e.g. "japandi", "industrial loft", "boho chic", "mid-century modern", "art deco"). |
20
+ | `color_palette` | text | no | neutral tones with wood accents | Preferred colors and materials (e.g. "sage green and brass", "monochrome black and white", "warm terracotta"). |
21
+ | `specific_elements` | text | no | — | Particular items to include (e.g. "large floor-to-ceiling windows", "velvet green sofa", "statement pendant light"). |
22
+ | `room_photo` | image_url | no | — | Optional photo of an existing room to redesign or use as layout reference. |
23
+
24
+
25
+ ## Steps
26
+
27
+ ### Phase A — Room Concept / Redesign
28
+
29
+ Submit the plan with ONE or TWO steps:
30
+
31
+ 1. **Main Visualization** — If `{{room_photo}}` is provided, use `muapi image edit` (model=`flux-kontext-pro-i2i`); otherwise use `muapi image generate` (model=`nano-banana-pro`):
32
+ - Prompt: `Professional interior design visualization of a {{room_type}}. Style: {{design_style}}. Color palette: {{color_palette}}. {{specific_elements}}. Cinematic lighting, architectural photography style, wide angle lens, 8k resolution, photorealistic textures. High-end interior design magazine quality.`
33
+ - If `{{room_photo}}` is used, add: `Maintain the structural layout and window placement of the reference room. Completely transform the furniture, decor, and wall finishes to match the new style.`
34
+ - Aspect ratio: 16:9 (standard for room views)
35
+
36
+ 2. **Alternative Angle (Optional)** — `muapi image generate` (model=`bytedance-seedream-v4.5`):
37
+ - Prompt: `A different perspective/closeup of the same {{room_type}} — focus on the textures and lighting of the {{specific_elements}}. {{design_style}} aesthetic, {{color_palette}}. Professional interior photography.`
38
+
39
+ After generation:
40
+ - Present the new room design
41
+ - Offer to "expand the room" using `ai-image-extension` to see more of the space
42
+ - Suggest adding a 3D-style walkthrough video using `kling-v3.0-pro-image-to-video`
43
+ - Offer to generate a specific mood board for this design
44
+
45
+ ## Notes
46
+ - `flux-kontext-pro-i2i` is the best model for maintaining the "soul" of a room while changing the design style.
47
+ - For small rooms, suggest using "bright natural light" and "minimal furniture" to make the space feel larger.
48
+ - For commercial spaces (offices, cafes), add "professional workplace lighting" to the prompt.
49
+
50
+ ## Trigger Keywords
51
+
52
+ `interior design`, `room redesign`, `home decor`, `architecture visualization`, `room concept`, `furniture layout`, `house design`, `interior visualization`
53
+
54
+
55
+ ---
56
+
57
+ ## Notes for the Executing Agent
58
+
59
+ - This recipe is LLM-orchestrated: read each phase, gather any missing inputs from the user, then call `muapi` CLI commands. Use `muapi auth configure` first if `MUAPI_API_KEY` is unset.
60
+ - For model IDs without a CLI alias yet, fall back to the raw endpoint via `curl -X POST https://api.muapi.ai/api/v1/<endpoint> -H "x-api-key: $MUAPI_API_KEY" -H 'content-type: application/json' -d '{...}'` and poll with `muapi predict wait <request_id>`.
61
+ - Substitute `{{input_name}}` placeholders with the user's actual inputs before issuing each call.
@@ -0,0 +1,57 @@
1
+ ---
2
+ slug: muapi-interior-design-visualizer
3
+ name: muapi-interior-design-visualizer
4
+ version: "1.0.0"
5
+ description: Visualize interior design by generating an empty room and filling it with stylish furniture and decor, or by redesigning an existing room.
6
+ acceptLicenseTerms: true
7
+ ---
8
+
9
+
10
+ # Interior Design Visualizer
11
+
12
+ **Visualize interior design by generating an empty room and filling it with stylish furniture and decor, or by redesigning an existing room.**
13
+
14
+ ## Inputs
15
+
16
+ | Name | Type | Required | Default | Description |
17
+ |:---|:---|:---|:---|:---|
18
+ | `room_type` | text | no | modern living room | The type of room to design (e.g. living room, bedroom, office). |
19
+ | `design_style` | text | no | contemporary minimalist | The aesthetic style (e.g. Scandinavian, Industrial, Bohemian). |
20
+ | `empty_room_image` | image_url | no | — | Optional image of an empty room to be used as a base. |
21
+
22
+
23
+ ## Steps
24
+
25
+ ### Phase A — Room Setup
26
+
27
+ If `{{empty_room_image}}` is not provided, submit the plan with ONE step to generate an empty base room:
28
+
29
+ 1. **Empty Room Generation** — `muapi image generate` (model=`gpt-image-2-text-to-image`):
30
+ - Prompt: `A professional wide-angle photograph of a completely empty {{room_type}} with {{design_style}} architecture. Large windows with natural light, clean wooden or tiled flooring, white or neutral-colored walls, no furniture, high ceiling. High-quality architectural photography, cinematic look.`
31
+ - Aspect ratio: 4:3 or 1:1
32
+
33
+ Present the empty room to the user.
34
+
35
+ ### Phase B — Furnishing & Styling
36
+
37
+ Once the base room is ready, submit the plan to fill it with furniture:
38
+
39
+ 1. **Room Furnishing** — `muapi image edit` (model=`nano-banana-2-edit`):
40
+ - Reference Image: The empty room image from Phase A (or the user-provided `{{empty_room_image}}`).
41
+ - Prompt: `A stunningly designed {{room_type}} filled with high-end furniture in a {{design_style}} style. Includes a comfortable sofa, stylish coffee table, elegant rug, indoor plants, decorative wall art, and ambient lighting. The furniture placement is natural and architecturally sound. Photorealistic textures, soft lighting, cozy and inviting atmosphere, 8k resolution.`
42
+ - Aspect ratio: Same as the base image.
43
+
44
+ After generation, present the final interior design visualization to the user. You can offer to generate variations with different styles (e.g., "Change style to Industrial").
45
+
46
+ ## Trigger Keywords
47
+
48
+ `interior design`, `room visualizer`, `furniture design`, `home decor`, `redesign room`
49
+
50
+
51
+ ---
52
+
53
+ ## Notes for the Executing Agent
54
+
55
+ - This recipe is LLM-orchestrated: read each phase, gather any missing inputs from the user, then call `muapi` CLI commands. Use `muapi auth configure` first if `MUAPI_API_KEY` is unset.
56
+ - For model IDs without a CLI alias yet, fall back to the raw endpoint via `curl -X POST https://api.muapi.ai/api/v1/<endpoint> -H "x-api-key: $MUAPI_API_KEY" -H 'content-type: application/json' -d '{...}'` and poll with `muapi predict wait <request_id>`.
57
+ - Substitute `{{input_name}}` placeholders with the user's actual inputs before issuing each call.
@@ -0,0 +1,61 @@
1
+ ---
2
+ slug: muapi-jewelry-product-video
3
+ name: muapi-jewelry-product-video
4
+ version: "1.0.0"
5
+ description: Create a luxury jewelry advertisement with high-end commercial cinematography and detailed macro animation.
6
+ acceptLicenseTerms: true
7
+ ---
8
+
9
+
10
+ # Jewelry Product Video
11
+
12
+ **Create a luxury jewelry advertisement with high-end commercial cinematography and detailed macro animation.**
13
+
14
+ ## Inputs
15
+
16
+ | Name | Type | Required | Default | Description |
17
+ |:---|:---|:---|:---|:---|
18
+ | `jewelry_description` | text | no | a delicate rose gold ring with a lotus design and a sparkling diamond | Detailed description of the jewelry item. |
19
+ | `surface_description` | text | no | a beige surface | The surface the jewelry is resting on. |
20
+
21
+
22
+ ## Steps
23
+
24
+ ### Phase A — High-End Jewelry Rendering
25
+
26
+ Submit the plan with ONE step to create the base luxury image:
27
+
28
+ 1. **Luxury Image Generation** — `muapi image generate` (model=`nano-banana-2-edit`):
29
+ - Prompt: `Style: Luxury product ad, high-end commercial feel. Scene: {{jewelry_description}} resting on {{surface_description}}. A soft, warm light highlights the diamond, creating subtle highlights on the metal. 100mm macro lens photography, shallow DOF, incredible detail, elegant and minimal composition.`
30
+ - Aspect ratio: 1:1 or 4:5
31
+
32
+ Present the luxury image to the user for approval.
33
+
34
+ ### Phase B — Cinematic Animation
35
+
36
+ Once the image is approved, submit the plan with TWO sequential video steps to build the commercial:
37
+
38
+ 1. **Macro Rotation** — `muapi video from-image` (model=`grok-imagine-image-to-video`):
39
+ - Reference Image: The luxury image from Phase A.
40
+ - Prompt: `[00:00–00:02] Close-up shot, 100mm macro lens, shallow DOF. A soft, warm light highlights the diamond, creating subtle highlights on the rose gold. Slight 1-second camera rotation around the ring. Smooth, elegant movement.`
41
+
42
+ 2. **Facet Gliding** — `muapi video from-image` or `muapi video from-image` (model=`grok-imagine-image-to-video`):
43
+ - Reference Image: The luxury image from Phase A.
44
+ - Prompt: `[00:02–00:05] Extreme close-up on the diamond, 200mm macro lens, razor-thin DOF. A focused LED light illuminates the diamond, catching every facet. The camera glides slowly over the diamond, showcasing its brilliance. Ethereal, sparkling highlights.`
45
+
46
+ *Note: You can use the `muapi predict result` + ffmpeg concat tool to merge these shots into a final 5-second commercial.*
47
+
48
+ After generation, present the final jewelry commercial video to the user.
49
+
50
+ ## Trigger Keywords
51
+
52
+ `jewelry video`, `luxury ad`, `diamond animation`, `ring commercial`, `high-end jewelry showcase`
53
+
54
+
55
+ ---
56
+
57
+ ## Notes for the Executing Agent
58
+
59
+ - This recipe is LLM-orchestrated: read each phase, gather any missing inputs from the user, then call `muapi` CLI commands. Use `muapi auth configure` first if `MUAPI_API_KEY` is unset.
60
+ - For model IDs without a CLI alias yet, fall back to the raw endpoint via `curl -X POST https://api.muapi.ai/api/v1/<endpoint> -H "x-api-key: $MUAPI_API_KEY" -H 'content-type: application/json' -d '{...}'` and poll with `muapi predict wait <request_id>`.
61
+ - Substitute `{{input_name}}` placeholders with the user's actual inputs before issuing each call.
@@ -0,0 +1,106 @@
1
+ ---
2
+ name: kdenlive
3
+ version: 0.1.0
4
+ description: >-
5
+ Use when user says "edit this video", "render the kdenlive project", "stitch
6
+ clips together", "add a title card", "crossfade these", "cut a 9:16 version",
7
+ "add background music", or "trim/concat". Headless non-linear video editing and
8
+ rendering with melt (the MLT engine behind Kdenlive) plus ffmpeg. Deterministic
9
+ and local. NOT for AI text-to-video generation (use media/core-media).
10
+ allowed-tools: Bash(melt:*), Bash(ffmpeg:*), Bash(ffprobe:*), Bash(mediainfo:*), Bash(bash:*)
11
+ ---
12
+
13
+ # 🎬 Kdenlive / MLT headless video editing
14
+
15
+ Edit and render video from the terminal with **`melt`** (the MLT framework that
16
+ powers Kdenlive) and **`ffmpeg`**. No GUI, no display, no API key. Build a
17
+ timeline, crossfade clips, burn in titles, score with music, render a
18
+ `.kdenlive` project headlessly, and reframe for social.
19
+
20
+ Kdenlive the app is GUI-only (it needs a display); its render engine is `melt`,
21
+ which these scripts drive. A project you build here (`.kdenlive` / `.mlt` XML)
22
+ opens in the Kdenlive GUI and renders identically on a headless box.
23
+
24
+ ## Prerequisites
25
+
26
+ ```bash
27
+ sudo apt-get install -y kdenlive melt ffmpeg mediainfo fonts-montserrat
28
+ # verify: melt -version && ffmpeg -version | head -1
29
+ ```
30
+
31
+ Titles default to the **Montserrat** font (override with `--font`).
32
+
33
+ ## Scripts (run one command, not eight)
34
+
35
+ | Script | Does |
36
+ | :--- | :--- |
37
+ | `inspect.sh <file...>` | Duration, resolution, fps, codecs + the auto-matched melt profile |
38
+ | `title-card.sh --text "..."` | Standalone title/intro card (solid bg + centered text) |
39
+ | `assemble.sh -o out.mp4 ...clips` | Concat or crossfade clips, optional intro title + bg music, optional `.kdenlive` export |
40
+ | `render.sh <project.kdenlive>` | Render a Kdenlive/MLT project file headlessly to mp4 |
41
+ | `reframe.sh <in> --aspect 9:16` | Reframe to 9:16 / 1:1 / 16:9 with blurred fill (no stretch) |
42
+
43
+ The melt profile (resolution + fps) is auto-detected from the first input, so
44
+ mixed sources render onto one consistent canvas.
45
+
46
+ ## Quick start
47
+
48
+ ```bash
49
+ S=scripts # from the skill dir
50
+
51
+ # Inspect inputs
52
+ bash $S/inspect.sh raw1.mp4 raw2.mp4
53
+
54
+ # Stitch a reel: intro title, 12-frame crossfades, background music,
55
+ # and also save an editable .kdenlive project.
56
+ bash $S/assemble.sh --title "LAUNCH 2026" --xfade 12 --music track.m4a \
57
+ --project launch.kdenlive -o reel.mp4 raw1.mp4 raw2.mp4 raw3.mp4
58
+
59
+ # Render that project headlessly (e.g. on a server / in CI)
60
+ bash $S/render.sh launch.kdenlive -o reel.mp4
61
+
62
+ # Make the vertical social cut
63
+ bash $S/reframe.sh reel.mp4 --aspect 9:16 -o reel_vertical.mp4
64
+
65
+ # Just a title card
66
+ bash $S/title-card.sh --text "Q3 RESULTS" --subtitle "all-hands" --dur 3 -o card.mp4
67
+ ```
68
+
69
+ ## The .kdenlive project flow
70
+
71
+ `assemble.sh --project show.kdenlive` writes an MLT XML project alongside the
72
+ mp4. That file is the same format Kdenlive saves: open it in the GUI to keep
73
+ editing, hand it to a teammate, or re-render on any headless machine with
74
+ `render.sh`. This is how you separate "decide the edit" from "render the edit".
75
+
76
+ ## Pairs with the generation skills
77
+
78
+ These are the **assembly** layer. Generate shots with `media/core-media`
79
+ (`generate-video.sh`, `image-to-video.sh`) or a recipe like
80
+ `media/cinema-director`, then stitch, title, score, and reframe them here.
81
+
82
+ Example: `cinema-director` → 3 shots → `assemble.sh --xfade 15 --title ...` →
83
+ `reframe.sh --aspect 9:16` → a finished vertical ad, fully local after the shots
84
+ exist.
85
+
86
+ ## Rules
87
+
88
+ - **melt renders, Kdenlive edits.** Never try to run the `kdenlive` GUI binary
89
+ headlessly. Drive `melt` for any non-interactive render.
90
+ - **Frames, not seconds, inside melt.** `in=`/`out=` and `-mix` are in frames.
91
+ At 25 fps, 12 frames is ~0.5 s. The scripts handle the conversion for you.
92
+ - **Let the profile auto-match.** Pass `--profile` only to force a different
93
+ canvas; otherwise the first clip's resolution and fps win.
94
+ - **Keep the project file.** When the edit matters, always pass `--project` so
95
+ the decision is reproducible and re-renderable, not baked only into an mp4.
96
+ - **ffmpeg for reframe and audio mux, melt for the timeline.** Each tool does
97
+ the half it is reliable at.
98
+
99
+ ## Example
100
+
101
+ ```bash
102
+ # Person photo + product shots already generated → finished 9:16 UGC cut, local.
103
+ bash scripts/assemble.sh --title "NEW DROP" --xfade 10 --music beat.m4a \
104
+ --project drop.kdenlive -o drop.mp4 shot1.mp4 shot2.mp4 shot3.mp4
105
+ bash scripts/reframe.sh drop.mp4 --aspect 9:16 -o drop_reels.mp4
106
+ ```
@@ -0,0 +1,57 @@
1
+ #!/bin/bash
2
+ # Assemble clips into one video: sequence (or crossfade), optional intro title,
3
+ # optional background music, render to mp4. Optionally also emit a .kdenlive
4
+ # project (MLT XML) you can open in Kdenlive or re-render with render.sh.
5
+ # Usage:
6
+ # bash assemble.sh -o out.mp4 [--xfade 12] [--title "INTRO"] [--music bg.m4a] \
7
+ # [--project show.kdenlive] clipA.mp4 clipB.mp4 clipC.mp4
8
+ set -euo pipefail
9
+ DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"; . "$DIR/common.sh"
10
+ need melt; need ffprobe
11
+ OUT=out.mp4; XFADE=0; TITLE=""; MUSIC=""; PROJECT=""; CLIPS=()
12
+ while [ $# -gt 0 ]; do case "$1" in
13
+ -o|--out) OUT="$2"; shift 2;; --xfade) XFADE="$2"; shift 2;;
14
+ --title) TITLE="$2"; shift 2;; --music) MUSIC="$2"; shift 2;;
15
+ --project) PROJECT="$2"; shift 2;;
16
+ *) CLIPS+=("$1"); shift;; esac; done
17
+ [ ${#CLIPS[@]} -ge 1 ] || die "give at least one clip"
18
+ for c in "${CLIPS[@]}"; do [ -f "$c" ] || die "missing clip: $c"; done
19
+ PROFILE=$(pick_profile "${CLIPS[0]}")
20
+ echo "profile: $PROFILE | clips: ${#CLIPS[@]} | xfade: ${XFADE}f"
21
+
22
+ WORK=$(mktemp -d); trap 'rm -rf "$WORK"' EXIT
23
+ SEQ=()
24
+ if [ -n "$TITLE" ]; then
25
+ bash "$DIR/title-card.sh" --text "$TITLE" --profile "$PROFILE" --dur 2 -o "$WORK/_title.mp4" >/dev/null
26
+ SEQ+=("$WORK/_title.mp4")
27
+ fi
28
+ SEQ+=("${CLIPS[@]}")
29
+
30
+ # Build melt args: insert `-mix N -mixer luma` before every clip after the first.
31
+ MARGS=()
32
+ first=1
33
+ for c in "${SEQ[@]}"; do
34
+ if [ $first -eq 1 ]; then MARGS+=("$c"); first=0
35
+ elif [ "$XFADE" -gt 0 ] 2>/dev/null; then MARGS+=(-mix "$XFADE" -mixer luma "$c")
36
+ else MARGS+=("$c"); fi
37
+ done
38
+
39
+ VID="$OUT"
40
+ [ -n "$MUSIC" ] && VID="$WORK/_silent.mp4"
41
+ melt -profile "$PROFILE" "${MARGS[@]}" -consumer "avformat:$VID" $VCODEC $ACODEC >/dev/null 2>&1
42
+ [ -s "$VID" ] || die "melt render failed"
43
+
44
+ if [ -n "$PROJECT" ]; then
45
+ melt -profile "$PROFILE" "${MARGS[@]}" -consumer "xml:$PROJECT" >/dev/null 2>&1
46
+ echo "📄 $PROJECT (open in Kdenlive, or: bash render.sh $PROJECT -o final.mp4)"
47
+ fi
48
+
49
+ if [ -n "$MUSIC" ]; then
50
+ need ffmpeg; [ -f "$MUSIC" ] || die "missing music: $MUSIC"
51
+ DUR=$(ffprobe -v error -show_entries format=duration -of csv=p=0 "$VID")
52
+ FADE=$(awk -v d="$DUR" 'BEGIN{ printf "%.2f", (d>1? d-1 : 0) }')
53
+ ffmpeg -nostdin -loglevel error -i "$VID" -i "$MUSIC" \
54
+ -filter_complex "[1:a]afade=t=out:st=${FADE}:d=1[a]" \
55
+ -map 0:v -map "[a]" -c:v copy -c:a aac -ab 192k -shortest "$OUT" -y
56
+ fi
57
+ echo "✅ $OUT ($(ffprobe -v error -show_entries format=duration -of csv=p=0 "$OUT")s, $(ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=p=0:s=x "$OUT"))"
@@ -0,0 +1,30 @@
1
+ #!/bin/bash
2
+ # Shared helpers for the kdenlive (melt/MLT) skill. Source this from each script.
3
+ # Headless: never touch a display.
4
+ export SDL_AUDIODRIVER=${SDL_AUDIODRIVER:-dummy}
5
+ export SDL_VIDEODRIVER=${SDL_VIDEODRIVER:-dummy}
6
+
7
+ VCODEC="vcodec=libx264 crf=20 preset=medium pix_fmt=yuv420p"
8
+ ACODEC="acodec=aac ab=192k"
9
+
10
+ die() { echo "Error: $*" >&2; exit 1; }
11
+
12
+ need() { command -v "$1" >/dev/null 2>&1 || die "'$1' not found. Install it (see SKILL.md prerequisites)."; }
13
+
14
+ # pick_profile <reference-media> -> echoes a melt named profile matched to the
15
+ # input's height + frame rate. Falls back to atsc_1080p_30.
16
+ pick_profile() {
17
+ local f="$1" h fps num den val code lines name
18
+ h=$(ffprobe -v error -select_streams v:0 -show_entries stream=height -of csv=p=0 "$f" 2>/dev/null)
19
+ fps=$(ffprobe -v error -select_streams v:0 -show_entries stream=r_frame_rate -of csv=p=0 "$f" 2>/dev/null)
20
+ num=${fps%%/*}; den=${fps##*/}; [ "$den" = "$fps" ] && den=1; [ -z "$den" ] && den=1
21
+ val=$(awk -v n="${num:-30}" -v d="${den:-1}" 'BEGIN{ if(d+0==0)d=1; printf "%.3f", n/d }')
22
+ case "$val" in
23
+ 23.9*) code=2398;; 24.*) code=24;; 25.*) code=25;;
24
+ 29.9*) code=2997;; 30.*) code=30;; 50.*) code=50;;
25
+ 59.9*) code=5994;; 60.*) code=60;; *) code=30;;
26
+ esac
27
+ if [ "${h:-1080}" -le 899 ] 2>/dev/null; then lines=720; else lines=1080; fi
28
+ name="atsc_${lines}p_${code}"
29
+ if melt -query profiles 2>/dev/null | grep -q -- "- ${name}$"; then echo "$name"; else echo "atsc_1080p_30"; fi
30
+ }
@@ -0,0 +1,19 @@
1
+ #!/bin/bash
2
+ # Probe one or more media files: duration, resolution, fps, codecs, audio.
3
+ # Usage: bash inspect.sh <file> [file...]
4
+ set -euo pipefail
5
+ DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"; . "$DIR/common.sh"
6
+ need ffprobe
7
+ [ $# -ge 1 ] || die "Usage: bash inspect.sh <file> [file...]"
8
+ for f in "$@"; do
9
+ [ -f "$f" ] || { echo "missing: $f"; continue; }
10
+ echo "── $f"
11
+ ffprobe -v error -select_streams v:0 \
12
+ -show_entries stream=width,height,r_frame_rate,codec_name,bit_rate \
13
+ -show_entries format=duration,size,format_name \
14
+ -of default=noprint_wrappers=1 "$f"
15
+ a=$(ffprobe -v error -select_streams a:0 -show_entries stream=codec_name,channels,sample_rate -of default=noprint_wrappers=1 "$f" 2>/dev/null)
16
+ [ -n "$a" ] && echo "$a" | sed 's/^/audio.&/'
17
+ echo " → melt profile match: $(pick_profile "$f")"
18
+ echo
19
+ done
@@ -0,0 +1,22 @@
1
+ #!/bin/bash
2
+ # Reframe a video to a target social aspect with a blurred-fill background
3
+ # (no stretching, no hard crop of the subject). Uses ffmpeg.
4
+ # Usage: bash reframe.sh <in.mp4> --aspect 9:16|1:1|16:9 [--height 1920] -o out.mp4
5
+ set -euo pipefail
6
+ DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"; . "$DIR/common.sh"
7
+ need ffmpeg
8
+ IN=""; ASPECT=9:16; H=""; OUT=""
9
+ while [ $# -gt 0 ]; do case "$1" in
10
+ --aspect) ASPECT="$2"; shift 2;; --height) H="$2"; shift 2;;
11
+ -o|--out) OUT="$2"; shift 2;; *) IN="$1"; shift;; esac; done
12
+ [ -n "$IN" ] && [ -f "$IN" ] || die "Usage: bash reframe.sh <in.mp4> --aspect 9:16 -o out.mp4"
13
+ case "$ASPECT" in
14
+ 9:16) W=1080; DH=1920;; 1:1) W=1080; DH=1080;; 16:9) W=1920; DH=1080;;
15
+ *) die "aspect must be 9:16, 1:1, or 16:9";; esac
16
+ [ -n "$H" ] && { DH="$H"; W=$(awk -v dh="$DH" -v a="$ASPECT" 'BEGIN{split(a,p,":"); printf "%d", dh*p[1]/p[2]}'); }
17
+ [ -n "$OUT" ] || OUT="${IN%.*}_${ASPECT/:/x}.mp4"
18
+ ffmpeg -nostdin -loglevel error -i "$IN" -filter_complex \
19
+ "[0:v]split[a][b];[a]scale=${W}:${DH}:force_original_aspect_ratio=increase,crop=${W}:${DH},boxblur=22[bg];[b]scale=${W}:-2:force_original_aspect_ratio=decrease[fg];[bg][fg]overlay=(W-w)/2:(H-h)/2" \
20
+ -c:v libx264 -crf 20 -preset medium -pix_fmt yuv420p -c:a copy "$OUT" -y
21
+ [ -s "$OUT" ] || die "reframe failed"
22
+ echo "✅ $OUT ($(ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=p=0:s=x "$OUT"))"
@@ -0,0 +1,16 @@
1
+ #!/bin/bash
2
+ # Render a Kdenlive/MLT project file headlessly to mp4 (no GUI, no display).
3
+ # Works on .kdenlive and .mlt project files (both are MLT XML).
4
+ # Usage: bash render.sh <project.kdenlive|.mlt> [-o out.mp4]
5
+ set -euo pipefail
6
+ DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"; . "$DIR/common.sh"
7
+ need melt
8
+ PROJ=""; OUT=""
9
+ while [ $# -gt 0 ]; do case "$1" in
10
+ -o|--out) OUT="$2"; shift 2;; *) PROJ="$1"; shift;; esac; done
11
+ [ -n "$PROJ" ] && [ -f "$PROJ" ] || die "Usage: bash render.sh <project.kdenlive|.mlt> [-o out.mp4]"
12
+ [ -n "$OUT" ] || OUT="${PROJ%.*}.mp4"
13
+ echo "rendering $PROJ → $OUT"
14
+ melt "$PROJ" -consumer "avformat:$OUT" $VCODEC $ACODEC >/dev/null 2>&1
15
+ [ -s "$OUT" ] || die "render failed (is this a valid MLT/Kdenlive project?)"
16
+ echo "✅ $OUT ($(ffprobe -v error -show_entries format=duration -of csv=p=0 "$OUT" 2>/dev/null)s)"
@@ -0,0 +1,25 @@
1
+ #!/bin/bash
2
+ # Render a standalone title card: solid background + centered text (Montserrat).
3
+ # Usage: bash title-card.sh --text "BIG TITLE" [--subtitle "small"] [--bg "#1a1a2e"]
4
+ # [--fg "#ffffff"] [--dur 2.5] [--size 96] [--profile atsc_1080p_30] -o card.mp4
5
+ set -euo pipefail
6
+ DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"; . "$DIR/common.sh"
7
+ need melt
8
+ TEXT=""; SUB=""; BG="#101018"; FG="#ffffff"; DUR=2.5; SIZE=96; PROFILE=atsc_1080p_30; OUT=card.mp4; FONT=Montserrat
9
+ while [ $# -gt 0 ]; do case "$1" in
10
+ --text) TEXT="$2"; shift 2;; --subtitle) SUB="$2"; shift 2;;
11
+ --bg) BG="$2"; shift 2;; --fg) FG="$2"; shift 2;; --dur) DUR="$2"; shift 2;;
12
+ --size) SIZE="$2"; shift 2;; --font) FONT="$2"; shift 2;;
13
+ --profile) PROFILE="$2"; shift 2;; -o|--out) OUT="$2"; shift 2;;
14
+ *) die "unknown arg: $1";; esac; done
15
+ [ -n "$TEXT" ] || die "--text is required"
16
+ FPS=$(melt -query profile=$PROFILE 2>/dev/null | awk -F= '/frame_rate_num/{n=$2} /frame_rate_den/{d=$2} END{ if(d=="")d=1; printf "%d", (n/d)+0.5 }'); [ "${FPS:-0}" -gt 0 ] || FPS=30
17
+ FRAMES=$(awk -v d="$DUR" -v f="$FPS" 'BEGIN{ printf "%d", (d*f)-1 }')
18
+ # melt color hex wants 0xRRGGBBAA; convert "#RRGGBB" -> 0xRRGGBBff
19
+ hex(){ printf '0x%sff' "$(echo "$1" | tr -d '#')"; }
20
+ set -- melt -profile "$PROFILE" "color:$(hex "$BG")" out="$FRAMES" \
21
+ -filter "dynamictext:$TEXT" family="$FONT" size="$SIZE" weight=700 fgcolour="$(hex "$FG")" valign=middle halign=center
22
+ [ -n "$SUB" ] && set -- "$@" -filter "dynamictext:$SUB" family="$FONT" size=$((SIZE/3)) fgcolour="$(hex "$FG")" valign=bottom halign=center olcolour=0x00000000
23
+ "$@" -consumer "avformat:$OUT" $VCODEC $ACODEC >/dev/null 2>&1
24
+ [ -s "$OUT" ] || die "render produced no output"
25
+ echo "✅ $OUT (${DUR}s @ ${PROFILE})"
@@ -0,0 +1,44 @@
1
+ ---
2
+ slug: muapi-keyboard-art-maker
3
+ name: muapi-keyboard-art-maker
4
+ version: "1.0.0"
5
+ description: Generate artistic top-down photos of keyboard keycaps arranged to spell out custom text messages.
6
+ acceptLicenseTerms: true
7
+ ---
8
+
9
+
10
+ # Keyboard Art Maker
11
+
12
+ **Generate artistic top-down photos of keyboard keycaps arranged to spell out custom text messages.**
13
+
14
+ ## Inputs
15
+
16
+ | Name | Type | Required | Default | Description |
17
+ |:---|:---|:---|:---|:---|
18
+ | `display_text` | text | yes | — | The text you want to spell out with keycaps (e.g., "WORKFLOWS ON VADOO AI"). |
19
+
20
+
21
+ ## Steps
22
+
23
+ ### Phase A — Keyboard Art Generation
24
+
25
+ Submit the plan with ONE step to generate the artistic keyboard image:
26
+
27
+ 1. **Keyboard Art Generation** — `muapi image generate` (model=`ideogram-v3-t2i`):
28
+ - Prompt: `The photograph captures white keycaps, arranged neatly on a dusty black surface to spell "{{display_text}}". Each keycap displays a crisp black letter, with soft, diffused lighting highlighting the subtle shadows, creating a harmonious contrast between the keycaps and their backdrop, while the top-down shot ensures the phrase is clear and in perfect focus. There should be adequate spacing between words. Cinematic quality, professional studio lighting, 8k resolution.`
29
+ - Aspect ratio: 1:1 or 4:3
30
+
31
+ After generation, present the final keyboard art image to the user.
32
+
33
+ ## Trigger Keywords
34
+
35
+ `keyboard art`, `keycap text`, `spell with keys`, `keyboard message`, `custom keycap image`
36
+
37
+
38
+ ---
39
+
40
+ ## Notes for the Executing Agent
41
+
42
+ - This recipe is LLM-orchestrated: read each phase, gather any missing inputs from the user, then call `muapi` CLI commands. Use `muapi auth configure` first if `MUAPI_API_KEY` is unset.
43
+ - For model IDs without a CLI alias yet, fall back to the raw endpoint via `curl -X POST https://api.muapi.ai/api/v1/<endpoint> -H "x-api-key: $MUAPI_API_KEY" -H 'content-type: application/json' -d '{...}'` and poll with `muapi predict wait <request_id>`.
44
+ - Substitute `{{input_name}}` placeholders with the user's actual inputs before issuing each call.
@@ -0,0 +1,70 @@
1
+ ---
2
+ slug: muapi-logo-branding
3
+ name: muapi-logo-branding
4
+ version: "1.0.0"
5
+ description: Design a professional logo with full branding package — primary logo, variations (dark/light/icon-only), color palette, and real-world application mockups.
6
+ acceptLicenseTerms: true
7
+ ---
8
+
9
+
10
+ # Logo + Branding Package
11
+
12
+ **Design a professional logo with full branding package — primary logo, variations (dark/light/icon-only), color palette, and real-world application mockups.**
13
+
14
+ ## Inputs
15
+
16
+ | Name | Type | Required | Default | Description |
17
+ |:---|:---|:---|:---|:---|
18
+ | `brand_name` | text | yes | — | The brand or company name to design a logo for. |
19
+ | `industry` | text | yes | — | Industry or business type (e.g. "luxury spa", "AI SaaS startup", "organic food brand", "architecture firm"). |
20
+ | `style_preference` | text | no | modern, minimal, versatile | Logo style direction (e.g. "wordmark only", "icon + text", "monogram", "abstract mark", "bold geometric"). |
21
+ | `color_preference` | text | no | — | Optional preferred colors or palette direction (e.g. "navy and gold", "earthy greens", "vibrant purple and white"). |
22
+ | `mood` | text | no | professional, trustworthy, premium | Brand personality (e.g. "playful and fun", "bold and disruptive", "calm and wellness-focused"). |
23
+
24
+
25
+ ## Steps
26
+
27
+ Submit the plan with all steps in parallel.
28
+
29
+ ### Phase A — Logo Concepts (3 Variations)
30
+
31
+ 1. **Logo concept 1 — Primary** — `muapi image generate` (model=`ideogram-v3-t2i`):
32
+ - Prompt: `Professional logo design for "{{brand_name}}" — {{industry}} brand. {{style_preference}} style. {{mood}} personality. {{color_preference}} color palette. Clean vector-style logo, white background, no gradients unless requested, scalable mark. Include brand name typeset below icon if applicable. Logo design, isolated on white, professional quality.`
33
+ - Aspect ratio: 1:1
34
+
35
+ 2. **Logo concept 2 — Alternative style** — `muapi image generate` (model=`flux-2-pro`):
36
+ - Prompt: `Alternative logo concept for "{{brand_name}}" — {{industry}}. Different approach from standard: explore typographic treatment or geometric abstraction. {{mood}} feel. {{color_preference}}. Professional logo design on white background, vector aesthetic.`
37
+ - Aspect ratio: 1:1
38
+
39
+ 3. **Logo concept 3 — Icon/mark only** — `muapi image generate` (model=`gpt4o-text-to-image`):
40
+ - Prompt: `Brand icon/logomark only (no text) for {{brand_name}} — {{industry}} company. {{mood}} personality. Simple, memorable, scalable icon that works at 32px and 512px. {{color_preference}} or complementary palette. Clean white background, professional vector-quality icon design.`
41
+ - Aspect ratio: 1:1
42
+
43
+ ### Phase B — Brand Application Mockup
44
+
45
+ 4. **Real-world mockup** — `muapi image generate` (model=`nano-banana-pro`):
46
+ - Prompt: `{{brand_name}} logo brand mockup presentation — shows logo applied to: business card (front/back), coffee cup, letterhead, and favicon. Professional branding agency presentation style, clean white/grey background, photorealistic mockups with consistent {{mood}} brand feel.`
47
+ - Aspect ratio: 16:9
48
+
49
+ After generation:
50
+ - Present all 3 logo concepts and ask user to pick a favorite
51
+ - Once selected, offer: dark/light variations, SVG-ready export prompt, and social media profile icon crop
52
+ - Suggest running the `design-guide` skill for a full brand system
53
+
54
+ ## Notes
55
+ - Ideogram v3 excels at text legibility in logos — use it for wordmark-heavy concepts.
56
+ - Flux 2 Pro gives the most creative abstract mark interpretations.
57
+ - Always check that the brand name text is correctly spelled in the generated logo.
58
+
59
+ ## Trigger Keywords
60
+
61
+ `logo`, `logo design`, `brand logo`, `logo branding`, `logo creator`, `design logo`, `branding package`, `logo generator`, `brand identity logo`
62
+
63
+
64
+ ---
65
+
66
+ ## Notes for the Executing Agent
67
+
68
+ - This recipe is LLM-orchestrated: read each phase, gather any missing inputs from the user, then call `muapi` CLI commands. Use `muapi auth configure` first if `MUAPI_API_KEY` is unset.
69
+ - For model IDs without a CLI alias yet, fall back to the raw endpoint via `curl -X POST https://api.muapi.ai/api/v1/<endpoint> -H "x-api-key: $MUAPI_API_KEY" -H 'content-type: application/json' -d '{...}'` and poll with `muapi predict wait <request_id>`.
70
+ - Substitute `{{input_name}}` placeholders with the user's actual inputs before issuing each call.