Is the ESPHome "Pulse" light effect supposed to be this sharp?

The ESPHome documentation for the “Pulse” light effect describes it this way:

This effect makes a pulsating light. The period can be defined by update_interval, the transition length with transition_length.

According to the documentation, the transition_length can be split into on_length and off_length, but it does not appear to be split such by default. My assumption upon reading this is that the pulse is supposed to, by default, have a relatively smooth and symmetrical transition between on and off states.

On three separate ESPHome devices connected to LED rings—two Home Assistant Voice PEs, and one custom device using an ESP32 board and a NeoPixel 12-LED ring—I have enabled the “Pulse” light effect, and been surprised by the result: instead of gently fading from off to on, the light sharply spikes on, then fades out.

Sample ESPHome config for the Voice PE:

light: 
  - id: !extend led_ring
    effects: 
      - pulse:

This is not a high-quality video, in part because the phone camera wanted to automatically adjust for the sudden change in brightness, but I hope it still conveys the transition issue:

If I manually set the transition_length to 1s and the update_interval to 2s, the behavior persists: again, the LEDs turn on much more aggressively than they fade out:

This behavior is unintuitive to me, and not what I want. I assumed that the pulse effect was supposed to gently pulse in and out, and indeed, that’s what I want to use it for. My naïve reading of the documentation seems to suggest this isn’t intended, but the fact I’ve seen it on three different devices makes me wonder if the problem is between the chair and the keyboard, instead of ESPHome.

So I want to ask directly: is the default “Pulse” light effect in ESPHome intended to have a more aggressive transition when turning lights on than turning them off? If not, is this an error in ESPHome? And if I want to generate a gentle, symmetrical pulsing effect—one whose turn-on transition is as smooth as the turn-off is in these videos—how should I do that?

You forgot to post your yaml.
So what you get with this:

- pulse:
    name: "Slow Pulse"
    transition_length: 700ms
    update_interval: 2s

Maybe you missed it?

Right now, my YAML contains all of these:

      - pulse:
      - pulse:
          name: "Pulse 1T 2U"
          transition_length: 1s
          update_interval: 2s
      - pulse:
          name: "Pulse 1T 1U"
          transition_length: 1s
          update_interval: 1s
      - pulse:
          name: "Pulse 1.5T 2U"
          transition_length: 1.5s
          update_interval: 2s

They all exhibit the same aggressive ramp-up.

It doesn’t hurt to keep testing, though, so I’ve tested the following:

      - pulse:
          name: "Slow Pulse"
          transition_length: 700ms
          update_interval: 2s
      - pulse:
          name: "Pulse 3T 6U"
          transition_length: 3s
          update_interval: 6s
      - pulse:
          name: "Pulse 3T 4U"
          transition_length: 3s
          update_interval: 4s
      - pulse:
          name: "Pulse 3T 4U split"
          transition_length:
            on_length: 3s
            off_length: 3s
          update_interval: 4s
      - pulse:
          name: "Pulse 5T 7U"
          transition_length: 5s
          update_interval: 7s

Still, every one of these has exhibited the same aggressive ramp-up.

Here’s a transition length of 3 seconds and an update interval of 4:

Here’s a transition length of 5 seconds and an update interval of 7:

I think the 5/7 here is most illustrative: you can see that the transition as the LED ring turns off is gradual, with the LEDs dimming down to barely white, appearing almost blue, before turning off. They do not turn on in the same fashion.

I’m almost wondering if this is a hardware limitation…

Can easily be. I’m not familiar with that device. But you still haven’t posted your yaml. No-one knows what component are you using, what frequency etc.
Did you try some other effect that have smooth on-transition?

Oh, you want the full YAML configuration. I was confused, because I was in fact providing YAML. Glad to figure that miscommunication out.

The YAML I’m using:

substitutions:
  name: living-room-nabu-box
  friendly_name: Living Room Nabu Box
packages:
  Nabu Casa.Home Assistant Voice PE: github://esphome/home-assistant-voice-pe/home-assistant-voice.yaml
esphome:
  name: ${name}
  name_add_mac_suffix: false
  friendly_name: ${friendly_name}
  compile_process_limit: 1
api:
  encryption:
    key:  #omitted


wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  manual_ip:
    static_ip: #omitted
    gateway:  #omitted
    subnet:  #omitted

light: 
  - id: !extend led_ring
    effects: 
      - addressable_rainbow:
          name: "Rainbow"
          width: 12
      - addressable_twinkle:
          name: "Twinkle"
          twinkle_probability: 50%
      - pulse:
      - pulse:
          name: "Pulse 1T 2U"
          transition_length: 1s
          update_interval: 2s
      #- pulse:
      #    name: "Pulse 1T 1U"
      #    transition_length: 1s
      #    update_interval: 1s
      #- pulse:
      #    name: "Pulse 1.5T 2U"
      #    transition_length: 1.5s
      #    update_interval: 2s
      - pulse:
          name: "Slow Pulse"
          transition_length: 700ms
          update_interval: 2s
      - pulse:
          name: "Pulse 3T 6U"
          transition_length: 3s
          update_interval: 6s
      - pulse:
          name: "Pulse 3T 4U"
          transition_length: 3s
          update_interval: 4s
      - pulse:
          name: "Pulse 3T 4U split"
          transition_length:
            on_length: 3s
            off_length: 3s
          update_interval: 4s
      - pulse:
          name: "Pulse 5T 7U"
          transition_length: 5s
          update_interval: 7s

Some of the pulse effects are commented out just for the sake of keeping things tidy; I don’t need every effect on the light.

As you can see, this is an extension to the Home Assistant Voice PE, the default YAML for which is here. Specifically, the lines defining the light are 920-941.

The “Twinkle” effect does not seem to struggle to smoothly turn on LEDs at low brightness; the twinkles of individual LEDs appear symmetrical.