JSON Events Reference
This section describes the way to write commands (events) grouped to animation frames.
Basic JSON Structure
- Array of "frame" objects
- Each frame contains an array of "events". Individual event types are described in the next section.
- At the beginning of each frame
- Input data are loaded
- At the end of each frame
- Simulation step is performed
- Output data are saved
{"frames":[
{"events":[ // Frame #0
{
"event_type": "NEW_ARTWORK",
// ...
},
{
"event_type": // ...
},
// ...
]},
{"events":[ // Frame #1
{
"event_type": // ...
},
// ...
]},
{"events":[ // Frame #2
// ...
]},
// ...
]}
JSON Event Types
Each animation frame consists of a list of events (commands). There are events in Rebelle for setting up the artwork, selecting brush presets, colors, moving stylus, etc.
NEW_ARTWORK
Creates a new blank artwork with size width * height
in units
(by default pixels). Parameters other than width
and height
may be omitted.
Example:
{
"event_type": "NEW_ARTWORK",
"width": 640,
"height": 480,
"units": "px", // default px, valid values: px, in, cm
"dpi": 200, // default 200
"paper": {
"preset": "Default/HM01 Handmade", // default Default/Aquarelle, may be absolute path
"color": { "r": 128, "g": 255, "b": 128 }, // default 255,255,255
"deckled_edges": false, // default true
"paper_scale": 150 // default 100
}
}
SET_PAPER
Change paper or its params.
Example:
{
"event_type": "SET_PAPER",
"preset": "Default/HM01 Handmade", // default Default/Aquarelle, may be absolute path
"color": { "r": 128, "g": 255, "b": 128 }, // default 255,255,255
"deckled_edges": false, // default true
"paper_scale": 150 // default 100
}
LOAD
Loads the data from the provided path. Data and properties for event data are described in the Import/Export data section.
Example 1: (applies only to rgba-dry, rgba-wet)
{
"event_type": "LOAD",
"rgba_dry": {
"filename": "tmp/some_image.exr",
"blending": "NORMAL"
}
}
Example 2: (applies only to bump-dry
, bump-wet
, water
, wetness
, velocity
)
{
"event_type": "LOAD",
"water": {
"filename": "tmp/water_data.exr",
"function": "add",
"multiplier": 1.2,
"scaling": 2.3
}
}
Example 3: (combined)
{
"event_type": "LOAD",
"rgba_dry": {
"filename": "tmp/some_image.exr",
"blending": "NORMAL"
},
"water": {
"filename": "tmp/water_data.exr",
"function": "add",
"multiplier": 1.2,
"scaling": 2.3,
"wait_for_file_timeout_seconds": 10
},
"velocity": {
"filename": "tmp/velocity_data.exr",
"function": "average"
}
}
"selection_mask" and "stencil_mask":
- Load a mask used for both painting and the simulation. If you need to use the mask only for painting, load it before the stroke, clear it before the simulation event or end of the frame, and then load it again before another stroke.
- The mask should be in grayscale 8bit per channel png format. If another format is used, it will be internally converted to grayscale.
- Type
selection_mask
is required, if clear layer behaviour is needed as in GUI application. - NOTE: At same time only one of
selection_mask
orstencil_mask
should be used, othervise behaviour is undefined. (Technically,selection_mask
is transferred tostencil_mask
, sostencil_mask
is overwriten then.)
{
"event_type": "LOAD",
"selection_mask": {
"filename": "tmp/mask.png"
}
}
SAVE
Saves the data to the specified path. Data and properties for event data are described in the Import/Export data section.
Example:
{
"event_type": "SAVE",
"rgba_dry": {
"filename": "tmp/rgba_dry_export.exr",
"options": "tiled_mipmapped,colorconvert:sRGB:linear"
},
"velocity": {
"filename": "tmp/velocity_export.exr",
"options": "tiled_mipmapped"
}
}
SET_BRUSH
Sets tool and its various parameters. Parameters that are not specified in this event will keep their old values, however setting a new brush preset may change size, water, opacity and paint type as these may be stored in brush presets. Supported tools: OIL_AND_ACRYLIC
, EXPRESS_OIL
, WATERCOLOR
, INK_PEN
, PENCIL
, PASTEL
, MARKER
, AIRBRUSH
, BLEND
, SMUDGE
, CLONE
, ERASER
, WATER
, DRY
, BLOW
.
Example:
{
"event_type": "SET_BRUSH",
"tool": "WATERCOLOR",
"preset": "Default/Fan 1", // may be absolute path to preset too
"size" : 20,
"size_px" : 20, // use either size or size_px
"water": 55,
"opacity": 60,
"pressure": 100,
"dirty_brush": false, // only works for OIL_AND_ACRYLIC, ignored for other tools
"smudge_only_wet": false,// SMUDGE
"keep_layer_wet": false,// available for tools with erase paint_type
"keep_water": true, // available for tools with erase paint_type
"paint_type": "PAINT", // BLEND|PAINT|PAINT_BLEND|PAINT_MIX|ERASE, not all tools support all paint types
"only_water": true, // only paint water. Rgba and bump aren't painted. Only applicable to WATERCOLOR and INK_PEN tools. Usable for a "multilayer simulation".
"glaze_mode": "TRANSPARENT", // Watercolor tool supports TRANSPARENT, SEMI-OPAQUE and OPAQUE glazing modes, default value is TRANSPARENT, don’t set this parameter for other tools
"color": { "r": 255, "g": 128, "b": 0 },
// since Rebelle 5:
"multi_color_brush": true, // turns on multi colored brush feature, this allows multiple colors to be painted within single brush stroke, multiple colors and other parameters are set using "multi_color" object, see SET_BRUSH_COLOR event for further details
"rotate_multi_color_brush": true, // rotate multi color texture with brush rotation, also affects dirty brush effect
"smudge": true, // override preset's smudge checkbox (in the Brush Creator). "preset" has to be set also.
"spacing": 50, // override preset's spacing (in the Brush Creator). "preset" has to be set also.
"opacity_multiplier": 2, // override preset's opacity multiplier (in the Brush Creator). "preset" has to be set also.
}
SET_ENGINE_PARAMS
Sets various parameters found in the "Visual Settings" panel. All parameters are optional.
Example:
{
"event_type": "SET_ENGINE_PARAMS",
"absorbency": 5, // range 0-10
"re_wet": 5, // range 0-10
"texture_influence": 5, // range 0-10
"edge_darkening": 5, // range 0-10
"create_drips": true, // bool
"drip_size": 5, // range 1-10
"drip_length": 5, // range 1-10
"impasto_depth": 5, // range 0-10
"gloss": 5, // range 0-10
"paper_texture": 5, // range 0-10
"paint_texture": 5, // range 0-10
"gran_enabled": true, // bool (since R5)
"gran_strength": 5, // range 0-10 (since R5)
"gran_contrast": 5, // range 0-10 (since R5)
"gran_texture": 1, // range 0-4 (since R5)
"paused": true // bool (since R5), for pausing the simulation (diffusion)
}
POINTER_PRESS
Performs pointer press, e.g. mouse click. By itself this event doesn’t cause anything to be drawn, only starts stroke drawing. Stroke consists of a pointer press, any number of pointer move events and a pointer release. POINTER_PRESS
takes position and optional tablet data (pressure, pen tilt and pen rotation). It is recommended that all pointer events (press, move and release events) of a single stroke contain the same additional tablet data (for example all of them will have pressure and pen tilt specified), otherwise brush may behave erratically.
Example:
{
"event_type": "POINTER_PRESS",
"stroke_id": 25, // optional, id of the stroke useful when a stroke is split to multiple independent substrokes, this parameter ensures that all substrokes have the same "random start" parameters generated for the first stroke of this stroke_id and reused for all following strokes with the same stroke_id.
"pos": { // position in canvas coordinates, may be outside of the canvas
"x": 400.0,
"y": 0.0
},
"pen_tilt": { // pen tilt in relation to drawing tablet’s x and y axis in degrees, optional
"x": 60,
"y": -45
},
"rotation": 45.0, // pen rotation in degrees, optional
"pressure": 0.6 // pen pressure, 0.0-1.0, optional
}
POINTER_MOVE
Moves pointer to a new position, this causes segment from the previous position to be drawn with one move event delay (this extra move event influences trajectory). Takes the same parameters as POINTER_PRESS
.
Brush color mixing internals
The final color stored in the brush RGBA texture used for painting is:
C_final = (C_bottom * mix_ratio) + (C_dis * paint_ratio) + (C_prev * brush_ratio)
where:
C_bottom
is the color under the brushC_dis = (C_multicolor * dissipation) + (C_palette * (1 - dissipation))
, where:C_palette
is the single palette colorC_multicolor
is the color of the multicolor brush texture
C_prev
is previous color from brush RGBA texturemix_ratio
,paint_ratio
andbrush_ratio
are internally modified to sum up to 1, there is no parameter directly controllingbrush_ratio
- For
PAINT
paint type,mix_ratio = 0, paint_ratio = 1
- For
BLEND
paint type,mix_ratio
can be controlled,paint_ratio = 0
- For
PAINT_BLEND
andPAINT_MIX
,mix_ratio
andpaint_ratio
can be set arbitrarily
Example:
{
"event_type": "POINTER_MOVE",
"pos": { // position in canvas coordinates, may be outside of the canvas
"x": 450.0,
"y": 50.0
},
"pen_tilt": { // pen tilt in relation to drawing tablet’s x and y axis in degrees, optional
"x": 0,
"y": 20
},
"rotation": 160.0, // pen rotation in degrees, optional
"pressure": 0.8, // pen pressure, 0.0-1.0, optional
// since Rebelle 5:
"dissipation": 0.5, // controls the ratio of multicolored (dirty) brush and the single palette color. Let's call the resulting color C_dis, 0.0-1.0, optional (0: single palette color only, 1: multicolor texture only)
"paint_ratio": 1.0, // for PAINT_BLEND and PAINT_MIX paint types, controls the amount of new paint added (C_dis color from previous parameter), overrides paint curves from brush presets, 0.0-1.0, optional.
"mix_ratio": 0.2 // for PAINT_MIX, PAINT_BLEND and BLEND paint types, controls the strength of mixing/blending, overrides mix/blend curves from brush presets, 0.0-1.0, optional
}
Related events: SET_BRUSH_COLOR
POINTER_RELEASE
This event ends a stroke at the position specified in its parameters. If all pointer events in a stroke had the same exact position this event draws a single brush splat. Takes the same parameters as POINTER_PRESS
.
Example:
{
"event_type": "POINTER_RELEASE",
"pos": { // position in canvas coordinates, may be outside of the canvas
"x": 300.0,
"y": 300.0
},
"pen_tilt": { // pen tilt in relation to drawing tablet’s x and y axis in degrees, optional
"x": 50,
"y": 50
},
"rotation": 50.0, // pen rotation in degrees, optional
"pressure": 0.0 // pen pressure, 0.0-1.0, optional
}
SET_CANVAS_TILT
This event sets canvas tilt. Canvas tilt changes direction of fluid flow and can be freely changed at any moment even between simulation steps.
Example:
{
"event_type": "SET_CANVAS_TILT",
"tilt": {
"x": 0.75, // range -1 - 1, defines directional vector
"y": 0.0
},
"enabled": 1 // optional, toggles canvas tilt on/off while preserving previous tilt value
}
FAST_DRY
Performs fast dry operation, removes water but leaves the canvas wet. Takes no parameters.
Example:
{"event_type": "FAST_DRY"}
DRY
Performs dry operation, removes water and leaves the canvas dry. Takes no parameters.
Example:
{"event_type": "DRY"}
WET_LAYER
Performs wet the layer operation from panel layers. Takes no parameters.
Example:
{"event_type": "WET_LAYER"}
CLEAR_LAYER
Performs the clean layer operation from panel layers. Implicitly, all data are cleared. Optional values are rgba_dry
, rgba_wet
, wetness
, water
, bump_dry
, bump_wet
, velocity
, selection_mask
, all boolean, default true. If some sublayers, like water or wetness need to be preserved, set them to false.
NOTE: If selection_mask
is true (include implicit true), layer is cleared as by "Del" in GUI, and other options are ignored.
Example:
{
"event_type": "CLEAR_LAYER",
"wetness": false,
"water": false,
"selection_mask": false
}
SIMULATION
At the end of each animation frame, a fluid simulation step is performed implicitly. When you need to speed up the fluid simulation in your animation, use this event with a higher "repeats"
count to perform multiple simulation steps at once.
Simulation step is a single iteration of the Rebelle fluid simulation which is used only for wet media (watercolors, inks, water). If you only use dry media, you don't need to care about simulation events in Motion IO.
Example: 1 simulation step is performed within a single frame:
{"events":[]}
Example: 5 simulation steps are performed within a single frame (4 explicit + 1 implicit):
{"events":[
{
"event_type": "SIMULATION",
"repeats": 4
}
]}
LOAD_MASK
Unsupported since Rebelle v5, use LOAD with selection_mask
or stencil_mask
instead.
CLEAR_MASK
Clear stencil or selection mask loaded with LOAD
event, type selection_mask
or stencil_mask
. If both optional values are true, behaviour is undefined.
Example:
{
"event_type": "CLEAR_MASK",
"selection_mask": false // optional
"stencil_mask": true // optional, default
}
SET_TOOL
Switches to a new tool. Note that switching to a different tool does not carry over parameters set to the previously selected tool. Can be also set with SET_BRUSH
. Not recommended to change during stroke painting.
Example:
{
"event_type": "SET_TOOL",
"tool": "WATERCOLOR"
}
SET_BRUSH_PRESET
Sets a new brush preset to the currently selected tool, this may change other brush parameters. Can be also set with SET_BRUSH
. Not recommended to change during stroke painting.
Example:
{
"event_type": "SET_BRUSH_PRESET",
"preset": "Default/Fan 1" // may be absolute path
}
SET_BRUSH_PARAMS
Sets brush parameters, these are: size
, water
, opacity
and pressure
. Can be also set with SET_BRUSH
. Not recommended to change during stroke painting.
Example:
{
"event_type": "SET_BRUSH_PARAMS",
"size": 40,
"size_px" : 20, // use either size or size_px
"water": 50,
"opacity": 80,
"pressure": 100,
"dirty_brush": true
}
SET_PAINT_TYPE
Sets paint type to selected tool, different tools support different sets of paint types. Can be also set with SET_BRUSH
. Not recommended to change during stroke painting.
Tool | Supported Paint Types |
---|---|
OIL_AND_ACRYLIC, EXPRESS_OIL, WATERCOLOR, INK_PEN | BLEND, PAINT, PAINT_BLEND, PAINT_MIX, ERASE |
PENCIL, PASTEL, MARKER, AIRBRUSH | BLEND, PAINT, ERASE, PAINT_BLEND (since Rebelle 5) |
BLEND, SMUDGE, CLONE, WATER, DRY, BLOW, ERASER | no supported paint types |
Example:
{
"event_type": "SET_PAINT_TYPE",
"paint_type": "PAINT_BLEND"
}
SET_GLAZE_MODE
Sets glazing mode for the selected tool, should be only used for WATERCOLOR
. Can be also set with SET_BRUSH
. Not recommended to change during stroke painting.
Example:
{
"event_type": "set_glaze_mode",
"glaze_mode": "transparent", // watercolor tool supports transparent, semi-opaque and opaque glazing modes, default value is transparent
}
SET_BRUSH_COLOR
Sets color that is used for painting. Can be also set with SET_BRUSH
. Not recommended to change during stroke painting (but may work for OIL_AND_ACRYLIC
tool).
Also used to set parameters for multicolored brush. Multicolor brush texture is fully filled by color specified in color
parameter, if this parameter is not present then this event adds a new color on top of previous texture colors. Note that using multicolored brush (and/or rotate_multi_color_brush
brush parameter) changes behavior of "glazing" tools (all painting tools except OIL_AND_ACRYLIC
), color blending and mixing works differently, closer to how OIL_AND_ACRYLIC
tool works. (Implemented since Rebelle 5)
For more details about how the final brush color is computed, see the POINTER_MOVE event.
Example:
{
"event_type": "SET_BRUSH_COLOR",
"color": { "r": 255, "g": 0, "b": 0 }, // also fills multicolor texture
// since Rebelle 5:
"multicolor": {
"seed": 1234, // sets seed for randomly generated parameters, if not specified then new seed is generated using global random generator, this generator is only used if noise scale and offset aren’t set
"threshold": 0.5, // threshold used for noise, range 0-1
"scale_with_brush": true, // if set noise scale and offset will scale with brush size, note that without setting multicolor parameters again after changing brush size the multicolor texture will not be recomputed
"scale": { // sets noise scale, overridden by per color scale
// either exact scale
"x": 1.5,
"y": 0.75,
// or range for randomly generated scale
"x_range": {"min": 0.5, "max": 1.0}, // 0 < min < max
"y_range": {"min": 0.2, "max": 4.5}
},
"offset": { // sets noise offset, overridden by per color offset
// either exact value
"x": -320,
"y": 14,
// or range for randomly generated offset
"x_range": {"min": -300, "max": 300}, // min < max
"y_range": {"min": -0.5, "max": 0.5}
},
"multi_color_list": [
// list containing colors to be applied to multicolor texture, each color can also have a scale, offset, threshold and "scale_with_brush" specified, overriding their respective parameters above
{
"color": { "r": 255, "g": 0, "b": 0 },
"threshold": 0.1,
"offset": {
"x": 10,
"y": 5
},
"scale": {
"x": 0.2,
"y": 0.2
}
},
{
"color": { "r": 0, "g": 255, "b": 0 },
"scale": {
"x_range": {"min": 1.5, "max": 2.5},
"y_range": {"min": 1.0, "max": 5.0}
}
},
{
"color": { "r": 0, "g": 0, "b": 255 },
"scale_with_brush": false,
"threshold": 0.8,
"offset": {
"x": -10,
"y": 320
}
},
{
"color": { "r": 255, "g": 0, "b": 255 }
}
]
}
}
SET_CLONE_PICK_POS
Sets source position for clone tool, same as holding alt key and clicking on canvas with clone tool active. Needs to be set before the first stroke with the clone tool.
Example:
{
"event_type": "SET_CLONE_PICK_POS",
"pos": {
"x": 500,
"y": 500
}
}
SET_RANDOM_SEED
Sets a seed for the random generator used in Rebelle. Needed when you need to render your JSON file multiple times and always get the same result. (Implemented since Rebelle 5)
Example:
{
"event_type": "SET_RANDOM_SEED",
"seed": 12345 // unsigned int
}
SET_PIGMENTS
Enables or disables Pigments color mixing (Implemented since Rebelle 5)
Example:
{
"event_type": "SET_PIGMENTS",
"enabled": true // bool
}