Anil-matcha/AI-Youtube-Shorts-Generator

GitHub ↗ · How this check works

Per-setup public labels: Linux / Haiku: Not tested (needs a key we did not have) · Linux / Luna: Not tested (blocked: setup step)

Static status badge · SVG · read-only JSON. Embed with ![Coldpass status](https://coldpass.dev/badge/Anil-matcha--AI-Youtube-Shorts-Generator.svg).

agent-harness

Not tested

The saved checks do not establish a current product result.

Answers apply to each recorded setup, revision and operation. Earlier observations remain in Run details.

Tested on Linux
PlatformHaikuLuna
Linuxneeds a key we did not haveblocked: setup step

Linux / Haiku 5.5: needs a key we did not have · Oct 23, 2026 · 70c5fa96984c · claude-code / 2.1.300 (Claude Code)
Recorded operation: partial checks

Linux / Luna: blocked: setup step · Oct 23, 2026 · 70c5fa96984c · codex / codex-cli 0.163.0
Recorded operation: <guest-path> main.py 'https://www.youtube.com/watch?v=8Ua5lRiePFg'

Does what it says
couldn’t confirm (blocked)
  • The app accepts a YouTube URL and generates ranked shorts.: README Installation (Self-Hosted) requires a MuAPI key for API mode; documented CLI call failed with: MUAPI_API_KEY is not set.

    Source: Hand it any YouTube URL — get back N viral-ready 9:16 mp4s

    Observed: README Installation (Self-Hosted) requires a MuAPI key for API mode; documented CLI call failed with: MUAPI_API_KEY is not set.

MCP
No
Local or hosted
both local and hosted
Both a local install and a hosted service
Needs keys or browser
Needs a key or login on some setups
Maintained
Maintained
actively maintained: last commit 1 days ago; 10 commits and 0 merged PRs in 90 days; 9 open issues, 16 open PRs; 12 of 50 recent threads got a maintainer reply, median first reply 5000.4h; no releases

Last commit Oct 22, 2026

Issue
not established
Examples
1 of 2 ran as expected
  • CLI help: command completed successfully

    Source: README Usage / CLI flags

    Input: <guest-path> main.py --help

    Expected: documented command completes successfully

    Command: <guest-path> main.py --help

    Observed: cal (remote URL, file://, or local path + faster-whisper + LLM provider + ffmpeg). --num-clips NUM_CLIPS How many shorts to render (default: 3) --aspect-ratio ASPECT_RATIO Output aspect ratio (default: 9:16) --format FORMAT Source download resolution: 360 / 480 / 720 / 1080 (default: 720) --language LANGUAGE Force Whisper language code, e.g. 'en' (default: auto- detect) --output-json OUTPUT_JSON Write the full result JSON to this path

  • Generate shorts from a YouTube URL: command exited with code 1

    Source: README Usage / Single video (API mode — default)

    Input: <guest-path> main.py 'https://www.youtube.com/watch?v=8Ua5lRiePFg'

    Expected: documented command completes successfully

    Command: <guest-path> main.py 'https://www.youtube.com/watch?v=8Ua5lRiePFg'

    Observed: [download] requesting https://www.youtube.com/watch?v=8Ua5lRiePFg @ 720p FAILED: MUAPI_API_KEY is not set. Add it to your .env file or export it as an env var.

Evidence
partly checked
Agent interfaces
CLI
CLI

Observed interfaces were exercised by the checker. Documentation alone does not confirm compatibility.

Tested with
Codex / Luna
  • Linux: Codex / Luna · agent codex-cli 0.163.0 · blocked: setup step · Oct 23, 2026 on 70c5fa96984c

Each entry describes its recorded operation and source revision. Other agent clients were not tested.

Safety
Something to look at: non-loopback connection attempts by <guest-path>, shorts_generator

Review signals across current setups: connection review. 68 listed items (named-host connections, static matches, dependency advisories) are below and do not change this verdict.

Repository processes attempted these non-loopback connections; proxies can hide the final hostname. 43 distinct locations. 14 attributed processes.

OSV reports a known vulnerability in this dependency version. 4 distinct locations. 26 findings.

Full event, path and process lists for each observed setup:

Run details

Haiku 5.5

Native agent · Needs credentials · full use untested

Operation / attempted scope partial checks

Agent-reported scope: Turn a YouTube URL (API mode) or a local video file (local mode) into ranked vertical shorts with python main.py

Run details
run
Anil-matcha--AI-Youtube-Shorts-Generator-claude-haiku-5-5-1792789641493602959
date
Oct 23, 2026
time to working
not established
product hosting / execution
Not recorded
recorded operation scope
partial checks
model
claude-haiku-5-5
agent / version
claude-code / 2.1.300 (Claude Code)
platform
linux
reported cost
$0.027610
Recorded source
https://github.com/Anil-matcha/AI-Youtube-Shorts-Generator
Backend
hyperv
Tool transport
mcp-assigned-vm
Requested source pin (not an observed revision)
{"commit": "70c5fa96984cbc35b3b76a981a81c676117370ec", "url": "https://github.com/Anil-matcha/AI-Youtube-Shorts-Generator"}
Test version
readme-bdc1b9b3c0d2673aef87e076d14084a8123ddcf09d520c1ee2e364a37c3f4bb9
revision
70c5fa96984cbc35b3b76a981a81c676117370ec

Prerequisite: full use remains untested. This partial result does not establish a repo defect.

Whose fault: prerequisite · diagnosed

Missing API keys: MUAPI_API_KEY for API mode, OPENAI_API_KEY or GEMINI_API_KEY for local mode.

Recorded blocker / warning

Step: Highlight ranking step (LLM call) in both API mode and local mode, because no MuAPI or OpenAI/Gemini key is available in the guest.

Missing API keys: MUAPI_API_KEY for API mode, OPENAI_API_KEY or GEMINI_API_KEY for local mode.

Safety: Review signals: 1 connection review, 34 known vulnerability.

Review signals: 1 connection review, 34 known vulnerability.

Repository processes attempted these non-loopback connections; proxies can hide the final hostname. 43 distinct locations. 14 attributed processes.

OSV reports a known vulnerability in this dependency version. 4 distinct locations. 26 findings.

OSV scanned supported lockfiles; unpinned dependencies and unsupported formats are outside this check.

A short run cannot establish that code is safe.

Connections show IP addresses; proxies can hide the final hostname.

Tracing covers dispatched commands and their children, not the whole OS; guest root can interfere with tracing.

Full safety evidence →

Partial install / setup / connection checks
[
  {
    "status": "PASS",
    "details": {
      "working": false,
      "argv": [
        "<guest-path>",
        "main.py",
        "https://www.youtube.com/watch?v=8Ua5lRiePFg",
        "--num-clips",
        "1"
      ],
      "kind": "cli",
      "returncode": 1,
      "stdout": "[download] requesting https://www.youtube.com/watch?v=8Ua5lRiePFg @ 720p",
      "stderr": "\nFAILED: MUAPI_API_KEY is not set. Add it to your .env file or export it as an env var.",
      "needs_credentials": true,
      "needs_browser": false,
      "scope": "partial: missing credentials"
    },
    "check": "credentials_error",
    "optional": false
  },
  {
    "status": "PASS",
    "details": {
      "working": false,
      "argv": [
        "<guest-path>",
        "main.py",
        "<guest-path>",
        "--mode",
        "local",
        "--num-clips",
        "1"
      ],
      "kind": "cli",
      "returncode": 1,
      "stdout": "[download/local] using local file: <guest-path>\n[transcribe/local] reusing cached transcript: <guest-path>\n[transcribe/local] 1 cached segments, 7s of audio\n[highlights] content=other density=medium duration=7s",
      "stderr": "\nFAILED: OPENAI_API_KEY is not set. Local mode needs an OpenAI key for highlight ranking. Add it to your .env or export it, or switch back to --mode api.",
      "needs_credentials": true,
      "needs_browser": false,
      "scope": "partial: missing credentials"
    },
    "check": "credentials_error",
    "optional": false
  }
]
Answers recorded for this run
  • Local mode accepts a direct filesystem path and skips YouTube: Needs OPENAI_API_KEY or GEMINI_API_KEY for the highlight-ranking step, which this guest does not have. The path was accepted and local transcription ran on <guest-path> (1 segment, 8s), then the run stopped with 'OPENAI_API_KEY is not set'.

    Source: In `--mode local`, you can pass a `file://` URL or a direct filesystem path and skip YouTube entirely

    Observed: Needs OPENAI_API_KEY or GEMINI_API_KEY for the highlight-ranking step, which this guest does not have. The path was accepted and local transcription ran on <guest-path> (1 segment, 8s), then the run stopped with 'OPENAI_API_KEY is not set'.

  • API mode needs a MuAPI key: Needs MUAPI_API_KEY, which this guest does not have. Ran the documented API-mode command without a key; it stopped with 'MUAPI_API_KEY is not set' (exit 1). Recorded as the credentials_error check in probe.json.

    Source: For **API mode (default)**: a MuAPI key

    Observed: Needs MUAPI_API_KEY, which this guest does not have. Ran the documented API-mode command without a key; it stopped with 'MUAPI_API_KEY is not set' (exit 1). Recorded as the credentials_error check in probe.json.

  • Local mode writes shorts and transcript cache to LOCAL_OUTPUT_DIR: Needs an OpenAI or Gemini key before shorts are rendered. The transcript cache step did run: <guest-path> was written (verified contents) before the missing-key stop.

    Source: Local transcription is cached as an `.srt` file in `LOCAL_OUTPUT_DIR` using the

    Observed: Needs an OpenAI or Gemini key before shorts are rendered. The transcript cache step did run: <guest-path> was written (verified contents) before the missing-key stop.

Examples

  • Single video, API mode quickstart: Needs MUAPI_API_KEY, which is not available in this guest. Ran the documented command with no key; it stopped with 'MUAPI_API_KEY is not set' (exit 1). Covered by the credentials_error check in probe.json.

    Source: README.md Usage / Single video (API mode — default)

    Expected: documented command completes successfully

    Observed: Needs MUAPI_API_KEY, which is not available in this guest. Ran the documented command with no key; it stopped with 'MUAPI_API_KEY is not set' (exit 1). Covered by the credentials_error check in probe.json.

  • Single video, local mode quickstart: Needs OPENAI_API_KEY or GEMINI_API_KEY for highlight ranking, which is not available. A YouTube URL was not used because only a local file was reachable without a key. Local file transcription ran to completion and wrote a cache .srt before stopping at the missing OPENAI_API_KEY.

    Source: README.md Usage / Single video (Local mode)

    Expected: documented command completes successfully

    Observed: Needs OPENAI_API_KEY or GEMINI_API_KEY for highlight ranking, which is not available. A YouTube URL was not used because only a local file was reachable without a key. Local file transcription ran to completion and wrote a cache .srt before stopping at the missing OPENAI_API_KEY.

  • Batch processing with xargs: Each line runs main.py, which needs a MuAPI key (API mode) or an OpenAI/Gemini key (local mode). Not runnable without credentials; the single-run paths above stop at the same missing-key checks.

    Source: README.md Usage / Batch processing

    Expected: documented command completes successfully

    Observed: Each line runs main.py, which needs a MuAPI key (API mode) or an OpenAI/Gemini key (local mode). Not runnable without credentials; the single-run paths above stop at the same missing-key checks.

Local or hosted: both

Suggested next step (unverified): Provide MUAPI_API_KEY (API mode) or OPENAI_API_KEY/GEMINI_API_KEY (local mode) and rerun the README quickstart. Also pin av<14 (or update faster-whisper) in requirements-local.txt, since the unpinned av breaks local transcription with a TypeError on av 19.

What the agent did

Turn a YouTube URL (API mode) or a local video file (local mode) into ranked vertical shorts with python main.py

cd <guest-path> && ls -la && cat README.md 2>/dev/null | head -200; python3 --version; id -u; cat /etc/os-release | head -3; ls /inputs 2>/dev/null
cd <guest-path> && sed -n 200,400p README.md; echo ----; cat requirements.txt requirements-local.txt .env.example; echo ----; cat main.py; ls -la .coldpass .claude; ls shorts_generator; ls -a .git 2>&1 | head -1
cd <guest-path> && git init -q 2>&1; git remote add origin https://github.com/Anil-matcha/AI-Youtube-Shorts-Generator 2>&1; timeout 120 git fetch --depth 1 origin 70c5fa96984cbc35b3b76a981a81c676117370ec 2>&1 | tail -3; git reset --mixed FETCH_HEAD 2>&1 | tail -2; git rev-parse HEAD; git status --short | head; echo ---; which ffmpeg ffprobe; ls <guest-path>; env | grep -i -E 'muapi|openai|gemini|proxy' | sed 's/=.*/=<set>/'; dpkg -l python3.12-venv 2>/dev/null | tail -1
cd <guest-path> && (sudo -n apt-get update -qq >/tmp/apt.log 2>&1; sudo -n DEBIAN_FRONTEND=noninteractive apt-get install -y -qq python3.12-venv ffmpeg >>/tmp/apt.log 2>&1; echo apt=$?) ; python3 -m venv <guest-path> && <guest-path> install -q -r requirements.txt 2>&1 | tail -5; echo pip=$?; <guest-path> -c "import requests, dotenv; print('ok')"; ffmpeg -version | head -1
cd <guest-path> && cat shorts_generator/config.py; echo ----; sed -n 1,60p shorts_generator/muapi.py; echo ----; cat shorts_generator/pipeline.py | head -80
cd <guest-path> && ls -a | grep -c '^.env$'; timeout 120 <guest-path> main.py "https://www.youtube.com/watch?v=8Ua5lRiePFg" --num-clips 1 --output-json .coldpass/api_result.json; echo "rc=$?"
cd <guest-path> && timeout 900 <guest-path> install -q -r requirements-local.txt > /tmp/pip-local.log 2>&1; echo pip_local=$?; tail -3 /tmp/pip-local.log; <guest-path> -c "import yt_dlp, faster_whisper, cv2, openai; print('local imports ok')"
mkdir -p <guest-path> && cd <guest-path> && (sudo -n DEBIAN_FRONTEND=noninteractive apt-get install -y -qq espeak-ng >/tmp/apt2.log 2>&1; echo espeak_install=$?) && espeak-ng -w speech.wav "Welcome to the show. This is the most surprising thing I learned this year. Nobody tells you that, but it changed everything for me." && ffmpeg -y -loglevel error -f lavfi -i testsrc=size=640x360:rate=25:duration=20 -i speech.wav -shortest -c:v libx264 -pix_fmt yuv420p -c:a aac input.mp4 && ls -la input.mp4; timeout 20 curl -sI https://huggingface.co | head -1; echo hf_rc=$?
cd <guest-path> && mkdir -p <guest-path> && LOCAL_OUTPUT_DIR=<guest-path> timeout 1500 <guest-path> main.py <guest-path> --mode local --num-clips 1 2>&1 | tail -30; echo "rc=${PIPESTATUS[0]}"; ls -la <guest-path>
cd <guest-path> && cat shorts_generator/local/transcriber.py | head -40; echo ----; LOCAL_OUTPUT_DIR=<guest-path> <guest-path> -c "
import traceback
from shorts_generator.local.transcriber import transcribe_local
try:
    transcribe_local('<guest-path>', language=None)
except Exception:
    traceback.print_exc()
" 2>&1 | tail -25; <guest-path> list 2>/dev/null | grep -i -E 'faster|ctranslate|huggingface|tokenizers'
cd <guest-path> && <guest-path> list 2>/dev/null | grep -i '^av '; <guest-path> install -q "av>=11,<14" > /tmp/pip-av.log 2>&1; echo rc=$?; tail -2 /tmp/pip-av.log; <guest-path> list 2>/dev/null | grep -i '^av '; LOCAL_OUTPUT_DIR=<guest-path> timeout 1500 <guest-path> main.py <guest-path> --mode local --num-clips 1 2>&1 | tail -12; echo "rc=${PIPESTATUS[0]}"
ls -la <guest-path> /inputs 2>&1 | head; wc -l <guest-path>; grep -n -E "credentials_error|testable|checks|expected_returncode|stays_running|def " <guest-path> | head -80; cat <guest-path>
cd <guest-path> && sed -n 48,60p check.py; echo ...; sed -n 653,760p check.py; echo ...; sed -n 856,935p check.py
cd <guest-path> && sed -n 36,47p check.py; sed -n 202,226p check.py; sed -n 1168,1200p check.py; grep -n "CREDENTIALS =\|PREREQUISITE =\|SECRET_NAME =" check.py
cd <guest-path> && grep -rn -i -E "cron|schedul|while True|webhook|--once|--now|sleep\(|time\.sleep|watch" --include=*.py . | grep -v '^./.claude' | head; echo ---; ls -a; cat .gitignore; echo ---; printf 'LOCAL_OUTPUT_DIR=<guest-path>\n' > .env && cat .env && git status --short
cd <guest-path> && PY=<guest-path> && cat > probe.json <<EOF
{"checks":[
 {"check":"credentials_error","kind":"cli","argv":["$PY","main.py","https://www.youtube.com/watch?v=8Ua5lRiePFg","--num-clips","1"],"cwd":"<guest-path>","expected_returncode":1},
 {"check":"credentials_error","kind":"cli","argv":["$PY","main.py","<guest-path>","--mode","local","--num-clips","1"],"cwd":"<guest-path>","expected_returncode":1}
]}
EOF
cat > claims.json <<EOF
[
 {"kind":"claim","claim":"Local mode accepts a direct filesystem path and skips YouTube","source":"In \`--mode local\`, you can pass a \`file://\` URL or a direct filesystem path and skip YouTube entirely","input":"<guest-path>","expected":"local transcription runs on the file (1 segment)","probe_kind":"cli","argv":["$PY","main.py","<guest-path>","--mode","local","--num-clips","1"],"expected_text":"1 segments, 8s of audio","cwd":"<guest-path>"},
 {"kind":"claim","claim":"API mode needs a MuAPI key","source":"For **API mode (default)**: a MuAPI key","input":"YouTube URL without key","expected":"run stops with MUAPI_API_KEY missing","probe_kind":"cli","argv":["$PY","main.py","https://www.youtube.com/watch?v=8Ua5lRiePFg","--num-clips","1"],"expected_text":"MUAPI_API_KEY is not set","cwd":"<guest-path>"},
 {"kind":"claim","claim":"Local mode writes shorts to LOCAL_OUTPUT_DIR","source":"Local mode writes the rendered shorts to","input":"local file with no LLM key","expected":"run reaches highlight ranking, needs OPENAI_API_KEY","probe_kind":"cli","argv":["$PY","main.py","<guest-path>","--mode","local","--num-clips","1"],"expected_text":"OPENAI_API_KEY is not set","cwd":"<guest-path>"}
]
EOF
cat > cycles.json <<'EOF'
{"detected":false,"reason":"Entry points inspected: main.py is a one-shot argparse CLI (single run per invocation, exits). README has no cron, scheduling, loop, webhook, --once or --now. The only while-loop in source is a frame loop in shorts_generator/local/clipper.py and polling sleeps in muapi.py, which are not product cycles.","checks":[]}
EOF
cat > examples.json <<'EOF'
[
 {"kind":"example","claim":"Single video, API mode quickstart","source":"README.md Usage / Single video (API mode — default)","reason":"Needs MUAPI_API_KEY, which is not available in this guest. Ran the documented command with no key; it stopped with 'MUAPI_API_KEY is not set' (exit 1). Covered by the credentials_error check in probe.json."},
 {"kind":"example","claim":"Single video, local mode quickstart","source":"README.md Usage / Single video (Local mode)","reason":"Needs OPENAI_API_KEY or GEMINI_API_KEY for highlight ranking, which is not available. A YouTube URL was not used because only a local file was reachable without a key. Local file transcription ran to completion and wrote a cache .srt before stopping at the missing OPENAI_API_KEY."},
 {"kind":"example","claim":"Batch processing with xargs","source":"README.md Usage / Batch processing","reason":"Each line runs main.py, which needs a MuAPI key (API mode) or an OpenAI/Gemini key (local mode). Not runnable without credentials; the single-run paths above stop at the same missing-key checks."}
]
EOF
for f in probe.json claims.json cycles.json examples.json; do <guest-path> -I -c "import json,sys;json.load(open(sys.argv[1]));print(sys.argv[1],'valid')" $f; done
cd <guest-path> && <env-var>=<guest-path> timeout 1500 python3 -I <guest-path> --validate --replay 2>&1 | tail -80; echo "rc=${PIPESTATUS[0]}"
cd <guest-path> && cat > claims.json <<'EOF'
[
 {"kind":"claim","claim":"Local mode accepts a direct filesystem path and skips YouTube","source":"In `--mode local`, you can pass a `file://` URL or a direct filesystem path and skip YouTube entirely","testable":false,"reason":"Needs OPENAI_API_KEY or GEMINI_API_KEY for the highlight-ranking step, which this guest does not have. The path was accepted and local transcription ran on <guest-path> (1 segment, 8s), then the run stopped with 'OPENAI_API_KEY is not set'."},
 {"kind":"claim","claim":"API mode needs a MuAPI key","source":"For **API mode (default)**: a MuAPI key","testable":false,"reason":"Needs MUAPI_API_KEY, which this guest does not have. Ran the documented API-mode command without a key; it stopped with 'MUAPI_API_KEY is not set' (exit 1). Recorded as the credentials_error check in probe.json."},
 {"kind":"claim","claim":"Local mode writes shorts and transcript cache to LOCAL_OUTPUT_DIR","source":"Local transcription is cached as an `.srt` file in `LOCAL_OUTPUT_DIR` using the","testable":false,"reason":"Needs an OpenAI or Gemini key before shorts are rendered. The transcript cache step did run: <guest-path> was written (verified contents) before the missing-key stop."}
]
EOF
<guest-path> -I -c "import json;json.load(open('claims.json'));print('ok')"; cd <guest-path> && <env-var>=<guest-path> timeout 1500 python3 -I <guest-path> --validate --replay > /tmp/check1.out 2>&1; echo rc=$?; python3 -I -c "
import json,sys
d=json.load(open('/tmp/check1.out')) if False else None
" ; grep -o '"valid": [a-z]*' /tmp/check1.out; grep -o '"problems": \[[^]]*\]' /tmp/check1.out | head -c 1500
cd <guest-path> && cat > report.json <<'EOF'
{"outcome":"needs_credentials","fault_owner":"prerequisite","operation":"Turn a YouTube URL (API mode) or a local video file (local mode) into ranked vertical shorts with python main.py","operation_scope":"Pinned commit 70c5fa96984cbc35b3b76a981a81c676117370ec, Ubuntu 24.04, Python 3.12.3 venv at <guest-path> Verified: install of requirements.txt and requirements-local.txt, ffmpeg, the CLI runs, and local-mode transcription on a generated speech clip (1 segment, 8s, cached .srt). Not verified: highlight ranking, clip rendering, and final shorts, because they need MUAPI_API_KEY (API mode) or OPENAI_API_KEY/GEMINI_API_KEY (local mode), which this guest does not have.","steps":["git init; git remote add origin https://github.com/Anil-matcha/AI-Youtube-Shorts-Generator; git fetch --depth 1 origin 70c5fa96984cbc35b3b76a981a81c676117370ec; git reset --mixed FETCH_HEAD","sudo apt-get install -y python3.12-venv ffmpeg","python3 -m venv <guest-path> && <guest-path> install -r requirements.txt","<guest-path> install -r requirements-local.txt","<guest-path> main.py \"https://www.youtube.com/watch?v=8Ua5lRiePFg\" --num-clips 1  (exit 1: MUAPI_API_KEY is not set)","<guest-path> main.py <guest-path> --mode local --num-clips 1  (after av pin; transcription OK, exit 1: OPENAI_API_KEY is not set)"],"deviations":["README says Python 3.10+; Ubuntu 3.12.3 is used. No deviation in version, only in interpreter choice.","Installed python3.12-venv and ffmpeg via apt (sudo). Installed espeak-ng to create a speech test clip outside the checkout.","requirements-local.txt installs unpinned av, which resolved to 19.0.2. faster-whisper 1.2.1 calls av.open(metadata_errors=...), which fails with TypeError on that version. Substitute: pip install 'av>=11,<14' (resolved to 13.1.0) in the venv. Product source not edited.","Created .env in the checkout with only LOCAL_OUTPUT_DIR=<guest-path> so the cache and outputs stay out of the repo (documented config; .env is gitignored). No keys were written.","No MuAPI, OpenAI or Gemini key was obtained or faked; no mock LLM was substituted.","Claims that need a key are recorded as testable:false with the real prerequisite instead of being replayed as successes.","No product cycle exists (one-shot CLI), so cycles.json has detected:false.","The README's Batch processing example and both quickstarts are recorded as blocked in examples.json."],"stuck_step":"Highlight ranking step (LLM call) in both API mode and local mode, because no MuAPI or OpenAI/Gemini key is available in the guest.","main_blocker":"Missing API keys: MUAPI_API_KEY for API mode, OPENAI_API_KEY or GEMINI_API_KEY for local mode.","plain_failure":"The tool needs paid API keys to do its main work. Without them, it stops before picking any clips. Local transcription works on a test video. The highlight picking and cutting steps were not exercised, so the final shorts were not produced.","suggested_fix":"Provide MUAPI_API_KEY (API mode) or OPENAI_API_KEY/GEMINI_API_KEY (local mode) and rerun the README quickstart. Also pin av<14 (or update faster-whisper) in requirements-local.txt, since the unpinned av breaks local transcription with a TypeError on av 19."}
EOF
<guest-path> -I -c "import json;json.load(open('report.json'));print('report valid')"; ls -la <guest-path>; cd <guest-path> && git status --short; pgrep -fa "main.py|mcp|http.server" | grep -v pgrep || echo "no servers running"
cd <guest-path> && <env-var>=<guest-path> timeout 1500 python3 -I <guest-path> --validate --replay > /tmp/check2.out 2>&1; echo rc=$?; grep -o '"valid": [a-z]*' /tmp/check2.out; grep -o '"problems": \[[^]]*\]' /tmp/check2.out
Earlier attempts (1)

Luna

Native agent · Not tested (blocked: setup step)

Operation / attempted scope <guest-path> main.py 'https://www.youtube.com/watch?v=8Ua5lRiePFg'

Agent-reported scope: Generate ranked vertical shorts from a YouTube URL

Run details
run
Anil-matcha--AI-Youtube-Shorts-Generator-gpt-6-luna-1792790113916108800
date
Oct 23, 2026
time to working
not established
product hosting / execution
Local command in the guest
recorded operation scope
product operation
model
gpt-6-luna
agent / version
codex / codex-cli 0.163.0
platform
linux
reported cost
not reported (not assumed free)
Recorded source
https://github.com/Anil-matcha/AI-Youtube-Shorts-Generator
Backend
hyperv
Tool transport
mcp-assigned-vm
Requested source pin (not an observed revision)
{"commit": "70c5fa96984cbc35b3b76a981a81c676117370ec", "url": "https://github.com/Anil-matcha/AI-Youtube-Shorts-Generator"}
Test version
readme-f72312298d35d84837d4fc5f6f22b138d54d456600b5ed431e36e8f5db931dbf
revision
70c5fa96984cbc35b3b76a981a81c676117370ec
Whose fault: prerequisite · diagnosed

MuAPI API key required by README Prerequisites

Recorded blocker / warning

Step: API request authentication

MuAPI API key required by README Prerequisites

Safety: Review signals: 34 known vulnerability.

Review signals: 34 known vulnerability.

OSV reports a known vulnerability in this dependency version. 4 distinct locations. 26 findings.

OSV scanned supported lockfiles; unpinned dependencies and unsupported formats are outside this check.

A short run cannot establish that code is safe.

Connections show IP addresses; proxies can hide the final hostname.

Tracing covers dispatched commands and their children, not the whole OS; guest root can interfere with tracing.

Full safety evidence →

Answers recorded for this run
  • The app accepts a YouTube URL and generates ranked shorts.: README Installation (Self-Hosted) requires a MuAPI key for API mode; documented CLI call failed with: MUAPI_API_KEY is not set.

    Source: Hand it any YouTube URL — get back N viral-ready 9:16 mp4s

    Observed: README Installation (Self-Hosted) requires a MuAPI key for API mode; documented CLI call failed with: MUAPI_API_KEY is not set.

Examples

  • CLI help: command completed successfully

    Source: README Usage / CLI flags

    Input: <guest-path> main.py --help

    Expected: documented command completes successfully

    Command: <guest-path> main.py --help

    Observed: cal (remote URL, file://, or local path + faster-whisper + LLM provider + ffmpeg). --num-clips NUM_CLIPS How many shorts to render (default: 3) --aspect-ratio ASPECT_RATIO Output aspect ratio (default: 9:16) --format FORMAT Source download resolution: 360 / 480 / 720 / 1080 (default: 720) --language LANGUAGE Force Whisper language code, e.g. 'en' (default: auto- detect) --output-json OUTPUT_JSON Write the full result JSON to this path

  • Generate shorts from a YouTube URL: command exited with code 1

    Source: README Usage / Single video (API mode — default)

    Input: <guest-path> main.py 'https://www.youtube.com/watch?v=8Ua5lRiePFg'

    Expected: documented command completes successfully

    Command: <guest-path> main.py 'https://www.youtube.com/watch?v=8Ua5lRiePFg'

    Observed: [download] requesting https://www.youtube.com/watch?v=8Ua5lRiePFg @ 720p FAILED: MUAPI_API_KEY is not set. Add it to your .env file or export it as an env var.

Local or hosted: both

Suggested next step (unverified): Configure MUAPI_API_KEY in the guest and rerun the documented API-mode command.

What the agent did

Generate ranked vertical shorts from a YouTube URL

cd <guest-path> && pwd && rg --files -g 'README*' -g 'AGENTS.md' -g 'pyproject.toml' -g 'package.json' -g 'requirements*.txt' -g '*.yml' -g '*.yaml' | head -100 && python3 --version && id -u && command -v vault-search || true && ls -la <host-path> ~/.agents/skills/i-have-adhd/SKILL.md ~/.agents/skills/ponytail/SKILL.md ~/.agents/skills/p3-mode/SKILL.md 2>/dev/null
cd <guest-path> && find .. -name AGENTS.md -o -iname 'README*' | head -100; python3 --version; id -u; command -v vault-search || true; ls -la <host-path> ~/.agents/skills/i-have-adhd/SKILL.md ~/.agents/skills/ponytail/SKILL.md ~/.agents/skills/p3-mode/SKILL.md 2>/dev/null;
cd <guest-path> && cat README.md && find . -maxdepth 2 -type f -print
cd <guest-path> && python3 -m venv <guest-path> && <guest-path> -m pip install -r requirements.txt && sed -n '1,240p' main.py && cat requirements.txt && git status --short
sudo -n apt-get update && sudo -n apt-get install -y python3.12-venv && cd <guest-path> && python3 -m venv <guest-path> && <guest-path> -m pip install -r requirements.txt
cd <guest-path> && <guest-path> main.py --help; sed -n '1,100p' main.py; mkdir -p .coldpass; <guest-path> main.py 'https://www.youtube.com/watch?v=8Ua5lRiePFg' --output-json <guest-path>
cd <guest-path> && cat > .coldpass/probe.json <<'EOF'
{"kind":"cli","argv":["<guest-path>","main.py","https://www.youtube.com/watch?v=8Ua5lRiePFg"],"cwd":"<guest-path>","expected_returncode":1,"expected_text":"MUAPI_API_KEY is not set"}
EOF
cat > .coldpass/claims.json <<'EOF'
[{"kind":"claim","claim":"The app accepts a YouTube URL and generates ranked shorts.","source":"Hand it any YouTube URL — get back N viral-ready 9:16 mp4s","testable":false,"reason":"README Installation (Self-Hosted) requires a MuAPI key for API mode; documented CLI call failed with: MUAPI_API_KEY is not set."}]
EOF
cat > .coldpass/examples.json <<'EOF'
[{"kind":"example","claim":"CLI help","source":"README Usage / CLI flags","argv":["<guest-path>","main.py","--help"],"cwd":"<guest-path>","expected_text":"AI YouTube Shorts Generator"},{"kind":"example","claim":"Generate shorts from a YouTube URL","source":"README Usage / Single video (API mode — default)","argv":["<guest-path>","main.py","https://www.youtube.com/watch?v=8Ua5lRiePFg"],"cwd":"<guest-path>","expected_returncode":1,"expected_text":"MUAPI_API_KEY is not set"}]
EOF
cat > .coldpass/cycles.json <<'EOF'
{"detected":false,"reason":"Inspected README Usage and main.py; the product runs one requested video pipeline per CLI invocation and documents no scheduler or cycle trigger.","checks":[]}
EOF
cat > .coldpass/report.json <<'EOF'
{"outcome":"needs_credentials","fault_owner":"prerequisite","operation":"Generate ranked vertical shorts from a YouTube URL","operation_scope":"README API mode; Python dependencies installed in Python 3.12 venv","steps":["Installed python3.12-venv after venv creation failed because ensurepip was unavailable.","Created <guest-path> and installed requirements.txt.","Ran documented CLI help and API-mode YouTube example."],"deviations":["The documented useful operation could not proceed because MUAPI_API_KEY is not set; no key was available."],"stuck_step":"API request authentication","main_blocker":"MuAPI API key required by README Prerequisites","plain_failure":"The CLI starts, but generating shorts requires a MuAPI key that is not configured.","suggested_fix":"Configure MUAPI_API_KEY in the guest and rerun the documented API-mode command."}
EOF
cat > .coldpass/claims.json <<'EOF'
[{"kind":"claim","claim":"The app accepts a YouTube URL and generates ranked shorts.","source":"Hand it any YouTube URL — get back N viral-ready 9:16 mp4s","testable":false,"reason":"README Installation (Self-Hosted) requires a MuAPI key for API mode; documented CLI call failed with: MUAPI_API_KEY is not set."}]
EOF
<env-var>=<guest-path> python3 -I <guest-path> --validate --replay
cd <guest-path> && python3 - <<'PY'
import json
p='.coldpass/examples.json'; x=json.load(open(p)); x[1]['expected_returncode']=1; x[1]['expected_text']='MUAPI_API_KEY is not set'; json.dump(x,open(p,'w'),indent=2)
PY
<env-var>=<guest-path> python3 -I <guest-path> --validate --replay