Library

The LibraryOperations module provides symbol library browsing and search capabilities.

sch = kicad.get_schematic()
library = sch.library

Listing Libraries

get_libraries()

Gets all available symbol libraries.

libraries = sch.library.get_libraries()

for lib in libraries:
    print(f"{lib.name}: {lib.path}")

Returns a list of LibraryInfo objects:

  • name - Library nickname
  • path - Full path to library file
  • description - Library description

Searching Symbols

search(query, ...)

Searches for symbols across libraries.

# Search by name
results = sch.library.search("resistor")

for symbol in results:
    print(f"{symbol.lib_id}: {symbol.description}")

Parameters:

  • query (str): Search string
  • library (str): Limit to specific library (optional)
  • limit (int): Maximum results (default: 50)

get_symbol(lib_id)

Gets detailed information about a symbol.

info = sch.library.get_symbol("Device:R")

print(f"Name: {info.name}")
print(f"Description: {info.description}")
print(f"Keywords: {info.keywords}")
print(f"Pins: {len(info.pins)}")

for pin in info.pins:
    print(f"  Pin {pin.number}: {pin.name} ({pin.type})")

Symbol Information

The SymbolInfo object contains:

class SymbolInfo:
    lib_id: str         # Full library ID (e.g., "Device:R")
    name: str           # Symbol name
    description: str    # Description text
    keywords: str       # Search keywords
    datasheet: str      # Datasheet URL
    pins: List[PinInfo] # Pin information
    units: int          # Number of units (for multi-unit symbols)
    footprints: List[str]  # Associated footprint filters

Pin Information

class PinInfo:
    number: str     # Pin number
    name: str       # Pin name
    type: str       # Pin type (input, output, etc.)
    position: Vector2  # Position in symbol

Example: Find and Place a Symbol

from kipy import KiCad
from kipy.geometry import Vector2

kicad = KiCad()
sch = kicad.get_schematic()

# Search for a microcontroller
results = sch.library.search("atmega328")

print("Found symbols:")
for i, symbol in enumerate(results):
    print(f"  {i}: {symbol.lib_id} - {symbol.description}")

# Get details on the first result
if results:
    details = sch.library.get_symbol(results[0].lib_id)
    print(f"\nPins for {details.lib_id}:")
    for pin in details.pins[:10]:  # First 10 pins
        print(f"  {pin.number}: {pin.name}")

    # Place it
    pos = Vector2.from_xy_mm(100, 100)
    sch.symbols.add(results[0].lib_id, pos)

Example: List All Resistors

# Find all resistor variants
resistors = sch.library.search("resistor", library="Device")

print("Resistor types in Device library:")
for r in resistors:
    print(f"  {r.lib_id}")

Example: Find Symbols by Pin Count

# Find all 8-pin ICs
results = sch.library.search("", limit=200)

eight_pin_parts = []
for symbol in results:
    details = sch.library.get_symbol(symbol.lib_id)
    if len(details.pins) == 8:
        eight_pin_parts.append(details)

print(f"Found {len(eight_pin_parts)} 8-pin symbols:")
for part in eight_pin_parts[:10]:
    print(f"  {part.lib_id}: {part.description}")

Example: Check Footprint Compatibility

# Check what footprints a symbol can use
info = sch.library.get_symbol("Connector:Conn_01x04_Male")

print(f"Symbol: {info.lib_id}")
print(f"Compatible footprints:")
for fp in info.footprints:
    print(f"  {fp}")