 
 @dynamicMemberLookup
 public struct FilterInputPorts<Filter> where Filter: AnyObject {
-    let filter: Filter
+    private let filter: Filter
+    
+    public init(filter: Filter) {
+        self.filter = filter
+    }
     
     public subscript(dynamicMember keyPath: WritableKeyPath<Filter, MTIImage?>) -> Port<Filter, MTIImage?, WritableKeyPath<Filter, MTIImage?>> {
         return Port(self.filter, keyPath)

        self.object = ObjectProxy(object: port.object, keyPath: port.keyPath, writableKeyPath: port.writableKeyPath)
        self.target = ProxyPortTarget(object: port.object, keyPath: port.keyPath, writableKeyPath: port.writableKeyPath)
    }
    
    public init<T>(_ filter: T) where T: MTIUnaryFilter, Value == MTIImage? {
        self.init(filter.ioPort)
    }
}


infix operator =>: AdditionPrecedence


    public init(_ value: Value) {
        self.value = value
    }
}

public typealias ImagePassthroughPort = PassthroughPort<MTIImage?>
