{
  "name": "Dissolve",
  "dimension": "text",
  "slot": "action_bar",
  "width": 256,
  "height": 128,
  "textBaseline": 128,
  "placement": {
    "x": 0,
    "y": 0
  },
  "shapes": [],
  "texts": [],
  "heads": [],
  "images": [],
  "bars": [],
  "triggers": [],
  "effect": {
    "glsl": "float dsMoment(vec2 key) { return 0.6 + h2(key) * 1.4; }\nfloat dsBack(vec2 key) { return 3.6 + h2(key + 31.0) * 0.8; }\nvec4 effect(Fx f) {\n    float u = fract(f.t / 5.0 - f.o.x * 0.002) * 5.0;\n    vec2 base = floor(f.o);\n    vec2 q = floor(f.p);\n    float a = G(f.p);\n    float m = dsMoment(base + q);\n    float back = dsBack(base + q);\n    vec4 col = vec4(0.0);\n    if (a > 0.5 && (u < m || u > back)) {\n        float hot = u < m ? 1.0 - smoothstep(0.0, 0.3, m - u) : 1.0 - smoothstep(0.0, 0.25, u - back);\n        col = vec4(mix(vec3(0.89, 0.8, 1.0), vec3(1.0, 0.55, 1.0), hot), 1.0);\n    }\n    for (int k = 1; k <= 9; k++) {\n        for (int dx = -1; dx <= 1; dx++) {\n            vec2 src = q + vec2(float(dx), float(k));\n            if (G(src + 0.5) < 0.5) continue;\n            float sm = dsMoment(base + src);\n            if (u <= sm || u >= dsBack(base + src)) continue;\n            float age = u - sm;\n            float sway = floor(sin(age * 4.0 + h2(base + src) * 6.0) + 0.5);\n            if (floor(age * 5.0) == float(k) && sway == float(-dx)) {\n                col = over(col, vec4(mix(vec3(1.0, 0.7, 1.0), vec3(0.42, 0.18, 1.0), age / 1.8), 1.0 - age / 2.0));\n            }\n        }\n    }\n    return over(col, vec4(0.1, 0.03, 0.2, G(f.p - 1.0) * (u < m ? 0.8 : 0.0)));\n}\n",
    "pad": [
      1,
      10,
      2,
      2
    ],
    "prompt": "",
    "preset": "embers",
    "sample": "Vanishing"
  }
}