{
  "name": "nether portal",
  "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 p = f.q;\n    float a = G(p);\n    float nearInk = N4(p);\n    float halo = N8(p);\n    vec2 world = f.o + p;\n    vec2 cell = floor((world + vec2(0.0, 2.0)) / 9.0);\n    vec2 uv = mod(world + vec2(0.0, 2.0), 9.0) - 4.5;\n    float phase = h2(cell) * 6.2831853;\n    float angle = atan(uv.y + 0.001, uv.x + 0.001);\n    float clock = f.t * (2.0 * PI / 4.8);\n    float curl = sin(length(uv) * 1.12 - angle * 2.0 - clock + phase);\n    float mist = vnoise(world * 0.32 + vec2(cos(clock), sin(clock)) * 0.75);\n    float energy = curl * 0.27 + mist * 0.38 + 0.35;\n    vec3 c = energy < 0.32 ? vec3(0.40, 0.07, 0.64)\n           : energy < 0.51 ? vec3(0.55, 0.11, 0.79)\n           : energy < 0.69 ? vec3(0.71, 0.23, 0.93)\n           : vec3(0.89, 0.47, 1.0);\n    float top = 1.0 - G(p - vec2(0.0, 1.0));\n    c = mix(c, vec3(0.80, 0.36, 0.98), top * 0.28);\n    float outer = max(max(G(p + vec2(2.0, 0.0)), G(p - vec2(2.0, 0.0))),\n                      max(G(p + vec2(0.0, 2.0)), G(p - vec2(0.0, 2.0))));\n    vec4 col = vec4(0.51, 0.055, 0.82, outer * (0.10 + 0.025 * sin(clock + phase)));\n    col = over(vec4(0.50, 0.055, 0.78, halo * 0.24), col);\n    col = over(vec4(0.07, 0.012, 0.13, G(p - 1.0)), col);\n    col = over(vec4(0.14, 0.018, 0.23, nearInk * 0.94), col);\n    col = over(vec4(c, a), col);\n    float seed = h2(f.o + vec2(7.0, 3.0));\n    float life = fract(f.t / 4.8 + seed);\n    float side = seed < 0.5 ? -1.0 : 1.0;\n    vec2 pos = vec2(side < 0.0 ? 0.0 : f.w, 5.0 - life * 9.0);\n    pos.x += side * (0.5 + 1.5 * life) + sin(life * PI * 2.0 + seed * 9.0) * 0.5;\n    pos = floor(pos) + 0.5;\n    float fade = smoothstep(0.0, 0.18, life) * (1.0 - smoothstep(0.70, 1.0, life));\n    vec2 d = abs(p - pos);\n    float particle = (d.x < 0.5 && d.y < 0.5) ? fade : 0.0;\n    vec2 sd = abs(p - pos - vec2(0.0, 1.0));\n    float particleShadow = (sd.x < 0.5 && sd.y < 0.5) ? fade * 0.65 : 0.0;\n    vec4 mote = over(vec4(0.84, 0.34, 1.0, particle), vec4(0.21, 0.025, 0.34, particleShadow));\n    return over(vec4(mote.rgb, mote.a * (1.0 - a)), col);\n}",
    "pad": [
      3,
      4,
      3,
      2
    ],
    "prompt": "nether portal text effect",
    "sample": "Nether Portal"
  }
}