Initial commit: AbletonMCP-AI complete system
- MCP Server with audio fallback, sample management - Song generator with bus routing - Reference listener and audio resampler - Vector-based sample search - Master chain with limiter and calibration - Fix: Audio fallback now works without M4L - Fix: Full song detection in sample loader Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,140 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
readonly RED='\033[0;31m'
|
||||
readonly GREEN='\033[0;32m'
|
||||
readonly YELLOW='\033[1;33m'
|
||||
readonly BLUE='\033[0;34m'
|
||||
readonly NC='\033[0m'
|
||||
|
||||
log_info() { echo -e "${GREEN}[INFO]${NC} $*"; }
|
||||
log_warn() { echo -e "${YELLOW}[WARN]${NC} $*"; }
|
||||
log_step() { echo -e "${BLUE}[STEP]${NC} $*"; }
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
WSL_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||||
AUTOMATION_DIR="$(cd "$WSL_DIR/.." && pwd)"
|
||||
PROJECT_ROOT="$(cd "$AUTOMATION_DIR/.." && pwd)"
|
||||
RUNTIME_DIR="$AUTOMATION_DIR/wsl_runtime"
|
||||
DOCKER_ENV_FILE="$WSL_DIR/.env"
|
||||
RUNNER_ENV_FILE="$AUTOMATION_DIR/wsl.local.env"
|
||||
PROJECT_LINK="$HOME/ableton-mcp-ai"
|
||||
|
||||
generate_secret() {
|
||||
openssl rand -hex "${1:-16}" 2>/dev/null || python3 - <<'PY'
|
||||
import secrets
|
||||
print(secrets.token_hex(16))
|
||||
PY
|
||||
}
|
||||
|
||||
ensure_dirs() {
|
||||
log_step "Creating runtime directories"
|
||||
mkdir -p \
|
||||
"$RUNTIME_DIR/logs" \
|
||||
"$RUNTIME_DIR/pids" \
|
||||
"$RUNTIME_DIR/data" \
|
||||
"$AUTOMATION_DIR/reports" \
|
||||
"$AUTOMATION_DIR/runs" \
|
||||
"$AUTOMATION_DIR/tasks" \
|
||||
"$AUTOMATION_DIR/workflows" \
|
||||
"$WSL_DIR/initdb"
|
||||
}
|
||||
|
||||
ensure_symlink() {
|
||||
if [[ ! -L "$PROJECT_LINK" ]]; then
|
||||
ln -sfn "$PROJECT_ROOT" "$PROJECT_LINK"
|
||||
fi
|
||||
log_info "Project link: $PROJECT_LINK"
|
||||
}
|
||||
|
||||
write_docker_env() {
|
||||
if [[ -f "$DOCKER_ENV_FILE" ]]; then
|
||||
log_info "Docker env already exists: $DOCKER_ENV_FILE"
|
||||
return
|
||||
fi
|
||||
|
||||
log_step "Generating docker env"
|
||||
cat > "$DOCKER_ENV_FILE" <<EOF
|
||||
PROJECT_PATH='$PROJECT_ROOT'
|
||||
TZ='America/Buenos_Aires'
|
||||
POSTGRES_USER='postgres'
|
||||
POSTGRES_PASSWORD='$(generate_secret 16)'
|
||||
POSTGRES_BOOTSTRAP_DB='postgres'
|
||||
POSTGRES_PORT='5432'
|
||||
GITEA_DOMAIN='localhost'
|
||||
GITEA_ROOT_URL='http://localhost:3000'
|
||||
GITEA_HTTP_PORT='3000'
|
||||
GITEA_SSH_DOMAIN='localhost'
|
||||
GITEA_SSH_PORT='222'
|
||||
GITEA_ADMIN_USER='giteaadmin'
|
||||
GITEA_ADMIN_PASSWORD='$(generate_secret 16)'
|
||||
GITEA_ADMIN_EMAIL='admin@localhost'
|
||||
GITEA_DB_NAME='gitea'
|
||||
GITEA_SECURITY_INSTALL_LOCK='true'
|
||||
GITEA_OFFLINE_MODE='true'
|
||||
REDIS_PASSWORD='$(generate_secret 16)'
|
||||
REDIS_PORT='6379'
|
||||
N8N_HOST='localhost'
|
||||
N8N_PORT='5678'
|
||||
N8N_PATH='/'
|
||||
N8N_WEBHOOK_URL='http://localhost:5678/'
|
||||
N8N_EDITOR_BASE_URL='http://localhost:5678'
|
||||
N8N_DB_NAME='n8n'
|
||||
N8N_ENCRYPTION_KEY='$(generate_secret 32)'
|
||||
N8N_BASIC_AUTH_ACTIVE='true'
|
||||
N8N_BASIC_AUTH_USER='admin'
|
||||
N8N_BASIC_AUTH_PASSWORD='$(generate_secret 16)'
|
||||
N8N_HOST_ALLOW_LIST='localhost,127.0.0.1'
|
||||
N8N_EXECUTIONS_MODE='regular'
|
||||
N8N_LOG_LEVEL='info'
|
||||
N8N_DIAGNOSTICS_ENABLED='false'
|
||||
N8N_VERSION_NOTIFICATIONS_ENABLED='false'
|
||||
N8N_COOKIE_POLICY='lax'
|
||||
COMPOSE_PROJECT_NAME='abletonmcp'
|
||||
EOF
|
||||
chmod 600 "$DOCKER_ENV_FILE"
|
||||
}
|
||||
|
||||
ensure_runner_env() {
|
||||
if [[ -f "$RUNNER_ENV_FILE" ]]; then
|
||||
log_info "Runner env already exists: $RUNNER_ENV_FILE"
|
||||
return
|
||||
fi
|
||||
|
||||
log_step "Generating runner env"
|
||||
cat > "$RUNNER_ENV_FILE" <<EOF
|
||||
export ANTHROPIC_BASE_URL=''
|
||||
export ANTHROPIC_AUTH_TOKEN=''
|
||||
export GLM_MODEL='glm-5'
|
||||
export GLM_API_KEY=''
|
||||
export CODEX_MODEL='gpt-5.4'
|
||||
export TELEGRAM_BOT_TOKEN=''
|
||||
export TELEGRAM_CHAT_ID=''
|
||||
export CODEX_HOME='$AUTOMATION_DIR/wsl_runtime/codex_home'
|
||||
export GLM_AGENTS_FILE='$AUTOMATION_DIR/glm_agents.team.json'
|
||||
export POLL_SECONDS='30'
|
||||
export WATCH='1'
|
||||
export CONTINUE_ON_ERROR='1'
|
||||
EOF
|
||||
chmod 600 "$RUNNER_ENV_FILE"
|
||||
}
|
||||
|
||||
main() {
|
||||
log_info "Preparing AbletonMCP_AI WSL stack"
|
||||
ensure_dirs
|
||||
ensure_symlink
|
||||
write_docker_env
|
||||
ensure_runner_env
|
||||
echo
|
||||
log_info "Files ready:"
|
||||
echo " - $DOCKER_ENV_FILE"
|
||||
echo " - $RUNNER_ENV_FILE"
|
||||
echo
|
||||
log_info "Next:"
|
||||
echo " 1. Review tokens in $RUNNER_ENV_FILE"
|
||||
echo " 2. Review service passwords in $DOCKER_ENV_FILE"
|
||||
echo " 3. Run ./install.sh if Docker is not installed"
|
||||
echo " 4. Run ./start.sh"
|
||||
}
|
||||
|
||||
main "$@"
|
||||
Reference in New Issue
Block a user