--- # A metadata schema in Kwalify: http://www.kuwata-lab.com/kwalify/
# Version: 0.3
type: map
mapping:
  "schema_version": # This should match the version comment above
    type: float
    required: yes
  "LC_NUMERIC": # If not provided LC_NUMERIC=C is used, not the system's locale.
    type: str
    required: no
  "type": # A service type
    type: str
    required: yes
    enum: [consumer, filter, producer, transition]
  "identifier": # The same value used to register and create the service
    type: str
    required: yes
    unique: yes
  "title": # The UI can use this for a field label
    type: str
  "copyright": # Who owns the rights to the module and/or service?
    type: str
  "version": # The version of the service implementation
    type: text
  "license": # The software license for the service implementation
    type: str
  "language": # A 2 character ISO 639-1 language code
    type: str
    required: yes
  "url": # A hyperlink to a related website
    type: str
  "creator": # The name and/or e-mail address of the original author
    type: str
  "contributor": # The name and/or e-mail of all source code contributors
    type: seq
    sequence:
      - type: str
  "tags": # A set of categories, this might become an enum
    type: seq
    sequence:
      - type: str
  "description": # A slightly longer description than title
    type: str
  "icon": # A graphical representation of the effect
    type: map
    mapping:
      "filename":
        type: str
      "content-type":
        type: str
      "content-encoding":
        type: str
      "content":
        type: str
  "notes": # Details about the usage and/or implementation - can be long
    type: str
  "bugs": # A list of known problems that users can try to avoid
    type: seq
    sequence:
      - type: str # Can be a sentence or paragraph, preferably not a hyperlink
  "parameters": # A list of all of the options for the service
    type: seq
    sequence:
      - type: map
        mapping:
          "identifier": # The key that must be used to set the mlt_property
            type: str
            required: yes
          "type": # An mlt_property_type
            type: str
            enum:
              - boolean # 0 or 1; not 'true', 'false', 'yes', or 'no' strings at this time
              - float
              - geometry
              - integer
              - properties # for passing options to encapsulated services
              - string
              - time # time string values (clock, SMPTE) can be accepted in addition to frames
              - rect  # "X Y W H" or "X/Y:WxH"
              - color # 0xrrggbbaa | #rrggbb | #aarrggbb
          "service-name": # for type: properties, a reference to another service
            type: str     # format: type.service, e.g. transition.composite
          "title": # A UI can use this for a field label
            type: str
          "description": # A UI can use this for a tool tip or what's-this
            type: str
          "argument": # If this is also the service constructor argument.
            type: bool
            default: no
          "readonly": # If you set this property, it will be ignored
            type: bool
            default: no
          "required": # Is this property required?
            type: bool
            default: no
          "mutable": # The service will change behavior if this is set after
                     # processing the first frame
            type: bool
            default: no
          "widget": # A hint to the UI about how to let the user set this
            type: str
            enum:
              - checkbox
              - color
              - combo
              - curve
              - directory
              - fileopen
              - filesave
              - font
              - knob
              - listbox
              - dropdown # aka HTML select or GtkOptionMenu
              - radio
              - rectangle # for use with type: geometry
              - slider
              - spinner
              - text
              - textbox # multi-line
              - timecode
          "minimum": # For numeric types, the minimal value
            type: number
          "maximum": # For numeric types, the maximal value 
            type: number
          "default":     # The default value to be used in a UI
            type: scalar # If not specified, the UI might be able to display
                         # this as blank
          "unit": # A UI can display this as a label after the widget (e.g. %)
            type: str
          "scale": # the number of digits after decimal point when type: float
            type: int
          "format": # A hint about a custom string encoding, possibly scanf
          "values": # A list of acceptable string values
            type: seq # A UI can allow something outside the list with
                      # widget: combo or if "other" is in this sequence
            sequence:
              - type: scalar
 
