Skip to content

Artemis Switch feature-parity notes (optional inspiration) - #325

Closed
antoinebou12 wants to merge 89 commits into
XITRIX:masterfrom
antoinebou12:docs/artemis-parity-inspiration
Closed

Artemis Switch feature-parity notes (optional inspiration)#325
antoinebou12 wants to merge 89 commits into
XITRIX:masterfrom
antoinebou12:docs/artemis-parity-inspiration

Conversation

@antoinebou12

Copy link
Copy Markdown

Summary

  • Adds docs/ARTEMIS_FEATURE_PARITY.md as a non-code inspiration map of Switch-focused ideas from the Artemis Switch fork.
  • Thank you first, XITRIX — Moonlight-Switch (Borealis UI, GameStream, FFmpeg/NVDEC, deko3d, input) is the foundation. This is not a demand to merge Artemis code.

Why this PR

Artemis Switch keeps Moonlight-Switch architecture and explores Switch-specific UX: performance visibility, dual-motor rumble diagnostics, clearer mouse speed, host web config for adding apps, and capability-gated Apollo extras. Maintainers may want to cherry-pick ideas; this document explains them without dumping a large code PR.

What is not requested

  • No auto-tune / clock writes
  • No fake GameStream “add app” API
  • No requirement to adopt Apollo UI in mainline

Related

Test plan

  • Read docs/ARTEMIS_FEATURE_PARITY.md for tone and accuracy
  • No build/runtime impact (docs only)

antoinebou12 and others added 26 commits August 9, 2026 14:48
…tion

Artemis Switch: consolidated benchmark, tuning, UI, Apollo and CI
ci: retrigger Switch dist build
ci: retry Switch NRO build with 60-minute timeout
Trigger the one-shot cancellation workflow through a normal merge push.
Unify Fit/Fill/Stretch/Zoom/Full Range presentation, preserve FSR/RCAS/dithering, simplify Quick Actions and settings, expand performance telemetry, refresh artemi-switch branding, and keep README limited to implemented features.
Thank you XITRIX — Moonlight-Switch is the foundation. This doc only maps
Switch-focused ideas from the Artemis Switch fork as optional inspiration,
not a request to merge Artemis code as-is.

Co-authored-by: Cursor <cursoragent@cursor.com>
@antoinebou12 antoinebou12 changed the title docs: Artemis Switch feature-parity notes (optional inspiration) Artemis Switch feature-parity notes (optional inspiration) Aug 10, 2026
@antoinebou12

Copy link
Copy Markdown
Author

@XITRIX

I’ve been working on Artemis-Switch, my fork of XITRIX/Moonlight-Switch, with the goal of turning the Nintendo Switch into a more complete game-streaming client, especially when paired with Apollo.

writting by chatgpt and cursor, but tested on my switch oled

GitHub:
https://github.com/antoinebou12/Artemis-Switch

I'm not trying to rewrite Moonlight.

The idea is to build Switch-specific features around it and take advantage of additional functionality exposed by Apollo.

Why make a Switch-specific fork?

The Switch is a pretty unusual streaming device.

It has:

  • 720p handheld mode
  • 1080p docked output
  • NVIDIA hardware video decoding
  • deko3d GPU rendering
  • Joy-Cons / Pro Controllers
  • touchscreen
  • motion sensors
  • limited CPU/GPU resources compared with Android PCs or handheld PCs

So instead of treating the Switch like a generic Moonlight client, Artemis tries to optimize the whole experience around the hardware.

Better video presentation

I reworked how the video is presented so the different display modes use the same Switch/deko3d rendering path.

There are now proper:

  • Fit
  • Fill
  • Stretch
  • Zoom / Pan
  • Full-range video

Fit maintains the correct aspect ratio and produces stable black bars.

Fill crops the source properly instead of distorting it.

Stretch fills the complete Switch output when you actually want that.

Zoom/Pan performs the crop on the GPU side.

The existing Switch post-processing pipeline is still usable:

  • FSR / EASU upscaling
  • RCAS sharpening
  • dithering
  • Full/Limited color-range conversion

If a filtering resource isn't available, the client falls back without randomly changing your selected Fit/Fill/Stretch mode.

More useful streaming profiles

Artemis exposes:

  • 30 FPS
  • 40 FPS
  • 60 FPS
  • 90 FPS
  • 120 FPS

without requiring a separate "unlock high FPS" setting.

There are also:

  • custom resolutions
  • exact bitrate control
  • handheld/docked-oriented profiles

I know 90/120 FPS sounds strange on a 60 Hz Switch display, but I want the client configuration to remain flexible for testing, latency experiments, different hosts and future use cases rather than artificially hiding valid Moonlight stream configurations.

Performance diagnostics

One thing I really wanted was to be able to answer:

"Why does streaming feel bad on my Switch?"

Artemis exposes much more runtime information, including things like:

  • receive latency
  • decode latency
  • rendered FPS
  • packet loss
  • frame rendering time
  • post-processing time
  • FSR time
  • RCAS time
  • dithering time
  • GPU rendering time when available
  • frame queue usage / target / capacity
  • active Fit/Fill/Stretch mode
  • Full/Limited range state
  • current resolution / FPS / codec / bitrate

I'm also adding Switch-specific diagnostics such as:

  • handheld/docked state
  • battery information
  • CPU clock
  • GPU clock
  • memory/EMC clock
  • Wi-Fi-related streaming information

The clock information is read-only. Artemis isn't automatically overclocking your Switch.

Benchmarking / Auto Tune

Another part I'm experimenting with is a real streaming benchmark system.

Instead of choosing a bitrate because somebody on Reddit said "use 20 Mbps", Artemis can collect performance information from the actual Switch stream and use metrics like latency, frame delivery and queue behavior.

Better controller/input tools

I'm also expanding the input side.

Current work includes:

  • multi-controller diagnostics
  • live controller state
  • rumble testing
  • rumble both motors
  • rumble all connected pads
  • mouse sensitivity from roughly 0.1x to 2.0x
  • pointer/touch profiles
  • motion policy controls
  • keyboard shortcuts
  • host/server commands when supported

The goal is for Artemis to eventually feel more like a native remote-PC interface and less like "video + gamepad".

Apollo integration

This is one of the main reasons I started expanding the fork.

Sunshine remains fully supported.

Apollo-specific functionality is detected through capabilities, so pairing Artemis with a normal Sunshine server shouldn't suddenly expose a bunch of buttons that don't work.

When an Apollo capability exists, Artemis can expose the corresponding functionality.

Current development includes things such as:

  • Apollo capability detection
  • capability-gated host options
  • server commands
  • host keyboard shortcuts
  • direct access to the host's :47990 web configuration from the Switch UI

One of the bigger things I'm interested in next is Apollo virtual-display integration.

For example, launching a game from the Switch and having Apollo create/configure the appropriate virtual display for that stream.

That requires more work because resolution changes generally need to be coordinated with the stream lifecycle rather than pretending that Moonlight can magically renegotiate everything in the middle of a session.

Cleaner in-game UI

I also simplified the overlay.

Quick Actions are intended for things you actually want while playing:

  • keyboard
  • pointer/mouse controls
  • shortcuts
  • server commands
  • performance information
  • disconnect

More advanced benchmark, diagnostics, filtering and tuning settings stay in their own sections rather than turning Quick Actions into a giant debug menu.

The overall goal

I'm basically trying to answer this question:

"What would Moonlight look like if the Nintendo Switch was treated as a first-class streaming platform and Apollo was used as more than just a Sunshine-compatible server?"

I still want Artemis to remain compatible with the existing Moonlight ecosystem rather than becoming some completely separate protocol.

So the direction is:

**Moonlight-Switch foundation

  • Switch-specific rendering
  • Switch diagnostics
  • better input
  • benchmarking / tuning
  • Apollo integration**

If there's a Moonlight/Apollo feature you think would actually make sense specifically on Switch, I'd also like to hear 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