| #!/usr/bin/env bash |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| set -euo pipefail |
|
|
| cd "$(dirname "$0")" |
|
|
| source ~/projects/cap-cli-skill/setup.sh 2>/dev/null || true |
|
|
| HOST_IP=$(ip route show | grep default | awk '{print $3}') |
| export CDP_URL="http://${HOST_IP}:9222" |
| CHROME="/mnt/c/Program Files/Google/Chrome/Application/chrome.exe" |
| SPACE="https://node.microfactory.space/?__theme=dark" |
|
|
| |
| if ! curl -s "${CDP_URL}/json/version" >/dev/null 2>&1; then |
| echo "Launching Chrome app window..." |
| PROFILE_DIR="/tmp/chrome-studio-profile-$(date +%s)" |
| mkdir -p "$PROFILE_DIR" |
| nohup "${CHROME}" --app="${SPACE}" --remote-debugging-port=9222 \ |
| --remote-debugging-address=0.0.0.0 \ |
| --user-data-dir="$PROFILE_DIR" \ |
| --window-size=1707,1067 \ |
| --window-position=0,0 \ |
| --disable-session-crashed-bubble --no-first-run \ |
| --no-default-browser-check --disable-features=TranslateUI \ |
| >/tmp/chrome-beat.log 2>&1 & |
| sleep 5 |
| else |
| echo "Chrome CDP already alive β reusing existing window" |
| fi |
|
|
| BEAT="${1:-all}" |
| shift || true |
|
|
| |
| BEAT_ARG="${BEAT}" |
| case "$BEAT" in |
| load) BEAT_ARG="load" ;; |
| slice) BEAT_ARG="slice" ;; |
| second) BEAT_ARG="second" ;; |
| scrub) BEAT_ARG="scrub" ;; |
| placement) BEAT_ARG="placement" ;; |
| climb) BEAT_ARG="climb" ;; |
| print) BEAT_ARG="loop" ;; |
| review) BEAT_ARG="loop" ;; |
| esac |
|
|
| SCREEN_ID=$(cap targets screens --json | python3 -c 'import sys,json; d=json.load(sys.stdin); print([s for s in d if s.get("primary")][0]["id"])') |
| echo "Recording beat: ${BEAT} (driver=${BEAT_ARG}) (screen=${SCREEN_ID})" |
|
|
| CAP_START_TMP="/tmp/cap-beat-start-$(date +%s).txt" |
| echo "Starting Cap recording..." |
| rm -f "$CAP_START_TMP" |
| nohup /mnt/c/Users/kyleb/AppData/Local/Cap/cap-cli.exe record start --screen "$SCREEN_ID" --fps 60 --detach --json > "$CAP_START_TMP" 2>&1 & |
| CAP_PID=$! |
| sleep 3 |
|
|
| |
| REC_ID="" |
| if [[ -s "$CAP_START_TMP" ]]; then |
| REC_ID=$(python3 -c "import sys,json; data=open(sys.argv[1]).read(); print([json.loads(l) for l in data.splitlines() if l.strip().startswith('{') and l.strip().endswith('}')][0]['recordingId'])" "$CAP_START_TMP") |
| fi |
|
|
| if [[ -z "$REC_ID" ]]; then |
| echo " β could not parse Cap recording ID; output was:" |
| cat "$CAP_START_TMP" || true |
| wait "$CAP_PID" 2>/dev/null || true |
| exit 1 |
| fi |
|
|
| echo " β Cap recording started (${REC_ID})" |
|
|
| echo "Driving beat..." |
| node scripts/record-studio.cjs --skip-cap --beat="${BEAT_ARG}" "$@" || true |
|
|
| echo "Stopping Cap recording..." |
| cap record stop --id "${REC_ID}" || true |
| echo " β Beat ${BEAT} done β raw .cap project ready in Cap Studio" |
|
|