================================
------------EFFECTS-------------
================================

==========
Kdenlive uses MLT for all video/audio effects/filters.
For filters that provide metadata the GUI can be generated automatically.
If the generated GUI is not sufficient a custom one can be build using a XML
file describing the effect and its parameters.
==========



==========
The basic structure of a XML filter description:
--------------------------------------------------------------------------------------
01 <!DOCTYPE kpartgui>
02 <effect tag="mlt_filter" id="mlt_filter_custom1">
03      <name>Filter name</name>
04      <description>Filter the image</description>
05      <author>Anon</author>
06      <parameter type="constant" name="amount" default="10" min="0" max="1000" factor="1000">
07              <name>Amount of filtering</name>
08      </parameter>
09      <parameter type="bool" name="enable" default="0">
10              <name>Enable</name>
11      </parameter>
15 </effect>
--------------------------------------------------------------------------------------

Line 1:
    - required to make strings used in the effect translatable
Line 2:
    - tag: MLT ("mlt_service") name of the effect
    - id: internal kdenlive id, can be anything, but must be unique for each effect
    - type: (default = "video") whether effect modifies video or audio (use "audio" then)
    - unique: (default = "0") this effect cannot be attached multiple times to one clip (speed, fades, ...)
    - version: (optional) minimum version of the effect required to be available (works only if the MLT filter provides the necessary metadata)
Line 3:
    - name of the effect that will appear to the user
Line 4:
    - Short description of the effect to be shown in the effects list
    - Additionally a <full> part can be added inside. It's content will be available in the effect stack (see frei0r_lightgraffiti.xml for an example):
        - supports HTML formatting (requires the use of CDATA)
Line 5:
    - name of the author(s) of the filter (not of the XML file ;))
The rest:
    - list of effect parameters:
        - tag "name": visible name of the parameter (depending on the GUI this parameter uses)
        - tag "comment": (optional) description of the parameter (support HTML formatting) (not yet supported by all widgets)
        - attribute "name": MLT filter parameter name
        - attribute "paramprefix": a string to be prepended to the parameter value before passing it to MLT
        - attribute "default": initial value, format depends on parameter type
        - attribute "optional": if it is set, it means that this parameter can have an empty value. So then loading a project, don't set its value to default
        - attribute "type": widget (GUI) to use
            - "fixed":
                - sets a (MLT filter) parameter, but does not expose it to the user (no GUI)
            - "constant":
                - number
                - represented by a slider
                - additional parameter attributes:
                    - "factor": (optional) values coming from MLT will be multiplied with factor
                    - "offset": (optional) will be added to values coming from MLT after "factor" is applied
                    - "min": smallest value possible (after multiplying with "factor")
                    - "max": largest value possible (after multiplying with "factor")
                    - "suffix": (optional) displayed unit of the values
            - "double":
                - synonym for "constant"
            - "bool":
                - true/false
                - represented by a checkbox
            - "switch":
                - 2 possible options defined by strings (max / min)
                - represented by a checkbox
            - "list":
                - multiple choice
                - represented by a drop-down menu
                - additional parameter attribute:
                    - "paramlist": list of possible values separated by semicolon (no whitespaces!)
                - additional tag:
                    - "paramlistdisplay": (optional) list of names to use for the values separated by comma
            - "position":
                - time stored as frame number
                - represented by a slider
            - "color":
                - color value, similar to representation HTML ("#rrggbb"/"#aarrggbb" or "0xrrggbbaa")
                - represented by a button opening the KDE color dialog + a color picker button
                - additional attributes:
                    - "alpha": (default = "0") use to enable alpha support
            - "keyframe":
                - keyframable number
                - keyframes are opt-in (only one keyframe by default -> should be preferred over "constant" whenever possible)
                - works with MLT filters that utilize start/end values
                - same attributes as "constant"
                - additional attributes:
                    - "intimeline": (default = "0") parameter to preselect for editing in the timeline (only one parameter can have "1")
                    - "widget": (optional) GUI based on the standard keyframe GUI (possible values: "corners")
            - "simplekeyframe":
                - works with MLT filters that use mlt_geometry for keyframe support (includes all frei0r filters)
                - same attributes as "keyframe"
            - "geometry":
                - a rectangle: position + dimension + additional value
                - works with MLT filters using mlt_geometry
                - the rect can be edited on the project monitor
                - additional attributes:
                    - "fixed": (default = "0") use to disable keyframe support
                    - "showrotation": (default = "0") use to enable support to 3 axis rotation
                    - "opacity": (default = "true") use to disable support of the opacity setting
            - "url":
                - url/path
                - represented by button to open "file open" dialog
                - additional attributes:
                     - "filter": Filter for file extensions. Example : "*.cpp *.cc *.C|C++ Source Files\n*.h *.H|Header files" or as using MIME type: "image/png text/html"
            - "wipe":
                - special GUI for the wipe transition makes it possible to select a direction of a slide
            - "addedgeometry":
                - parameter linked to a "geometry" parameter
            - "curve":
                - cubic curve editor for the frei0r color curves filter (old version)
            - "bezier_spline":
                - cubic Bézier spline editor for the frei0r color curves filter (new version, might be reused for other filters)
            - "roto-spline":
                - GUI for the rotoscoping filter (spline on the monitor)
            - "keywords":
                - Text entry with a selection of possible keywords to be inserted in the text.
                - additional tags:
                    - "keywords": list of possible keyword values separated by semicolon
                    - "keywordsdisplay": list of names to use for the values separated by semicolon
            - "fontfamily":
                - Font typeface entry
            - "readonly" :
                - Data (usually an animated geometry) that can be pasted to clipboard or dragged/dropped on another geometry parameter. Cannot be modified directly by user.
==========

==========
Effects can be blacklisted in kdenlive/data/blacklisted_effects.txt
All effects with a custom XML GUI need to be blacklisted.
==========

==========
Effects can be added to "Main effects" list in kdenlive/data/preferred_effects.txt
==========

==========
Effects can be assigned to an effect category in kdenlive/data/kdenliveeffectscategory.rc.
==========

==========
Kdenlive parses the effect folder at each startup, so that if you have an XML file describing a new effect,
just copy it to your ~/.kde/share/apps/kdenlive/effects/ folder and restart Kdenlive to enable the new effect.
==========
