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 nicknamepath- Full path to library filedescription- 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 stringlibrary(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}")