You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Will be consistently updated. Entries without assignees are all open to pull requests. Vibe coding is welcome as long as functional validation is correct.
Checkmarked entries are currently in Pull Requests. Will be unchecked if it gets closed without merging, and will be struck out and moved to the bottom if merged.
Tier 1: High Priority, blockers for v2.0.0
Tier 2: Moderate, preferred to land in v2.0.0
Tier 3: Roadmap, but not necessarily for v2.0.0
Done
Expose CBR for WebSockets and CRB as an option for WebRTC mode. - Assignee: @PMohanJ
Use one port for Data and WebSocket Streams, and embed an internal asyncio web server instead of NGINX (NGINX can be used to make things faster, optionally, but Selkies is self-contained otherwise). - Assignee: @PMohanJ
Integrate the web components inside the Python wheel, not as a separate directory that has to be installed. - Assignee: @ehfd or @PMohanJ
Bring NVENC with X11 back to working state in containers with multiple GPUs; Contact me for details, although it's likely I'll do it myself. - Assignee: @ehfd.
Fix NVENC encoder dropping a lot of frames with Windows Chromium D3D11VideoDecoder - Consult settings in https://github.com/selkies-project/selkies/blob/7dd6a93065332e5b3fe48fe5e5eb911a91f82746/src/selkies/legacy/gstwebrtc_app.py#L257-L938. The decoder initially starts from baseline profile and changes to high (open Details in [META] Road to v2.0.0 Release #227 (comment)).
Integrate Python-Xlib code into Selkies and remove that repository (removes the ugly workaround in pyproject.toml). Abide by the LGPL license so that such code is only connected with Selkies using import statements, and leave the license file in the subdirectory.(Reduce reliance on external libraries / certain upstream packages are unmaintained #85) - Assignee: @ehfd
Coalesce fragmented environments into Selkies and incorporate externally dependent (pixelflux, pcmflux) environment variables into settings passed to dependencies (pixelflux, pcmflux) from Selkies. Change SELKIES_AUTO_GPU (and the AUTO_GPU fallback) so that an alternative value to true, so e.g., nvidia -> nvidia / amd -> amdgpu,radeon / intel -> i915,xe,gma500, etc., are mapped, and the first GPU in each vendor is chosen instead of the first GPU overall (make the input case-insensitive). Note that you should map to non-x86 GPUs as well as necessary.
Refer to https://docs.kasm.com/docs/how-to/manual_intel_amd/index.html so that DRM KMS devices are mapped correctly in both LinuxServer.io and Selkies containers, when e.g., /dev/dri/card0 is occupied by IPMI without an additional /dev/dri/renderD* device, and the correct mapping for GPUs is instead /dev/dri/card1 to /dev/dri/renderD128. Utilize the /sys/class/drm/ interface, which is also available in containers.
Deduplicate PixelFlux C and Rust code. Optimize PixelFlux C/Rust to Python frame delivery and prevent copying from C to Python; zero-copy until the websockets library sends the memoryview. This could improve a potential AV1 implementation in the future, due to AV1 having a lot more number of packets per frame than H.264. Find a way so that https://github.com/linuxserver/pixelflux/blob/master/example/screen_to_browser.py doesn't have to make a new bytes with raw_data_from_cpp = bytes(result.data[:result.size]) and also apply it to Selkies.
Identify more zero-copy optimizations in PixelFlux.
Compare directly inputting RGB and converting before RGB input. If using cudaconvert, add the equivalent of cudaupload and cudaconvert to PixelFlux so that color conversion is done by CUDA in NVENC mode as well. Default to this mode when libnvrtc is present and fall back to the original software color conversion when not present.
Port and optimize https://github.com/selkies-project/selkies/blob/7dd6a93065332e5b3fe48fe5e5eb911a91f82746/src/selkies/legacy/gstwebrtc_app.py#L257-L938 to PixelFlux.
Rewire the GitHub Actions so that we now build for both amd64 and arm64 using the new GitLab ARM runners. Simplify the containerization and build procedures. Integrate the web components files inside the Python wheel, not as a separate directory that has to be distributed on its own. ([META] ARM encoders, mobile/embedded devices #50) - Assignee: @ehfd
Will be consistently updated. Entries without assignees are all open to pull requests. Vibe coding is welcome as long as functional validation is correct.
Checkmarked entries are currently in Pull Requests. Will be unchecked if it gets closed without merging, and will be struck out and moved to the bottom if merged.
Tier 1: High Priority, blockers for v2.0.0
Tier 2: Moderate, preferred to land in v2.0.0
Tier 3: Roadmap, but not necessarily for v2.0.0
Done
Expose CBR for WebSockets and CRB as an option for WebRTC mode. - Assignee: @PMohanJ[META] Implement chunked transport for WebRTC DataChannel / Image Clipboards #74 - Assignee: @PMohanJTURN-REST subproject does not conform to specifications #172 - Assignee: @ehfdUse one port for Data and WebSocket Streams, and embed an internal asyncio web server instead of NGINX (NGINX can be used to make things faster, optionally, but Selkies is self-contained otherwise). - Assignee: @PMohanJIntegrate the web components inside the Python wheel, not as a separate directory that has to be installed. - Assignee: @ehfd or @PMohanJInstead of erroring with no audio server, restore server-side --disable_audio CLI option or automatically detect no PulseAudio server #147, expose Add an option to configure server latency pcmflux#4 to Selkies - Assignee: @PMohanJBring NVENC with X11 back to working state in containers with multiple GPUs; Contact me for details, although it's likely I'll do it myself. - Assignee: @ehfd.Fix NVENC encoder dropping a lot of frames with Windows ChromiumD3D11VideoDecoder- Consult settings inhttps://github.com/selkies-project/selkies/blob/7dd6a93065332e5b3fe48fe5e5eb911a91f82746/src/selkies/legacy/gstwebrtc_app.py#L257-L938. The decoder initially starts frombaselineprofile and changes tohigh(open Details in [META] Road to v2.0.0 Release #227 (comment)).Integrate Python-Xlib code into Selkies and remove that repository (removes the ugly workaround inpyproject.toml). Abide by the LGPL license so that such code is only connected with Selkies usingimportstatements, and leave the license file in the subdirectory.(Reduce reliance on external libraries / certain upstream packages are unmaintained #85) - Assignee: @ehfdCoalesce fragmented environments into Selkies and incorporate externally dependent (pixelflux, pcmflux) environment variables into settings passed to dependencies (pixelflux, pcmflux) from Selkies. ChangeSELKIES_AUTO_GPU(and theAUTO_GPUfallback) so that an alternative value totrue, so e.g.,nvidia -> nvidia / amd -> amdgpu,radeon / intel -> i915,xe,gma500, etc., are mapped, and the first GPU in each vendor is chosen instead of the first GPU overall (make the input case-insensitive). Note that you should map to non-x86 GPUs as well as necessary.Refer to https://docs.kasm.com/docs/how-to/manual_intel_amd/index.html so that DRM KMS devices are mapped correctly in both LinuxServer.io and Selkies containers, when e.g.,/dev/dri/card0is occupied by IPMI without an additional/dev/dri/renderD*device, and the correct mapping for GPUs is instead/dev/dri/card1to/dev/dri/renderD128. Utilize the/sys/class/drm/interface, which is also available in containers.[Enhancement] Test client CPU and GPU consumption throughMediaStreamTrackGenerator/VideoTrackGeneratorlinuxserver/docker-baseimage-selkies#47 and Improve polyfills forMediaStreamTrackProcessorandMediaStreamTrackGenerator/VideoTrackGeneratorsupport sealskin#7 in tandemDeduplicate PixelFlux C and Rust code. Optimize PixelFlux C/Rust to Python frame delivery and prevent copying from C to Python; zero-copy until thewebsocketslibrary sends thememoryview. This could improve a potential AV1 implementation in the future, due to AV1 having a lot more number of packets per frame than H.264. Find a way so thathttps://github.com/linuxserver/pixelflux/blob/master/example/screen_to_browser.pydoesn't have to make a newbyteswithraw_data_from_cpp = bytes(result.data[:result.size])and also apply it to Selkies.Keyboard keystrokes continue to be held when packets are lost by congestion or unstable connection / Improve the last bit of keyboard latency overall while accommodating unstable connections #145Most of [FEAT] The Road to WebRTC linuxserver/docker-baseimage-selkies#46Reimplement congestion control mechanisms.Identify more zero-copy optimizations in PixelFlux.Compare directly inputting RGB and converting before RGB input. If usingcudaconvert, add the equivalent ofcudauploadandcudaconvertto PixelFlux so that color conversion is done by CUDA in NVENC mode as well. Default to this mode whenlibnvrtcis present and fall back to the original software color conversion when not present.Port and optimizehttps://github.com/selkies-project/selkies/blob/7dd6a93065332e5b3fe48fe5e5eb911a91f82746/src/selkies/legacy/gstwebrtc_app.py#L257-L938to PixelFlux.[META] Optimize the WebRTC stack to the maximum #157, Improve Opus: reduce NetEQ jitterbuffer & eliminate discontinuous audio artifacts from jitter with Opus + RED #153Achieve higher efficiency and quality in low-bandwidth and high-latency environments #152Rewire the GitHub Actions so that we now build for bothamd64andarm64using the new GitLab ARM runners. Simplify the containerization and build procedures. Integrate the web components files inside the Python wheel, not as a separate directory that has to be distributed on its own. ([META] ARM encoders, mobile/embedded devices #50) - Assignee: @ehfdNVIDIA Container Toolkit: Dynamically expose NVIDIA X.Org X11 display server libraries and configure the container correctly NVIDIA/nvidia-container-toolkit#563, Automatically provisioning X11 and Wayland devices of GPU inside container? NVIDIA/nvidia-container-toolkit#1477- Addressed in fix: NVIDIA X.Org driver modules mount fixes NVIDIA/nvidia-container-toolkit#1980Investigate inconsistent behavior with headless NVIDIA XWayland with Vulkan pixelflux#11- Addressed in fix: Create NVIDIA control device nodes in nvidia-cdi-refresh.service NVIDIA/nvidia-container-toolkit#1979Rewrite docs.All other possible bugs in https://github.com/selkies-project/selkies/issues?q=is%3Aissue%20state%3Aopen%20label%3Abug