{
  "name": "hallowen",
  "dimension": "text",
  "slot": "action_bar",
  "width": 256,
  "height": 128,
  "textBaseline": 128,
  "placement": {
    "x": 0,
    "y": 0
  },
  "shapes": [],
  "texts": [],
  "heads": [],
  "images": [],
  "bars": [],
  "triggers": [],
  "effect": {
    "glsl": "vec4 effect(Fx f) {\n    vec2 q = f.q;\n    vec2 world = f.o + q;\n    float seed = h2(f.o);\n    float a = G(q);\n    float nearInk = N4(q);\n    vec4 col = vec4(0.0);\n    vec4 bubbles = vec4(0.0);\n\n    // Tapering, curling ribbons of violet and toxic-green potion vapour.\n    if (q.y < 2.0) {\n        float rise = clamp((1.5 - q.y) / 7.0, 0.0, 1.0);\n        float curl = sin(q.y * 0.78 + f.t * 1.25 + seed * 6.28) * (0.45 + rise * 1.0);\n        float center = f.w * 0.5 + curl;\n        float width = max(0.9, f.w * 0.31) * (1.0 - rise * 0.48);\n        float plume = 1.0 - smoothstep(0.25, 1.45, abs(q.x - center) / width);\n        float mist = vnoise(vec2(world.x * 0.48 + curl * 0.2, q.y * 0.48 + f.t * 1.25));\n        float wisps = plume * (0.35 + mist * 0.65) * (1.0 - smoothstep(0.25, 1.0, rise));\n        vec3 smoke = mix(vec3(0.40, 0.12, 0.61), vec3(0.65, 0.35, 0.85), mist);\n        smoke = mix(smoke, vec3(0.37, 0.78, 0.17), smoothstep(0.54, 0.79, mist) * 0.78);\n        col = vec4(smoke, wisps * (seed > 0.22 ? 0.54 : 0.23));\n    }\n\n    // Small hollow bubbles begin in the ink and drift up into the smoke.\n    for (int i = 0; i < 2; i++) {\n        float k = float(i);\n        float phase = fract(f.t * (0.19 + seed * 0.035) + seed + k * 0.5);\n        float by = 3.0 - phase * 9.0;\n        float bx = 0.5 + h2(f.o + vec2(k * 13.0, 4.0)) * max(f.w - 1.0, 0.0);\n        bx += sin(phase * 6.28 + seed * 8.0 + k) * 0.65;\n        vec2 delta = q - vec2(bx, by);\n        float r = 0.65 + phase * 0.65;\n        float dist = length(delta);\n        float ring = 1.0 - smoothstep(0.26, 0.50, abs(dist - r));\n        float fade = smoothstep(0.0, 0.15, phase) * (1.0 - smoothstep(0.76, 1.0, phase));\n        vec3 bc = k < 0.5 ? vec3(0.51, 1.0, 0.12) : vec3(0.81, 0.40, 1.0);\n        if (delta.x < 0.0 && delta.y < 0.0) bc = mix(bc, vec3(0.92, 1.0, 0.76), 0.65);\n        bubbles = over(vec4(bc, ring * fade * 0.78), bubbles);\n    }\n    col = over(vec4(bubbles.rgb, bubbles.a * (q.y < 1.0 ? 1.0 : 0.0)), col);\n\n    // A dark plum rim and drop shadow keep the face crisp on bright skies.\n    col = over(vec4(0.035, 0.008, 0.07, G(q - 1.0) * 0.95), col);\n    col = over(vec4(0.09, 0.015, 0.15, nearInk * (1.0 - a)), col);\n    float magic = sin(world.x * 0.19 + q.y * 0.49 - f.t * 1.25);\n    float violet = smoothstep(-0.16, 0.63, magic);\n    vec3 c = mix(vec3(0.35, 0.98, 0.055), vec3(0.72, 0.20, 1.0), violet);\n    float upperEdge = 1.0 - G(q - vec2(0.0, 1.0));\n    float lowerEdge = 1.0 - G(q + vec2(0.0, 1.0));\n    c *= 1.0 - 0.20 * lowerEdge;\n    vec3 highlight = mix(vec3(0.85, 1.0, 0.43), vec3(0.95, 0.62, 1.0), violet);\n    c = mix(c, highlight, upperEdge * 0.65);\n    float shimmer = pow(max(0.0, sin(world.x * 0.61 - q.y * 0.8 - f.t * 2.1)), 14.0);\n    c = mix(c, mix(vec3(0.90, 1.0, 0.63), vec3(1.0, 0.81, 1.0), violet), shimmer * 0.52);\n    col = over(vec4(c, a), col);\n    col = over(vec4(bubbles.rgb, bubbles.a * a * 0.42), col);\n\n    // Occasional crossed diamonds and rune sparks, with gentle fade-in/out.\n    if (seed > 0.48) {\n        float phase = fract(f.t * 0.22 + seed * 3.0);\n        vec2 sp = vec2(floor(seed * max(f.w - 1.0, 1.0)) + 0.5, floor(-1.0 - phase * 4.0) + 0.5);\n        vec2 d = abs(q - sp);\n        float rune = 0.0;\n        if (seed > 0.76) {\n            if (abs(d.x + d.y - 1.0) < 0.1 || (d.x < 0.1 && d.y == 2.0)) rune = 1.0;\n        } else {\n            if ((d.x < 0.1 && d.y <= 1.0) || (d.y < 0.1 && d.x <= 1.0)) rune = 1.0;\n        }\n        float fade = sin(phase * PI);\n        vec3 rc = mix(vec3(0.83, 0.42, 1.0), vec3(0.78, 1.0, 0.35), seed);\n        col = over(vec4(rc, rune * fade * 0.85 * (q.y < 0.0 ? 1.0 : 0.0)), col);\n    }\n    return col;\n}",
    "pad": [
      2,
      7,
      2,
      1
    ],
    "prompt": "Design a Halloween text effect inspired by witch magic and potions. The letters should shimmer in neon green and purple, with bubbling magical energy, rising toxic smoke, and sparkling rune-like particles. The animation should feel arcane, playful, and mysterious.",
    "sample": "Witch's Brew"
  }
}