Skip to content

ddp from openRGB to wled stopped working in some later v16 nightly version #5532

Description

@greekthano

EDIT: updating typos and misstates

What happened?

one of the later v16 nightly versions broke ability to control wled device using openRGB ddp. i had been updating nightly v16 versions over the last few months without issue and i only recently observed this problem, so it must be in one of the later v16 nightly but unfortunately i cant tell which one.
rolling back to v0.15.4 resolves the problem.
switching from DDP protocol to E1.31 in openRGB is a workaround unless you exceed max leds supported by E1.31

very basic config with 2 outputs of same type, attached configs

wled_cfg_stripscase.json

wled_cfg_stripscase.json

To Reproduce Bug

install latest pawnio version of openrgb and add manual ddp device and point it to wled esp32 controller. this works in v0.15.4 but doesnt work in v16 although it did work in v16 one of the earlier nightly versions.

Expected Behavior

ddp should continue working

Install Method

Binary from WLED.me

What version of WLED?

v16 beta

Which microcontroller/board are you seeing the problem on?

ESP32

Relevant log/trace output

Anything else?

No response

Code of Conduct

  • I agree to follow this project's Code of Conduct

Activity

  1. DedeHai commented on Apr 24, 2026

    @DedeHai
    Collaborator

    please share the exact DDP header that is output by openRGB. Either they violate the protocol or WLED is not properly handling all possible valid formats.

  2. greekthano commented on Apr 24, 2026

    @greekthano
    Author

    im sorry that I dont understand what it means to share "the exact DDP header that is output by openRGB" but if you can give me instruction then I will do it.
    also I believe i misstated the problem so i'm updating the report. specifically, the problem is happening when using openRGB to control wled device. openRGB works to control wled device when wled is v15.4. openRGB fails to control wled device when wled is v16

  3. changed the title [-]ddp to openRGB stopped working in some later v16 nightly version[/-] [+]ddp from openRGB to wled stopped working in some later v16 nightly version[/+] on Apr 24, 2026
  4. DedeHai commented on Apr 24, 2026

    @DedeHai
    Collaborator

    either need to search the source code or use a network packet sniffer. I never did this so can't tell you exactly how. DDP uses a 10byte (or 14byte) header with info about the data that follows. if that header has incorrect information, WLED rejects the packet.

  5. greekthano commented on Apr 24, 2026

    @greekthano
    Author

    okay well without instruction then i cannot give you that information. should i just close this issue or something else?

  6. DedeHai commented on Apr 24, 2026

    @DedeHai
    Collaborator

    found it:
    https://gitlab.com/CalcProgrammer1/OpenRGB/-/blob/master/Controllers/DDPController/DDPController.cpp?ref_type=heads#L225

    they do send "undefined LED type" which WLED now rejects as undefined can not be parsed.

    edit: the protocol must specify what type of data it is, RGB, RGBW.
    @softhack007 should we allow "undefined" and fallback to RGB for the sake of compatibility?

    edit2:
    its not only "undefined", it is datatype=1, which is just plain wrong:

    
    byte  2:    data type
                set to zero if not used or undefined, otherwise:
                bits: C R TTT SSS
                 C is 0 for standard types or 1 for Customer defined
                 R is reserved and should be 0.
                 TTT is data type 
                  000 = undefined
                  001 = RGB
                  010 = HSL
                  011 = RGBW
                  100 = grayscale
                 SSS is size in bits per pixel element (like just R or G or B data)
                  0=undefined, 1=1, 2=4, 3=8, 4=16, 5=24, 6=32
    

    "0x01" means "standard type" with an "undefined data type" and "1 bit per color" , which is not supported by WLED. This question on why they use this incorrect format needs to go to openRGB devs.

  7. greekthano commented on Apr 24, 2026

    @greekthano
    Author

    thanks for this information although I dont fully understand it..

    if it is decided that no wled change will be done, could you please share precise wording that I will then send to openRGB and ask them for a change ?

    otherwise, if change in wled, i could think of looking at the first output in order to determine what type to use. maybe its not desirable but seems like it could work.. although simply reverting back to allowing undefined would also work in this usecase - was that causing problems?

  8. DedeHai commented on Apr 24, 2026

    @DedeHai
    Collaborator

    simply reverting back to allowing undefined would also work in this usecase - was that causing problems?

    yes, it was causing problems, that's why we decided to change it. A protocol is well defined, if unsupported data is sent, it should not just be accepted.

  9. DedeHai commented on Apr 24, 2026

    @DedeHai
    Collaborator

    we need to check this more thoroughly and then decide what to do. But ultimately openRGB may need to fix the bug on their end.

  10. added
    externalNot part of WLED itself - an external plugin/remote etc.
    on Apr 24, 2026
  11. greekthano commented on Apr 25, 2026

    @greekthano
    Author

    EDIT: i reported the issue to openRGB but did so in the wrong place resulting in closed issue. still trying to understand how to properly raise this with openRGB...

  12. added this to the 16.0.0 beta milestone on Apr 25, 2026
  13. DedeHai commented on Apr 26, 2026

    @DedeHai
    Collaborator

    looking into this in more detail.
    @netmindz the DDP protocol DOES have 2bits to ID the version but it is not being used, it is and always has been "version 1" even though the header definition has changed.
    Here is what I have done (PR almost ready):

    • not reject any malformed dataType in the header but always assume RGB24 except if type=RGBW
    • always assumes 8bit per color channel
    • instead, the packet size is checked against the required data length for the assumed format, if it is too small, it is rejected (OOB read safety)

    I also found that for artnet and E1.31 packets, no checks against incomplete or malformed packets was done. I added checks to make sure that no OOB reads are possible anymore.

  14. softhack007 commented on Apr 27, 2026

    @softhack007
    Member

    edit2:
    its not only "undefined", it is datatype=1, which is just plain wrong

    @DedeHai (just back from a nice week off-line) yes, this seems to be a mistake that was copy&pasted between several DDP tools - I've made a similar bug report in another DDP tool that supports WLED (ppamment/wledcast#6).

    Maybe for the time being, we should

    • allow "0x00" (undefinded) and "0x01" (legacy) and assume they are 8bit RGB
    • or reject only some unsupported formats (HSL, grayscale) and unsupported bitdepths ( 4, 16,24,32)

    and add a new error status ("unsupported format of external data") so users get an indication of what went wrong.

  15. softhack007 commented on Apr 27, 2026

    @softhack007
    Member
    • unsupported bitdepths ( 4, 16,24,32)

    Edit: bitdepth = 24 seems to be another common misuse of the specs, maybe we need to include "SSS = 0x05" into the whitelist, too

    for example https://github.com/fieldOfView/WLED-video/blob/984166bb0b6fc838b77c911dbd94ba391e1bdb19/src/udpstreamer.py#L20

  16. DedeHai commented on Apr 27, 2026

    @DedeHai
    Collaborator

    @softhack I did implement a relaxation in PR #5547 , basically "accept all, assume RGB24 unless its explicitly RGBW then assume RGBW32"
    when you dig out older versions of the DDP specification using the way back machine, all these definitions are "TBD" and datatype=1 may at one point have been a valid RGB24 definition. unfortunately, the "protocol version" is always 0x40 (=version 1) so it can not be used to determine which definition other software is using.
    what I did add in #5547 is overflow checks for all supported protocols: if a packet is malformed, for example claiming a length of 256 but only sending 100 bytes of data, the packet will now be rejected instead of just reading out of bounds (I am surprised this has not led to more crash reports)

  17. added
    fixed in sourceThis issue is unsolved in the latest release but fixed in master
    on Apr 27, 2026
  18. softhack007 commented on Apr 27, 2026

    @softhack007
    Member

    @DedeHai yes, makes sense
    🤔 my conclusion was: either "people can't read specs" or "specs have been totally volatile" (or both 😉 ).

    So maybe better to ignore all legacy misinterpretations - as you suggested 👍

  19. greekthano commented on Apr 28, 2026

    @greekthano
    Author

    thank you to all for your work.

    i will be keeping an eye out for the soonest release this will be available in and test it out and let you know the result or you can please feel free to reach out to me ask me to test it. i have several wled devices, some with mixed strip types, and one with almost 3,000 leds over 4 outputs which might be considered very good test case (assuming i test all 4 devices).

    also just want to add my 2 cents which has probably already been considered but i would be remiss to not mention it.
    i started digging into information on the PR which was created as a result of this PR, and I noticed that several other vendors appear to be part of wled development test cases for connectivity, such as hyperion/signalrgb/etc.

    i noticed that openRGB is not on that list.
    without knowing how much extra work it would be to add the case of openRGB, I would consider adding it as the only real alternative to signalRGB but with a huge advantage of completely free and opensource - that might mean that potentially more users will be using openRGB vs signalRGB so that openRGB might be better or good as a use case. asking google which of the 2 are more widely used doesnt show a clear winner, and also the future is uncertain too. ive tried both and neither seemed much better than the other, and ultimately i refuse to pay when there is similar option free of cost(hence I settled on openRGB), which is ultimately the only reason I ever considered using WLED in the first place, which, now i cant even live without WLED (THANK YOU GUYS SO MUCH!!!!).

  20. DedeHai commented on Apr 28, 2026

    @DedeHai
    Collaborator

    @greekthano as with every PR, you can get the bins with its changes included: https://github.com/wled/WLED/actions/runs/25007402089?pr=5547#artifacts

    the changes are not specific to any external software so openRGB should work even though they use the wrong header.

  21. greekthano commented on Apr 30, 2026

    @greekthano
    Author

    thank you I did not know that I could find such bins but now I see how I can find them for future reference - thank you very much for the link to the bins.

    confirmed DDP with openRGB is now working again! closing this thank you again for all your effort.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugexternalNot part of WLED itself - an external plugin/remote etc.fixed in sourceThis issue is unsolved in the latest release but fixed in master

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions