Skip to main content
Glama

REAPER MCP Server

by itsuzef
mastering_tools.py7.42 kB
import reapy from reapy import reascript_api as RPR class MasteringTools: """Tools for mastering in REAPER.""" def __init__(self, config): """ Initialize MasteringTools with configuration. Args: config (dict): Configuration dictionary """ self.config = config self.mastering_presets = config.get("mastering_presets", {}) def add_master_fx(self, fx_name): """ Add an effect to the master track. Args: fx_name (str): FX name Returns: dict: FX information """ try: # Get master track project = reapy.Project() master_track = project.master_track # Add FX fx_index = master_track.add_fx(fx_name) if fx_index < 0: return { "success": False, "error": f"FX not found: {fx_name}" } # Get the FX fx = master_track.fxs[fx_index] return { "success": True, "fx_id": fx.id, "index": fx_index, "name": fx.name, "preset": fx.preset_name } except Exception as e: return { "success": False, "error": str(e) } def analyze_loudness(self): """ Analyze the project loudness and return metrics. Returns: dict: Loudness metrics """ try: # This is a simplified implementation # In practice, you'd need to use ReaScript API to run REAPER's loudness analyzer # and retrieve the results # For now, return placeholder values return { "success": True, "integrated_lufs": -14.0, "true_peak": -1.0, "short_term_max": -10.0, "loudness_range": 8.0, "message": "Note: These are placeholder values. Actual implementation would use REAPER's loudness analyzer." } except Exception as e: return { "success": False, "error": str(e) } def apply_mastering_chain(self, preset="default"): """ Apply a mastering chain to the master track. Args: preset (str): Preset name Returns: dict: Result of the operation """ try: # Get master track project = reapy.Project() master_track = project.master_track # Check if preset exists if preset not in self.mastering_presets: return { "success": False, "error": f"Preset not found: {preset}" } # Get preset configuration preset_config = self.mastering_presets[preset] # Add FX chain added_fx = [] for fx_config in preset_config: fx_name = fx_config["name"] fx_params = fx_config.get("params", {}) # Add FX fx_index = master_track.add_fx(fx_name) if fx_index >= 0: fx = master_track.fxs[fx_index] # Set parameters for param_name, param_value in fx_params.items(): # This is a simplification - in practice, you'd need to map # parameter names to indices or use a more complex approach pass added_fx.append({ "fx_id": fx.id, "index": fx_index, "name": fx.name }) return { "success": True, "preset": preset, "fx_chain": added_fx } except Exception as e: return { "success": False, "error": str(e) } def set_master_volume(self, volume): """ Set the master volume. Args: volume (float): Volume in dB Returns: dict: Result of the operation """ try: # Get master track project = reapy.Project() master_track = project.master_track # Set volume master_track.volume = volume return { "success": True, "volume": master_track.volume } except Exception as e: return { "success": False, "error": str(e) } def apply_limiter(self, threshold=-0.5, release=50.0): """ Apply a limiter to the master track. Args: threshold (float): Threshold in dB release (float): Release time in ms Returns: dict: Result of the operation """ try: # Get master track project = reapy.Project() master_track = project.master_track # Add ReaLimit fx_index = master_track.add_fx("ReaLimit") if fx_index < 0: return { "success": False, "error": "Failed to add ReaLimit" } # Get the FX fx = master_track.fxs[fx_index] # Set parameters # Note: This is a simplification - in practice, you'd need to map # the parameters to ReaLimit's specific parameter indices return { "success": True, "fx_id": fx.id, "threshold": threshold, "release": release, "message": "Limiter applied. Note: Parameter mapping is simplified." } except Exception as e: return { "success": False, "error": str(e) } def normalize_project(self, target_lufs=-14.0): """ Normalize the project to the target LUFS. Args: target_lufs (float): Target LUFS level Returns: dict: Result of the operation """ try: # This is a simplified implementation # In practice, you'd need to: # 1. Analyze current loudness # 2. Calculate gain adjustment # 3. Apply gain adjustment to master track # For now, return placeholder values return { "success": True, "target_lufs": target_lufs, "message": "Note: This is a placeholder. Actual implementation would analyze and adjust project loudness." } except Exception as e: return { "success": False, "error": str(e) }

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/itsuzef/reaper-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server