├── .devcontainer
├── Dockerfile
└── devcontainer.json
├── .github
└── workflows
│ ├── pages.yml
│ ├── release.yml
│ └── test.yml
├── .gitignore
├── CONTRIBUTING.md
├── COPYING
├── Makefile
├── README.md
├── catalog-info.yaml
├── codemirror
├── editor.js
├── package.json
└── rollup.config.js
├── docs
├── Introduction.md
├── advanced_interactions.md
├── assets.md
├── breakdown
│ ├── bezier.md
│ ├── bouncy_ball.md
│ ├── images
│ │ └── builder
│ │ │ ├── adding_shapes.png
│ │ │ ├── adding_shapes.xml
│ │ │ ├── animation.png
│ │ │ ├── animation.xml
│ │ │ ├── animation_out_point.png
│ │ │ ├── basic_properties.xml
│ │ │ ├── final.xml
│ │ │ ├── layer_out_point.png
│ │ │ ├── more_props.png
│ │ │ ├── setting_up.png
│ │ │ ├── setting_up.xml
│ │ │ ├── shape_position.png
│ │ │ ├── star.png
│ │ │ └── star.xml
│ ├── lottie_from_scratch.md
│ └── precomps.md
├── compat.md
├── composition.md
├── constants.md
├── effects.md
├── expressions.md
├── helpers.md
├── index.md
├── layers.md
├── playground
│ ├── builder.md
│ └── json_editor.md
├── properties.md
├── rendering.md
├── schema.md
├── scripts
│ ├── editor.bundle.js
│ ├── explain_worker.js
│ ├── json_editor.js
│ ├── lottie_bezier.js
│ ├── lottie_blockly.js
│ ├── lottie_explain.js
│ ├── lottie_matrix.js
│ ├── lottie_raw_utils.js
│ ├── playground_data.js
│ ├── simple_shader.js
│ └── value_editors.js
├── shapes.md
├── static
│ ├── examples
│ │ ├── 3d_layers.json
│ │ ├── 3d_layers_animation.json
│ │ ├── 3d_parenting.json
│ │ ├── auto_orient.json
│ │ ├── bezier.json
│ │ ├── bezier_expression.json
│ │ ├── blend_mode.json
│ │ ├── blep.png
│ │ ├── bouncy_ball.json
│ │ ├── camera.json
│ │ ├── easing.json
│ │ ├── effects-blur.json
│ │ ├── effects-bulge.json
│ │ ├── effects-fill.json
│ │ ├── effects-matte3-image.json
│ │ ├── effects-matte3.json
│ │ ├── effects-prolevels.json
│ │ ├── effects-shadow.json
│ │ ├── effects-stroke.json
│ │ ├── effects-tint.json
│ │ ├── effects-tritone.json
│ │ ├── effects-wave.json
│ │ ├── ellipse.json
│ │ ├── fill.json
│ │ ├── font-css.json
│ │ ├── font-local.json
│ │ ├── font-url.json
│ │ ├── fractal.json
│ │ ├── gradient-stroke.json
│ │ ├── gradient.json
│ │ ├── image.json
│ │ ├── image_animated.json
│ │ ├── layer_order.json
│ │ ├── layers-solid.json
│ │ ├── mask.json
│ │ ├── matte.json
│ │ ├── offset-path.json
│ │ ├── parenting.json
│ │ ├── precomp
│ │ │ ├── circle.json
│ │ │ ├── star-circle.json
│ │ │ ├── star-comp.json
│ │ │ ├── star-nocomp.json
│ │ │ └── star-splosion.json
│ │ ├── pucker_bloat.json
│ │ ├── rectangle.json
│ │ ├── remapping.json
│ │ ├── repeater.json
│ │ ├── rounded_corners.json
│ │ ├── slots.json
│ │ ├── sound.mp3
│ │ ├── star.json
│ │ ├── stroke.json
│ │ ├── text-document.json
│ │ ├── text-selector.json
│ │ ├── text.json
│ │ ├── text_shape.png
│ │ ├── thumbs-up.png
│ │ ├── transform.json
│ │ ├── trim_path.json
│ │ └── zig-zag.json
│ ├── expressions.json
│ └── expressions.schema.json
├── style
│ ├── editor.css
│ ├── lottie-theme.css
│ └── style.css
├── text.md
└── values.md
├── mkdocs.yml
├── requirements.txt
├── schema
├── assets
│ ├── all-assets.json
│ ├── asset.json
│ ├── data-source.json
│ ├── file-asset.json
│ ├── image.json
│ ├── precomposition.json
│ └── sound.json
├── composition
│ ├── animation.json
│ ├── composition.json
│ ├── metadata.json
│ ├── motion-blur.json
│ └── user-metadata.json
├── constants
│ ├── blend-mode.json
│ ├── composite.json
│ ├── fill-rule.json
│ ├── font-path-origin.json
│ ├── gradient-type.json
│ ├── line-cap.json
│ ├── line-join.json
│ ├── mask-mode.json
│ ├── matte-mode.json
│ ├── merge-mode.json
│ ├── shape-direction.json
│ ├── star-type.json
│ ├── stroke-dash-type.json
│ ├── text-based.json
│ ├── text-caps.json
│ ├── text-grouping.json
│ ├── text-justify.json
│ ├── text-range-units.json
│ ├── text-shape.json
│ └── trim-multiple-shapes.json
├── effect-values
│ ├── all-effect-values.json
│ ├── angle.json
│ ├── checkbox.json
│ ├── color.json
│ ├── drop-down.json
│ ├── effect-value.json
│ ├── ignored.json
│ ├── layer.json
│ ├── no-value.json
│ ├── point.json
│ └── slider.json
├── effects
│ ├── all-effects.json
│ ├── custom-effect.json
│ ├── displacement-map-effect.json
│ ├── drop-shadow-effect.json
│ ├── effect.json
│ ├── fill-effect.json
│ ├── gaussian-blur-effect.json
│ ├── matte3-effect.json
│ ├── mesh-warp-effect.json
│ ├── pro-levels-effect.json
│ ├── puppet-effect.json
│ ├── radial-wipe-effect.json
│ ├── spherize-effect.json
│ ├── stroke-effect.json
│ ├── tint-effect.json
│ ├── tritone-effect.json
│ ├── twirl-effect.json
│ └── wavy-effect.json
├── helpers
│ ├── marker.json
│ ├── mask.json
│ ├── slot.json
│ ├── slottable-object.json
│ ├── transform.json
│ └── visual-object.json
├── layers
│ ├── all-layers.json
│ ├── audio-layer.json
│ ├── audio-settings.json
│ ├── camera-layer.json
│ ├── data-layer.json
│ ├── image-layer.json
│ ├── layer.json
│ ├── null-layer.json
│ ├── precomposition-layer.json
│ ├── shape-layer.json
│ ├── solid-layer.json
│ ├── text-layer.json
│ ├── unknown-layer.json
│ └── visual-layer.json
├── properties
│ ├── base-keyframe.json
│ ├── bezier-keyframe.json
│ ├── bezier-property.json
│ ├── color-keyframe.json
│ ├── color-property.json
│ ├── easing-handle.json
│ ├── gradient-keyframe.json
│ ├── gradient-property.json
│ ├── gradient-stops.json
│ ├── position-keyframe.json
│ ├── position-property.json
│ ├── property.json
│ ├── scalar-property.json
│ ├── split-position.json
│ ├── splittable-position-property.json
│ ├── vector-keyframe.json
│ └── vector-property.json
├── root.json
├── shapes
│ ├── all-graphic-elements.json
│ ├── base-gradient.json
│ ├── base-stroke.json
│ ├── ellipse.json
│ ├── fill.json
│ ├── gradient-fill.json
│ ├── gradient-stroke.json
│ ├── graphic-element.json
│ ├── group.json
│ ├── merge.json
│ ├── modifier.json
│ ├── no-style.json
│ ├── offset-path.json
│ ├── path.json
│ ├── polystar.json
│ ├── pucker-bloat.json
│ ├── rectangle.json
│ ├── repeater-transform.json
│ ├── repeater.json
│ ├── rounded-corners.json
│ ├── shape-style.json
│ ├── shape.json
│ ├── stroke-dash.json
│ ├── stroke.json
│ ├── transform.json
│ ├── trim-path.json
│ ├── twist.json
│ ├── unknown-shape.json
│ └── zig-zag.json
├── styles
│ ├── all-layer-styles.json
│ ├── bevel-emboss-style.json
│ ├── color-overlay-style.json
│ ├── drop-shadow-style.json
│ ├── gradient-overlay-style.json
│ ├── inner-glow-style.json
│ ├── inner-shadow-style.json
│ ├── layer-style.json
│ ├── outer-glow-style.json
│ ├── satin-style.json
│ └── stroke-style.json
├── text
│ ├── animated-text-document.json
│ ├── character-data.json
│ ├── character-precomp.json
│ ├── character-shapes.json
│ ├── font-list.json
│ ├── font.json
│ ├── text-alignment-options.json
│ ├── text-data.json
│ ├── text-document-keyframe.json
│ ├── text-document.json
│ ├── text-follow-path.json
│ ├── text-range-selector.json
│ ├── text-range.json
│ └── text-style.json
└── values
│ ├── bezier.json
│ ├── color.json
│ ├── data-url.json
│ ├── gradient.json
│ ├── hexcolor.json
│ ├── int-boolean.json
│ └── vector.json
├── theme
├── base.html
├── fonts
│ ├── Karla-Bold.ttf
│ ├── Karla-Italic-VariableFont_wght.ttf
│ ├── Karla-VariableFont_wght.ttf
│ ├── Type-Ø-Tones-Arboria-Black.otf
│ └── Type-Ø-Tones-Arboria-Bold.otf
├── img
│ ├── LottieDocs.svg
│ ├── chevron-left.svg
│ ├── chevron-right.svg
│ ├── favicon.ico
│ ├── icon-right-arrow.svg
│ ├── icon-search.svg
│ ├── lf-logo-mini.svg
│ ├── logo-lottie.svg
│ ├── logo-react.svg
│ ├── logo-svelte.svg
│ └── vue-logo.svg
├── js
│ └── base.js
├── main.html
├── nav.html
└── toc.html
└── tools
├── bezier_test.html
├── effects-to-schema.py
├── expression_convert.py
├── generate-blockly.py
└── md_extensions.py
/.devcontainer/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM python:3.9
--------------------------------------------------------------------------------
/.devcontainer/devcontainer.json:
--------------------------------------------------------------------------------
1 | {
2 | "build": { "dockerfile": "Dockerfile" }
3 | }
--------------------------------------------------------------------------------
/.github/workflows/pages.yml:
--------------------------------------------------------------------------------
1 | name: Build Pages
2 | on:
3 | push:
4 | branches:
5 | - main
6 | workflow_dispatch:
7 | jobs:
8 | publish:
9 | runs-on: ubuntu-24.04
10 | steps:
11 | -
12 | name: Checkout
13 | uses: actions/checkout@v2
14 | -
15 | name: Setup
16 | run: |
17 | sudo apt update -q
18 | sudo apt install -yy python3 python3-pip python3-virtualenv make graphviz
19 | make install_dependencies
20 | -
21 | name: Docs
22 | run: |
23 | make docs
24 | -
25 | name: Validate
26 | run: |
27 | make validate
28 | make validate_links
29 | -
30 | name: Deploy to GitHub Pages
31 | if: success()
32 | uses: crazy-max/ghaction-github-pages@v2
33 | with:
34 | target_branch: gh-pages
35 | build_dir: site
36 | env:
37 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
38 |
--------------------------------------------------------------------------------
/.github/workflows/release.yml:
--------------------------------------------------------------------------------
1 | name: Release
2 |
3 | on:
4 | push:
5 | tags:
6 | - '*'
7 | branches:
8 | - main
9 |
10 | jobs:
11 | build:
12 | name: Publish Schema
13 | runs-on: ubuntu-24.04
14 | steps:
15 | -
16 | uses: actions/checkout@v2
17 | -
18 | name: Setup
19 | run: |
20 | sudo apt update -q
21 | sudo apt install -yy python3 python3-pip python3-virtualenv make graphviz
22 | make install_dependencies
23 | -
24 | name: Build
25 | run: |
26 | make lottie.schema.json
27 | -
28 | name: Upload Schema
29 | if: ${{ contains(github.ref, '/tags/') }}
30 | uses: softprops/action-gh-release@v1
31 | with:
32 | token: ${{ secrets.GITHUB_TOKEN }}
33 | files: docs/lottie.schema.json
34 | tag_name: ${{ github.ref }}
35 | overwrite: true
36 | -
37 | name: Upload Schema
38 | if: ${{ !contains(github.ref, '/tags/') }}
39 | uses: softprops/action-gh-release@v1
40 | with:
41 | token: ${{ secrets.GITHUB_TOKEN }}
42 | files: docs/lottie.schema.json
43 | tag_name: latest
44 | overwrite: true
45 |
--------------------------------------------------------------------------------
/.github/workflows/test.yml:
--------------------------------------------------------------------------------
1 | name: Test
2 | on: pull_request
3 | jobs:
4 | test:
5 | runs-on: ubuntu-24.04
6 | steps:
7 | -
8 | name: Checkout
9 | uses: actions/checkout@v2
10 | -
11 | name: Setup
12 | run: |
13 | sudo apt update -q
14 | sudo apt install -yy python3 python3-pip python3-virtualenv make graphviz
15 | make install_dependencies
16 | -
17 | name: Docs
18 | run: |
19 | make docs
20 | -
21 | name: Validate
22 | run: |
23 | make validate
24 | make validate_links
25 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | site/
2 | docs/lottie.schema.json
3 | docs/scripts/blockly_generated.js
4 | codemirror/node_modules/
5 | codemirror/package-lock.json
6 | docs/lottie.js
7 | tools/dist/
8 | tools/lottie_docs.egg-info/
9 | tools/lottie_docs/lottie.schema.json
10 |
--------------------------------------------------------------------------------
/Makefile:
--------------------------------------------------------------------------------
1 | # Executable names
2 | PIP ?= pip
3 | PYTHON ?= python
4 | MKDOCS ?= PYTHONPATH="$(SOURCE_DIR)/tools" mkdocs
5 |
6 | # Paths
7 | SOURCE_DIR = $(dir $(abspath $(lastword $(MAKEFILE_LIST))))
8 | OUTPUT_DIR ?= $(CURDIR)/site
9 | CANIUSE_DIR ?= $(SOURCE_DIR)/../caniuse/data
10 |
11 | .PHONY: all install_dependencies docs docs_serve lottie.schema.json validate validate_links, validate_caniuse
12 |
13 |
14 | all: docs
15 |
16 | lottie.schema.json:$(SOURCE_DIR)/docs/lottie.schema.json
17 |
18 | $(SOURCE_DIR)/docs/lottie.schema.json: $(wildcard $(SOURCE_DIR)/schema/**/*.json)
19 | schema-merge.py
20 |
21 | docs:$(SOURCE_DIR)/docs/lottie.schema.json
22 | docs:$(SOURCE_DIR)/docs/scripts/blockly_generated.js
23 | $(MKDOCS) build -f $(SOURCE_DIR)/mkdocs.yml -d $(OUTPUT_DIR)
24 |
25 | $(OUTPUT_DIR)/index.html:$(wildcard $(SOURCE_DIR)/docs/**/*)
26 | $(OUTPUT_DIR)/index.html:$(SOURCE_DIR)/docs/lottie.schema.json
27 | $(OUTPUT_DIR)/index.html:$(SOURCE_DIR)/tools/md_extensions.py
28 | $(OUTPUT_DIR)/index.html:docs
29 |
30 | docs_serve:$(SOURCE_DIR)/docs/lottie.schema.json
31 | $(MKDOCS) serve -f $(SOURCE_DIR)/mkdocs.yml
32 |
33 | install_dependencies:
34 | $(PIP) install -r $(SOURCE_DIR)/requirements.txt
35 |
36 | validate: $(SOURCE_DIR)/docs/lottie.schema.json
37 | schema-validate.py
38 |
39 |
40 | validate_links:$(OUTPUT_DIR)/index.html
41 | schema-validate.py --html $(OUTPUT_DIR) -i assets/file-asset -i effect-values/effect-value
42 |
43 | $(SOURCE_DIR)/docs/scripts/blockly_generated.js: $(SOURCE_DIR)/tools/generate-blockly.py
44 | $(SOURCE_DIR)/docs/scripts/blockly_generated.js: $(SOURCE_DIR)/docs/lottie.schema.json
45 | $(SOURCE_DIR)/tools/generate-blockly.py
46 |
47 | validate_caniuse: $(SOURCE_DIR)/docs/lottie.schema.json
48 | $(SOURCE_DIR)/tools/caniuse.py '$(CANIUSE_DIR)'
49 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | Lottie Documentation
2 | ====================
3 |
4 | This repository contains both human-readable and machine-readable documentation about the Lottie format
5 |
6 | The documentation is available online at https://lottiefiles.github.io/lottie-docs/
7 |
8 | License
9 | -------
10 |
11 | CC-BY 4.0
12 |
13 |
14 | Setting Up
15 | ----------
16 |
17 | This project uses `mkdocs` to generate the HTML pages from the documentation,
18 | and `pip` to install dependencies.
19 |
20 | It's recommended you install dependencies on some kind of virtual environment.
21 |
22 | Once you have your environment, you can run
23 |
24 | pip install requirements.txt
25 |
26 | or
27 |
28 | make install_dependencies
29 |
30 |
31 | Building the Docs
32 | -----------------
33 |
34 | You can use
35 |
36 | make
37 |
38 | To build the static HTML.
39 |
40 | During development, you might want to use
41 |
42 | make docs_serve
43 |
44 | Which spins up a local server to host the docs and automatically reloads when done
45 |
46 |
47 | Finding Unknown Features
48 | ------------------------
49 |
50 | You can run `./tools/unknown_features.js` and pass file names as arguments
51 | and it will print a summary of unknown features in the given files.
52 |
53 | Note that it requires modern versions of node and the compiled schema.
54 |
55 |
56 | Example with setup:
57 |
58 | # Build the schema
59 | make lottie.schema.json
60 |
61 | # Install newer node on python virtualenv
62 | pip install nodeenv
63 | nodeenv -p
64 |
65 | # Run on several files
66 | ./tools/unknown_features.js /my/lotties/*.json
67 |
--------------------------------------------------------------------------------
/catalog-info.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: backstage.io/v1alpha1
2 | kind: Component
3 | metadata:
4 | name: lottie-docs
5 | description: Documentation for the lottie file format
6 | annotations:
7 | github.com/project-slug: LottieFiles/lottie-docs
8 | lighthouse.com/website-url: https://lottiefiles.github.io/lottie-docs/
9 | spec:
10 | type: website
11 | lifecycle: production
12 | owner: rnd
13 |
--------------------------------------------------------------------------------
/codemirror/editor.js:
--------------------------------------------------------------------------------
1 | /*
2 | Generate bundle with
3 | node_modules/.bin/rollup -c
4 | */
5 | import {basicSetup} from "codemirror"
6 | export {javascript} from "@codemirror/lang-javascript"
7 | export {json, jsonParseLinter} from "@codemirror/lang-json"
8 | export {EditorState, StateField, StateEffect} from "@codemirror/state"
9 | export {undo, redo} from "@codemirror/commands"
10 | import {defaultKeymap, history, historyKeymap, indentWithTab, redo} from "@codemirror/commands"
11 | import {keymap, EditorView, Decoration} from "@codemirror/view"
12 | export {
13 | EditorView,
14 | WidgetType,
15 | Decoration,
16 | ViewPlugin,
17 | keymap,
18 | showTooltip,
19 | getPanel,
20 | showPanel
21 | } from "@codemirror/view"
22 | import {
23 | syntaxHighlighting,
24 | defaultHighlightStyle,
25 | indentUnit,
26 | HighlightStyle
27 | } from "@codemirror/language"
28 | export {ensureSyntaxTree, LanguageSupport} from "@codemirror/language"
29 | import {tags} from "@lezer/highlight"
30 | export {
31 | linter,
32 | lintGutter,
33 | lintKeymap,
34 | setDiagnostics,
35 | openLintPanel,
36 | nextDiagnostic,
37 | } from "@codemirror/lint";
38 | export {autocompletion, insertCompletionText} from "@codemirror/autocomplete";
39 | import {gotoLine} from "@codemirror/search";
40 | export {openSearchPanel, gotoLine} from "@codemirror/search";
41 |
42 |
43 |
44 | const myHighlightStyle = HighlightStyle.define([
45 | { tag: tags.propertyName, color: "#d14" },
46 | ]);
47 |
48 |
49 | export const default_extensions = [
50 | history(),
51 | keymap.of([
52 | {key: "Mod-g", scope: "editor", run: gotoLine, preventDefault: true},
53 | ...defaultKeymap,
54 | ...historyKeymap,
55 | indentWithTab,
56 | {linux: "Mod-Shift-z", run: redo, preventDefault: true},
57 | ]),
58 | basicSetup,
59 | syntaxHighlighting(defaultHighlightStyle),
60 | syntaxHighlighting(myHighlightStyle),
61 | indentUnit.of(" ")
62 | ];
63 |
64 | export function on_change(callback)
65 | {
66 | return EditorView.updateListener.of((update) =>
67 | {
68 | if (update.docChanged)
69 | callback(update);
70 | });
71 | }
72 |
--------------------------------------------------------------------------------
/codemirror/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "dependencies": {
3 | "@codemirror/lang-javascript": "^6.0.0",
4 | "@codemirror/lang-json": "^6.0.0",
5 | "@rollup/plugin-node-resolve": "^13.3.0",
6 | "codemirror": "^6.0.0",
7 | "rollup": "^2.75.7"
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/codemirror/rollup.config.js:
--------------------------------------------------------------------------------
1 | import {nodeResolve} from "@rollup/plugin-node-resolve"
2 | export default {
3 | input: "./editor.js",
4 | output: {
5 | file: "../docs/scripts/editor.bundle.js",
6 | format: "umd",
7 | name: "CodeMirrorWrapper",
8 | },
9 | plugins: [nodeResolve()]
10 | }
11 |
--------------------------------------------------------------------------------
/docs/assets.md:
--------------------------------------------------------------------------------
1 | # Assets
2 |
3 | Assets are usually referenced by [layers](layers.md) of the appropriate type.
4 |
5 |
Asset
6 |
7 | {schema_string:assets/asset/description}
8 |
9 | {schema_object:assets/asset}
10 |
11 |
12 | ### Image
13 |
14 | Represents a (static) image
15 |
16 | {schema_object:assets/image}
17 |
18 | If the image is embedded, `u` is empty and `p` contains a base64-encoded data url:
19 |
20 | ```json
21 | {
22 | "id": "my image",
23 | "h": 512,
24 | "w": 512,
25 | "e": 1,
26 | "u": "",
27 | "p": "data:image/png;base64,..."
28 | }
29 | ```
30 |
31 | If the image is not embedded,
32 | `u` will contain the path to the directory containing the image
33 | and `p` will have the filename.
34 |
35 | So for example if you want to store the image at `/path/to/images/image.png`,
36 | the asset will look something like this:
37 |
38 | ```json
39 | {
40 | "id": "my image",
41 | "h": 512,
42 | "w": 512,
43 | "e": 0,
44 | "u": "/path/to/images/",
45 | "p": "image.png"
46 | }
47 | ```
48 |
49 | It works similarly for external images.
50 | If you want to store the image at `https://example.com/images/image.png`, you'd have:
51 |
52 | ```json
53 | {
54 | "id": "my image",
55 | "h": 512,
56 | "w": 512,
57 | "e": 0,
58 | "u": "https://example.com/images/",
59 | "p": "image.png"
60 | }
61 | ```
62 |
63 | ### Sound
64 |
65 | Similar to [Image](#image) but for audio files.
66 |
67 | {schema_object:assets/sound}
68 |
69 |
70 | ### Precomposition
71 |
72 | You can think of precompositions as self-contained animation within the
73 | main animation file that can be referenced using [precomp layers](layers.md#precomposition-layer).
74 |
75 | Within a precomposition you can have precomp layers showing other precompositions,
76 | as long as you don't create a dependency cycle.
77 |
78 | You can find more details in the [Precompositions](breakdown/precomps.md) page.
79 |
80 | {schema_object:assets/precomposition}
81 |
82 | Follows a rather extreme example, that uses precompositions inside precompositions to generate a fractal:
83 |
84 | {lottie src="static/examples/fractal.json"}
85 |
86 |
87 | ### Data Source
88 |
89 | Points to a JSON file for data.
90 |
91 | {schema_object:assets/data-source}
92 |
--------------------------------------------------------------------------------
/docs/breakdown/images/builder/adding_shapes.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LottieFiles/lottie-docs/19c88803c86a7832305af661c05a6e8496d751f7/docs/breakdown/images/builder/adding_shapes.png
--------------------------------------------------------------------------------
/docs/breakdown/images/builder/animation.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LottieFiles/lottie-docs/19c88803c86a7832305af661c05a6e8496d751f7/docs/breakdown/images/builder/animation.png
--------------------------------------------------------------------------------
/docs/breakdown/images/builder/animation_out_point.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LottieFiles/lottie-docs/19c88803c86a7832305af661c05a6e8496d751f7/docs/breakdown/images/builder/animation_out_point.png
--------------------------------------------------------------------------------
/docs/breakdown/images/builder/layer_out_point.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LottieFiles/lottie-docs/19c88803c86a7832305af661c05a6e8496d751f7/docs/breakdown/images/builder/layer_out_point.png
--------------------------------------------------------------------------------
/docs/breakdown/images/builder/more_props.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LottieFiles/lottie-docs/19c88803c86a7832305af661c05a6e8496d751f7/docs/breakdown/images/builder/more_props.png
--------------------------------------------------------------------------------
/docs/breakdown/images/builder/setting_up.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LottieFiles/lottie-docs/19c88803c86a7832305af661c05a6e8496d751f7/docs/breakdown/images/builder/setting_up.png
--------------------------------------------------------------------------------
/docs/breakdown/images/builder/setting_up.xml:
--------------------------------------------------------------------------------
1 | 60 0 60 512 512 FALSE 4 FALSE FALSE FALSE 0 60 0 FALSE FALSE
2 |
--------------------------------------------------------------------------------
/docs/breakdown/images/builder/shape_position.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LottieFiles/lottie-docs/19c88803c86a7832305af661c05a6e8496d751f7/docs/breakdown/images/builder/shape_position.png
--------------------------------------------------------------------------------
/docs/breakdown/images/builder/star.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LottieFiles/lottie-docs/19c88803c86a7832305af661c05a6e8496d751f7/docs/breakdown/images/builder/star.png
--------------------------------------------------------------------------------
/docs/compat.md:
--------------------------------------------------------------------------------
1 | # Compatibility with older versions
2 |
3 | This page describes breaking changes that have been introduced over time.
4 |
5 | You'd need to check `v` from {link:composition/animation} to see the
6 | the lottie is so old to need to worry about these.
7 |
8 | The code examples are just for illustrative purposes and are not to be
9 | taken as a complete conversion code.
10 |
11 | ## [0,255] Colors
12 |
13 | Until `v` 4.1.9.
14 |
15 | Modern Lotties have {link:values/color:color} components in the [0, 1] range.
16 | Older ones have components in the [0, 255] range.
17 |
18 | Fix: Divide all color components by 255.
19 |
20 | ## Static text document
21 |
22 | Until `v` 4.4.14.
23 |
24 | In {link:text/text-data}, `d` was not animated.
25 |
26 | Fix: Wrap into an animated property
27 |
28 | `text_layer.t.d = {"a": 0, "k": text_layer.t.d}`
29 |
30 | ## Shape closing
31 |
32 | Until `v` 4.4.18.
33 |
34 | {link:shapes/path} objects had a boolean `closed` property and `c` was not
35 | present in the bezier data.
36 |
37 | Similarly, {link:helpers/mask} had `cl` that worked the same way.
38 |
39 | Fix: For each {link:shapes/path}, update all the keyframes
40 | (or the non-animated value) of `ks`.
41 | Do the same to fix `pt` in each {link:helpers/mask}.
42 |
43 | `shape.ks.k.c = shape.closed ? 1 : 0`
44 |
45 | ## Old keyframe style
46 |
47 | Until `v` 5.0.0 (?).
48 |
49 | {link:properties/base-keyframe:Keyframes} had an `e` property that specified
50 | the end value for that keyframe (`s` marking the start value),
51 | and the last keyframe would not have `s`.
52 |
53 | Fix: Ignore all the `e` in keyframes, but copy the `e` from the keyframe
54 | before last into the last keyframe.
55 |
56 | `keyframes[keyframes.length - 1].s = keyframes[keyframes.length - 2].e`
57 |
58 |
59 |
60 | ## Static text layer properties
61 |
62 | Until `v` 5.7.15.
63 |
64 | In {link:text/text-follow-path} properties `r`, `a`, and `p` were
65 | plain numbers instead of animated properties.
66 |
67 | Fix: Wrap all of those into animated properties
68 |
69 | `text_layer.t.p.a + {"a": 0, "k": text_layer.t.p.a}`
70 |
71 |
--------------------------------------------------------------------------------
/docs/composition.md:
--------------------------------------------------------------------------------
1 | # Animation
2 |
3 | This is the top-level JSON object, describing the document, layers, assets, etc.
4 |
5 | The size of the canvas is determined by `w` and `h`. Duration is expressed in frames with `op`, and the framerate is in `fr`.
6 |
7 | Most of the contents are in [`layers`](layers.md) and [`assets`](assets.md).
8 |
9 | {schema_object:composition/animation}
10 |
11 |
12 | Composition
13 |
14 | {schema_string:composition/composition/description}
15 |
16 | {schema_object:composition/composition}
17 |
18 |
19 | ## Metadata
20 |
21 | Some (but not all) lottie files will have a metadata object describing the
22 | program used to create the file and other useful information:
23 |
24 | ### Document Metadata
25 |
26 | {schema_object:composition/metadata}
27 |
28 | ### User Metadata
29 |
30 | {schema_object:composition/user-metadata}
31 |
32 | ## Motion Blur
33 |
34 | {schema_object:composition/motion-blur}
35 |
--------------------------------------------------------------------------------
/docs/schema.md:
--------------------------------------------------------------------------------
1 | disable_toc: 1
2 |
3 | # JSON Schema
4 |
5 |
6 | This page shows a formatted version of the JSON schema, you can click on highlighted
7 | objects to get a link to that section of the schema. You can also click on `$ref`
8 | values to jump to the relevant section.
9 |
10 | If you want you can also view the [raw schema file](lottie.schema.json).
11 |
12 | {json_file:lottie.schema.json}
13 |
--------------------------------------------------------------------------------
/docs/scripts/explain_worker.js:
--------------------------------------------------------------------------------
1 | importScripts("lottie_explain.js");
2 |
3 | var schema = null;
4 |
5 | function critical_error(err)
6 | {
7 | postMessage({type: "error", message: err});
8 | }
9 |
10 | var requests = [
11 | fetch("/lottie-docs/lottie.schema.json"),
12 | fetch("/lottie-docs/static/expressions.json")
13 | ]
14 | Promise.all(requests)
15 | .then(responses => {
16 | Promise.all(responses.map(r => r.json()))
17 | .then(jsons => {
18 | schema = new SchemaData(jsons[0], jsons[1]);
19 | postMessage({
20 | type: "schema_loaded",
21 | schema: schema,
22 | expressions: jsons[1]
23 | });
24 | })
25 | .catch(critical_error);
26 | })
27 | .catch(critical_error);
28 |
29 | function process_lottie(json)
30 | {
31 | if ( schema === null )
32 | return;
33 |
34 | var validation = schema.root.validate(json);
35 | postMessage({
36 | type: "result",
37 | result: validation,
38 | });
39 | }
40 |
41 | onmessage = function(ev)
42 | {
43 | switch ( ev.data.type )
44 | {
45 | case "update":
46 | process_lottie(ev.data.lottie);
47 | return;
48 | }
49 | };
50 |
--------------------------------------------------------------------------------
/docs/scripts/playground_data.js:
--------------------------------------------------------------------------------
1 | function playground_set_data(data)
2 | {
3 | localStorage.setItem("playground-open", JSON.stringify(data, undefined, 4));
4 | }
5 |
6 | function playground_set_url(url)
7 | {
8 | localStorage.setItem("playground-open", url);
9 | }
10 |
11 | function playground_get_data()
12 | {
13 | var data = localStorage.getItem("playground-open");
14 | localStorage.removeItem("playground-open");
15 | if ( data )
16 | return data;
17 | return null;
18 | }
19 |
--------------------------------------------------------------------------------
/docs/static/examples/blep.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LottieFiles/lottie-docs/19c88803c86a7832305af661c05a6e8496d751f7/docs/static/examples/blep.png
--------------------------------------------------------------------------------
/docs/static/examples/image.json:
--------------------------------------------------------------------------------
1 | {
2 | "v": "5.5.2",
3 | "fr": 60,
4 | "ip": 0,
5 | "op": 60,
6 | "w": 512,
7 | "h": 512,
8 | "ddd": 0,
9 | "assets": [
10 | {
11 | "id": "blep",
12 | "h": 512,
13 | "w": 512,
14 | "p": "/lottie-docs/static/examples/blep.png",
15 | "u": "",
16 | "e": 0
17 | }
18 | ],
19 | "layers": [
20 | {
21 | "nm": "foo",
22 | "mn": "bar",
23 | "ddd": 0,
24 | "ty": 2,
25 | "sr": 1,
26 | "ks": {
27 | "a": {
28 | "k": [
29 | 256,
30 | 256
31 | ],
32 | "a": 0
33 | },
34 | "p": {
35 | "k": [
36 | 256,
37 | 256
38 | ],
39 | "a": 0
40 | },
41 | "s": {
42 | "k": [
43 | 100,
44 | 100
45 | ],
46 | "a": 0
47 | },
48 | "r": {
49 | "k": 0,
50 | "a": 0
51 | },
52 | "o": {
53 | "k": 100,
54 | "a": 0
55 | },
56 | "sk": {
57 | "k": 0,
58 | "a": 0
59 | },
60 | "sa": {
61 | "k": 0,
62 | "a": 0
63 | }
64 | },
65 | "ao": 0,
66 | "ip": 0,
67 | "op": 60,
68 | "st": 0,
69 | "bm": 0,
70 | "ind": 0,
71 | "refId": "blep"
72 | }
73 | ]
74 | }
75 |
--------------------------------------------------------------------------------
/docs/static/examples/layers-solid.json:
--------------------------------------------------------------------------------
1 | {
2 | "fr": 60,
3 | "ip": 0,
4 | "op": 60,
5 | "w": 512,
6 | "h": 512,
7 | "ddd": 0,
8 | "layers": [
9 | {
10 | "ty": 1,
11 | "ip": 0,
12 | "op": 60,
13 | "st": 0,
14 | "ks": {},
15 | "sc": "#ff0000",
16 | "sh": 512,
17 | "sw": 512
18 | }
19 | ]
20 | }
21 |
--------------------------------------------------------------------------------
/docs/static/examples/sound.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LottieFiles/lottie-docs/19c88803c86a7832305af661c05a6e8496d751f7/docs/static/examples/sound.mp3
--------------------------------------------------------------------------------
/docs/static/examples/text-document.json:
--------------------------------------------------------------------------------
1 | {
2 | "v": "5.5.2",
3 | "fr": 60,
4 | "ip": 0,
5 | "op": 120,
6 | "w": 300,
7 | "h": 100,
8 | "ddd": 0,
9 | "assets": [],
10 | "fonts": {
11 | "list": [
12 | {
13 | "fPath": "https://fonts.gstatic.com/s/ubuntu/v15/4iCp6KVjbNBYlgoKejZftWyI.ttf",
14 | "fFamily": "Ubuntu",
15 | "fStyle": "Light Italic",
16 | "fName": "Ubuntu Light Italic",
17 | "origin": 3
18 | }
19 | ]
20 | },
21 | "layers": [
22 | {
23 | "nm": "Text Layer",
24 | "ty": 5,
25 | "sr": 1,
26 | "ks": {
27 | "p": {
28 | "k": [
29 | 5,
30 | 80
31 | ],
32 | "a": 0
33 | }
34 | },
35 | "ip": 0,
36 | "op": 120,
37 | "st": 0,
38 | "t": {
39 | "a": [],
40 | "d": {
41 | "k": [
42 | {
43 | "s": {
44 | "f": "Ubuntu Light Italic",
45 | "fc": [
46 | 0,
47 | 0,
48 | 0
49 | ],
50 | "s": 100,
51 | "t": "Hello",
52 | "j": 0
53 | },
54 | "t": 0
55 | }
56 | ]
57 | },
58 | "m": {
59 | "a": {
60 | "k": [
61 | 0,
62 | 0
63 | ],
64 | "a": 0
65 | }
66 | },
67 | "p": {}
68 | }
69 | }
70 | ]
71 | }
72 |
73 |
74 |
75 |
76 |
--------------------------------------------------------------------------------
/docs/static/examples/text_shape.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LottieFiles/lottie-docs/19c88803c86a7832305af661c05a6e8496d751f7/docs/static/examples/text_shape.png
--------------------------------------------------------------------------------
/docs/static/examples/thumbs-up.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LottieFiles/lottie-docs/19c88803c86a7832305af661c05a6e8496d751f7/docs/static/examples/thumbs-up.png
--------------------------------------------------------------------------------
/mkdocs.yml:
--------------------------------------------------------------------------------
1 | site_name: Lottie Docs
2 | site_description: Documentation for the Lottie animation format
3 | copyright: Copyright (C) 2021-2022
4 | extra:
5 | lottie_player_version: 5.12.2
6 | theme:
7 | name: cinder
8 | custom_dir: theme
9 | highlightjs: false
10 | repo_url: https://github.com/LottieFiles/lottie-docs
11 | edit_uri: https://github.com/LottieFiles/lottie-docs/edit/main/docs
12 | use_directory_urls: true
13 | site_url: https://lottiefiles.github.io/lottie-docs/
14 | google_analytics: ['G-DNP7J0G3W8', 'lottiefiles.github.io']
15 | markdown_extensions:
16 | - md_in_html
17 | - footnotes
18 | - attr_list
19 | - lottie_specs.markdown.lottie_markdown:
20 | docs_link_prefix: ""
21 | link_mapping:
22 | effect-values: effects
23 | styles: effects
24 | avoid_grabby_html:
25 | - lottie
26 | - lottie-playground
27 | - algorithm
28 | - shape_bezier_script
29 | - effect_shader_script
30 | - lottie_specs.markdown.latex_markdown
31 | - md_extensions
32 | extra_css:
33 | - /lottie-docs/style/style.css
34 | - /lottie-docs/style/lottie-theme.css
35 | plugins:
36 | - search
37 | - redirects:
38 | redirect_maps:
39 | "playground/explain.md": "playground/json_editor.md"
40 | "animation.md": "composition.md"
41 | "effect-values.md": "effects.md"
42 | "styles.md": "effects.md"
43 |
44 | nav:
45 | - "Home" : index.md
46 | - "Guide":
47 | - "Introduction" : Introduction.md
48 | - breakdown/bouncy_ball.md
49 | - breakdown/lottie_from_scratch.md
50 | - breakdown/bezier.md
51 | - breakdown/precomps.md
52 | - "Lottie Format":
53 | - values.md
54 | - properties.md
55 | - composition.md
56 | - layers.md
57 | - "Shapes": shapes.md
58 | - assets.md
59 | - helpers.md
60 | - effects.md
61 | - constants.md
62 | - text.md
63 | - expressions.md
64 | - compat.md
65 | - "Playground":
66 | - "Builder": playground/builder.md
67 | - "JSON Editor": playground/json_editor.md
68 | - "Advanced Concept":
69 | - rendering.md
70 | - schema.md
71 | - advanced_interactions.md
72 |
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | mkdocs
2 | mkdocs-cinder
3 | mkdocs-redirects
4 | git+https://github.com/bmcorser/fontawesome-markdown.git@master
5 | lxml
6 | lottie_specs[docs] @ git+https://github.com/lottie/lottie-specs-python.git
7 |
--------------------------------------------------------------------------------
/schema/assets/all-assets.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "oneOf": [
4 | {
5 | "$ref": "#/$defs/assets/precomposition"
6 | },
7 | {
8 | "$ref": "#/$defs/assets/image"
9 | },
10 | {
11 | "$ref": "#/$defs/assets/data-source"
12 | },
13 | {
14 | "$ref": "#/$defs/assets/sound"
15 | }
16 | ]
17 | }
18 |
--------------------------------------------------------------------------------
/schema/assets/asset.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Asset",
5 | "allOf": [
6 | {
7 | "$ref": "#/$defs/helpers/visual-object"
8 | },
9 | {
10 | "type": "object",
11 | "properties": {
12 | "id": {
13 | "title": "ID",
14 | "description": "Unique identifier used by layers when referencing this asset",
15 | "type": "string"
16 | }
17 | },
18 | "required": ["id"]
19 | }
20 | ]
21 | }
22 |
--------------------------------------------------------------------------------
/schema/assets/data-source.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Data source",
5 | "description": "External data source, usually a JSON file",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/assets/file-asset"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "t": {
14 | "title": "Type",
15 | "type": "integer",
16 | "const": 3
17 | }
18 | },
19 | "required": ["t"]
20 | }
21 | ]
22 | }
23 |
24 |
--------------------------------------------------------------------------------
/schema/assets/file-asset.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "File Asset",
5 | "description": "Asset referencing a file",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/assets/asset"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "p": {
14 | "title": "File Name",
15 | "description": "Name of the asset file or a data url",
16 | "type": "string"
17 | },
18 | "u": {
19 | "title": "File Path",
20 | "description": "Path to the asset file",
21 | "type": "string"
22 | },
23 | "e": {
24 | "title": "Embedded",
25 | "description": "If '1', 'p' is a Data URL",
26 | "$ref": "#/$defs/values/int-boolean"
27 | }
28 | },
29 | "if": {
30 | "properties": {
31 | "e": {"const": 1}
32 | },
33 | "required": ["e"]
34 | },
35 | "then": {
36 | "properties": {
37 | "p": {"$ref": "#/$defs/values/data-url"}
38 | }
39 | }
40 | }
41 | ]
42 | }
43 |
44 |
45 |
--------------------------------------------------------------------------------
/schema/assets/image.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Image",
5 | "description": "Asset containing an image that can be referenced by layers.",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/assets/file-asset"
9 | },
10 | {
11 | "$ref": "#/$defs/helpers/slottable-object"
12 | },
13 | {
14 | "type": "object",
15 | "properties": {
16 | "w": {
17 | "title": "Width",
18 | "description": "Width of the image",
19 | "type": "number"
20 | },
21 | "h": {
22 | "title": "Height",
23 | "description": "Height of the image",
24 | "type": "number"
25 | },
26 | "t": {
27 | "title": "Type",
28 | "description": "Marks as part of an image sequence if present",
29 | "type": "string",
30 | "const": "seq"
31 | }
32 | },
33 | "if": {
34 | "required": ["sid"]
35 | },
36 | "else": {
37 | "required": ["w", "h", "p"]
38 | }
39 | }
40 | ]
41 | }
42 |
--------------------------------------------------------------------------------
/schema/assets/precomposition.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Precomposition",
5 | "description": "Asset containing a composition that can be referenced by layers.",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/assets/asset"
9 | },
10 | {
11 | "$ref": "#/$defs/composition/composition"
12 | },
13 | {
14 | "type": "object",
15 | "properties": {
16 | "fr": {
17 | "title": "Framerate",
18 | "description": "Framerate in frames per second",
19 | "type": "number"
20 | },
21 | "xt": {
22 | "title": "Extra",
23 | "description": "Extra composition",
24 | "$ref": "#/$defs/values/int-boolean",
25 | "default": 0
26 | }
27 | }
28 | }
29 | ]
30 | }
31 |
--------------------------------------------------------------------------------
/schema/assets/sound.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Sound",
5 | "description": "External sound",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/assets/file-asset"
9 | }
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/schema/composition/composition.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Composition",
5 | "description": "An object that contains a list of layers",
6 | "properties": {
7 | "layers": {
8 | "title": "Layers",
9 | "type": "array",
10 | "items": {
11 | "$ref": "#/$defs/layers/all-layers"
12 | }
13 | }
14 | },
15 | "required": ["layers"]
16 | }
17 |
--------------------------------------------------------------------------------
/schema/composition/metadata.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Metadata",
5 | "description": "Document metadata",
6 | "properties": {
7 | "a": {
8 | "title": "Author",
9 | "type": "string"
10 | },
11 | "d": {
12 | "title": "Description",
13 | "type": "string"
14 | },
15 | "tc": {
16 | "title": "Theme Color",
17 | "type": "string"
18 | },
19 | "g": {
20 | "title": "Generator",
21 | "description": "Software used to generate the file",
22 | "type": "string"
23 | }
24 | },
25 | "anyOf": [
26 | {
27 | "properties": {
28 | "k": {
29 | "title": "Keywords",
30 | "type": "array",
31 | "items": {
32 | "type": "string"
33 | }
34 | }
35 | }
36 | },
37 | {
38 | "properties": {
39 | "k": {
40 | "title": "Keywords",
41 | "type": "string"
42 | }
43 | }
44 | }
45 | ]
46 | }
47 |
--------------------------------------------------------------------------------
/schema/composition/motion-blur.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Motion Blur",
5 | "description": "Motion blur settings",
6 | "properties": {
7 | "sa": {
8 | "title": "Shutter Angle",
9 | "description": "Angle in degrees",
10 | "type": "number"
11 | },
12 | "sp": {
13 | "title": "Shutter Phase",
14 | "description": "Angle in degrees",
15 | "type": "number"
16 | },
17 | "spf": {
18 | "title": "Samples per Frame",
19 | "type": "number"
20 | },
21 | "asl": {
22 | "title": "Adaptive Sample Limit",
23 | "type": "number"
24 | }
25 | }
26 | }
27 |
28 |
--------------------------------------------------------------------------------
/schema/composition/user-metadata.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "User Metadata",
5 | "description": "User-defined metadata",
6 | "properties": {
7 | "filename": {
8 | "title": "Filename",
9 | "type": "string"
10 | },
11 | "customProps": {
12 | "title": "Custom Properties",
13 | "type": "object"
14 | }
15 | }
16 | }
17 |
18 |
--------------------------------------------------------------------------------
/schema/constants/blend-mode.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "integer",
4 | "title": "Blend Mode",
5 | "description": "Layer and shape blend mode",
6 | "oneOf": [
7 | {
8 | "title": "Normal",
9 | "const": 0
10 | },
11 | {
12 | "title": "Multiply",
13 | "const": 1
14 | },
15 | {
16 | "title": "Screen",
17 | "const": 2
18 | },
19 | {
20 | "title": "Overlay",
21 | "const": 3
22 | },
23 | {
24 | "title": "Darken",
25 | "const": 4
26 | },
27 | {
28 | "title": "Lighten",
29 | "const": 5
30 | },
31 | {
32 | "title": "Color Dodge",
33 | "const": 6
34 | },
35 | {
36 | "title": "Color Burn",
37 | "const": 7
38 | },
39 | {
40 | "title": "Hard Light",
41 | "const": 8
42 | },
43 | {
44 | "title": "Soft Light",
45 | "const": 9
46 | },
47 | {
48 | "title": "Difference",
49 | "const": 10
50 | },
51 | {
52 | "title": "Exclusion",
53 | "const": 11
54 | },
55 | {
56 | "title": "Hue",
57 | "const": 12
58 | },
59 | {
60 | "title": "Saturation",
61 | "const": 13
62 | },
63 | {
64 | "title": "Color",
65 | "const": 14
66 | },
67 | {
68 | "title": "Luminosity",
69 | "const": 15
70 | },
71 | {
72 | "title": "Add",
73 | "const": 16
74 | },
75 | {
76 | "title": "Hard Mix",
77 | "const": 17
78 | }
79 | ]
80 | }
81 |
--------------------------------------------------------------------------------
/schema/constants/composite.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "integer",
4 | "title": "Composite",
5 | "description": "How to stack copies in a repeater",
6 | "oneOf": [
7 | {
8 | "title": "Below",
9 | "description": "Subsequent copies are added underneath the previous ones.",
10 | "const": 1
11 | },
12 | {
13 | "title": "Above",
14 | "description": "Subsequent copies are added on top of the previous ones.",
15 | "const": 2
16 | }
17 | ]
18 | }
19 |
--------------------------------------------------------------------------------
/schema/constants/fill-rule.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "integer",
4 | "title": "Fill Rule",
5 | "description": "Rule used to handle multiple shapes rendered with the same fill object",
6 | "oneOf": [
7 | {
8 | "title": "Non Zero",
9 | "description": "Everything is colored (You can think of this as an OR)",
10 | "const": 1
11 | },
12 | {
13 | "title": "Even Odd",
14 | "description": "Colored based on intersections and path direction, can be used to create \"holes\"",
15 | "const": 2
16 | }
17 | ]
18 | }
19 |
--------------------------------------------------------------------------------
/schema/constants/font-path-origin.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "integer",
4 | "title": "Font Path Origin",
5 | "description": "",
6 | "oneOf": [
7 | {
8 | "title": "Local",
9 | "const": 0
10 | },
11 | {
12 | "title": "Css Url",
13 | "const": 1
14 | },
15 | {
16 | "title": "Script Url",
17 | "const": 2
18 | },
19 | {
20 | "title": "Font Url",
21 | "const": 3
22 | }
23 | ]
24 | }
25 |
--------------------------------------------------------------------------------
/schema/constants/gradient-type.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "integer",
4 | "title": "Gradient Type",
5 | "description": "Whether a Gradient is a linear or radial.",
6 | "oneOf": [
7 | {
8 | "title": "Linear",
9 | "description": "Colors transition in a single linear direction.",
10 | "const": 1
11 | },
12 | {
13 | "title": "Radial",
14 | "description": "Colors transition outward from a center point.",
15 | "const": 2
16 | }
17 | ]
18 | }
19 |
--------------------------------------------------------------------------------
/schema/constants/line-cap.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "integer",
4 | "title": "Line Cap",
5 | "description": "Style at the end of a stoked line",
6 | "oneOf": [
7 | {
8 | "title": "Butt",
9 | "const": 1
10 | },
11 | {
12 | "title": "Round",
13 | "const": 2
14 | },
15 | {
16 | "title": "Square",
17 | "const": 3
18 | }
19 | ]
20 | }
21 |
--------------------------------------------------------------------------------
/schema/constants/line-join.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "integer",
4 | "title": "Line Join",
5 | "description": "Style at a sharp corner of a stoked line",
6 | "oneOf": [
7 | {
8 | "title": "Miter",
9 | "const": 1
10 | },
11 | {
12 | "title": "Round",
13 | "const": 2
14 | },
15 | {
16 | "title": "Bevel",
17 | "const": 3
18 | }
19 | ]
20 | }
21 |
--------------------------------------------------------------------------------
/schema/constants/mask-mode.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "string",
4 | "title": "Mask Mode",
5 | "description": "Describes how a mask interacts (blends) with the preceding masks in the stack.",
6 | "oneOf": [
7 | {
8 | "title": "None",
9 | "const": "n",
10 | "description": "The mask is ignored."
11 | },
12 | {
13 | "title": "Add",
14 | "const": "a",
15 | "description": "Mask coverage is added (Normal blending)."
16 | },
17 | {
18 | "title": "Subtract",
19 | "const": "s",
20 | "description": "Mask coverage is subtracted (Subtract blending)."
21 | },
22 | {
23 | "title": "Intersect",
24 | "const": "i",
25 | "description": "Mask coverage is intersected (Source-In blending)."
26 | },
27 | {
28 | "title": "Lighten",
29 | "const": "l"
30 | },
31 | {
32 | "title": "Darken",
33 | "const": "d"
34 | },
35 | {
36 | "title": "Difference",
37 | "const": "f"
38 | }
39 | ]
40 | }
41 |
--------------------------------------------------------------------------------
/schema/constants/matte-mode.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "integer",
4 | "title": "Matte Mode",
5 | "description": "How a layer should mask another layer",
6 | "oneOf": [
7 | {
8 | "title": "Normal",
9 | "description": "The layer is not used as a track matte",
10 | "const": 0
11 | },
12 | {
13 | "title": "Alpha",
14 | "description": "The masked layer opacity is modulated by the track matte layer opacity",
15 | "const": 1
16 | },
17 | {
18 | "title": "Inverted Alpha",
19 | "description": "The masked layer opacity is modulated by the inverted track matte layer opacity",
20 | "const": 2
21 | },
22 | {
23 | "title": "Luma",
24 | "description": "The masked layer opacity is modulated by the track matte layer luminance",
25 | "const": 3
26 | },
27 | {
28 | "title": "Inverted Luma",
29 | "description": "The masked layer opacity is modulated by the inverted track matte layer luminance",
30 | "const": 4
31 | }
32 | ]
33 | }
34 |
--------------------------------------------------------------------------------
/schema/constants/merge-mode.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "integer",
4 | "title": "Merge Mode",
5 | "description": "Boolean operation on shapes",
6 | "oneOf": [
7 | {
8 | "title": "Normal",
9 | "const": 1
10 | },
11 | {
12 | "title": "Add",
13 | "const": 2
14 | },
15 | {
16 | "title": "Subtract",
17 | "const": 3
18 | },
19 | {
20 | "title": "Intersect",
21 | "const": 4
22 | },
23 | {
24 | "title": "Exclude Intersections",
25 | "const": 5
26 | }
27 | ]
28 | }
29 |
30 |
--------------------------------------------------------------------------------
/schema/constants/shape-direction.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "integer",
4 | "title": "Shape Direction",
5 | "description": "Drawing direction of the shape curve, useful for trim path",
6 | "oneOf": [
7 | {
8 | "title": "Normal",
9 | "description": "Usually clockwise",
10 | "const": 1
11 | },
12 | {
13 | "title": "Reversed",
14 | "description": "Usually counter clockwise",
15 | "const": 3
16 | }
17 | ]
18 | }
19 |
--------------------------------------------------------------------------------
/schema/constants/star-type.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "integer",
4 | "title": "Star Type",
5 | "description": "Whether a PolyStar is a star or a polygon",
6 | "oneOf": [
7 | {
8 | "title": "Star",
9 | "const": 1
10 | },
11 | {
12 | "title": "Polygon",
13 | "const": 2
14 | }
15 | ]
16 | }
17 |
--------------------------------------------------------------------------------
/schema/constants/stroke-dash-type.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "string",
4 | "title": "Stroke Dash Type",
5 | "description": "Type of a dash item in a stroked line",
6 | "oneOf": [
7 | {
8 | "title": "Dash",
9 | "const": "d"
10 | },
11 | {
12 | "title": "Gap",
13 | "const": "g"
14 | },
15 | {
16 | "title": "Offset",
17 | "const": "o"
18 | }
19 | ]
20 | }
21 |
--------------------------------------------------------------------------------
/schema/constants/text-based.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "integer",
4 | "title": "Text Based",
5 | "description": "",
6 | "oneOf": [
7 | {
8 | "title": "Characters",
9 | "const": 1
10 | },
11 | {
12 | "title": "Character Excluding Spaces",
13 | "const": 2
14 | },
15 | {
16 | "title": "Words",
17 | "const": 3
18 | },
19 | {
20 | "title": "Lines",
21 | "const": 4
22 | }
23 | ]
24 | }
25 |
--------------------------------------------------------------------------------
/schema/constants/text-caps.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "integer",
4 | "title": "Text Caps",
5 | "oneOf": [
6 | {
7 | "title": "Regular",
8 | "const": 0
9 | },
10 | {
11 | "title": "All Caps",
12 | "const": 1
13 | },
14 | {
15 | "title": "Small Caps",
16 | "const": 2
17 | }
18 | ],
19 | "default": 0
20 | }
21 |
--------------------------------------------------------------------------------
/schema/constants/text-grouping.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "integer",
4 | "title": "Text Grouping",
5 | "description": "",
6 | "oneOf": [
7 | {
8 | "title": "Characters",
9 | "const": 1
10 | },
11 | {
12 | "title": "Word",
13 | "const": 2
14 | },
15 | {
16 | "title": "Line",
17 | "const": 3
18 | },
19 | {
20 | "title": "All",
21 | "const": 4
22 | }
23 | ]
24 | }
25 |
--------------------------------------------------------------------------------
/schema/constants/text-justify.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "integer",
4 | "title": "Text Justify",
5 | "description": "Text alignment / justification",
6 | "oneOf": [
7 | {
8 | "title": "Left",
9 | "const": 0
10 | },
11 | {
12 | "title": "Right",
13 | "const": 1
14 | },
15 | {
16 | "title": "Center",
17 | "const": 2
18 | },
19 | {
20 | "title": "Justify with Last Line Left",
21 | "const": 3
22 | },
23 | {
24 | "title": "Justify with Last Line Right",
25 | "const": 4
26 | },
27 | {
28 | "title": "Justify with Last Line Center",
29 | "const": 5
30 | },
31 | {
32 | "title": "Justify with Last Line Full",
33 | "const": 6
34 | }
35 | ]
36 | }
37 |
--------------------------------------------------------------------------------
/schema/constants/text-range-units.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "integer",
4 | "title": "Text Range Units",
5 | "description": "Unit type for a text selector",
6 | "oneOf": [
7 | {
8 | "title": "Percent",
9 | "const": 1
10 | },
11 | {
12 | "title": "Index",
13 | "const": 2
14 | }
15 | ]
16 | }
17 |
18 |
--------------------------------------------------------------------------------
/schema/constants/text-shape.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "integer",
4 | "title": "Text Shape",
5 | "description": "Defines the function used to determine the interpolating factor on a text range selector.",
6 | "oneOf": [
7 | {
8 | "title": "Square",
9 | "const": 1
10 | },
11 | {
12 | "title": "Ramp Up",
13 | "const": 2
14 | },
15 | {
16 | "title": "Ramp Down",
17 | "const": 3
18 | },
19 | {
20 | "title": "Triangle",
21 | "const": 4
22 | },
23 | {
24 | "title": "Round",
25 | "const": 5
26 | },
27 | {
28 | "title": "Smooth",
29 | "const": 6
30 | }
31 | ]
32 | }
33 |
--------------------------------------------------------------------------------
/schema/constants/trim-multiple-shapes.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "integer",
4 | "title": "Trim Multiple Shapes",
5 | "description": "How to handle multiple shapes in trim path",
6 | "oneOf": [
7 | {
8 | "title": "Parallel",
9 | "description": "All shapes apply the trim at the same time",
10 | "const": 1
11 | },
12 | {
13 | "title": "Sequential",
14 | "description": "Shapes are considered as a continuous sequence",
15 | "const": 2
16 | }
17 | ]
18 | }
19 |
--------------------------------------------------------------------------------
/schema/effect-values/all-effect-values.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "oneOf": [
4 | {"$ref": "#/$defs/effect-values/angle"},
5 | {"$ref": "#/$defs/effect-values/checkbox"},
6 | {"$ref": "#/$defs/effect-values/color"},
7 | {"$ref": "#/$defs/effect-values/drop-down"},
8 | {"$ref": "#/$defs/effect-values/ignored"},
9 | {"$ref": "#/$defs/effect-values/layer"},
10 | {"$ref": "#/$defs/effect-values/no-value"},
11 | {"$ref": "#/$defs/effect-values/point"},
12 | {"$ref": "#/$defs/effect-values/slider"}
13 | ]
14 | }
15 |
--------------------------------------------------------------------------------
/schema/effect-values/angle.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Effect Value Angle",
5 | "description": "",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/effect-values/effect-value"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "ty": {
14 | "title": "Type",
15 | "type": "integer",
16 | "const": 1
17 | },
18 | "v": {
19 | "title": "Value",
20 | "$ref": "#/$defs/properties/scalar-property"
21 | }
22 | },
23 | "required": [
24 | "ty"
25 | ]
26 | }
27 | ]
28 | }
29 |
--------------------------------------------------------------------------------
/schema/effect-values/checkbox.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Effect Value Checkbox",
5 | "description": "",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/effect-values/effect-value"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "ty": {
14 | "title": "Type",
15 | "type": "integer",
16 | "const": 4
17 | },
18 | "v": {
19 | "title": "Value",
20 | "$ref": "#/$defs/properties/scalar-property"
21 | }
22 | },
23 | "required": [
24 | "ty"
25 | ]
26 | }
27 | ]
28 | }
--------------------------------------------------------------------------------
/schema/effect-values/color.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Effect Value Color",
5 | "description": "",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/effect-values/effect-value"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "ty": {
14 | "title": "Type",
15 | "type": "integer",
16 | "const": 2
17 | },
18 | "v": {
19 | "title": "Value",
20 | "$ref": "#/$defs/properties/color-property"
21 | }
22 | },
23 | "required": [
24 | "ty"
25 | ]
26 | }
27 | ]
28 | }
--------------------------------------------------------------------------------
/schema/effect-values/drop-down.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Effect Value Drop Down",
5 | "description": "",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/effect-values/effect-value"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "ty": {
14 | "title": "Type",
15 | "type": "integer",
16 | "const": 7
17 | },
18 | "v": {
19 | "title": "Value",
20 | "$ref": "#/$defs/properties/scalar-property"
21 | }
22 | },
23 | "required": [
24 | "ty"
25 | ]
26 | }
27 | ]
28 | }
--------------------------------------------------------------------------------
/schema/effect-values/effect-value.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Effect Value",
5 | "description": "Value for an effect",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/helpers/visual-object"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "ix": {
14 | "title": "Effect Index",
15 | "type": "integer"
16 | },
17 | "ty": {
18 | "title": "Type",
19 | "type": "integer"
20 | }
21 | },
22 | "required": []
23 | }
24 | ]
25 | }
26 |
--------------------------------------------------------------------------------
/schema/effect-values/ignored.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Ignored Value",
5 | "description": "",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/effect-values/effect-value"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "ty": {
14 | "title": "Type",
15 | "type": "integer",
16 | "const": 6
17 | },
18 | "v": {
19 | "title": "Value",
20 | "type": "number",
21 | "default": 0
22 | }
23 | },
24 | "required": [
25 | "ty"
26 | ]
27 | }
28 | ]
29 | }
--------------------------------------------------------------------------------
/schema/effect-values/layer.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Effect Value Layer",
5 | "description": "",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/effect-values/effect-value"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "ty": {
14 | "title": "Type",
15 | "type": "integer",
16 | "const": 10
17 | },
18 | "v": {
19 | "title": "Value",
20 | "$ref": "#/$defs/properties/scalar-property"
21 | }
22 | },
23 | "required": [
24 | "ty"
25 | ]
26 | }
27 | ]
28 | }
--------------------------------------------------------------------------------
/schema/effect-values/no-value.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Effect No Value",
5 | "description": ""
6 | }
7 |
--------------------------------------------------------------------------------
/schema/effect-values/point.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Effect Value Point",
5 | "description": "",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/effect-values/effect-value"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "ty": {
14 | "title": "Type",
15 | "type": "integer",
16 | "const": 3
17 | },
18 | "v": {
19 | "title": "Value",
20 | "$ref": "#/$defs/properties/vector-property"
21 | }
22 | },
23 | "required": [
24 | "ty"
25 | ]
26 | }
27 | ]
28 | }
--------------------------------------------------------------------------------
/schema/effect-values/slider.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Effect Value Slider",
5 | "description": "",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/effect-values/effect-value"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "ty": {
14 | "title": "Type",
15 | "type": "integer",
16 | "const": 0
17 | },
18 | "v": {
19 | "title": "Value",
20 | "$ref": "#/$defs/properties/scalar-property"
21 | }
22 | },
23 | "required": [
24 | "ty"
25 | ]
26 | }
27 | ]
28 | }
--------------------------------------------------------------------------------
/schema/effects/all-effects.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "oneOf": [
4 | {"$ref": "#/$defs/effects/custom-effect"},
5 | {"$ref": "#/$defs/effects/displacement-map-effect"},
6 | {"$ref": "#/$defs/effects/drop-shadow-effect"},
7 | {"$ref": "#/$defs/effects/effect"},
8 | {"$ref": "#/$defs/effects/fill-effect"},
9 | {"$ref": "#/$defs/effects/gaussian-blur-effect"},
10 | {"$ref": "#/$defs/effects/matte3-effect"},
11 | {"$ref": "#/$defs/effects/mesh-warp-effect"},
12 | {"$ref": "#/$defs/effects/pro-levels-effect"},
13 | {"$ref": "#/$defs/effects/puppet-effect"},
14 | {"$ref": "#/$defs/effects/radial-wipe-effect"},
15 | {"$ref": "#/$defs/effects/spherize-effect"},
16 | {"$ref": "#/$defs/effects/stroke-effect"},
17 | {"$ref": "#/$defs/effects/tint-effect"},
18 | {"$ref": "#/$defs/effects/tritone-effect"},
19 | {"$ref": "#/$defs/effects/twirl-effect"},
20 | {"$ref": "#/$defs/effects/wavy-effect"}
21 | ]
22 | }
23 |
--------------------------------------------------------------------------------
/schema/effects/custom-effect.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Custom Effect",
5 | "description": "Some lottie files use `ty` = 5 for many different effects",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/effects/effect"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "ty": {
14 | "title": "Type",
15 | "type": "integer",
16 | "const": 5
17 | }
18 | },
19 | "required": [
20 | "ty"
21 | ]
22 | }
23 | ]
24 | }
25 |
--------------------------------------------------------------------------------
/schema/effects/displacement-map-effect.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Displacement Map Effect",
5 | "description": "",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/effects/effect"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "ty": {
14 | "title": "Type",
15 | "type": "integer",
16 | "const": 27
17 | },
18 | "ef": {
19 | "title": "Effect values",
20 | "type": "array",
21 | "prefixItems": [
22 | {
23 | "title": "Displacement Map Layer",
24 | "$ref": "#/$defs/effect-values/layer"
25 | },
26 | {
27 | "title": "Use For Horizontal Displacement",
28 | "$ref": "#/$defs/effect-values/drop-down"
29 | },
30 | {
31 | "title": "Max Horizontal Displacement",
32 | "$ref": "#/$defs/effect-values/slider"
33 | },
34 | {
35 | "title": "Use For Vertical Displacement",
36 | "$ref": "#/$defs/effect-values/drop-down"
37 | },
38 | {
39 | "title": "Max Vertical Displacement",
40 | "$ref": "#/$defs/effect-values/slider"
41 | },
42 | {
43 | "title": "Displacement Map Behavior",
44 | "$ref": "#/$defs/effect-values/drop-down"
45 | },
46 | {
47 | "title": "Edge Behavior",
48 | "$ref": "#/$defs/effect-values/drop-down"
49 | },
50 | {
51 | "title": "Expand Output",
52 | "$ref": "#/$defs/effect-values/drop-down"
53 | }
54 | ]
55 | }
56 | },
57 | "required": [
58 | "ty",
59 | "ef"
60 | ]
61 | }
62 | ]
63 | }
64 |
--------------------------------------------------------------------------------
/schema/effects/drop-shadow-effect.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Drop Shadow Effect",
5 | "description": "Adds a shadow to the layer",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/effects/effect"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "ty": {
14 | "title": "Type",
15 | "type": "integer",
16 | "const": 25
17 | },
18 | "ef": {
19 | "title": "Effect values",
20 | "type": "array",
21 | "prefixItems": [
22 | {
23 | "title": "color",
24 | "$ref": "#/$defs/effect-values/color"
25 | },
26 | {
27 | "title": "opacity",
28 | "description": "Opacity between 0 and 255",
29 | "$ref": "#/$defs/effect-values/slider"
30 | },
31 | {
32 | "title": "angle",
33 | "$ref": "#/$defs/effect-values/angle"
34 | },
35 | {
36 | "title": "distance",
37 | "$ref": "#/$defs/effect-values/slider"
38 | },
39 | {
40 | "title": "blur",
41 | "$ref": "#/$defs/effect-values/slider"
42 | }
43 | ]
44 | }
45 | },
46 | "required": [
47 | "ty"
48 | ]
49 | }
50 | ]
51 | }
52 |
--------------------------------------------------------------------------------
/schema/effects/effect.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Effect",
5 | "description": "Layer effect",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/helpers/visual-object"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "ef": {
14 | "title": "Effect Values",
15 | "type": "array",
16 | "items": {
17 | "oneOf": [
18 | {"$ref": "#/$defs/effect-values/no-value"},
19 | {"$ref": "#/$defs/effect-values/angle"},
20 | {"$ref": "#/$defs/effect-values/checkbox"},
21 | {"$ref": "#/$defs/effect-values/color"},
22 | {"$ref": "#/$defs/effect-values/drop-down"},
23 | {"$ref": "#/$defs/effect-values/ignored"},
24 | {"$ref": "#/$defs/effect-values/layer"},
25 | {"$ref": "#/$defs/effect-values/point"},
26 | {"$ref": "#/$defs/effect-values/slider"}
27 | ]
28 | }
29 | },
30 | "np": {
31 | "title": "Property Count",
32 | "description": "Number of values in `ef`",
33 | "type": "integer"
34 | },
35 | "ix": {
36 | "title": "Effect Index",
37 | "type": "integer"
38 | },
39 | "ty": {
40 | "title": "Type",
41 | "description": "Effect type",
42 | "type": "integer"
43 | },
44 | "en": {
45 | "title": "Enabled",
46 | "$ref": "#/$defs/values/int-boolean",
47 | "default": 1
48 | }
49 | },
50 | "required": ["ty", "ef"]
51 | }
52 | ]
53 | }
54 |
--------------------------------------------------------------------------------
/schema/effects/fill-effect.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Fill Effect",
5 | "description": "Replaces the whole layer with the given color",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/effects/effect"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "ty": {
14 | "title": "Type",
15 | "type": "integer",
16 | "const": 21
17 | },
18 | "ef": {
19 | "title": "Effect values",
20 | "type": "array",
21 | "prefixItems": [
22 | {
23 | "title": "10",
24 | "$ref": "#/$defs/effect-values/layer"
25 | },
26 | {
27 | "title": "01",
28 | "$ref": "#/$defs/effect-values/drop-down"
29 | },
30 | {
31 | "title": "color",
32 | "$ref": "#/$defs/effect-values/color"
33 | },
34 | {
35 | "title": "03",
36 | "$ref": "#/$defs/effect-values/drop-down"
37 | },
38 | {
39 | "title": "04",
40 | "$ref": "#/$defs/effect-values/slider"
41 | },
42 | {
43 | "title": "05",
44 | "$ref": "#/$defs/effect-values/slider"
45 | },
46 | {
47 | "title": "opacity",
48 | "description": "Opacity in [0, 1]",
49 | "$ref": "#/$defs/effect-values/slider"
50 | }
51 | ]
52 | }
53 | },
54 | "required": [
55 | "ty"
56 | ]
57 | }
58 | ]
59 | }
60 |
--------------------------------------------------------------------------------
/schema/effects/gaussian-blur-effect.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Gaussian Blur Effect",
5 | "description": "Gaussian blur",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/effects/effect"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "ty": {
14 | "title": "Type",
15 | "type": "integer",
16 | "const": 29
17 | },
18 | "ef": {
19 | "title": "Effect values",
20 | "type": "array",
21 | "prefixItems": [
22 | {
23 | "title": "sigma",
24 | "$ref": "#/$defs/effect-values/slider"
25 | },
26 | {
27 | "title": "direction",
28 | "$ref": "#/$defs/effect-values/slider"
29 | },
30 | {
31 | "title": "wrap",
32 | "$ref": "#/$defs/effect-values/checkbox"
33 | }
34 | ]
35 | }
36 | },
37 | "required": [
38 | "ty"
39 | ]
40 | }
41 | ]
42 | }
43 |
--------------------------------------------------------------------------------
/schema/effects/matte3-effect.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Set Matte Effect",
5 | "description": "Uses a layer as a mask",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/effects/effect"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "ty": {
14 | "title": "Type",
15 | "type": "integer",
16 | "const": 28
17 | },
18 | "ef": {
19 | "title": "Effect values",
20 | "type": "array",
21 | "prefixItems": [
22 | {
23 | "title": "Layer",
24 | "description": "Use this layer as a mask",
25 | "$ref": "#/$defs/effect-values/layer"
26 | },
27 | {
28 | "title": "Channel",
29 | "description": "Channel to use as a mask:\n1 - Red\n2 - Green\n3 - Blue\n4 - Alpha\n5 - Luminance\n6 - Hue\n7 - Lightness\n8 - Saturation\n9 - Full\n10 - Off",
30 | "$ref": "#/$defs/effect-values/drop-down"
31 | },
32 | {
33 | "title": "Invert",
34 | "description": "Use 0 as opaque value when true",
35 | "$ref": "#/$defs/effect-values/drop-down"
36 | },
37 | {
38 | "title": "Stretch To Fit",
39 | "$ref": "#/$defs/effect-values/drop-down"
40 | },
41 | {
42 | "title": "Show Mask",
43 | "description": "If false, the mask layer won't be shown",
44 | "$ref": "#/$defs/effect-values/drop-down"
45 | },
46 | {
47 | "title": "Premultiply Mask",
48 | "$ref": "#/$defs/effect-values/drop-down"
49 | }
50 | ]
51 | }
52 | },
53 | "required": [
54 | "ty"
55 | ]
56 | }
57 | ]
58 | }
59 |
--------------------------------------------------------------------------------
/schema/effects/mesh-warp-effect.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Mesh Warp Effect",
5 | "description": "",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/effects/effect"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "ty": {
14 | "title": "Type",
15 | "type": "integer",
16 | "const": 31
17 | },
18 | "ef": {
19 | "title": "Effect values",
20 | "type": "array",
21 | "prefixItems": [
22 | {
23 | "title": "Rows",
24 | "$ref": "#/$defs/effect-values/slider"
25 | },
26 | {
27 | "title": "Columns",
28 | "$ref": "#/$defs/effect-values/slider"
29 | },
30 | {
31 | "title": "Quality",
32 | "$ref": "#/$defs/effect-values/slider"
33 | },
34 | {
35 | "title": "03",
36 | "$ref": "#/$defs/effect-values/no-value"
37 | }
38 | ]
39 | }
40 | },
41 | "required": [
42 | "ty",
43 | "ef"
44 | ]
45 | }
46 | ]
47 | }
--------------------------------------------------------------------------------
/schema/effects/puppet-effect.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Puppet Effect",
5 | "description": "",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/effects/effect"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "ty": {
14 | "title": "Type",
15 | "type": "integer",
16 | "const": 34
17 | },
18 | "ef": {
19 | "title": "Effect values",
20 | "type": "array",
21 | "prefixItems": [
22 | {
23 | "title": "Puppet Engine",
24 | "$ref": "#/$defs/effect-values/drop-down"
25 | },
26 | {
27 | "title": "Mesh Rotation Refinement",
28 | "$ref": "#/$defs/effect-values/slider"
29 | },
30 | {
31 | "title": "On Transparent",
32 | "$ref": "#/$defs/effect-values/drop-down"
33 | },
34 | {
35 | "title": "03",
36 | "$ref": "#/$defs/effect-values/no-value"
37 | }
38 | ]
39 | }
40 | },
41 | "required": [
42 | "ty",
43 | "ef"
44 | ]
45 | }
46 | ]
47 | }
48 |
--------------------------------------------------------------------------------
/schema/effects/radial-wipe-effect.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Radial Wipe",
5 | "allOf": [
6 | {
7 | "$ref": "#/$defs/effects/effect"
8 | },
9 | {
10 | "type": "object",
11 | "properties": {
12 | "ty": {
13 | "title": "Type",
14 | "type": "integer",
15 | "const": 26
16 | },
17 | "ef": {
18 | "title": "Effect values",
19 | "type": "array",
20 | "prefixItems": [
21 | {
22 | "title": "Completion",
23 | "description": "Between 0 and 100",
24 | "$ref": "#/$defs/effect-values/slider"
25 | },
26 | {
27 | "title": "Start Angle",
28 | "$ref": "#/$defs/effect-values/angle"
29 | },
30 | {
31 | "title": "Wipe Center",
32 | "$ref": "#/$defs/effect-values/point"
33 | },
34 | {
35 | "title": "Wipe",
36 | "$ref": "#/$defs/effect-values/slider"
37 | },
38 | {
39 | "title": "Feather",
40 | "$ref": "#/$defs/effect-values/slider"
41 | }
42 | ]
43 | }
44 | },
45 | "required": [
46 | "ty"
47 | ]
48 | }
49 | ]
50 | }
51 |
52 |
--------------------------------------------------------------------------------
/schema/effects/spherize-effect.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Spherize Effect",
5 | "description": "",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/effects/effect"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "ty": {
14 | "title": "Type",
15 | "type": "integer",
16 | "const": 33
17 | },
18 | "ef": {
19 | "title": "Effect values",
20 | "type": "array",
21 | "prefixItems": [
22 | {
23 | "title": "radius",
24 | "$ref": "#/$defs/effect-values/slider"
25 | },
26 | {
27 | "title": "center",
28 | "$ref": "#/$defs/effect-values/point"
29 | }
30 | ]
31 | }
32 | },
33 | "required": [
34 | "ty"
35 | ]
36 | }
37 | ]
38 | }
39 |
40 |
--------------------------------------------------------------------------------
/schema/effects/tint-effect.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Tint Effect",
5 | "description": "Colorizes the layer",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/effects/effect"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "ty": {
14 | "title": "Type",
15 | "type": "integer",
16 | "const": 20
17 | },
18 | "ef": {
19 | "title": "Effect values",
20 | "type": "array",
21 | "prefixItems": [
22 | {
23 | "title": "Black Color",
24 | "description": "Tint of the darker parts of the layer",
25 | "$ref": "#/$defs/effect-values/color"
26 | },
27 | {
28 | "title": "White Color",
29 | "description": "Tint of the lighter parts of the layer",
30 | "$ref": "#/$defs/effect-values/color"
31 | },
32 | {
33 | "title": "Intensity",
34 | "description": "Intensity of the effect, 0 means the layer is unchanged. 100 means full effect",
35 | "$ref": "#/$defs/effect-values/slider"
36 | }
37 | ]
38 | }
39 | },
40 | "required": [
41 | "ty"
42 | ]
43 | }
44 | ]
45 | }
46 |
--------------------------------------------------------------------------------
/schema/effects/tritone-effect.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Tritone Effect",
5 | "description": "Maps layers colors based on bright/mid/dark colors",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/effects/effect"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "ty": {
14 | "title": "Type",
15 | "type": "integer",
16 | "const": 23
17 | },
18 | "ef": {
19 | "title": "Effect values",
20 | "type": "array",
21 | "prefixItems": [
22 | {
23 | "title": "bright",
24 | "$ref": "#/$defs/effect-values/color"
25 | },
26 | {
27 | "title": "mid",
28 | "$ref": "#/$defs/effect-values/color"
29 | },
30 | {
31 | "title": "dark",
32 | "$ref": "#/$defs/effect-values/color"
33 | }
34 | ]
35 | }
36 | },
37 | "required": [
38 | "ty"
39 | ]
40 | }
41 | ]
42 | }
43 |
--------------------------------------------------------------------------------
/schema/effects/twirl-effect.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Twirl Effect",
5 | "description": "",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/effects/effect"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "ty": {
14 | "title": "Type",
15 | "type": "integer",
16 | "const": 30
17 | },
18 | "ef": {
19 | "title": "Effect values",
20 | "type": "array",
21 | "prefixItems": [
22 | {
23 | "title": "Angle",
24 | "$ref": "#/$defs/effect-values/angle"
25 | },
26 | {
27 | "title": "Radius",
28 | "$ref": "#/$defs/effect-values/slider"
29 | },
30 | {
31 | "title": "Center",
32 | "$ref": "#/$defs/effect-values/point"
33 | }
34 | ]
35 | }
36 | },
37 | "required": [
38 | "ty",
39 | "ef"
40 | ]
41 | }
42 | ]
43 | }
44 |
45 |
--------------------------------------------------------------------------------
/schema/effects/wavy-effect.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Wavy Effect",
5 | "description": "",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/effects/effect"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "ty": {
14 | "title": "Type",
15 | "type": "integer",
16 | "const": 32
17 | },
18 | "ef": {
19 | "title": "Effect values",
20 | "type": "array",
21 | "prefixItems": [
22 | {
23 | "title": "Radius",
24 | "$ref": "#/$defs/effect-values/slider"
25 | },
26 | {
27 | "title": "Center",
28 | "$ref": "#/$defs/effect-values/point"
29 | },
30 | {
31 | "title": "Conversion type",
32 | "$ref": "#/$defs/effect-values/drop-down"
33 | },
34 | {
35 | "title": "Speed",
36 | "$ref": "#/$defs/effect-values/drop-down"
37 | },
38 | {
39 | "title": "Width",
40 | "$ref": "#/$defs/effect-values/slider"
41 | },
42 | {
43 | "title": "Height",
44 | "$ref": "#/$defs/effect-values/slider"
45 | },
46 | {
47 | "title": "Phase",
48 | "$ref": "#/$defs/effect-values/slider"
49 | }
50 | ]
51 | }
52 | },
53 | "required": [
54 | "ty",
55 | "ef"
56 | ]
57 | }
58 | ]
59 | }
60 |
--------------------------------------------------------------------------------
/schema/helpers/marker.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Marker",
5 | "description": "Defines named portions of the composition.",
6 | "properties": {
7 | "cm": {
8 | "title": "Comment",
9 | "type": "string"
10 | },
11 | "tm": {
12 | "title": "Time",
13 | "type": "number"
14 | },
15 | "dr": {
16 | "title": "Duration",
17 | "type": "number"
18 | }
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/schema/helpers/mask.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Mask",
5 | "description": "Mask for layer content.",
6 | "allOf": [
7 | {
8 | "properties": {
9 | "mode": {
10 | "title": "Mode",
11 | "$ref": "#/$defs/constants/mask-mode",
12 | "default": "i"
13 | },
14 | "o": {
15 | "title": "Opacity",
16 | "description": "Mask opacity, as a percentage [0..100].",
17 | "$ref": "#/$defs/properties/scalar-property",
18 | "default": 100
19 | },
20 | "pt": {
21 | "title": "Shape",
22 | "description": "Mask shape",
23 | "$ref": "#/$defs/properties/bezier-property"
24 | },
25 | "x": {
26 | "title": "Expand",
27 | "$ref": "#/$defs/properties/scalar-property"
28 | },
29 | "inv": {
30 | "title": "Inverted",
31 | "type": "boolean",
32 | "default": false
33 | }
34 | },
35 | "required": [
36 | "pt"
37 | ]
38 | }
39 | ]
40 | }
41 |
--------------------------------------------------------------------------------
/schema/helpers/slot.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Slot",
5 | "description": "Defines a property value that will be set to all matched properties",
6 | "properties": {
7 | "p": {
8 | "title": "Property Value",
9 | "description": "Property Value"
10 | }
11 | },
12 | "required": ["p"]
13 | }
14 |
--------------------------------------------------------------------------------
/schema/helpers/slottable-object.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Slottable Object",
5 | "description": "Object that may have its value replaced with a slot value",
6 | "properties": {
7 | "sid": {
8 | "title": "Slot Id",
9 | "description": "Identifier to look up the slot",
10 | "type": "string"
11 | }
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/schema/helpers/visual-object.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Visual Object",
5 | "description": "",
6 | "allOf": [
7 | {
8 | "type": "object",
9 | "properties": {
10 | "nm": {
11 | "title": "Name",
12 | "description": "Human readable name, as seen from editors and the like",
13 | "type": "string"
14 | },
15 | "mn": {
16 | "title": "Match Name",
17 | "description": "Match name, used in expressions",
18 | "type": "string"
19 | }
20 | },
21 | "required": []
22 | }
23 | ]
24 | }
25 |
--------------------------------------------------------------------------------
/schema/layers/all-layers.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "oneOf": [
4 | {"$ref": "#/$defs/layers/precomposition-layer"},
5 | {"$ref": "#/$defs/layers/solid-layer"},
6 | {"$ref": "#/$defs/layers/image-layer"},
7 | {"$ref": "#/$defs/layers/null-layer"},
8 | {"$ref": "#/$defs/layers/shape-layer"},
9 | {"$ref": "#/$defs/layers/text-layer"},
10 | {"$ref": "#/$defs/layers/audio-layer"},
11 | {"$ref": "#/$defs/layers/data-layer"},
12 | {"$ref": "#/$defs/layers/camera-layer"},
13 | {"$ref": "#/$defs/layers/unknown-layer"}
14 | ]
15 | }
16 |
--------------------------------------------------------------------------------
/schema/layers/audio-layer.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Audio Layer",
5 | "description": "A layer playing sounds",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/layers/layer"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "ty": {
14 | "title": "Type",
15 | "description": "Layer type",
16 | "type": "integer",
17 | "const": 6
18 | },
19 | "au": {
20 | "title": "Audio Settings",
21 | "$ref": "#/$defs/layers/audio-settings"
22 | },
23 | "refId": {
24 | "title": "Sound Id",
25 | "description": "ID of the sound as specified in the assets",
26 | "type": "string"
27 | }
28 | },
29 | "required": [
30 | "ty", "au"
31 | ]
32 | }
33 | ]
34 | }
35 |
36 |
--------------------------------------------------------------------------------
/schema/layers/audio-settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Audio Settings",
5 | "description": "",
6 | "allOf": [
7 | {
8 | "type": "object",
9 | "properties": {
10 | "lv": {
11 | "title": "Level",
12 | "$ref": "#/$defs/properties/vector-property"
13 | }
14 | },
15 | "required": [
16 | "lv"
17 | ]
18 | }
19 | ]
20 | }
21 |
22 |
23 |
--------------------------------------------------------------------------------
/schema/layers/camera-layer.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Camera Layer",
5 | "description": "3D Camera",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/layers/layer"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "ty": {
14 | "title": "Type",
15 | "description": "Layer type",
16 | "type": "integer",
17 | "const": 13
18 | },
19 | "ks": {
20 | "title": "Transform",
21 | "description": "Layer transform",
22 | "$ref": "#/$defs/helpers/transform"
23 | },
24 | "pe": {
25 | "title": "Perspective",
26 | "description": "Distance from the Z=0 plane.\nSmall values yield a higher perspective effect.",
27 | "$ref": "#/$defs/properties/scalar-property"
28 | }
29 | },
30 | "required": [
31 | "ty", "ks", "pe"
32 | ]
33 | }
34 | ]
35 | }
36 |
37 |
38 |
--------------------------------------------------------------------------------
/schema/layers/data-layer.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Data Layer",
5 | "allOf": [
6 | {
7 | "$ref": "#/$defs/layers/layer"
8 | },
9 | {
10 | "type": "object",
11 | "properties": {
12 | "ty": {
13 | "title": "Type",
14 | "description": "Layer type",
15 | "type": "integer",
16 | "const": 15
17 | },
18 | "refId": {
19 | "title": "Data source Id",
20 | "description": "ID of the data source in assets",
21 | "type": "string"
22 | }
23 | },
24 | "required": [
25 | "ty"
26 | ]
27 | }
28 | ]
29 | }
30 |
31 |
--------------------------------------------------------------------------------
/schema/layers/image-layer.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Image Layer",
5 | "description": "Layer containing an image",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/layers/visual-layer"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "ty": {
14 | "title": "Type",
15 | "description": "Layer type",
16 | "type": "integer",
17 | "const": 2
18 | },
19 | "refId": {
20 | "title": "Reference Id",
21 | "description": "ID of the image as specified in the assets",
22 | "type": "string"
23 | }
24 | },
25 | "required": [
26 | "ty",
27 | "refId"
28 | ]
29 | }
30 | ]
31 | }
32 |
--------------------------------------------------------------------------------
/schema/layers/layer.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Layer",
5 | "description": "Common properties for all layers",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/helpers/visual-object"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "ddd": {
14 | "title": "Threedimensional",
15 | "description": "Whether the layer is threedimensional",
16 | "$ref": "#/$defs/values/int-boolean",
17 | "default": 0
18 | },
19 | "hd": {
20 | "title": "Hidden",
21 | "description": "Whether the layer is hidden",
22 | "type": "boolean"
23 | },
24 | "ty": {
25 | "title": "Type",
26 | "description": "Layer Type",
27 | "type": "integer"
28 | },
29 | "ind": {
30 | "title": "Index",
31 | "type": "integer",
32 | "description": "Index that can be used for parenting and referenced in expressions"
33 | },
34 | "parent": {
35 | "title": "Parent Index",
36 | "description": "Must be the `ind` property of another layer",
37 | "type": "integer"
38 | },
39 | "sr": {
40 | "title": "Time Stretch",
41 | "type": "number",
42 | "default": 1
43 | },
44 | "ip": {
45 | "title": "In Point",
46 | "description": "Frame when the layer becomes visible",
47 | "type": "number"
48 | },
49 | "op": {
50 | "title": "Out Point",
51 | "description": "Frame when the layer becomes invisible",
52 | "type": "number"
53 | },
54 | "st": {
55 | "title": "Start Time",
56 | "type": "number",
57 | "default": 0
58 | }
59 | },
60 | "required": ["ty", "ip", "op"]
61 | }
62 | ]
63 | }
64 |
--------------------------------------------------------------------------------
/schema/layers/null-layer.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Null Layer",
5 | "description": "Layer with no data, useful to group layers together",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/layers/visual-layer"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "ty": {
14 | "title": "Type",
15 | "description": "Layer type",
16 | "type": "integer",
17 | "const": 3
18 | }
19 | },
20 | "required": [
21 | "ty"
22 | ]
23 | }
24 | ]
25 | }
26 |
--------------------------------------------------------------------------------
/schema/layers/precomposition-layer.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Precomposition Layer",
5 | "description": "Layer that renders a Precomposition asset",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/layers/visual-layer"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "ty": {
14 | "title": "Type",
15 | "description": "Layer type",
16 | "type": "integer",
17 | "const": 0
18 | },
19 | "refId": {
20 | "title": "Reference Id",
21 | "description": "ID of the precomp as specified in the assets",
22 | "type": "string"
23 | },
24 | "w": {
25 | "title": "Width",
26 | "description": "Width of the clipping rect",
27 | "type": "integer"
28 | },
29 | "h": {
30 | "title": "Height",
31 | "description": "Height of the clipping rect",
32 | "type": "integer"
33 | },
34 | "st": {
35 | "title": "Start Time",
36 | "type": "number",
37 | "default": 0
38 | },
39 | "tm": {
40 | "title": "Time Remap",
41 | "description": "Timeline remap function (frame index -> time in seconds)",
42 | "$ref": "#/$defs/properties/scalar-property"
43 | }
44 | },
45 | "required": [
46 | "ty", "refId"
47 | ]
48 | }
49 | ]
50 | }
51 |
--------------------------------------------------------------------------------
/schema/layers/shape-layer.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Shape Layer",
5 | "description": "Layer containing Shapes",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/layers/visual-layer"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "ty": {
14 | "title": "Type",
15 | "description": "Layer type",
16 | "type": "integer",
17 | "const": 4
18 | },
19 | "shapes": {
20 | "title": "Shapes",
21 | "type": "array",
22 | "items": {
23 | "$ref": "#/$defs/shapes/all-graphic-elements"
24 | }
25 | }
26 | },
27 | "required": [
28 | "ty", "shapes"
29 | ]
30 | }
31 | ]
32 | }
33 |
--------------------------------------------------------------------------------
/schema/layers/solid-layer.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Solid Layer",
5 | "description": "Solid color, rectangle-shaped layer",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/layers/visual-layer"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "ty": {
14 | "title": "Type",
15 | "description": "Layer type",
16 | "type": "integer",
17 | "const": 1
18 | },
19 | "sw": {
20 | "title": "Width",
21 | "description": "Solid rectangle width",
22 | "type": "integer"
23 | },
24 | "sh": {
25 | "title": "Height",
26 | "description": "Solid rectangle height",
27 | "type": "integer"
28 | },
29 | "sc": {
30 | "title": "Color",
31 | "description": "Solid fill color",
32 | "$ref": "#/$defs/values/hexcolor"
33 | }
34 | },
35 | "required": [
36 | "ty",
37 | "sw",
38 | "sh",
39 | "sc"
40 | ]
41 | }
42 | ]
43 | }
44 |
--------------------------------------------------------------------------------
/schema/layers/text-layer.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Text Layer",
5 | "description": "Layer with some text",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/layers/visual-layer"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "ty": {
14 | "title": "Type",
15 | "description": "Layer type",
16 | "type": "integer",
17 | "const": 5
18 | },
19 | "t": {
20 | "title": "Data",
21 | "$ref": "#/$defs/text/text-data"
22 | }
23 | },
24 | "required": [
25 | "ty", "t"
26 | ]
27 | }
28 | ]
29 | }
30 |
--------------------------------------------------------------------------------
/schema/layers/unknown-layer.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Unknown layer types",
5 | "description": "Unknown layer types. Types not defined by the specification are still allowed.",
6 | "properties": {
7 | "ty": {
8 | "not": {
9 | "$comment": "enum list is dynamically generated",
10 | "enum": []
11 | }
12 | }
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/schema/properties/base-keyframe.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Base Keyframe",
5 | "description": "A Keyframes specifies the value at a specific time and the interpolation function to reach the next keyframe.",
6 | "allOf": [
7 | {
8 | "properties": {
9 | "t": {
10 | "title": "Time",
11 | "description": "Frame number",
12 | "type": "number",
13 | "default": 0
14 | },
15 | "h": {
16 | "title": "Hold",
17 | "$ref": "#/$defs/values/int-boolean",
18 | "default": 0
19 | },
20 | "i": {
21 | "title": "In Tangent",
22 | "description": "Easing tangent going into the next keyframe",
23 | "$ref": "#/$defs/properties/easing-handle"
24 | },
25 | "o": {
26 | "title": "Out Tangent",
27 | "description": "Easing tangent leaving the current keyframe",
28 | "$ref": "#/$defs/properties/easing-handle"
29 | }
30 | }
31 | }
32 | ],
33 | "required": ["t"]
34 | }
35 |
36 |
--------------------------------------------------------------------------------
/schema/properties/bezier-keyframe.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Shape Keyframe",
5 | "allOf": [
6 | {
7 | "$ref": "#/$defs/properties/base-keyframe"
8 | },
9 | {
10 | "properties": {
11 | "s": {
12 | "title": "Value",
13 | "description": "Value at this keyframe.",
14 | "type": "array",
15 | "items": {
16 | "$ref": "#/$defs/values/bezier"
17 | },
18 | "minItems": 1,
19 | "maxItems": 1
20 | },
21 | "e": {
22 | "title": "End value",
23 | "description": "Value at the end of the keyframe, note that this is deprecated and you should use `s` from the next keyframe to get this value",
24 | "deprecated": true,
25 | "type": "array",
26 | "items": {
27 | "$ref": "#/$defs/values/bezier"
28 | },
29 | "minItems": 1,
30 | "maxItems": 1
31 | }
32 | }
33 | }
34 | ],
35 | "required": ["s"]
36 | }
37 |
--------------------------------------------------------------------------------
/schema/properties/bezier-property.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Bezier Property",
5 | "description": "An animatable property that holds a Bezier shape",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/properties/property"
9 | }
10 | ],
11 | "oneOf": [
12 | {
13 | "$comment": "Not animated",
14 | "properties": {
15 | "ix": {
16 | "title": "Property Index",
17 | "type": "integer"
18 | },
19 | "a": {
20 | "title": "Animated",
21 | "description": "Whether the property is animated",
22 | "$ref": "#/$defs/values/int-boolean",
23 | "const": 0
24 | },
25 | "k": {
26 | "title": "Value",
27 | "description": "Static Value",
28 | "$ref": "#/$defs/values/bezier"
29 | }
30 | }
31 | },
32 | {
33 | "$comment": "Animated",
34 | "properties": {
35 | "ix": {
36 | "title": "Property Index",
37 | "type": "integer"
38 | },
39 | "a": {
40 | "title": "Animated",
41 | "description": "Whether the property is animated",
42 | "$ref": "#/$defs/values/int-boolean",
43 | "const": 1
44 | },
45 | "k": {
46 | "type": "array",
47 | "title": "Keyframes",
48 | "description": "Array of keyframes",
49 | "items": {
50 | "$ref": "#/$defs/properties/bezier-keyframe"
51 | }
52 | }
53 | }
54 | }
55 | ],
56 | "required": ["a", "k"]
57 | }
58 |
--------------------------------------------------------------------------------
/schema/properties/color-keyframe.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Color Keyframe",
5 | "allOf": [
6 | {
7 | "$ref": "#/$defs/properties/base-keyframe"
8 | },
9 | {
10 | "properties": {
11 | "s": {
12 | "title": "Value",
13 | "description": "Value at this keyframe.",
14 | "$ref": "#/$defs/values/color"
15 | },
16 | "e": {
17 | "title": "End value",
18 | "description": "Value at the end of the keyframe, note that this is deprecated and you should use `s` from the next keyframe to get this value",
19 | "deprecated": true,
20 | "$ref": "#/$defs/values/color"
21 | }
22 | }
23 | }
24 | ],
25 | "required": ["s"]
26 | }
27 |
--------------------------------------------------------------------------------
/schema/properties/color-property.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Color Property",
5 | "description": "An animatable property that holds a Color",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/properties/property"
9 | }
10 | ],
11 | "oneOf": [
12 | {
13 | "$comment": "Not animated",
14 | "properties": {
15 | "ix": {
16 | "title": "Property Index",
17 | "type": "integer"
18 | },
19 | "a": {
20 | "title": "Animated",
21 | "description": "Whether the property is animated",
22 | "$ref": "#/$defs/values/int-boolean",
23 | "const": 0
24 | },
25 | "k": {
26 | "title": "Value",
27 | "description": "Static Value",
28 | "$ref": "#/$defs/values/color"
29 | }
30 | }
31 | },
32 | {
33 | "$comment": "Animated",
34 | "properties": {
35 | "ix": {
36 | "title": "Property Index",
37 | "type": "integer"
38 | },
39 | "a": {
40 | "title": "Animated",
41 | "description": "Whether the property is animated",
42 | "$ref": "#/$defs/values/int-boolean",
43 | "const": 1
44 | },
45 | "k": {
46 | "type": "array",
47 | "title": "Keyframes",
48 | "description": "Array of keyframes",
49 | "items": {
50 | "$ref": "#/$defs/properties/color-keyframe"
51 | }
52 | }
53 | }
54 | }
55 | ]
56 | }
57 |
--------------------------------------------------------------------------------
/schema/properties/easing-handle.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Keyframe Easing",
5 | "description": "Bezier handle for keyframe interpolation",
6 | "properties": {
7 | "x": {
8 | "title": "X",
9 | "description": "Time component:\n0 means start time of the keyframe,\n1 means time of the next keyframe.",
10 | "oneOf":[
11 | {
12 | "type": "array",
13 | "$ref": "#/$defs/values/vector",
14 | "items": {
15 | "type": "number",
16 | "default": 0,
17 | "minimum": 0,
18 | "maximum": 1
19 | },
20 | "minItems": 1
21 | },
22 | {
23 | "type": "number",
24 | "default": 0,
25 | "minimum": 0,
26 | "maximum": 1
27 | }
28 | ]
29 | },
30 | "y": {
31 | "title": "Y",
32 | "description": "Value interpolation component:\n0 means start value of the keyframe,\n1 means value at the next keyframe.",
33 | "oneOf": [
34 | {
35 | "type": "array",
36 | "$ref": "#/$defs/values/vector",
37 | "items": {
38 | "type": "number",
39 | "default": 0
40 | },
41 | "minItems": 1
42 | },
43 | {
44 | "type": "number",
45 | "default": 0
46 | }
47 | ]
48 | }
49 | },
50 | "required": ["x", "y"]
51 | }
52 |
--------------------------------------------------------------------------------
/schema/properties/gradient-keyframe.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Gradient Keyframe",
5 | "allOf": [
6 | {
7 | "$ref": "#/$defs/properties/base-keyframe"
8 | },
9 | {
10 | "properties": {
11 | "s": {
12 | "title": "Value",
13 | "description": "Value at this keyframe.",
14 | "$ref": "#/$defs/values/gradient"
15 | },
16 | "e": {
17 | "title": "End value",
18 | "description": "Value at the end of the keyframe, note that this is deprecated and you should use `s` from the next keyframe to get this value",
19 | "deprecated": true,
20 | "type": "array",
21 | "$ref": "#/$defs/values/gradient"
22 | }
23 | }
24 | }
25 | ],
26 | "required": ["s"]
27 | }
28 |
--------------------------------------------------------------------------------
/schema/properties/gradient-property.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Gradient Property",
5 | "description": "An animatable property that holds a Gradient",
6 | "properties": {
7 | "p": {
8 | "title": "Color stop count",
9 | "type": "number"
10 | },
11 | "k": {
12 | "title": "Gradient stops",
13 | "$ref": "#/$defs/properties/gradient-stops"
14 | }
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/schema/properties/gradient-stops.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Gradient stops",
5 | "description": "Animatable vector representing the gradient stops",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/properties/property"
9 | }
10 | ],
11 | "oneOf": [
12 | {
13 | "$comment": "Not animated",
14 | "properties": {
15 | "a": {
16 | "title": "Animated",
17 | "description": "Whether the property is animated",
18 | "$ref": "#/$defs/values/int-boolean",
19 | "const": 0
20 | },
21 | "k": {
22 | "title": "Value",
23 | "description": "Static Value",
24 | "$ref": "#/$defs/values/gradient"
25 | }
26 | }
27 | },
28 | {
29 | "$comment": "Animated",
30 | "properties": {
31 | "a": {
32 | "title": "Animated",
33 | "description": "Whether the property is animated",
34 | "$ref": "#/$defs/values/int-boolean",
35 | "const": 1
36 | },
37 | "k": {
38 | "type": "array",
39 | "title": "Keyframes",
40 | "description": "Array of keyframes",
41 | "items": {
42 | "$ref": "#/$defs/properties/gradient-keyframe"
43 | }
44 | }
45 | }
46 | }
47 | ],
48 | "required": ["a", "k"]
49 | }
50 |
--------------------------------------------------------------------------------
/schema/properties/position-keyframe.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Position Keyframe",
5 | "allOf": [
6 | {
7 | "$ref": "#/$defs/properties/vector-keyframe"
8 | },
9 | {
10 | "properties": {
11 | "ti": {
12 | "title": "Value In Tangent",
13 | "description": "Tangent for values (eg: moving position around a curved path)",
14 | "$ref": "#/$defs/values/vector"
15 | },
16 | "to": {
17 | "title": "Value Out Tangent",
18 | "description": "Tangent for values (eg: moving position around a curved path)",
19 | "$ref": "#/$defs/values/vector"
20 | }
21 | }
22 | }
23 | ]
24 | }
25 |
--------------------------------------------------------------------------------
/schema/properties/position-property.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Position Property",
5 | "description": "An animatable property to represent a position in space",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/properties/property"
9 | },
10 | {
11 | "properties": {
12 | "l": {
13 | "title": "Length",
14 | "description": "Number of components in the value arrays.\nIf present values will be truncated or expanded to match this length when accessed from expressions.",
15 | "type": "integer"
16 | }
17 | }
18 | }
19 | ],
20 | "oneOf": [
21 | {
22 | "$comment": "Not animated",
23 | "properties": {
24 | "ix": {
25 | "title": "Property Index",
26 | "type": "integer"
27 | },
28 | "a": {
29 | "title": "Animated",
30 | "description": "Whether the property is animated",
31 | "$ref": "#/$defs/values/int-boolean",
32 | "const": 0
33 | },
34 | "k": {
35 | "title": "Value",
36 | "description": "Static Value",
37 | "$ref": "#/$defs/values/vector"
38 | }
39 | }
40 | },
41 | {
42 | "$comment": "Animated",
43 | "properties": {
44 | "ix": {
45 | "title": "Property Index",
46 | "type": "integer"
47 | },
48 | "a": {
49 | "title": "Animated",
50 | "description": "Whether the property is animated",
51 | "$ref": "#/$defs/values/int-boolean",
52 | "const": 1
53 | },
54 | "k": {
55 | "type": "array",
56 | "title": "Keyframes",
57 | "description": "Array of keyframes",
58 | "items": {
59 | "$ref": "#/$defs/properties/position-keyframe"
60 | }
61 | }
62 | }
63 | }
64 | ],
65 | "required": ["a", "k"]
66 | }
67 |
--------------------------------------------------------------------------------
/schema/properties/property.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "object",
3 | "title": "Property",
4 | "properties": {
5 | "ix": {
6 | "title": "Property Index",
7 | "type": "integer"
8 | },
9 | "x": {
10 | "title": "Expression",
11 | "type": "string"
12 | },
13 | "sid": {
14 | "title": "Slot ID",
15 | "description": "One of the ID in the file's slots",
16 | "type": "string"
17 | },
18 | "a": {
19 | "title": "Animated",
20 | "description": "Whether the property is animated",
21 | "$ref": "#/$defs/values/int-boolean",
22 | "default": 0
23 | }
24 | },
25 | "if": {
26 | "required": ["sid"]
27 | },
28 | "else": {
29 | "required": ["a", "k"]
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/schema/properties/scalar-property.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Scalar Property",
5 | "description": "An animatable property that holds a float",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/properties/property"
9 | }
10 | ],
11 | "oneOf": [
12 | {
13 | "$comment": "Not animated",
14 | "properties": {
15 | "ix": {
16 | "title": "Property Index",
17 | "type": "integer"
18 | },
19 | "a": {
20 | "title": "Animated",
21 | "description": "Whether the property is animated",
22 | "$ref": "#/$defs/values/int-boolean",
23 | "const": 0
24 | },
25 | "k": {
26 | "title": "Value",
27 | "description": "Static Value",
28 | "type": "number"
29 | }
30 | }
31 | },
32 | {
33 | "$comment": "Animated",
34 | "properties": {
35 | "ix": {
36 | "title": "Property Index",
37 | "type": "integer"
38 | },
39 | "a": {
40 | "title": "Animated",
41 | "description": "Whether the property is animated",
42 | "$ref": "#/$defs/values/int-boolean",
43 | "const": 1
44 | },
45 | "k": {
46 | "type": "array",
47 | "title": "Keyframes",
48 | "description": "Array of keyframes",
49 | "items": {
50 | "$ref": "#/$defs/properties/vector-keyframe"
51 | }
52 | }
53 | }
54 | }
55 | ]
56 | }
57 |
--------------------------------------------------------------------------------
/schema/properties/split-position.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Split Position",
5 | "description": "An animatable position where x and y are definied and animated separately.",
6 | "properties": {
7 | "s": {
8 | "title": "Split",
9 | "description": "Whether the position has split values",
10 | "type": "boolean",
11 | "const": true
12 | },
13 | "x": {
14 | "title": "X Position",
15 | "description": "X Position",
16 | "$ref": "#/$defs/properties/scalar-property"
17 | },
18 | "y": {
19 | "title": "Y Position",
20 | "description": "Y Position",
21 | "$ref": "#/$defs/properties/scalar-property"
22 | }
23 | },
24 | "required": ["s", "x", "y"]
25 | }
26 |
--------------------------------------------------------------------------------
/schema/properties/splittable-position-property.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Splittable Position Property",
5 | "description": "An animatable position where position values may be defined and animated separately.",
6 | "oneOf": [
7 | {
8 | "$comment": "Grouped XY position coordinates",
9 | "$ref": "#/$defs/properties/position-property",
10 | "properties": {
11 | "s": {
12 | "title": "Split",
13 | "description": "Whether the position has split values",
14 | "type": "boolean",
15 | "const": false
16 | }
17 | }
18 | },
19 | {
20 | "$comment": "Split XY position coordinates",
21 | "$ref": "#/$defs/properties/split-position"
22 | }
23 | ]
24 | }
25 |
--------------------------------------------------------------------------------
/schema/properties/vector-keyframe.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Vector Keyframe",
5 | "allOf": [
6 | {
7 | "$ref": "#/$defs/properties/base-keyframe"
8 | },
9 | {
10 | "properties": {
11 | "s": {
12 | "title": "Value",
13 | "description": "Value at this keyframe.",
14 | "$ref": "#/$defs/values/vector"
15 | },
16 | "e": {
17 | "title": "End value",
18 | "description": "Value at the end of the keyframe, note that this is deprecated and you should use `s` from the next keyframe to get this value",
19 | "deprecated": true,
20 | "$ref": "#/$defs/values/vector"
21 | }
22 | }
23 | }
24 | ],
25 | "required": ["s"]
26 | }
27 |
--------------------------------------------------------------------------------
/schema/properties/vector-property.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Vector Property",
5 | "description": "An animatable property that holds an array of numbers",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/properties/property"
9 | },
10 | {
11 | "properties": {
12 | "l": {
13 | "title": "Length",
14 | "description": "Number of components in the value arrays.\nIf present values will be truncated or expanded to match this length when accessed from expressions.",
15 | "type": "integer"
16 | }
17 | }
18 | }
19 | ],
20 | "oneOf": [
21 | {
22 | "$comment": "Not animated",
23 | "properties": {
24 | "a": {
25 | "title": "Animated",
26 | "description": "Whether the property is animated",
27 | "$ref": "#/$defs/values/int-boolean",
28 | "const": 0
29 | },
30 | "k": {
31 | "title": "Value",
32 | "description": "Static Value",
33 | "$ref": "#/$defs/values/vector"
34 | }
35 | }
36 | },
37 | {
38 | "$comment": "Animated",
39 | "properties": {
40 | "a": {
41 | "title": "Animated",
42 | "description": "Whether the property is animated",
43 | "$ref": "#/$defs/values/int-boolean",
44 | "const": 1
45 | },
46 | "k": {
47 | "type": "array",
48 | "title": "Keyframes",
49 | "description": "Array of keyframes",
50 | "items": {
51 | "$ref": "#/$defs/properties/vector-keyframe"
52 | }
53 | }
54 | }
55 | }
56 | ]
57 | }
58 |
--------------------------------------------------------------------------------
/schema/root.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "$id": "https://lottiefiles.github.io/lottie-docs/schema/lottie.schema.json",
4 | "$ref": "#/$defs/composition/animation"
5 | }
6 |
--------------------------------------------------------------------------------
/schema/shapes/all-graphic-elements.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "$comment": "List of valid shapes",
4 | "oneOf": [
5 | {"$ref": "#/$defs/shapes/ellipse"},
6 | {"$ref": "#/$defs/shapes/fill"},
7 | {"$ref": "#/$defs/shapes/gradient-fill"},
8 | {"$ref": "#/$defs/shapes/gradient-stroke"},
9 | {"$ref": "#/$defs/shapes/group"},
10 | {"$ref": "#/$defs/shapes/merge"},
11 | {"$ref": "#/$defs/shapes/no-style"},
12 | {"$ref": "#/$defs/shapes/offset-path"},
13 | {"$ref": "#/$defs/shapes/path"},
14 | {"$ref": "#/$defs/shapes/polystar"},
15 | {"$ref": "#/$defs/shapes/pucker-bloat"},
16 | {"$ref": "#/$defs/shapes/rectangle"},
17 | {"$ref": "#/$defs/shapes/repeater"},
18 | {"$ref": "#/$defs/shapes/rounded-corners"},
19 | {"$ref": "#/$defs/shapes/stroke"},
20 | {"$ref": "#/$defs/shapes/transform"},
21 | {"$ref": "#/$defs/shapes/trim-path"},
22 | {"$ref": "#/$defs/shapes/twist"},
23 | {"$ref": "#/$defs/shapes/zig-zag"},
24 | {"$ref": "#/$defs/shapes/unknown-shape"}
25 | ]
26 | }
27 |
--------------------------------------------------------------------------------
/schema/shapes/base-gradient.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Base Gradient",
5 | "description": "Common properties for gradients",
6 | "allOf": [
7 | {
8 | "type": "object",
9 | "properties": {
10 | "g": {
11 | "title": "Colors",
12 | "description": "Gradient colors",
13 | "$ref": "#/$defs/properties/gradient-property"
14 | },
15 | "s": {
16 | "title": "Start Point",
17 | "description": "Starting point for the gradient",
18 | "$ref": "#/$defs/properties/position-property"
19 | },
20 | "e": {
21 | "title": "End Point",
22 | "description": "End point for the gradient",
23 | "$ref": "#/$defs/properties/position-property"
24 | },
25 | "t": {
26 | "title": "Gradient Type",
27 | "description": "Type of the gradient",
28 | "$ref": "#/$defs/constants/gradient-type"
29 | },
30 | "h": {
31 | "title": "Highlight Length",
32 | "description": "Highlight Length, as a percentage between `s` and `e`",
33 | "$ref": "#/$defs/properties/scalar-property"
34 | },
35 | "a": {
36 | "title": "Highlight Angle",
37 | "description": "Highlight Angle in clockwise degrees, relative to the direction from `s` to `e`",
38 | "$ref": "#/$defs/properties/scalar-property"
39 | }
40 | },
41 | "required": [
42 | "s", "e", "g", "t"
43 | ]
44 | }
45 | ]
46 | }
47 |
--------------------------------------------------------------------------------
/schema/shapes/base-stroke.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Base Stroke",
5 | "description": "Common properties for stroke styles",
6 | "allOf": [
7 | {
8 | "type": "object",
9 | "properties": {
10 | "lc": {
11 | "title": "Line Cap",
12 | "$ref": "#/$defs/constants/line-cap",
13 | "default": 2
14 | },
15 | "lj": {
16 | "title": "Line Join",
17 | "$ref": "#/$defs/constants/line-join",
18 | "default": 2
19 | },
20 | "ml": {
21 | "title": "Miter Limit",
22 | "type": "number",
23 | "default": 0
24 | },
25 | "ml2": {
26 | "title": "Miter Limit",
27 | "description": "Animatable alternative to ml",
28 | "$ref": "#/$defs/properties/scalar-property"
29 | },
30 | "w": {
31 | "title": "Width",
32 | "description": "Stroke width",
33 | "$ref": "#/$defs/properties/scalar-property"
34 | },
35 | "d": {
36 | "title": "Dashes",
37 | "description": "Dashed line definition",
38 | "type": "array",
39 | "items": {
40 | "$ref": "#/$defs/shapes/stroke-dash"
41 | }
42 | }
43 | },
44 | "required": ["w"]
45 | }
46 | ]
47 | }
48 |
49 |
--------------------------------------------------------------------------------
/schema/shapes/ellipse.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Ellipse",
5 | "description": "Ellipse shape",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/shapes/shape"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "ty": {
14 | "title": "Shape Type",
15 | "type": "string",
16 | "const": "el"
17 | },
18 | "p": {
19 | "title": "Position",
20 | "$ref": "#/$defs/properties/position-property"
21 | },
22 | "s": {
23 | "title": "Size",
24 | "$ref": "#/$defs/properties/vector-property"
25 | }
26 | },
27 | "required": [
28 | "ty", "s", "p"
29 | ]
30 | }
31 | ]
32 | }
33 |
--------------------------------------------------------------------------------
/schema/shapes/fill.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Fill",
5 | "description": "Solid fill color",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/shapes/shape-style"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "ty": {
14 | "title": "Shape Type",
15 | "type": "string",
16 | "const": "fl"
17 | },
18 | "c": {
19 | "title": "Color",
20 | "$ref": "#/$defs/properties/color-property"
21 | },
22 | "r": {
23 | "title": "Fill Rule",
24 | "$ref": "#/$defs/constants/fill-rule"
25 | }
26 | },
27 | "required": [
28 | "ty", "c"
29 | ]
30 | }
31 | ]
32 | }
33 |
--------------------------------------------------------------------------------
/schema/shapes/gradient-fill.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Gradient",
5 | "description": "Gradient fill color",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/shapes/shape-style"
9 | },
10 | {
11 | "$ref": "#/$defs/shapes/base-gradient"
12 | },
13 | {
14 | "type": "object",
15 | "properties": {
16 | "ty": {
17 | "title": "Shape Type",
18 | "type": "string",
19 | "const": "gf"
20 | },
21 | "r": {
22 | "title": "Fill Rule",
23 | "$ref": "#/$defs/constants/fill-rule"
24 | }
25 | },
26 | "required": [
27 | "ty"
28 | ]
29 | }
30 | ]
31 | }
32 |
--------------------------------------------------------------------------------
/schema/shapes/gradient-stroke.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Gradient Stroke",
5 | "description": "Gradient stroke",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/shapes/shape-style"
9 | },
10 | {
11 | "$ref": "#/$defs/shapes/base-stroke"
12 | },
13 | {
14 | "$ref": "#/$defs/shapes/base-gradient"
15 | },
16 | {
17 | "type": "object",
18 | "properties": {
19 | "ty": {
20 | "title": "Shape Type",
21 | "type": "string",
22 | "const": "gs"
23 | }
24 | },
25 | "required": [
26 | "ty"
27 | ]
28 | }
29 | ]
30 | }
31 |
--------------------------------------------------------------------------------
/schema/shapes/graphic-element.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Graphic Element",
5 | "description": "Element used to display vector data in a shape layer",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/helpers/visual-object"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "hd": {
14 | "title": "Hidden",
15 | "description": "Whether the shape is hidden",
16 | "type": "boolean"
17 | },
18 | "ty": {
19 | "title": "Shape Type",
20 | "type": "string"
21 | },
22 | "bm": {
23 | "title": "Blend Mode",
24 | "$ref": "#/$defs/constants/blend-mode"
25 | },
26 | "ix": {
27 | "title": "Property index",
28 | "description": "Index used in expressions",
29 | "type": "integer"
30 | },
31 | "cl": {
32 | "title": "CSS Class",
33 | "description": "CSS class used by the SVG renderer",
34 | "type": "string"
35 | },
36 | "ln": {
37 | "title": "Layer XML ID",
38 | "description": "`id` attribute used by the SVG renderer",
39 | "type": "string"
40 | }
41 | },
42 | "required": ["ty"]
43 | }
44 | ]
45 | }
46 |
--------------------------------------------------------------------------------
/schema/shapes/group.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Group",
5 | "description": "Shape Element that can contain other shapes",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/shapes/graphic-element"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "ty": {
14 | "title": "Shape Type",
15 | "type": "string",
16 | "const": "gr"
17 | },
18 | "np": {
19 | "title": "Number Of Properties",
20 | "type": "number"
21 | },
22 | "it": {
23 | "title": "Shapes",
24 | "type": "array",
25 | "items": {
26 | "$ref": "#/$defs/shapes/all-graphic-elements"
27 | }
28 | },
29 | "cix": {
30 | "title": "Property index",
31 | "description": "Index used in expressions",
32 | "type": "integer"
33 | }
34 | },
35 | "required": [
36 | "ty"
37 | ]
38 | }
39 | ]
40 | }
41 |
--------------------------------------------------------------------------------
/schema/shapes/merge.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Merge",
5 | "description": "Boolean operator on shapes",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/shapes/graphic-element"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "ty": {
14 | "title": "Shape Type",
15 | "type": "string",
16 | "const": "mm"
17 | },
18 | "mm": {
19 | "title": "Merge Mode",
20 | "$ref": "#/$defs/constants/merge-mode",
21 | "default": 1
22 | }
23 | },
24 | "required": [
25 | "ty"
26 | ]
27 | }
28 | ]
29 | }
30 |
--------------------------------------------------------------------------------
/schema/shapes/modifier.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Modifier",
5 | "description": "Modifiers change the bezier curves of neighbouring shapes",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/shapes/graphic-element"
9 | }
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/schema/shapes/no-style.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "No Style",
5 | "description": "Represents a style for shapes without fill or stroke",
6 | "deprecated": true,
7 | "allOf": [
8 | {
9 | "$ref": "#/$defs/shapes/shape-style"
10 | },
11 | {
12 | "type": "object",
13 | "properties": {
14 | "ty": {
15 | "title": "Shape Type",
16 | "type": "string",
17 | "const": "no"
18 | }
19 | },
20 | "required": [
21 | "ty"
22 | ]
23 | }
24 | ]
25 | }
26 |
27 |
--------------------------------------------------------------------------------
/schema/shapes/offset-path.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Offset Path",
5 | "description": "Interpolates the shape with its center point and bezier tangents with the opposite direction",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/shapes/modifier"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "ty": {
14 | "title": "Shape Type",
15 | "type": "string",
16 | "const": "op"
17 | },
18 | "a": {
19 | "title": "Amount",
20 | "$ref": "#/$defs/properties/scalar-property"
21 | },
22 | "lj": {
23 | "title": "Line Join",
24 | "$ref": "#/$defs/constants/line-join",
25 | "default": 2
26 | },
27 | "ml": {
28 | "title": "Miter Limit",
29 | "$ref": "#/$defs/properties/scalar-property"
30 | }
31 | },
32 | "required": [
33 | "ty"
34 | ]
35 | }
36 | ]
37 | }
38 |
--------------------------------------------------------------------------------
/schema/shapes/path.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Path",
5 | "description": "Custom Bezier shape",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/shapes/shape"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "ty": {
14 | "title": "Shape Type",
15 | "type": "string",
16 | "const": "sh"
17 | },
18 | "ks": {
19 | "title": "Shape",
20 | "description": "Bezier path",
21 | "$ref": "#/$defs/properties/bezier-property"
22 | }
23 | },
24 | "required": [
25 | "ty", "ks"
26 | ]
27 | }
28 | ]
29 | }
30 |
--------------------------------------------------------------------------------
/schema/shapes/pucker-bloat.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Pucker Bloat",
5 | "description": "Interpolates the shape with its center point and bezier tangents with the opposite direction",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/shapes/modifier"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "ty": {
14 | "title": "Shape Type",
15 | "type": "string",
16 | "const": "pb"
17 | },
18 | "a": {
19 | "title": "Amount",
20 | "description": "Amount as a percentage",
21 | "$ref": "#/$defs/properties/scalar-property"
22 | }
23 | },
24 | "required": [
25 | "ty"
26 | ]
27 | }
28 | ]
29 | }
30 |
--------------------------------------------------------------------------------
/schema/shapes/rectangle.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Rectangle",
5 | "description": "A simple rectangle shape",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/shapes/shape"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "ty": {
14 | "title": "Shape Type",
15 | "type": "string",
16 | "const": "rc"
17 | },
18 | "p": {
19 | "title": "Position",
20 | "description": "Center of the rectangle",
21 | "$ref": "#/$defs/properties/position-property"
22 | },
23 | "s": {
24 | "title": "Size",
25 | "$ref": "#/$defs/properties/vector-property"
26 | },
27 | "r": {
28 | "title": "Rounded",
29 | "description": "Rounded corners radius",
30 | "$ref": "#/$defs/properties/scalar-property"
31 | }
32 | },
33 | "required": [
34 | "ty", "s", "p"
35 | ]
36 | }
37 | ]
38 | }
39 |
--------------------------------------------------------------------------------
/schema/shapes/repeater-transform.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Repeater Transform",
5 | "description": "Transform used by a repeater, the transform is applied to each subsequent repeated object.",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/helpers/transform"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "so": {
14 | "title": "Start Opacity",
15 | "description": "Opacity of the first repeated object.",
16 | "$ref": "#/$defs/properties/scalar-property"
17 | },
18 | "eo": {
19 | "title": "End Opacity",
20 | "description": "Opacity of the last repeated object.",
21 | "$ref": "#/$defs/properties/scalar-property"
22 | }
23 | },
24 | "required": []
25 | }
26 | ]
27 | }
28 |
--------------------------------------------------------------------------------
/schema/shapes/repeater.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Repeater",
5 | "description": "Duplicates previous shapes in a group",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/shapes/modifier"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "ty": {
14 | "title": "Shape Type",
15 | "type": "string",
16 | "const": "rp"
17 | },
18 | "c": {
19 | "title": "Copies",
20 | "description": "Number of copies",
21 | "$ref": "#/$defs/properties/scalar-property"
22 | },
23 | "o": {
24 | "title": "Offset",
25 | "$ref": "#/$defs/properties/scalar-property"
26 | },
27 | "m": {
28 | "title": "Composite",
29 | "description": "Stacking order",
30 | "$ref": "#/$defs/constants/composite",
31 | "default": 1
32 | },
33 | "tr": {
34 | "title": "Transform",
35 | "description": "Transform applied to each copy",
36 | "$ref": "#/$defs/shapes/repeater-transform"
37 | }
38 | },
39 | "required": [
40 | "ty", "c", "tr"
41 | ]
42 | }
43 | ]
44 | }
45 |
--------------------------------------------------------------------------------
/schema/shapes/rounded-corners.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Rounded Corners",
5 | "description": "Rounds corners of other shapes",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/shapes/modifier"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "ty": {
14 | "title": "Shape Type",
15 | "type": "string",
16 | "const": "rd"
17 | },
18 | "r": {
19 | "title": "Radius",
20 | "$ref": "#/$defs/properties/scalar-property"
21 | }
22 | },
23 | "required": [
24 | "ty", "r"
25 | ]
26 | }
27 | ]
28 | }
29 |
--------------------------------------------------------------------------------
/schema/shapes/shape-style.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Shape Style",
5 | "description": "Describes the visual appearance (like fill and stroke) of neighbouring shapes",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/shapes/graphic-element"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "o": {
14 | "title": "Opacity",
15 | "description": "Opacity, 100 means fully opaque",
16 | "$ref": "#/$defs/properties/scalar-property"
17 | }
18 | },
19 | "required": [
20 | "o"
21 | ]
22 | }
23 | ]
24 | }
25 |
--------------------------------------------------------------------------------
/schema/shapes/shape.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Shape",
5 | "description": "Drawable shape, defines the actual shape but not the style",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/shapes/graphic-element"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "d": {
14 | "title": "Direction",
15 | "description": "Direction the shape is drawn as, mostly relevant when using trim path",
16 | "$ref": "#/$defs/constants/shape-direction"
17 | }
18 | }
19 | }
20 | ]
21 | }
22 |
--------------------------------------------------------------------------------
/schema/shapes/stroke-dash.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Stroke Dash",
5 | "description": "An item used to described the dash pattern in a stroked path",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/helpers/visual-object"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "n": {
14 | "title": "Dash Type",
15 | "$ref": "#/$defs/constants/stroke-dash-type",
16 | "default": "d"
17 | },
18 | "v": {
19 | "title": "Length",
20 | "description": "Length of the dash",
21 | "$ref": "#/$defs/properties/scalar-property"
22 | }
23 | },
24 | "required": []
25 | }
26 | ]
27 | }
28 |
--------------------------------------------------------------------------------
/schema/shapes/stroke.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Stroke",
5 | "description": "Solid stroke",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/shapes/shape-style"
9 | },
10 | {
11 | "$ref": "#/$defs/shapes/base-stroke"
12 | },
13 | {
14 | "type": "object",
15 | "properties": {
16 | "ty": {
17 | "title": "Shape Type",
18 | "type": "string",
19 | "const": "st"
20 | },
21 | "c": {
22 | "title": "Color",
23 | "description": "Stroke color",
24 | "$ref": "#/$defs/properties/color-property"
25 | }
26 | },
27 | "required": [
28 | "ty", "c"
29 | ]
30 | }
31 | ]
32 | }
33 |
34 |
--------------------------------------------------------------------------------
/schema/shapes/transform.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Transform Shape",
5 | "description": "Group transform",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/shapes/graphic-element"
9 | },
10 | {
11 | "$ref": "#/$defs/helpers/transform"
12 | },
13 | {
14 | "type": "object",
15 | "properties": {
16 | "ty": {
17 | "title": "Shape Type",
18 | "type": "string",
19 | "const": "tr"
20 | }
21 | },
22 | "required": [
23 | "ty"
24 | ]
25 | }
26 | ]
27 | }
--------------------------------------------------------------------------------
/schema/shapes/trim-path.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Trim Path",
5 | "description": "Trims shapes into a segment",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/shapes/modifier"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "ty": {
14 | "title": "Shape Type",
15 | "type": "string",
16 | "const": "tm"
17 | },
18 | "s": {
19 | "title": "Start",
20 | "description": "Segment start",
21 | "$ref": "#/$defs/properties/scalar-property"
22 | },
23 | "e": {
24 | "title": "End",
25 | "description": "Segment end",
26 | "$ref": "#/$defs/properties/scalar-property"
27 | },
28 | "o": {
29 | "title": "Offset",
30 | "$ref": "#/$defs/properties/scalar-property"
31 | },
32 | "m": {
33 | "title": "Multiple",
34 | "description": "How to treat multiple copies",
35 | "$ref": "#/$defs/constants/trim-multiple-shapes"
36 | }
37 | },
38 | "required": [
39 | "ty", "o", "s", "e"
40 | ]
41 | }
42 | ]
43 | }
44 |
--------------------------------------------------------------------------------
/schema/shapes/twist.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Twist",
5 | "allOf": [
6 | {
7 | "$ref": "#/$defs/shapes/modifier"
8 | },
9 | {
10 | "type": "object",
11 | "properties": {
12 | "ty": {
13 | "title": "Shape Type",
14 | "type": "string",
15 | "const": "tw"
16 | },
17 | "a": {
18 | "title": "Angle",
19 | "$ref": "#/$defs/properties/scalar-property"
20 | },
21 | "c": {
22 | "title": "Center",
23 | "$ref": "#/$defs/properties/vector-property"
24 | }
25 | },
26 | "required": [
27 | "ty"
28 | ]
29 | }
30 | ]
31 | }
32 |
--------------------------------------------------------------------------------
/schema/shapes/unknown-shape.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Unknown shape types",
5 | "description": "Unknown shape types. Types not defined by the specification are still allowed.",
6 | "properties": {
7 | "ty": {
8 | "not": {
9 | "$comment": "enum list is dynamically generated",
10 | "enum": []
11 | }
12 | }
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/schema/shapes/zig-zag.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Zig Zag",
5 | "description": "Changes the edges of affected shapes into a series of peaks and valleys of uniform size",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/shapes/modifier"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "ty": {
14 | "title": "Shape Type",
15 | "type": "string",
16 | "const": "zz"
17 | },
18 | "r": {
19 | "title": "Frequency",
20 | "description": "Number of ridges per segment",
21 | "$ref": "#/$defs/properties/scalar-property"
22 | },
23 | "s": {
24 | "title": "Amplitude",
25 | "description": "Distance between peaks and troughs",
26 | "$ref": "#/$defs/properties/scalar-property"
27 | },
28 | "pt": {
29 | "title": "Point Type",
30 | "description": "Point type (1 = corner, 2 = smooth)",
31 | "$ref": "#/$defs/properties/scalar-property"
32 | }
33 | },
34 | "required": [
35 | "ty"
36 | ]
37 | }
38 | ]
39 | }
40 |
41 |
--------------------------------------------------------------------------------
/schema/styles/all-layer-styles.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "oneOf": [
4 | {"$ref": "#/$defs/styles/bevel-emboss-style"},
5 | {"$ref": "#/$defs/styles/color-overlay-style"},
6 | {"$ref": "#/$defs/styles/drop-shadow-style"},
7 | {"$ref": "#/$defs/styles/gradient-overlay-style"},
8 | {"$ref": "#/$defs/styles/inner-glow-style"},
9 | {"$ref": "#/$defs/styles/inner-shadow-style"},
10 | {"$ref": "#/$defs/styles/outer-glow-style"},
11 | {"$ref": "#/$defs/styles/satin-style"},
12 | {"$ref": "#/$defs/styles/stroke-style"}
13 | ]
14 | }
15 |
--------------------------------------------------------------------------------
/schema/styles/color-overlay-style.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Color Overlay",
5 | "allOf": [
6 | {
7 | "$ref": "#/$defs/styles/layer-style"
8 | },
9 | {
10 | "type": "object",
11 | "properties": {
12 | "ty": {
13 | "title": "Type",
14 | "description": "Layer Type",
15 | "type": "integer",
16 | "const": 7
17 | },
18 | "bm": {
19 | "title": "Blend Mode",
20 | "$ref": "#/$defs/properties/scalar-property"
21 | },
22 | "c": {
23 | "title": "Color",
24 | "$ref": "#/$defs/properties/color-property"
25 | },
26 | "so": {
27 | "title": "Opacity",
28 | "$ref": "#/$defs/properties/scalar-property"
29 | }
30 | },
31 | "required": ["ty"]
32 | }
33 | ]
34 | }
35 |
--------------------------------------------------------------------------------
/schema/styles/drop-shadow-style.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Drop Shadow",
5 | "allOf": [
6 | {
7 | "$ref": "#/$defs/styles/layer-style"
8 | },
9 | {
10 | "type": "object",
11 | "properties": {
12 | "ty": {
13 | "title": "Type",
14 | "description": "Layer Type",
15 | "type": "integer",
16 | "const": 1
17 | },
18 | "c": {
19 | "title": "Color",
20 | "$ref": "#/$defs/properties/color-property"
21 | },
22 | "o": {
23 | "title": "Opacity",
24 | "$ref": "#/$defs/properties/scalar-property"
25 | },
26 | "a": {
27 | "title": "Angle",
28 | "description": "Local light angle",
29 | "$ref": "#/$defs/properties/scalar-property"
30 | },
31 | "s": {
32 | "title": "Size",
33 | "description": "Blur size",
34 | "$ref": "#/$defs/properties/scalar-property"
35 | },
36 | "d": {
37 | "title": "Distance",
38 | "$ref": "#/$defs/properties/scalar-property"
39 | },
40 | "ch": {
41 | "title": "Choke Spread",
42 | "$ref": "#/$defs/properties/scalar-property"
43 | },
44 | "bm": {
45 | "title": "Blend Mode",
46 | "$ref": "#/$defs/properties/scalar-property"
47 | },
48 | "no": {
49 | "title": "Noise",
50 | "$ref": "#/$defs/properties/scalar-property"
51 | },
52 | "lc": {
53 | "title": "Layer Conceal",
54 | "description": "Layer knowck out drop shadow",
55 | "$ref": "#/$defs/properties/scalar-property"
56 | }
57 | },
58 | "required": ["ty"]
59 | }
60 | ]
61 | }
62 |
--------------------------------------------------------------------------------
/schema/styles/gradient-overlay-style.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Gradient Overlay",
5 | "allOf": [
6 | {
7 | "$ref": "#/$defs/styles/layer-style"
8 | },
9 | {
10 | "type": "object",
11 | "properties": {
12 | "ty": {
13 | "title": "Type",
14 | "description": "Layer Type",
15 | "type": "integer",
16 | "const": 8
17 | },
18 | "bm": {
19 | "title": "Blend Mode",
20 | "$ref": "#/$defs/properties/scalar-property"
21 | },
22 | "o": {
23 | "title": "Opacity",
24 | "$ref": "#/$defs/properties/scalar-property"
25 | },
26 | "gf": {
27 | "title": "Gradient",
28 | "$ref": "#/$defs/properties/gradient-property"
29 | },
30 | "gs": {
31 | "title": "Smoothness",
32 | "$ref": "#/$defs/properties/scalar-property"
33 | },
34 | "a": {
35 | "title": "Angle",
36 | "$ref": "#/$defs/properties/scalar-property"
37 | },
38 | "gt": {
39 | "title": "Gradient Type",
40 | "$ref": "#/$defs/constants/gradient-type"
41 | },
42 | "re": {
43 | "title": "Reverse",
44 | "$ref": "#/$defs/properties/scalar-property"
45 | },
46 | "al": {
47 | "title": "Align",
48 | "description": "Align with layer",
49 | "$ref": "#/$defs/properties/scalar-property"
50 | },
51 | "s": {
52 | "title": "Scale",
53 | "$ref": "#/$defs/properties/scalar-property"
54 | },
55 | "of": {
56 | "title": "Offset",
57 | "$ref": "#/$defs/properties/scalar-property"
58 | }
59 | },
60 | "required": ["ty"]
61 | }
62 | ]
63 | }
64 |
--------------------------------------------------------------------------------
/schema/styles/inner-glow-style.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Inner Glow",
5 | "allOf": [
6 | {
7 | "$ref": "#/$defs/styles/layer-style"
8 | },
9 | {
10 | "type": "object",
11 | "properties": {
12 | "ty": {
13 | "title": "Type",
14 | "description": "Layer Type",
15 | "type": "integer",
16 | "const": 4
17 | },
18 | "c": {
19 | "title": "Color",
20 | "$ref": "#/$defs/properties/color-property"
21 | },
22 | "o": {
23 | "title": "Opacity",
24 | "$ref": "#/$defs/properties/scalar-property"
25 | },
26 | "r": {
27 | "title": "Range",
28 | "$ref": "#/$defs/properties/scalar-property"
29 | },
30 | "sr": {
31 | "title": "Source",
32 | "$ref": "#/$defs/properties/scalar-property"
33 | },
34 | "ch": {
35 | "title": "Choke Spread",
36 | "$ref": "#/$defs/properties/scalar-property"
37 | },
38 | "bm": {
39 | "title": "Blend Mode",
40 | "$ref": "#/$defs/properties/scalar-property"
41 | },
42 | "no": {
43 | "title": "Noise",
44 | "$ref": "#/$defs/properties/scalar-property"
45 | },
46 | "j": {
47 | "title": "Jitter",
48 | "$ref": "#/$defs/properties/scalar-property"
49 | }
50 | },
51 | "required": ["ty"]
52 | }
53 | ]
54 | }
55 |
56 |
57 |
58 |
--------------------------------------------------------------------------------
/schema/styles/inner-shadow-style.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Inner Shadow",
5 | "allOf": [
6 | {
7 | "$ref": "#/$defs/styles/layer-style"
8 | },
9 | {
10 | "type": "object",
11 | "properties": {
12 | "ty": {
13 | "title": "Type",
14 | "description": "Layer Type",
15 | "type": "integer",
16 | "const": 2
17 | },
18 | "c": {
19 | "title": "Color",
20 | "$ref": "#/$defs/properties/color-property"
21 | },
22 | "o": {
23 | "title": "Opacity",
24 | "$ref": "#/$defs/properties/scalar-property"
25 | },
26 | "a": {
27 | "title": "Angle",
28 | "description": "Local light angle",
29 | "$ref": "#/$defs/properties/scalar-property"
30 | },
31 | "s": {
32 | "title": "Size",
33 | "description": "Blur size",
34 | "$ref": "#/$defs/properties/scalar-property"
35 | },
36 | "d": {
37 | "title": "Distance",
38 | "$ref": "#/$defs/properties/scalar-property"
39 | },
40 | "ch": {
41 | "title": "Choke Spread",
42 | "$ref": "#/$defs/properties/scalar-property"
43 | },
44 | "bm": {
45 | "title": "Blend Mode",
46 | "$ref": "#/$defs/properties/scalar-property"
47 | },
48 | "no": {
49 | "title": "Noise",
50 | "$ref": "#/$defs/properties/scalar-property"
51 | }
52 | },
53 | "required": ["ty"]
54 | }
55 | ]
56 | }
57 |
--------------------------------------------------------------------------------
/schema/styles/layer-style.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Layer Style",
5 | "description": "Style applied to a layer",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/helpers/visual-object"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "ty": {
14 | "title": "Type",
15 | "description": "Style Type",
16 | "type": "integer"
17 | }
18 | },
19 | "required": ["ty"]
20 | }
21 | ]
22 | }
23 |
24 |
--------------------------------------------------------------------------------
/schema/styles/outer-glow-style.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Outer Glow",
5 | "allOf": [
6 | {
7 | "$ref": "#/$defs/styles/layer-style"
8 | },
9 | {
10 | "type": "object",
11 | "properties": {
12 | "ty": {
13 | "title": "Type",
14 | "description": "Layer Type",
15 | "type": "integer",
16 | "const": 3
17 | },
18 | "c": {
19 | "title": "Color",
20 | "$ref": "#/$defs/properties/color-property"
21 | },
22 | "o": {
23 | "title": "Opacity",
24 | "$ref": "#/$defs/properties/scalar-property"
25 | },
26 | "r": {
27 | "title": "Range",
28 | "$ref": "#/$defs/properties/scalar-property"
29 | },
30 | "ch": {
31 | "title": "Choke Spread",
32 | "$ref": "#/$defs/properties/scalar-property"
33 | },
34 | "bm": {
35 | "title": "Blend Mode",
36 | "$ref": "#/$defs/properties/scalar-property"
37 | },
38 | "no": {
39 | "title": "Noise",
40 | "$ref": "#/$defs/properties/scalar-property"
41 | },
42 | "j": {
43 | "title": "Jitter",
44 | "$ref": "#/$defs/properties/scalar-property"
45 | }
46 | },
47 | "required": ["ty"]
48 | }
49 | ]
50 | }
51 |
--------------------------------------------------------------------------------
/schema/styles/satin-style.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Satin",
5 | "allOf": [
6 | {
7 | "$ref": "#/$defs/styles/layer-style"
8 | },
9 | {
10 | "type": "object",
11 | "properties": {
12 | "ty": {
13 | "title": "Type",
14 | "description": "Layer Type",
15 | "type": "integer",
16 | "const": 6
17 | },
18 | "bm": {
19 | "title": "Blend Mode",
20 | "$ref": "#/$defs/properties/scalar-property"
21 | },
22 | "c": {
23 | "title": "Color",
24 | "$ref": "#/$defs/properties/color-property"
25 | },
26 | "o": {
27 | "title": "Opacity",
28 | "$ref": "#/$defs/properties/scalar-property"
29 | },
30 | "a": {
31 | "title": "Angle",
32 | "$ref": "#/$defs/properties/scalar-property"
33 | },
34 | "d": {
35 | "title": "Distance",
36 | "$ref": "#/$defs/properties/scalar-property"
37 | },
38 | "s": {
39 | "title": "Size",
40 | "$ref": "#/$defs/properties/scalar-property"
41 | },
42 | "in": {
43 | "title": "Invert",
44 | "$ref": "#/$defs/properties/scalar-property"
45 | }
46 | },
47 | "required": ["ty"]
48 | }
49 | ]
50 | }
51 |
--------------------------------------------------------------------------------
/schema/styles/stroke-style.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Layer Stroke",
5 | "description": "Stroke / frame",
6 | "allOf": [
7 | {
8 | "$ref": "#/$defs/styles/layer-style"
9 | },
10 | {
11 | "type": "object",
12 | "properties": {
13 | "ty": {
14 | "title": "Type",
15 | "description": "Layer Type",
16 | "type": "integer",
17 | "const": 0
18 | },
19 | "s": {
20 | "title": "Size",
21 | "$ref": "#/$defs/properties/scalar-property"
22 | },
23 | "c": {
24 | "title": "Color",
25 | "$ref": "#/$defs/properties/color-property"
26 | }
27 | },
28 | "required": ["ty"]
29 | }
30 | ]
31 | }
32 |
--------------------------------------------------------------------------------
/schema/text/animated-text-document.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Animated Text Document",
5 | "description": "Animated property representing the text contents",
6 | "properties": {
7 | "k": {
8 | "title": "Keyframes",
9 | "type": "array",
10 | "items": {
11 | "$ref": "#/$defs/text/text-document-keyframe"
12 | }
13 | },
14 | "x": {
15 | "title": "Expression",
16 | "type": "string"
17 | },
18 | "sid": {
19 | "title": "Slot ID",
20 | "description": "One of the ID in the file's slots",
21 | "type": "string"
22 | }
23 | },
24 | "required": ["k"]
25 | }
26 |
--------------------------------------------------------------------------------
/schema/text/character-data.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Character Data",
5 | "description": "Defines character shapes",
6 | "properties": {
7 | "ch": {
8 | "title": "Character",
9 | "type": "string",
10 | "default": ""
11 | },
12 | "fFamily": {
13 | "title": "Font Family",
14 | "type": "string",
15 | "default": ""
16 | },
17 | "size": {
18 | "title": "Font Size",
19 | "type": "number",
20 | "default": 0
21 | },
22 | "style": {
23 | "title": "Font Style",
24 | "type": "string",
25 | "default": ""
26 | },
27 | "w": {
28 | "title": "Width",
29 | "type": "number",
30 | "default": 0
31 | },
32 | "data": {
33 | "title": "Data",
34 | "oneOf": [
35 | {"$ref": "#/$defs/text/character-shapes"},
36 | {"$ref": "#/$defs/text/character-precomp"}
37 | ]
38 | }
39 | },
40 | "required": ["data", "ch", "fFamily", "size", "style", "w"]
41 | }
42 |
--------------------------------------------------------------------------------
/schema/text/character-precomp.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Character Precomp",
5 | "description": "Defines a character as a precomp layer",
6 | "properties": {
7 | "refId": {
8 | "title": "Reference Id",
9 | "description": "ID of the precomp as specified in the assets",
10 | "type": "string"
11 | },
12 | "ks": {
13 | "title": "Transform",
14 | "description": "Layer transform",
15 | "$ref": "#/$defs/helpers/transform"
16 | },
17 | "ip": {
18 | "title": "In Point",
19 | "description": "Frame when the layer becomes visible",
20 | "type": "number",
21 | "default": 0
22 | },
23 | "op": {
24 | "title": "Out Point",
25 | "description": "Frame when the layer becomes invisible",
26 | "type": "number",
27 | "default": 99999
28 | },
29 | "sr": {
30 | "title": "Time Stretch",
31 | "type": "number",
32 | "default": 1
33 | },
34 | "st": {
35 | "title": "Start Time",
36 | "type": "number",
37 | "default": 0
38 | }
39 | },
40 | "required": ["refId"]
41 | }
42 |
--------------------------------------------------------------------------------
/schema/text/character-shapes.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Character Shape",
5 | "description": "Defines a character as shapes",
6 | "properties": {
7 | "shapes": {
8 | "title": "Shapes",
9 | "description": "Shapes forming the character",
10 | "type": "array",
11 | "items": {
12 | "$ref": "#/$defs/shapes/all-graphic-elements"
13 | }
14 | }
15 | },
16 | "required": ["shapes"]
17 | }
18 |
--------------------------------------------------------------------------------
/schema/text/font-list.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Font List",
5 | "description": "List of fonts",
6 | "allOf": [
7 | {
8 | "type": "object",
9 | "properties": {
10 | "list": {
11 | "title": "List",
12 | "type": "array",
13 | "items": {
14 | "$ref": "#/$defs/text/font"
15 | }
16 | }
17 | },
18 | "required": []
19 | }
20 | ]
21 | }
22 |
--------------------------------------------------------------------------------
/schema/text/font.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Font",
5 | "description": "Describes how a font with given settings should be loaded",
6 | "allOf": [
7 | {
8 | "type": "object",
9 | "properties": {
10 | "ascent": {
11 | "title": "Ascent",
12 | "type": "number",
13 | "description": "Text will be moved down based on this value"
14 | },
15 | "fFamily": {
16 | "title": "Font Family",
17 | "type": "string",
18 | "default": "sans"
19 | },
20 | "fName": {
21 | "title": "Name",
22 | "description": "Name used by text documents to reference this font, usually it's `fFamily` followed by `fStyle`",
23 | "type": "string",
24 | "default": "sans-Regular"
25 | },
26 | "fStyle": {
27 | "title": "Font Style",
28 | "examples": ["Regular", "Bold", "Bold Italic"],
29 | "type": "string",
30 | "default": "Regular"
31 | },
32 | "fPath": {
33 | "title": "Path",
34 | "type": "string"
35 | },
36 | "fWeight": {
37 | "title": "Weight",
38 | "type": "string"
39 | },
40 | "origin": {
41 | "title": "Origin",
42 | "$ref": "#/$defs/constants/font-path-origin"
43 | },
44 | "fClass": {
45 | "type": "string",
46 | "title": "CSS Class",
47 | "description": "CSS Class applied to text objects using this font"
48 | }
49 | },
50 | "required": [
51 | "fFamily", "fName", "fStyle"
52 | ]
53 | }
54 | ]
55 | }
56 |
--------------------------------------------------------------------------------
/schema/text/text-alignment-options.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Text Alignment Options",
5 | "description": "",
6 | "allOf": [
7 | {
8 | "type": "object",
9 | "properties": {
10 | "a": {
11 | "title": "Alignment",
12 | "description": "Group alignment",
13 | "$ref": "#/$defs/properties/vector-property"
14 | },
15 | "g": {
16 | "title": "Grouping",
17 | "description": "Anchor point grouping",
18 | "$ref": "#/$defs/constants/text-grouping"
19 | }
20 | },
21 | "required": []
22 | }
23 | ]
24 | }
25 |
--------------------------------------------------------------------------------
/schema/text/text-data.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Text Data",
5 | "description": "Contains all the text data and animation",
6 | "allOf": [
7 | {
8 | "type": "object",
9 | "properties": {
10 | "a": {
11 | "title": "Ranges",
12 | "type": "array",
13 | "items": {
14 | "$ref": "#/$defs/text/text-range"
15 | }
16 | },
17 | "d": {
18 | "title": "Document",
19 | "$ref": "#/$defs/text/animated-text-document"
20 | },
21 | "m": {
22 | "title": "Alignment",
23 | "$ref": "#/$defs/text/text-alignment-options"
24 | },
25 | "p": {
26 | "title": "Follow Path",
27 | "$ref": "#/$defs/text/text-follow-path"
28 | }
29 | },
30 | "required": ["a", "d", "m", "p"]
31 | }
32 | ]
33 | }
34 |
--------------------------------------------------------------------------------
/schema/text/text-document-keyframe.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Text Document Keyframe",
5 | "description": "A keyframe containing a text document",
6 | "properties": {
7 | "s": {
8 | "title": "Start",
9 | "$ref": "#/$defs/text/text-document"
10 | },
11 | "t": {
12 | "title": "Time",
13 | "type": "number",
14 | "default": 0
15 | }
16 | },
17 | "required": ["s", "t"]
18 | }
19 |
--------------------------------------------------------------------------------
/schema/text/text-follow-path.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Text Follow Path",
5 | "description": "Uses the path described by a layer mask to put the text on said path.",
6 | "allOf": [
7 | {
8 | "type": "object",
9 | "properties": {
10 | "m": {
11 | "title": "Mask",
12 | "type": "integer",
13 | "description": "Index of the mask to use"
14 | },
15 | "f": {
16 | "title": "First Margin",
17 | "$ref": "#/$defs/properties/scalar-property"
18 | },
19 | "l": {
20 | "title": "Last Margin",
21 | "$ref": "#/$defs/properties/scalar-property"
22 | },
23 | "r": {
24 | "title": "Reverse Path",
25 | "$ref": "#/$defs/properties/scalar-property"
26 | },
27 | "a": {
28 | "title": "Force Alignment",
29 | "$ref": "#/$defs/properties/scalar-property"
30 | },
31 | "p": {
32 | "title": "Perpendicular To Path",
33 | "$ref": "#/$defs/properties/scalar-property"
34 | }
35 | },
36 | "required": []
37 | }
38 | ]
39 | }
40 |
--------------------------------------------------------------------------------
/schema/text/text-range-selector.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Text Range Selector",
5 | "properties": {
6 | "t": {
7 | "title": "Expressible",
8 | "$ref": "#/$defs/values/int-boolean"
9 | },
10 | "xe": {
11 | "title": "Max Ease",
12 | "$ref": "#/$defs/properties/scalar-property"
13 | },
14 | "ne": {
15 | "title": "Min Ease",
16 | "$ref": "#/$defs/properties/scalar-property"
17 | },
18 | "a": {
19 | "title": "Max Amount",
20 | "$ref": "#/$defs/properties/scalar-property"
21 | },
22 | "b": {
23 | "title": "Based On",
24 | "$ref": "#/$defs/constants/text-based"
25 | },
26 | "rn": {
27 | "title": "Randomize",
28 | "$ref": "#/$defs/values/int-boolean"
29 | },
30 | "sh": {
31 | "title": "Shape",
32 | "$ref": "#/$defs/constants/text-shape"
33 | },
34 | "o": {
35 | "title": "Offset",
36 | "$ref": "#/$defs/properties/scalar-property"
37 | },
38 | "r": {
39 | "title": "Range Units",
40 | "$ref": "#/$defs/constants/text-range-units"
41 | },
42 | "sm": {
43 | "title": "Selector Smoothness",
44 | "$ref": "#/$defs/properties/scalar-property"
45 | },
46 | "s": {
47 | "title": "Start",
48 | "$ref": "#/$defs/properties/scalar-property"
49 | },
50 | "e": {
51 | "title": "End",
52 | "$ref": "#/$defs/properties/scalar-property"
53 | }
54 | },
55 | "required": ["t", "a", "b", "sh"]
56 | }
57 |
--------------------------------------------------------------------------------
/schema/text/text-range.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Text Range",
5 | "description": "Range of text with custom animations and style",
6 | "properties": {
7 | "nm": {
8 | "title": "Name",
9 | "type": "string"
10 | },
11 | "s": {
12 | "title": "Selector",
13 | "$ref": "#/$defs/text/text-range-selector"
14 | },
15 | "a": {
16 | "title": "Style",
17 | "$ref": "#/$defs/text/text-style"
18 | }
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/schema/values/bezier.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "object",
4 | "title": "Bezier",
5 | "description": "Cubic polybezier",
6 | "properties": {
7 | "c": {
8 | "title": "Closed",
9 | "type": "boolean",
10 | "default": false
11 | },
12 | "i": {
13 | "title": "In Tangents",
14 | "type": "array",
15 | "description": "Array of points, each point is an array of coordinates.\nThese points are along the `in` tangents relative to the corresponding `v`.",
16 | "items": {
17 | "$ref": "#/$defs/values/vector",
18 | "default": []
19 | }
20 | },
21 | "o": {
22 | "title": "Out Tangents",
23 | "type": "array",
24 | "description": "Array of points, each point is an array of coordinates.\nThese points are along the `out` tangents relative to the corresponding `v`.",
25 | "items": {
26 | "$ref": "#/$defs/values/vector",
27 | "default": []
28 | }
29 | },
30 | "v": {
31 | "title": "Vertices",
32 | "description": "Array of points, each point is an array of coordinates.\nThese points are along the bezier path",
33 | "type": "array",
34 | "items": {
35 | "$ref": "#/$defs/values/vector",
36 | "default": []
37 | }
38 | }
39 | },
40 | "required": ["i", "v", "o"]
41 | }
42 |
--------------------------------------------------------------------------------
/schema/values/color.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "array",
4 | "title": "Color",
5 | "description": "Color as a [r, g, b] array with values in [0, 1]",
6 | "items": {
7 | "type": "number",
8 | "minimum": 0,
9 | "maximum": 1
10 | },
11 | "minItems": 3,
12 | "maxItems": 4
13 | }
14 |
--------------------------------------------------------------------------------
/schema/values/data-url.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "string",
4 | "title": "Data URL",
5 | "description": "An embedded data object",
6 | "pattern": "^data:([\\w/]+)(;base64)?,(.+)$"
7 | }
8 |
--------------------------------------------------------------------------------
/schema/values/gradient.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "array",
4 | "title": "Gradient",
5 | "description": "A flat list of color stops followed by optional transparency stops. A color stop is [offset, red, green, blue]. A transparency stop is [offset, transparency]. All values are between 0 and 1",
6 | "items": {
7 | "type": "number",
8 | "minimum": 0,
9 | "maximum": 1
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/schema/values/hexcolor.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "string",
4 | "title": "Hex Color",
5 | "description": "Color value in hexadecimal format, with two digits per component ('#RRGGBB')",
6 | "pattern": "^#([a-fA-F0-9]{6})$",
7 | "examples": ["#FF00AA"]
8 | }
9 |
--------------------------------------------------------------------------------
/schema/values/int-boolean.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "integer",
4 | "title": "Integer Boolean",
5 | "description": "Represents boolean values as an integer. `0` is false, `1` is true.",
6 | "default": 0,
7 | "examples": [0],
8 | "enum": [0, 1],
9 | "oneOf": [
10 | {
11 | "title": "True",
12 | "const": 1
13 | },
14 | {
15 | "title": "False",
16 | "const": 0
17 | }
18 | ]
19 | }
20 |
--------------------------------------------------------------------------------
/schema/values/vector.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/draft/2020-12/schema",
3 | "type": "array",
4 | "title": "Vector",
5 | "description": "An array of numbers",
6 | "items": {
7 | "type": "number"
8 | }
9 | }
10 |
11 |
--------------------------------------------------------------------------------
/theme/fonts/Karla-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LottieFiles/lottie-docs/19c88803c86a7832305af661c05a6e8496d751f7/theme/fonts/Karla-Bold.ttf
--------------------------------------------------------------------------------
/theme/fonts/Karla-Italic-VariableFont_wght.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LottieFiles/lottie-docs/19c88803c86a7832305af661c05a6e8496d751f7/theme/fonts/Karla-Italic-VariableFont_wght.ttf
--------------------------------------------------------------------------------
/theme/fonts/Karla-VariableFont_wght.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LottieFiles/lottie-docs/19c88803c86a7832305af661c05a6e8496d751f7/theme/fonts/Karla-VariableFont_wght.ttf
--------------------------------------------------------------------------------
/theme/fonts/Type-Ø-Tones-Arboria-Black.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LottieFiles/lottie-docs/19c88803c86a7832305af661c05a6e8496d751f7/theme/fonts/Type-Ø-Tones-Arboria-Black.otf
--------------------------------------------------------------------------------
/theme/fonts/Type-Ø-Tones-Arboria-Bold.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LottieFiles/lottie-docs/19c88803c86a7832305af661c05a6e8496d751f7/theme/fonts/Type-Ø-Tones-Arboria-Bold.otf
--------------------------------------------------------------------------------
/theme/img/chevron-left.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/theme/img/chevron-right.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/theme/img/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LottieFiles/lottie-docs/19c88803c86a7832305af661c05a6e8496d751f7/theme/img/favicon.ico
--------------------------------------------------------------------------------
/theme/img/icon-right-arrow.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/theme/img/icon-search.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/theme/img/lf-logo-mini.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/theme/img/logo-lottie.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/theme/img/logo-svelte.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/theme/img/vue-logo.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/theme/main.html:
--------------------------------------------------------------------------------
1 | {% extends "base.html" %}
2 |
3 |
4 | {% block extrahead %}
5 | {{ super() }}
6 |
7 | {% if config.theme.colorscheme %}
8 |
9 | {% else %}
10 |
11 | {% endif %}
12 |
13 |
14 |
15 |
16 |
17 |
18 | {% if config.theme.hljs_languages %}
19 | {%- for lang in config.theme.hljs_languages %}
20 |
21 | {%- endfor %}
22 | {% endif %}
23 |
24 |
25 |
26 |
27 |
28 | {% endblock %}
29 |
30 | {% block footer %}
31 |
32 | {% endblock %}
33 |
34 | {% block scripts %}
35 |
36 | {{ super() }}
37 |
45 |
46 | {% endblock %}
47 |
48 |
--------------------------------------------------------------------------------
/theme/toc.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/tools/expression_convert.py:
--------------------------------------------------------------------------------
1 | import sys
2 | import json
3 |
4 |
5 | def variable(name=None, type=None, description=None, default=None, notes=None):
6 | params = dict(locals())
7 | ret = {}
8 | for k, v in params.items():
9 | if v is not None:
10 | ret[k] = v
11 | return ret
12 |
13 |
14 | name = ret = description = None
15 | params = []
16 |
17 | for line in sys.stdin:
18 | try:
19 | chunks = [c.strip() for c in line.split(":")]
20 | if chunks[0] == "name":
21 | name = chunks[1]
22 | elif chunks[0] == "return":
23 | ret = chunks[1:]
24 | elif chunks[0] == "param":
25 | params.append(chunks[1:])
26 | elif chunks[0] == "description":
27 | description = chunks[1]
28 | elif name:
29 | fdef = {}
30 | if description:
31 | fdef["description"] = description
32 | if params:
33 | fdef["params"] = [variable(*p) for p in params]
34 | if ret:
35 | fdef["return"] = variable(None, *ret)
36 |
37 | data = json.dumps({name: fdef}, indent=4)
38 | print(data[1:-2]+",")
39 |
40 | name = ret = description = None
41 | params = []
42 | except Exception as e:
43 | print(e)
44 |
45 |
46 |
--------------------------------------------------------------------------------