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,228 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# muapi.ai Image-to-Video Generation
|
|
3
|
+
# Usage: ./image-to-video.sh --image-url URL --prompt "..." [--model MODEL] [options]
|
|
4
|
+
|
|
5
|
+
set -e
|
|
6
|
+
|
|
7
|
+
MUAPI_BASE="https://api.muapi.ai/api/v1"
|
|
8
|
+
|
|
9
|
+
# Defaults
|
|
10
|
+
IMAGE_URL=""
|
|
11
|
+
IMAGE_FILE=""
|
|
12
|
+
LAST_IMAGE_URL=""
|
|
13
|
+
LAST_IMAGE_FILE=""
|
|
14
|
+
PROMPT=""
|
|
15
|
+
MODEL="kling-pro"
|
|
16
|
+
ASPECT_RATIO="16:9"
|
|
17
|
+
DURATION=5
|
|
18
|
+
ASYNC=false
|
|
19
|
+
JSON_ONLY=false
|
|
20
|
+
MAX_WAIT=600
|
|
21
|
+
POLL_INTERVAL=5
|
|
22
|
+
ACTION="generate"
|
|
23
|
+
REQUEST_ID=""
|
|
24
|
+
|
|
25
|
+
for arg in "$@"; do
|
|
26
|
+
if [ "$arg" = "--add-key" ]; then
|
|
27
|
+
shift
|
|
28
|
+
KEY_VALUE=""
|
|
29
|
+
if [[ -n "$1" && ! "$1" =~ ^-- ]]; then KEY_VALUE="$1"; fi
|
|
30
|
+
if [ -z "$KEY_VALUE" ]; then echo "Enter your muapi.ai API key:" >&2; read -r KEY_VALUE; fi
|
|
31
|
+
if [ -n "$KEY_VALUE" ]; then
|
|
32
|
+
grep -v "^MUAPI_KEY=" .env > .env.tmp 2>/dev/null || true
|
|
33
|
+
mv .env.tmp .env 2>/dev/null || true
|
|
34
|
+
echo "MUAPI_KEY=$KEY_VALUE" >> .env
|
|
35
|
+
echo "MUAPI_KEY saved to .env" >&2
|
|
36
|
+
fi
|
|
37
|
+
exit 0
|
|
38
|
+
fi
|
|
39
|
+
done
|
|
40
|
+
|
|
41
|
+
if [ -f ".env" ]; then source .env 2>/dev/null || true; fi
|
|
42
|
+
|
|
43
|
+
while [[ $# -gt 0 ]]; do
|
|
44
|
+
case $1 in
|
|
45
|
+
--image-url) IMAGE_URL="$2"; shift 2 ;;
|
|
46
|
+
--file|--image) IMAGE_FILE="$2"; shift 2 ;;
|
|
47
|
+
--last-image-url) LAST_IMAGE_URL="$2"; shift 2 ;;
|
|
48
|
+
--last-image-file) LAST_IMAGE_FILE="$2"; shift 2 ;;
|
|
49
|
+
--prompt|-p) PROMPT="$2"; shift 2 ;;
|
|
50
|
+
--model|-m) MODEL="$2"; shift 2 ;;
|
|
51
|
+
--aspect-ratio) ASPECT_RATIO="$2"; shift 2 ;;
|
|
52
|
+
--duration) DURATION="$2"; shift 2 ;;
|
|
53
|
+
--async) ASYNC=true; shift ;;
|
|
54
|
+
--status) ACTION="status"; REQUEST_ID="$2"; shift 2 ;;
|
|
55
|
+
--result) ACTION="result"; REQUEST_ID="$2"; shift 2 ;;
|
|
56
|
+
--timeout) MAX_WAIT="$2"; shift 2 ;;
|
|
57
|
+
--json) JSON_ONLY=true; shift ;;
|
|
58
|
+
--help|-h)
|
|
59
|
+
echo "muapi.ai Image-to-Video" >&2
|
|
60
|
+
echo "" >&2
|
|
61
|
+
echo "Usage: ./image-to-video.sh --image-url URL --prompt \"...\" [options]" >&2
|
|
62
|
+
echo "" >&2
|
|
63
|
+
echo "Models (--model):" >&2
|
|
64
|
+
echo " kling-std, kling-pro (default), kling-master" >&2
|
|
65
|
+
echo " veo3, veo3-fast, wan2, wan22, seedance-pro, seedance-lite" >&2
|
|
66
|
+
echo " hunyuan, runway, pixverse, vidu, midjourney" >&2
|
|
67
|
+
echo " minimax-std, minimax-pro" >&2
|
|
68
|
+
echo "" >&2
|
|
69
|
+
echo "Options:" >&2
|
|
70
|
+
echo " --image-url URL Input image URL" >&2
|
|
71
|
+
echo " --file PATH Local file (auto-uploads)" >&2
|
|
72
|
+
echo " --last-image-url URL End frame URL (start+end interpolation)" >&2
|
|
73
|
+
echo " --last-image-file PATH Local end frame (auto-uploads)" >&2
|
|
74
|
+
echo " --prompt TEXT Motion description" >&2
|
|
75
|
+
echo " --aspect-ratio 16:9, 9:16, 1:1 (default: 16:9)" >&2
|
|
76
|
+
echo " --duration 5 or 10 seconds (default: 5)" >&2
|
|
77
|
+
echo " --async Return request_id immediately" >&2
|
|
78
|
+
exit 0 ;;
|
|
79
|
+
*) shift ;;
|
|
80
|
+
esac
|
|
81
|
+
done
|
|
82
|
+
|
|
83
|
+
if [ -z "$MUAPI_KEY" ]; then
|
|
84
|
+
echo "Error: MUAPI_KEY not set" >&2
|
|
85
|
+
exit 1
|
|
86
|
+
fi
|
|
87
|
+
|
|
88
|
+
HEADERS=(-H "x-api-key: $MUAPI_KEY" -H "Content-Type: application/json")
|
|
89
|
+
|
|
90
|
+
# Status/result check
|
|
91
|
+
if [ "$ACTION" = "status" ] || [ "$ACTION" = "result" ]; then
|
|
92
|
+
if [ -z "$REQUEST_ID" ]; then echo "Error: Request ID required" >&2; exit 1; fi
|
|
93
|
+
RESULT=$(curl -s -X GET "${MUAPI_BASE}/predictions/${REQUEST_ID}/result" "${HEADERS[@]}")
|
|
94
|
+
STATUS=$(echo "$RESULT" | grep -oE '"status"[[:space:]]*:[[:space:]]*"[^"]*"' | sed 's/.*: *"//' | sed 's/"$//')
|
|
95
|
+
[ "$JSON_ONLY" = false ] && echo "Status: $STATUS" >&2
|
|
96
|
+
if [ "$STATUS" = "completed" ]; then
|
|
97
|
+
URL=$(echo "$RESULT" | grep -o '"outputs":\[[^]]*\]' | grep -o '"[^"]*\.mp4"' | head -1 | tr -d '"')
|
|
98
|
+
[ -n "$URL" ] && [ "$JSON_ONLY" = false ] && echo "Video URL: $URL" >&2
|
|
99
|
+
fi
|
|
100
|
+
echo "$RESULT"
|
|
101
|
+
exit 0
|
|
102
|
+
fi
|
|
103
|
+
|
|
104
|
+
# Auto-upload local files
|
|
105
|
+
upload_file() {
|
|
106
|
+
local FPATH="$1"
|
|
107
|
+
if [ ! -f "$FPATH" ]; then echo "Error: File not found: $FPATH" >&2; exit 1; fi
|
|
108
|
+
[ "$JSON_ONLY" = false ] && echo "Uploading $(basename "$FPATH")..." >&2
|
|
109
|
+
local RESP=$(curl -s -X POST "${MUAPI_BASE}/upload_file" -H "x-api-key: $MUAPI_KEY" -F "file=@${FPATH}")
|
|
110
|
+
local URL=$(echo "$RESP" | jq -r '.url // empty')
|
|
111
|
+
if [ -z "$URL" ]; then
|
|
112
|
+
local ERR=$(echo "$RESP" | jq -r '.error // .detail // "Upload failed"')
|
|
113
|
+
echo "Error: $ERR" >&2; exit 1
|
|
114
|
+
fi
|
|
115
|
+
echo "$URL"
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
if [ -n "$IMAGE_FILE" ]; then IMAGE_URL=$(upload_file "$IMAGE_FILE"); fi
|
|
119
|
+
if [ -n "$LAST_IMAGE_FILE" ]; then LAST_IMAGE_URL=$(upload_file "$LAST_IMAGE_FILE"); fi
|
|
120
|
+
|
|
121
|
+
if [ -z "$IMAGE_URL" ]; then
|
|
122
|
+
echo "Error: --image-url or --file is required" >&2
|
|
123
|
+
exit 1
|
|
124
|
+
fi
|
|
125
|
+
|
|
126
|
+
# Map model to endpoint
|
|
127
|
+
case $MODEL in
|
|
128
|
+
kling-std) ENDPOINT="kling-v2.1-standard-i2v" ;;
|
|
129
|
+
kling-pro) ENDPOINT="kling-v2.1-pro-i2v" ;;
|
|
130
|
+
kling-master) ENDPOINT="kling-v2.1-master-i2v" ;;
|
|
131
|
+
veo3) ENDPOINT="veo3-image-to-video" ;;
|
|
132
|
+
veo3-fast) ENDPOINT="veo3-fast-image-to-video" ;;
|
|
133
|
+
wan2) ENDPOINT="wan2.1-image-to-video" ;;
|
|
134
|
+
wan22) ENDPOINT="wan2.2-image-to-video" ;;
|
|
135
|
+
seedance-pro) ENDPOINT="seedance-pro-i2v" ;;
|
|
136
|
+
seedance-lite) ENDPOINT="seedance-lite-i2v" ;;
|
|
137
|
+
hunyuan) ENDPOINT="hunyuan-image-to-video" ;;
|
|
138
|
+
runway) ENDPOINT="runway-image-to-video" ;;
|
|
139
|
+
pixverse) ENDPOINT="pixverse-v4.5-i2v" ;;
|
|
140
|
+
vidu) ENDPOINT="vidu-v2.0-i2v" ;;
|
|
141
|
+
midjourney) ENDPOINT="midjourney-v7-image-to-video" ;;
|
|
142
|
+
minimax-std) ENDPOINT="minimax-hailuo-02-standard-i2v" ;;
|
|
143
|
+
minimax-pro) ENDPOINT="minimax-hailuo-02-pro-i2v" ;;
|
|
144
|
+
*)
|
|
145
|
+
echo "Error: Unknown model '$MODEL'" >&2
|
|
146
|
+
exit 1 ;;
|
|
147
|
+
esac
|
|
148
|
+
|
|
149
|
+
# Build payload
|
|
150
|
+
PROMPT_JSON=$(echo "$PROMPT" | python3 -c 'import json,sys; print(json.dumps(sys.stdin.read().rstrip()))')
|
|
151
|
+
IMAGE_URL_CLEAN=$(echo "$IMAGE_URL" | tr -d '"')
|
|
152
|
+
|
|
153
|
+
if [ -n "$LAST_IMAGE_URL" ]; then
|
|
154
|
+
LAST_JSON=$(echo "$LAST_IMAGE_URL" | tr -d '"')
|
|
155
|
+
PAYLOAD="{\"prompt\": $PROMPT_JSON, \"image_url\": \"$IMAGE_URL_CLEAN\", \"last_image\": \"$LAST_JSON\", \"aspect_ratio\": \"$ASPECT_RATIO\", \"duration\": $DURATION}"
|
|
156
|
+
else
|
|
157
|
+
# veo3 uses images_list array
|
|
158
|
+
if [[ "$ENDPOINT" == *"veo3"* ]]; then
|
|
159
|
+
PAYLOAD="{\"prompt\": $PROMPT_JSON, \"images_list\": [\"$IMAGE_URL_CLEAN\"], \"aspect_ratio\": \"$ASPECT_RATIO\"}"
|
|
160
|
+
else
|
|
161
|
+
PAYLOAD="{\"prompt\": $PROMPT_JSON, \"image_url\": \"$IMAGE_URL_CLEAN\", \"aspect_ratio\": \"$ASPECT_RATIO\", \"duration\": $DURATION}"
|
|
162
|
+
fi
|
|
163
|
+
fi
|
|
164
|
+
|
|
165
|
+
[ "$JSON_ONLY" = false ] && echo "Submitting to $ENDPOINT..." >&2
|
|
166
|
+
|
|
167
|
+
SUBMIT=$(curl -s -X POST "${MUAPI_BASE}/${ENDPOINT}" "${HEADERS[@]}" -d "$PAYLOAD")
|
|
168
|
+
|
|
169
|
+
if echo "$SUBMIT" | grep -q '"error"\|"detail"'; then
|
|
170
|
+
ERR=$(echo "$SUBMIT" | grep -o '"detail":"[^"]*"' | head -1 | cut -d'"' -f4)
|
|
171
|
+
[ -z "$ERR" ] && ERR=$(echo "$SUBMIT" | grep -o '"error":"[^"]*"' | head -1 | cut -d'"' -f4)
|
|
172
|
+
echo "Error: ${ERR:-$SUBMIT}" >&2
|
|
173
|
+
exit 1
|
|
174
|
+
fi
|
|
175
|
+
|
|
176
|
+
REQUEST_ID=$(echo "$SUBMIT" | grep -oE '"request_id"[[:space:]]*:[[:space:]]*"[^"]*"' | sed 's/.*: *"//' | sed 's/"$//')
|
|
177
|
+
|
|
178
|
+
if [ -z "$REQUEST_ID" ]; then
|
|
179
|
+
echo "Error: No request_id in response" >&2
|
|
180
|
+
echo "$SUBMIT" >&2
|
|
181
|
+
exit 1
|
|
182
|
+
fi
|
|
183
|
+
|
|
184
|
+
[ "$JSON_ONLY" = false ] && echo "Request ID: $REQUEST_ID" >&2
|
|
185
|
+
|
|
186
|
+
if [ "$ASYNC" = true ]; then
|
|
187
|
+
[ "$JSON_ONLY" = false ] && echo "" >&2
|
|
188
|
+
[ "$JSON_ONLY" = false ] && echo "Request submitted. Video generation may take 1-5 minutes." >&2
|
|
189
|
+
[ "$JSON_ONLY" = false ] && echo "Check: bash check-result.sh --id \"$REQUEST_ID\"" >&2
|
|
190
|
+
echo "$SUBMIT"
|
|
191
|
+
exit 0
|
|
192
|
+
fi
|
|
193
|
+
|
|
194
|
+
[ "$JSON_ONLY" = false ] && echo "Waiting for completion..." >&2
|
|
195
|
+
|
|
196
|
+
ELAPSED=0
|
|
197
|
+
LAST_STATUS=""
|
|
198
|
+
while [ $ELAPSED -lt $MAX_WAIT ]; do
|
|
199
|
+
sleep $POLL_INTERVAL
|
|
200
|
+
ELAPSED=$((ELAPSED + POLL_INTERVAL))
|
|
201
|
+
|
|
202
|
+
RESULT=$(curl -s -X GET "${MUAPI_BASE}/predictions/${REQUEST_ID}/result" "${HEADERS[@]}")
|
|
203
|
+
STATUS=$(echo "$RESULT" | grep -oE '"status"[[:space:]]*:[[:space:]]*"[^"]*"' | sed 's/.*: *"//' | sed 's/"$//')
|
|
204
|
+
|
|
205
|
+
if [ "$STATUS" != "$LAST_STATUS" ] && [ "$JSON_ONLY" = false ]; then
|
|
206
|
+
echo "Status: $STATUS (${ELAPSED}s)" >&2
|
|
207
|
+
LAST_STATUS="$STATUS"
|
|
208
|
+
fi
|
|
209
|
+
|
|
210
|
+
case $STATUS in
|
|
211
|
+
completed)
|
|
212
|
+
[ "$JSON_ONLY" = false ] && echo "" >&2
|
|
213
|
+
[ "$JSON_ONLY" = false ] && echo "Video generation complete!" >&2
|
|
214
|
+
URL=$(echo "$RESULT" | grep -o '"outputs":\[[^]]*\]' | grep -o '"[^"]*\.mp4"' | head -1 | tr -d '"')
|
|
215
|
+
[ -n "$URL" ] && [ "$JSON_ONLY" = false ] && echo "Video URL: $URL" >&2
|
|
216
|
+
echo "$RESULT"
|
|
217
|
+
exit 0 ;;
|
|
218
|
+
failed)
|
|
219
|
+
ERR=$(echo "$RESULT" | grep -o '"error":"[^"]*"' | head -1 | cut -d'"' -f4)
|
|
220
|
+
echo "Error: Generation failed: ${ERR:-unknown}" >&2
|
|
221
|
+
echo "$RESULT"
|
|
222
|
+
exit 1 ;;
|
|
223
|
+
esac
|
|
224
|
+
done
|
|
225
|
+
|
|
226
|
+
echo "Error: Timeout after ${MAX_WAIT}s" >&2
|
|
227
|
+
echo "Request ID: $REQUEST_ID — Check: bash check-result.sh --id \"$REQUEST_ID\"" >&2
|
|
228
|
+
exit 1
|