Getting Started

This guide will help you get started with Logic Plugin Manager, a Python library for programmatically managing Logic Pro’s audio plugins.

Installation

Basic Installation

Install the package using pip or uv:

pip install logic-plugin-manager

Or with uv:

uv add logic-plugin-manager

With Search Functionality

For fuzzy search capabilities, install with the search extra:

pip install logic-plugin-manager[search]
# or
uv add logic-plugin-manager[search]

This includes the rapidfuzz dependency for advanced plugin searching.

Requirements

  • Python: 3.13 or higher

  • Operating System: macOS only (Logic Pro specific)

  • Logic Pro: Installed with audio plugins

The library accesses:

  • Audio Components directory: /Library/Audio/Plug-Ins/Components

  • Tags database: ~/Music/Audio Music Apps/Databases/Tags

Quick Start

Basic Usage

The simplest way to start is by creating a Logic instance:

from logic_plugin_manager import Logic

# Initialize and discover all plugins
logic = Logic()

# Access all plugins
for plugin in logic.plugins.all():
    print(f"{plugin.full_name} - {plugin.type_name.display_name}")

# Access categories
for category_name, category in logic.categories.items():
    print(f"{category_name}: {category.plugin_amount} plugins")

Lazy Loading

For faster initialization when you don’t need immediate access to all plugins:

from logic_plugin_manager import Logic

# Initialize without loading plugins
logic = Logic(lazy=True)

# Manually discover plugins when needed
logic.discover_plugins()
logic.discover_categories()

Searching Plugins

Search for plugins by name, manufacturer, or category:

from logic_plugin_manager import Logic

logic = Logic()

# Simple substring search
results = logic.plugins.search_simple("reverb")

# Advanced fuzzy search with scoring
results = logic.plugins.search("serum", use_fuzzy=True)
for result in results[:5]:  # Top 5 results
    print(f"{result.plugin.full_name} (score: {result.score})")

Working with Categories

Organize plugins into categories:

from logic_plugin_manager import Logic

logic = Logic()

# Get plugins in a specific category
effects = logic.plugins.get_by_category("Effects")

# Get or create a category
my_category = logic.categories.get("My Favorites")
if not my_category:
    my_category = logic.introduce_category("My Favorites")

# Add plugin to category
plugin = logic.plugins.get_by_full_name("fabfilter: pro-q 3")
if plugin:
    plugin.add_to_category(my_category)

Custom Paths

If your Logic Pro or components are in non-standard locations:

from pathlib import Path
from logic_plugin_manager import Logic

logic = Logic(
    components_path=Path("/custom/path/to/Components"),
    tags_path=Path("~/custom/path/to/Tags").expanduser()
)

Next Steps

Common Patterns

Finding a Specific Plugin

from logic_plugin_manager import Logic

logic = Logic()

# By full name (exact match)
plugin = logic.plugins.get_by_full_name("apple: logic eq")

# By manufacturer
fabfilter_plugins = logic.plugins.get_by_manufacturer("fabfilter")

# By audio unit type
instruments = logic.plugins.get_by_type_code("aumu")

Batch Category Operations

from logic_plugin_manager import Logic

logic = Logic()

# Get all synthesizer plugins
synths = logic.plugins.search("synth", use_fuzzy=True)
synth_plugins = {result.plugin for result in synths[:20]}

# Move them to a custom category
synth_category = logic.introduce_category("Synthesizers")
logic.move_plugins_to_category(synth_category, synth_plugins)

Working with Plugin Metadata

from logic_plugin_manager import Logic

logic = Logic()
plugin = logic.plugins.get_by_name("Pro-Q 3")

if plugin:
    # Access metadata
    print(f"Manufacturer: {plugin.manufacturer}")
    print(f"Type: {plugin.type_name.display_name}")
    print(f"Version: {plugin.version}")
    print(f"Categories: {[c.name for c in plugin.categories]}")

    # Set custom nickname
    plugin.set_nickname("My Favorite EQ")

    # Set short name for UI display
    plugin.set_shortname("PQ3")

Error Handling

The library raises specific exceptions for different error conditions:

from logic_plugin_manager import (
    Logic,
    PluginLoadError,
    MusicAppsLoadError,
    CategoryValidationError
)

try:
    logic = Logic()
except MusicAppsLoadError as e:
    print(f"Could not load Logic's database: {e}")
except PluginLoadError as e:
    print(f"Error loading plugins: {e}")

try:
    category = logic.categories["Nonexistent"]
except KeyError:
    print("Category not found")

See API Reference for all exception types.