Skip to main content
Glama

REAPER MCP Server

by itsuzef
render_tools.py8.75 kB
import os from pathlib import Path import reapy from reapy import reascript_api as RPR class RenderTools: """Tools for rendering and exporting in REAPER.""" def __init__(self, config): """ Initialize RenderTools with configuration. Args: config (dict): Configuration dictionary """ self.config = config self.default_sample_rate = config.get("default_sample_rate", 44100) self.default_bit_depth = config.get("default_bit_depth", 24) self.default_audio_format = config.get("default_audio_format", "wav") def render_project(self, output_path, format=None, sample_rate=None, bit_depth=None): """ Render the project to the specified file. Args: output_path (str): Output file path format (str): Audio format (wav, mp3, flac, etc.) sample_rate (int): Sample rate in Hz bit_depth (int): Bit depth Returns: dict: Result of the operation """ try: # Use default values if not specified format = format or self.default_audio_format sample_rate = sample_rate or self.default_sample_rate bit_depth = bit_depth or self.default_bit_depth # Ensure directory exists os.makedirs(os.path.dirname(os.path.abspath(output_path)), exist_ok=True) # Get project project = reapy.Project() # Set render settings # Note: This is a simplified implementation # In practice, you'd need to use ReaScript API to set render settings # Render project # Note: This is a simplified implementation # In practice, you'd need to use ReaScript API to trigger rendering # For now, return placeholder values return { "success": True, "output_path": output_path, "format": format, "sample_rate": sample_rate, "bit_depth": bit_depth, "message": "Note: This is a placeholder. Actual implementation would render the project." } except Exception as e: return { "success": False, "error": str(e) } def render_stems(self, output_directory, tracks=None): """ Render stems for the specified tracks. Args: output_directory (str): Output directory tracks (list): List of track IDs to render (None for all) Returns: dict: Result of the operation """ try: # Ensure directory exists os.makedirs(output_directory, exist_ok=True) # Get project project = reapy.Project() # Get tracks to render track_list = [] if tracks is None: # Render all tracks for i in range(project.n_tracks): track = project.tracks[i] track_list.append({ "track_id": track.id, "name": track.name }) else: # Render specified tracks for track_id in tracks: try: track = reapy.Track.from_id(track_id) track_list.append({ "track_id": track_id, "name": track.name }) except Exception as e: print(f"Error getting track {track_id}: {e}") # Render stems # Note: This is a simplified implementation # In practice, you'd need to use ReaScript API to render stems # For now, return placeholder values return { "success": True, "output_directory": output_directory, "tracks": track_list, "message": "Note: This is a placeholder. Actual implementation would render stems for each track." } except Exception as e: return { "success": False, "error": str(e) } def render_selected_items(self, output_directory, format=None, sample_rate=None, bit_depth=None): """ Render selected items as separate files. Args: output_directory (str): Output directory format (str): Audio format (wav, mp3, flac, etc.) sample_rate (int): Sample rate in Hz bit_depth (int): Bit depth Returns: dict: Result of the operation """ try: # Use default values if not specified format = format or self.default_audio_format sample_rate = sample_rate or self.default_sample_rate bit_depth = bit_depth or self.default_bit_depth # Ensure directory exists os.makedirs(output_directory, exist_ok=True) # Get project project = reapy.Project() # Get selected items selected_items = project.selected_items if not selected_items: return { "success": False, "error": "No items selected" } # Render items # Note: This is a simplified implementation # In practice, you'd need to use ReaScript API to render items # For now, return placeholder values item_list = [] for item in selected_items: item_list.append({ "item_id": item.id, "name": item.name or f"Item {item.id}" }) return { "success": True, "output_directory": output_directory, "format": format, "sample_rate": sample_rate, "bit_depth": bit_depth, "items": item_list, "message": "Note: This is a placeholder. Actual implementation would render selected items." } except Exception as e: return { "success": False, "error": str(e) } def render_regions(self, output_directory, format=None, sample_rate=None, bit_depth=None): """ Render regions as separate files. Args: output_directory (str): Output directory format (str): Audio format (wav, mp3, flac, etc.) sample_rate (int): Sample rate in Hz bit_depth (int): Bit depth Returns: dict: Result of the operation """ try: # Use default values if not specified format = format or self.default_audio_format sample_rate = sample_rate or self.default_sample_rate bit_depth = bit_depth or self.default_bit_depth # Ensure directory exists os.makedirs(output_directory, exist_ok=True) # Get project project = reapy.Project() # Get regions regions = [] for i in range(project.n_regions): region = project.get_region(i) regions.append({ "index": i, "name": region.name, "start": region.start, "end": region.end }) if not regions: return { "success": False, "error": "No regions found" } # Render regions # Note: This is a simplified implementation # In practice, you'd need to use ReaScript API to render regions return { "success": True, "output_directory": output_directory, "format": format, "sample_rate": sample_rate, "bit_depth": bit_depth, "regions": regions, "message": "Note: This is a placeholder. Actual implementation would render regions." } 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