Skip to content

fix: enable Kraken Elite v2 rendering#24

Open
Cesarsk wants to merge 1 commit intobrokenmass:mainfrom
Cesarsk:fix/kraken-elite-v2-rendering
Open

fix: enable Kraken Elite v2 rendering#24
Cesarsk wants to merge 1 commit intobrokenmass:mainfrom
Cesarsk:fix/kraken-elite-v2-rendering

Conversation

@Cesarsk
Copy link
Copy Markdown

@Cesarsk Cesarsk commented Mar 30, 2026

Summary

  • add the transport and protocol fixes needed for Kraken Elite v2 / PID 0x3012 to actually render bucketed content
  • prefer PyUSB for the bulk payload interface while keeping WinUsbPy as a fallback when PyUSB is not available
  • rewrite the GIF demo flow so it uses the corrected bucket write sequence and tolerates the device's missing final ack on larger transfers

What Changed

  • driver.py
    • add PyUSB bulk-device discovery matched by serial number, with WinUsbPy fallback
    • chunk bulk writes instead of sending one large blind write
    • run the LCD initialization sequence before writes
    • accept the create bucket response quirk where status byte 4 still means success on this device
    • use the corrected write commands for GIF/RGBA transfers (0x36 0x01 <bucket> and 0x36 0x02)
  • writeGif.py
    • replace the stale script with a working bucketed GIF write path
    • resize/quantize frames before upload and fit the GIF to the device bucket size
    • clear previous transfers/buckets before writing and switch the LCD back to the written bucket after upload
    • tolerate the missing final completion ack observed on larger GIF uploads

Why

The original code detected the device but did not successfully render on Kraken Elite v2 / PID 0x3012.
On validated hardware, the main blocker was the bulk payload path: the old WinUsbPy-only flow was not reliably reaching the LCD payload endpoint, while PyUSB did.
This change keeps the existing architecture intact and only updates the parts needed to make bucketed GIF/static rendering work on the newer Elite model.

Validation

  • validated on NZXT Kraken Elite RGB 2024 / Kraken Elite v2 (VID 1E71, PID 3012)
  • confirmed the device accepts control traffic and renders bucketed content after the transport/protocol fixes
  • verified python -m py_compile driver.py writeGif.py

Notes

  • this PR is intentionally narrow and only covers the code needed to fix rendering support for the newer Elite model
  • live long-running fast Q565 streaming was not part of this validation; the confirmed working path here is bucketed rendering

@Cesarsk
Copy link
Copy Markdown
Author

Cesarsk commented Mar 30, 2026

Hi @brokenmass I would like to contribute to this repo, as I was worked on a similar project. Hope it's appreciated; if not, feel free to close it.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant