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.
- package/CHANGELOG.md +4 -3
- package/README.md +154 -394
- package/bin/cue-learnings +30 -4
- package/bin/cue-review-progress +0 -0
- package/bin/cue-review-watch +0 -0
- package/dist/cue.js +4328 -3108
- package/package.json +1 -1
- package/plugins/cue/commands/cue-switch.md +1 -1
- package/plugins/cue/commands/cue.md +1 -1
- package/profiles/backend/profile.yaml +4 -0
- package/profiles/browser/profile.yaml +4 -0
- package/profiles/career/profile.yaml +2 -13
- package/profiles/commerce/profile.yaml +0 -2
- package/profiles/coolify/profile.yaml +0 -1
- package/profiles/core/profile.yaml +78 -11
- package/profiles/dash-merge-test/profile.yaml +6 -1
- package/profiles/designer/profile.yaml +9 -1
- package/profiles/dropshipping/profile.yaml +69 -0
- package/profiles/frontend/profile.yaml +4 -0
- package/profiles/google-ads/profile.yaml +34 -0
- package/profiles/google-analytics/profile.yaml +34 -0
- package/profiles/google-drive/profile.yaml +34 -0
- package/profiles/gstack/profile.yaml +117 -29
- package/profiles/marketing/profile.yaml +0 -1
- package/profiles/media/README.md +70 -0
- package/profiles/media/profile.yaml +104 -0
- package/profiles/nano-banana/profile.yaml +52 -0
- package/profiles/ops/profile.yaml +1 -2
- package/profiles/secops/profile.yaml +3 -0
- package/profiles/skill-writer/profile.yaml +15 -0
- package/profiles/video/profile.yaml +3 -0
- package/profiles/web-frontend-base/profile.yaml +6 -0
- package/profiles/webshop/profile.yaml +0 -1
- package/profiles/webshop-google/profile.yaml +1 -0
- package/profiles/x-growth-bot/profile.yaml +2 -0
- package/resources/icons/generate-icons.py +2 -128
- package/resources/mcps/configs/claude.sanitized.json +88 -20
- package/resources/mcps/configs/claude_runtime.sanitized.json +40 -1
- package/resources/mcps/configs/codex.sanitized.json +29 -0
- package/resources/skills/skills/career/job-hunter/LICENSE +21 -0
- package/resources/skills/skills/career/job-hunter/README.md +323 -0
- package/resources/skills/skills/career/job-hunter/SKILL.md +91 -0
- package/resources/skills/skills/career/job-hunter/agents/README.md +96 -0
- package/resources/skills/skills/career/job-hunter/agents/apply-assessment-prep.md +195 -0
- package/resources/skills/skills/career/job-hunter/agents/apply-ats-scan.md +155 -0
- package/resources/skills/skills/career/job-hunter/agents/apply-bias-audit.md +224 -0
- package/resources/skills/skills/career/job-hunter/agents/apply-cover-letter.md +69 -0
- package/resources/skills/skills/career/job-hunter/agents/apply-decode-jd.md +117 -0
- package/resources/skills/skills/career/job-hunter/agents/apply-fit-score.md +183 -0
- package/resources/skills/skills/career/job-hunter/agents/apply-linkedin-audit.md +74 -0
- package/resources/skills/skills/career/job-hunter/agents/apply-linkedin-scrape.md +255 -0
- package/resources/skills/skills/career/job-hunter/agents/apply-portfolio-brief.md +123 -0
- package/resources/skills/skills/career/job-hunter/agents/apply-reality-check.md +164 -0
- package/resources/skills/skills/career/job-hunter/agents/apply-reference-prep.md +150 -0
- package/resources/skills/skills/career/job-hunter/agents/apply-rejection-analysis.md +172 -0
- package/resources/skills/skills/career/job-hunter/agents/apply-resume.md +70 -0
- package/resources/skills/skills/career/job-hunter/agents/apply-skills-gap-filler.md +109 -0
- package/resources/skills/skills/career/job-hunter/agents/career-internal.md +94 -0
- package/resources/skills/skills/career/job-hunter/agents/career-linkedin-content.md +173 -0
- package/resources/skills/skills/career/job-hunter/agents/career-linkedin-scanner.md +262 -0
- package/resources/skills/skills/career/job-hunter/agents/career-network-message.md +108 -0
- package/resources/skills/skills/career/job-hunter/agents/career-promote.md +102 -0
- package/resources/skills/skills/career/job-hunter/agents/career-review.md +71 -0
- package/resources/skills/skills/career/job-hunter/agents/interview-debrief.md +117 -0
- package/resources/skills/skills/career/job-hunter/agents/interview-mock.md +171 -0
- package/resources/skills/skills/career/job-hunter/agents/interview-panel-decoder.md +152 -0
- package/resources/skills/skills/career/job-hunter/agents/interview-prep.md +184 -0
- package/resources/skills/skills/career/job-hunter/agents/interview-question-bank.md +133 -0
- package/resources/skills/skills/career/job-hunter/agents/interview-research.md +148 -0
- package/resources/skills/skills/career/job-hunter/agents/offer-compare.md +117 -0
- package/resources/skills/skills/career/job-hunter/agents/offer-counteroffer.md +144 -0
- package/resources/skills/skills/career/job-hunter/agents/offer-deadline-manager.md +148 -0
- package/resources/skills/skills/career/job-hunter/agents/offer-negotiate.md +126 -0
- package/resources/skills/skills/career/job-hunter/agents/offer-schedule.md +99 -0
- package/resources/skills/skills/career/job-hunter/agents/offer-thankyou.md +80 -0
- package/resources/skills/skills/career/job-hunter/agents/search-company-research.md +146 -0
- package/resources/skills/skills/career/job-hunter/agents/search-follow-up.md +129 -0
- package/resources/skills/skills/career/job-hunter/agents/search-ghost-job-detector.md +152 -0
- package/resources/skills/skills/career/job-hunter/agents/search-inbox-scan.md +193 -0
- package/resources/skills/skills/career/job-hunter/agents/search-interview-scorecard.md +164 -0
- package/resources/skills/skills/career/job-hunter/agents/search-jobs.md +149 -0
- package/resources/skills/skills/career/job-hunter/agents/search-momentum-check.md +194 -0
- package/resources/skills/skills/career/job-hunter/agents/search-outreach.md +85 -0
- package/resources/skills/skills/career/job-hunter/agents/search-referral-finder.md +124 -0
- package/resources/skills/skills/career/job-hunter/agents/search-salary.md +96 -0
- package/resources/skills/skills/career/job-hunter/agents/search-send-email.md +109 -0
- package/resources/skills/skills/career/job-hunter/agents/search-tracker-update.md +127 -0
- package/resources/skills/skills/career/job-hunter/inputs/README.md +26 -0
- package/resources/skills/skills/career/job-hunter/inputs/apply-linkedin-url.txt +8 -0
- package/resources/skills/skills/career/job-hunter/inputs/interview-context.md +24 -0
- package/resources/skills/skills/career/job-hunter/inputs/job-description.md +20 -0
- package/resources/skills/skills/career/job-hunter/inputs/job-search-criteria.md +36 -0
- package/resources/skills/skills/career/job-hunter/inputs/my-linkedin.md +24 -0
- package/resources/skills/skills/career/job-hunter/inputs/my-resume.md +28 -0
- package/resources/skills/skills/career/job-hunter/inputs/search-outreach-target.md +24 -0
- package/resources/skills/skills/career/job-hunter/rules/README.md +37 -0
- package/resources/skills/skills/career/job-hunter/rules/writing-rules.md +81 -0
- package/resources/skills/skills/design/banana/SKILL.md +375 -0
- package/resources/skills/skills/design/banana/references/cost-tracking.md +47 -0
- package/resources/skills/skills/design/banana/references/gemini-models.md +236 -0
- package/resources/skills/skills/design/banana/references/mcp-tools.md +145 -0
- package/resources/skills/skills/design/banana/references/post-processing.md +192 -0
- package/resources/skills/skills/design/banana/references/presets.md +69 -0
- package/resources/skills/skills/design/banana/references/prompt-engineering.md +481 -0
- package/resources/skills/skills/design/banana/scripts/batch.py +97 -0
- package/resources/skills/skills/design/banana/scripts/cost_tracker.py +191 -0
- package/resources/skills/skills/design/banana/scripts/edit.py +159 -0
- package/resources/skills/skills/design/banana/scripts/generate.py +168 -0
- package/resources/skills/skills/design/banana/scripts/presets.py +154 -0
- package/resources/skills/skills/design/banana/scripts/setup_mcp.py +151 -0
- package/resources/skills/skills/design/banana/scripts/validate_setup.py +133 -0
- package/resources/skills/skills/gstack/ship/SKILL.md +13 -0
- package/resources/skills/skills/media/3d-logo-animation/SKILL.md +59 -0
- package/resources/skills/skills/media/action-figure-generator/SKILL.md +48 -0
- package/resources/skills/skills/media/ad-creative/SKILL.md +79 -0
- package/resources/skills/skills/media/ai-clipping/SKILL.md +194 -0
- package/resources/skills/skills/media/ai-clipping/scripts/run-ai-clipping.sh +200 -0
- package/resources/skills/skills/media/ai-fight-scene/SKILL.md +132 -0
- package/resources/skills/skills/media/amazon-product-listing/SKILL.md +68 -0
- package/resources/skills/skills/media/animal-video-generator/SKILL.md +59 -0
- package/resources/skills/skills/media/award-ceremony-video/SKILL.md +87 -0
- package/resources/skills/skills/media/blog-header/SKILL.md +61 -0
- package/resources/skills/skills/media/brand-kit/SKILL.md +72 -0
- package/resources/skills/skills/media/brochures/SKILL.md +65 -0
- package/resources/skills/skills/media/cartoon-dance-animation/SKILL.md +62 -0
- package/resources/skills/skills/media/character-story-video/SKILL.md +84 -0
- package/resources/skills/skills/media/chibi-collage-effect/SKILL.md +63 -0
- package/resources/skills/skills/media/cinema-director/SKILL.md +93 -0
- package/resources/skills/skills/media/cinema-director/scripts/generate-film.sh +78 -0
- package/resources/skills/skills/media/color-analysis-board/SKILL.md +71 -0
- package/resources/skills/skills/media/core-edit/SKILL.md +48 -0
- package/resources/skills/skills/media/core-edit/edit-image.sh +54 -0
- package/resources/skills/skills/media/core-edit/enhance-image.sh +191 -0
- package/resources/skills/skills/media/core-edit/lipsync.sh +144 -0
- package/resources/skills/skills/media/core-edit/video-effects.sh +193 -0
- package/resources/skills/skills/media/core-media/SKILL.md +49 -0
- package/resources/skills/skills/media/core-media/create-music.sh +169 -0
- package/resources/skills/skills/media/core-media/generate-image.sh +161 -0
- package/resources/skills/skills/media/core-media/generate-video.sh +137 -0
- package/resources/skills/skills/media/core-media/image-to-video.sh +228 -0
- package/resources/skills/skills/media/core-media/schema_data.json +18708 -0
- package/resources/skills/skills/media/core-media/upload.sh +41 -0
- package/resources/skills/skills/media/core-platform/SKILL.md +41 -0
- package/resources/skills/skills/media/core-platform/check-result.sh +37 -0
- package/resources/skills/skills/media/core-platform/setup.sh +31 -0
- package/resources/skills/skills/media/couple-grid-creator/SKILL.md +47 -0
- package/resources/skills/skills/media/design-guide/SKILL.md +73 -0
- package/resources/skills/skills/media/drone-style-video/SKILL.md +61 -0
- package/resources/skills/skills/media/fashion-try-on/SKILL.md +61 -0
- package/resources/skills/skills/media/floor-plan-rendering/SKILL.md +56 -0
- package/resources/skills/skills/media/freeze-effect-video/SKILL.md +100 -0
- package/resources/skills/skills/media/giant-product-showcase/SKILL.md +61 -0
- package/resources/skills/skills/media/instagram-post/SKILL.md +58 -0
- package/resources/skills/skills/media/interior-design/SKILL.md +61 -0
- package/resources/skills/skills/media/interior-design-visualizer/SKILL.md +57 -0
- package/resources/skills/skills/media/jewelry-product-video/SKILL.md +61 -0
- package/resources/skills/skills/media/kdenlive/SKILL.md +106 -0
- package/resources/skills/skills/media/kdenlive/scripts/assemble.sh +57 -0
- package/resources/skills/skills/media/kdenlive/scripts/common.sh +30 -0
- package/resources/skills/skills/media/kdenlive/scripts/inspect.sh +19 -0
- package/resources/skills/skills/media/kdenlive/scripts/reframe.sh +22 -0
- package/resources/skills/skills/media/kdenlive/scripts/render.sh +16 -0
- package/resources/skills/skills/media/kdenlive/scripts/title-card.sh +25 -0
- package/resources/skills/skills/media/keyboard-art-maker/SKILL.md +44 -0
- package/resources/skills/skills/media/logo-branding/SKILL.md +70 -0
- package/resources/skills/skills/media/logo-creator/SKILL.md +80 -0
- package/resources/skills/skills/media/logo-creator/scripts/create-logo.sh +38 -0
- package/resources/skills/skills/media/logo-generator/SKILL.md +56 -0
- package/resources/skills/skills/media/multi-angle-reshoot/SKILL.md +70 -0
- package/resources/skills/skills/media/multi-angle-shots/SKILL.md +73 -0
- package/resources/skills/skills/media/music-video/SKILL.md +61 -0
- package/resources/skills/skills/media/nano-banana/SKILL.md +80 -0
- package/resources/skills/skills/media/nano-banana/scripts/generate-nano-art.sh +54 -0
- package/resources/skills/skills/media/one-shot-video/SKILL.md +56 -0
- package/resources/skills/skills/media/photo-pack-generator/SKILL.md +205 -0
- package/resources/skills/skills/media/photo-pack-generator/scripts/generate-pack.sh +241 -0
- package/resources/skills/skills/media/product-ad-cinematic/SKILL.md +78 -0
- package/resources/skills/skills/media/product-campaign/SKILL.md +76 -0
- package/resources/skills/skills/media/product-showcase-video/SKILL.md +60 -0
- package/resources/skills/skills/media/product-video-ad-maker/SKILL.md +59 -0
- package/resources/skills/skills/media/rednote-cover/SKILL.md +57 -0
- package/resources/skills/skills/media/seedance-2/SKILL.md +632 -0
- package/resources/skills/skills/media/seedance-2/scripts/generate-seedance.sh +701 -0
- package/resources/skills/skills/media/selfie-with-celebrities/SKILL.md +64 -0
- package/resources/skills/skills/media/social-media-video/SKILL.md +277 -0
- package/resources/skills/skills/media/social-media-video/scripts/run-social-video.sh +316 -0
- package/resources/skills/skills/media/social-pack/SKILL.md +58 -0
- package/resources/skills/skills/media/storyboard/SKILL.md +57 -0
- package/resources/skills/skills/media/storyboard-to-cooking-video/SKILL.md +143 -0
- package/resources/skills/skills/media/talking-baby-video/SKILL.md +57 -0
- package/resources/skills/skills/media/ugc-ads-workflow/SKILL.md +70 -0
- package/resources/skills/skills/media/ugc-lifestyle-try-on/SKILL.md +65 -0
- package/resources/skills/skills/media/ugc-video-factory/SKILL.md +134 -0
- package/resources/skills/skills/media/ui-design/SKILL.md +81 -0
- package/resources/skills/skills/media/ui-design/scripts/generate-mockup.sh +49 -0
- package/resources/skills/skills/media/url-to-design/SKILL.md +61 -0
- package/resources/skills/skills/media/workflow/SKILL.md +197 -0
- package/resources/skills/skills/media/workflow/scripts/discover-workflow.sh +18 -0
- package/resources/skills/skills/media/workflow/scripts/generate-workflow.sh +33 -0
- package/resources/skills/skills/media/workflow/scripts/interactive-run.sh +16 -0
- package/resources/skills/skills/media/workflow/scripts/list-workflows.sh +20 -0
- package/resources/skills/skills/media/workflow/scripts/run-workflow.sh +34 -0
- package/resources/skills/skills/media/youtube-shorts/SKILL.md +173 -0
- package/resources/skills/skills/media/youtube-shorts/scripts/run-youtube-shorts.sh +141 -0
- package/resources/skills/skills/media/youtube-thumbnail/SKILL.md +66 -0
- package/resources/skills/skills/meta/cue-developer/references/architecture.md +2 -2
- package/resources/skills/skills/meta/cue-usage/SKILL.md +1 -1
- package/resources/skills/skills/meta/profile-fit-monitor/SKILL.md +2 -2
- package/resources/skills/skills/meta/profile-optimizer/SKILL.md +1 -1
- package/resources/skills/skills/meta/profile-suggest/SKILL.md +7 -7
- package/resources/skills/skills/meta/profile-summon/SKILL.md +159 -0
- package/resources/skills/skills/meta/profile-summon/evals/evals.json +53 -0
- package/resources/skills/skills/meta/save-profile/SKILL.md +1 -1
- package/resources/skills/skills/meta/skill-reviewer/SKILL.md +3 -0
- package/resources/skills/skills/meta/skill-reviewer/references/tdd-for-skills.md +55 -0
- package/resources/skills/skills/research/find-skills/SKILL.md +1 -1
- package/resources/skills/skills/review/code-review-deep/SKILL.md +20 -0
- package/resources/skills/skills/security/trivy-scan/SKILL.md +139 -0
- package/resources/skills/skills/security/trivy-scan/scripts/ensure-trivy.sh +21 -0
- package/resources/skills/skills/tools/ccusage/SKILL.md +142 -0
- package/src/commands/_index.ts +8 -0
- package/src/commands/ai.ts +2 -2
- package/src/commands/auto-detect.test.ts +74 -0
- package/src/commands/auto-detect.ts +9 -7
- package/src/commands/cli.test.ts +20 -4
- package/src/commands/cli.ts +36 -20
- package/src/commands/create-profile.ts +2 -2
- package/src/commands/debug.ts +2 -2
- package/src/commands/discover.ts +14 -4
- package/src/commands/export-docker.ts +1 -1
- package/src/commands/features-batch1.test.ts +1 -1
- package/src/commands/gates.ts +1 -1
- package/src/commands/import-profile.ts +1 -1
- package/src/commands/init.ts +15 -11
- package/src/commands/install.test.ts +192 -0
- package/src/commands/install.ts +610 -0
- package/src/commands/launch-handoff.e2e.test.ts +33 -1
- package/src/commands/launch.e2e.test.ts +15 -10
- package/src/commands/launch.ts +73 -116
- package/src/commands/materialize.ts +2 -2
- package/src/commands/prune.ts +1 -1
- package/src/commands/security-audit.ts +1 -1
- package/src/commands/shell.ts +7 -7
- package/src/commands/skill-report.ts +1 -1
- package/src/commands/skills.ts +3 -3
- package/src/commands/snapshot.ts +2 -2
- package/src/commands/summon.test.ts +116 -0
- package/src/commands/summon.ts +338 -0
- package/src/commands/trigger-gaps.ts +1 -1
- package/src/commands/use.ts +47 -3
- package/src/commands/watch-live.ts +5 -5
- package/src/commands/watch.ts +8 -8
- package/src/index.ts +2 -0
- package/src/lib/active-sessions.test.ts +3 -3
- package/src/lib/active-sessions.ts +4 -4
- package/src/lib/auto-detect.test.ts +172 -8
- package/src/lib/auto-detect.ts +191 -136
- package/src/lib/codex-persona-parity.test.ts +58 -0
- package/src/lib/companion-detect.test.ts +43 -1
- package/src/lib/companion-detect.ts +35 -0
- package/src/lib/credentials-sync.test.ts +121 -1
- package/src/lib/credentials-sync.ts +95 -1
- package/src/lib/cwd-resolver.test.ts +8 -8
- package/src/lib/cwd-resolver.ts +2 -2
- package/src/lib/dashboard-merge.test.ts +9 -4
- package/src/lib/dashboard-server.ts +1 -1
- package/src/lib/picker.test.ts +1 -1
- package/src/lib/picker.ts +5 -5
- package/src/lib/profile-merge.test.ts +8 -0
- package/src/lib/profile-names.test.ts +3 -3
- package/src/lib/runtime-install.ts +166 -0
- package/src/lib/runtime-materializer.test.ts +137 -0
- package/src/lib/runtime-materializer.ts +105 -2
- package/src/lib/skill-router.test.ts +38 -0
- package/src/lib/skill-router.ts +65 -4
- package/profiles/eu-tender-research/README.md +0 -48
- package/profiles/eu-tender-research/logo.png +0 -0
- 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.
|