Swamp DragonDocs

Build a plugin

The plugin.json format: every timeline operation, its options and limits, with complete samples.

A plugin adds a ready-made piece of motion graphics to the timeline at the playhead: a lower third, a spotlight with an arrow, a transition style. People install it from the marketplace and apply it from the editor’s Plugins panel. One Undo removes everything it added.

Plugins are data, not code

A plugin is a plugin.json file listing timeline operations. Swamp Dragon never downloads or runs code from a plugin, so a plugin can’t reach the network, read files or see anything outside the timeline. That is why installing one is safe, and why the format below is strict.

#What a plugin can do

OperationWhat it addsOptions
add_textA caption on the text trackStyle lower-third, title or chapter, text up to 500 characters, text and background color, entrance animation
add_shapeA motion graphic on the graphics trackShape arrow, spotlight, highlight, ellipse or progress, position and size, entrance animation
set_transitionThe same transition on every cutKind fade-black, fade-white, blur, zoom-in or slide-left, 0.05 to 1 second

A plugin holds 1 to 50 operations. Everything it adds stays editable: people can move it, retype a caption or restyle a shape in the inspector after applying it.

#The plugin.json file

Put the listing details and the operations in one JSON file. The marketplace form reads the name, description, category, icon and version from it, so you don’t type them twice.

{
  "name": "Studio lower third",
  "description": "Add an animated name and role caption at the playhead.",
  "category": "Titles",
  "icon": "lower-third",
  "version": "1.0.0",
  "operations": [
    {
      "type": "add_text",
      "start": 0,
      "end": 4,
      "text": "Name · Role",
      "style": "lower-third",
      "patch": {
        "anim": { "in": "slide-up", "out": "fade", "duration": 0.4 },
        "color": "#F8F9F1",
        "bg": "#23392A"
      }
    }
  ]
}

#Listing fields

FieldRules
nameUp to 60 characters. Say what it adds, like “Studio lower third”, not “Pro Titles Pack Ultimate”
descriptionOne sentence, up to 120 characters, starting with a verb
categoryTitles, Effects, Transitions, Sound or Integrations
iconOne of lower-third, pointer, transitions, zoom, camera, video, chapters, scissors, keyboard, privacy, brand, tutorial
versionThree numbers, like 1.0.0. Raise it with every change
operationsThe operations below. You can also nest them as "package": { "operations": [...] }

#Operations reference

#Timing

start and end are seconds from the playhead, between 0 and 60, and end must be after start. If the video ends sooner, the item is shortened to fit. set_transition has no timing because it applies to every cut.

#add_text

{
  "type": "add_text",
  "start": 0,
  "end": 3,
  "text": "Chapter 2 · Setting up",
  "style": "chapter",
  "patch": {
    "anim": { "in": "fade", "out": "fade", "duration": 0.3 },
    "color": "#23392A",
    "bg": "#DCE7CC"
  }
}
KeyValues
text1 to 500 characters. Use placeholder wording people will replace, like “Name · Role”
stylelower-third, title or chapter
patch.colorText color as six-digit hex, like #F8F9F1
patch.bgBackground color as six-digit hex
patch.animOptional entrance: in is slide-up, draw or fade, out is fade, duration is 0.05 to 3 seconds

#add_shape

{
  "type": "add_shape",
  "start": 0,
  "end": 4,
  "shape": "arrow",
  "patch": {
    "rect": { "x": 0.18, "y": 0.72, "w": 0.18, "h": -0.2 },
    "anim": { "in": "draw", "out": "fade", "duration": 0.5 }
  }
}

rect places the shape as fractions of the output frame: x and y are the top-left corner from 0 to 1, w and h the size. An arrow is drawn from (x, y) to (x + w, y + h), so a negative h points it upwards. Values range from −1 to 1. Leave rect out to use the shape’s default position in the middle of the frame.

#set_transition

{
  "type": "set_transition",
  "id": "all",
  "transition": { "kind": "fade-black", "duration": 0.25 }
}

id is always "all". Keep transitions short; 0.2 to 0.4 seconds suits screen recordings.

#Samples

These are the official plugins in the marketplace, complete and ready to copy.

#Focus pointer

A spotlight on the middle of the frame and an arrow drawn towards it.

{
  "name": "Focus pointer",
  "description": "Spotlight the middle of the frame and draw an arrow to it.",
  "category": "Effects",
  "icon": "pointer",
  "version": "1.0.0",
  "operations": [
    { "type": "add_shape", "start": 0, "end": 4, "shape": "spotlight",
      "patch": { "rect": { "x": 0.35, "y": 0.3, "w": 0.3, "h": 0.3 } } },
    { "type": "add_shape", "start": 0, "end": 4, "shape": "arrow",
      "patch": { "rect": { "x": 0.18, "y": 0.72, "w": 0.18, "h": -0.2 },
                 "anim": { "in": "draw", "out": "fade", "duration": 0.5 } } }
  ]
}

#Smooth cuts

A short fade through black on every cut.

{
  "name": "Smooth cuts",
  "description": "Fade through black on every cut.",
  "category": "Transitions",
  "icon": "transitions",
  "version": "1.0.0",
  "operations": [
    { "type": "set_transition", "id": "all",
      "transition": { "kind": "fade-black", "duration": 0.25 } }
  ]
}

#Test before you publish

  1. Check the file

    Make sure it is valid JSON, every operation has a type, and no key is misspelled. Unknown keys are rejected, not ignored.

  2. Try it on a real recording

    Recreate the operations by hand in the editor on a short recording, at the start, middle and near the end of the timeline, in 16:9 and 9:16.

  3. Check Undo

    Applying a plugin is one undo step. After one ⌘Z, the timeline must look exactly as before.

  4. Publish

    Open your account on the website, go to Publish, choose Plugin and upload plugin.json. The upload is checked with the same rules as the app, and any error names the operation and key to fix.

Plan

Installing and applying plugins needs the Unlimited plan. Anyone can publish one.

Before you publish, read the publishing guidelines.