Component Registry System#
PhenoTypic uses Python’s import system as its component registry. Operations, plotters, and dashboards are discoverable by class name, enabling JSON serialization and dynamic pipeline construction.
How It Works#
When ImagePipeline.from_json() encounters an operation like
"GaussianBlur", it resolves the class by:
Searching known PhenoTypic modules (
phenotypic.enhance,phenotypic.detect,phenotypic.refine, etc.)Importing the class by name
Instantiating it with the saved parameters
Registering Custom Operations#
Custom operations are automatically discoverable when:
The class is importable from the current Python environment
The class name matches the name stored in the JSON
For operations defined in your own package:
# my_package/my_enhancer.py
from phenotypic.abc_ import ImageEnhancer
class MyCustomEnhancer(ImageEnhancer):
def __init__(self, strength: float = 1.0):
self.strength = strength
def _operate(self, image):
...
return image
When loading a pipeline that contains MyCustomEnhancer, ensure
my_package is installed and importable.
Plot and Dashboard Registry#
Plotters and dashboards follow a similar pattern — they register
through Python’s class system and are accessible via the image.plot
and image.panel accessors.
Naming Conventions#
Operation class names should be descriptive and end with their type:
GaussianBlur(enhancer),OtsuDetector(detector),SmallObjectRemover(refiner)Avoid generic names like
MyOperation— the class name appears in pipeline JSON files and should be self-documenting