{
  "format_version": "1.10.0",
  "particle_effect": {
    "description": {
      "identifier": "minecraft:portal_north_south",
      "basic_render_parameters": {
        "material": "particles_blend",
        "texture": "textures/particle/particles"
      }
    },
    "components": {
      "minecraft:emitter_rate_instant": {
        "num_particles": "variable.num_particles"
      },

      "minecraft:emitter_lifetime_expression": {
        "activation_expression": 1,
        "expiration_expression": 1
      },

      "minecraft:emitter_shape_point": {
        "direction": [0, -1, "variable.particle_random_2 < 0.5 ? math.random(-1.5, -0.5) : math.random(0.5, 1.5)"],
        "offset": ["math.random(-0.5f, 0.5f)", "math.random(-0.5f, 0.5f) + 1.25", "variable.particle_random_2 < 0.5 ? math.random(-2.5, -1.5) : math.random(1.5, 2.5)"]
      },

      "minecraft:particle_initialization": {
        "per_render_expression": "variable.alpha = variable.particle_age/variable.particle_lifetime; variable.size = (variable.particle_random_2 * 0.02 + 0.05) * (2*variable.alpha - variable.alpha*variable.alpha); variable.color_base = variable.particle_random_1 * 0.6 + 0.4;"
      },

      "minecraft:particle_initial_speed": "1",

      "minecraft:particle_lifetime_expression": {
        "max_lifetime": "Math.Random(2.0,2.45)"
      },

      "minecraft:particle_kill_plane": [0, 0, 1, 0],
    
      "minecraft:particle_motion_dynamic": {
          "linear_acceleration": [0, 0, "variable.particle_random_2 < 0.5 ? 1.5 : -1.5"]
      },

      "minecraft:particle_appearance_billboard": {
        "size": [
          "variable.size",
          "variable.size"
        ],
        "facing_camera_mode": "lookat_xyz",

        "uv": {
          "texture_width": 128,
          "texture_height": 128,
          "uv": [ "Math.round(variable.particle_random_3*8)*8", 0 ],
          "uv_size": [ 8, 8 ]
        }
      },
      "minecraft:particle_appearance_tinting": {
        "color": [ "variable.color_base", "variable.color_base * 0.3", "variable.color_base * 0.9", 1.0 ]
      }
    }
  }
}