preamble:

super smash bros melee (ssbm) is a game released in 2001 and maintains a healthy esports scene to this day. with esports comes streaming, and melee is a surprisingly complicated game to stream in the highest quality. ignore all the intricacies that come with streaming analogue video, new advancements have been made in recent years that have improved quality significantly:

Dolphin

dolphin is a gamecube and wii emulator. dolphin can render the game at a much higher resolution than its original 480p, allowing for much higher quality of captured gameplay. there are no other alternatives to dolphin as it is the only gamecube/wii emulator that has reached this level of stability and accuracy

Project Slippi

project slippi is an open source software project for building a replay/metadata infrastructure for super smash bros melee. it does a bunch of things but one feature "console mirroring" is very useful for streaming. "console mirroring" is where the game will run on a software modded nintendo wii console and the game's state will be mirrored over the internet to a PC running project slippi's fork of dolphin emulator. this mirrored emulation of the game can be used to get a high res video of the game play, as opposed to capturing analog video from the console. setting this up is a hassle however so many local tournaments unfortunately don't bother.

goal:

the final goal of this project would be to make it far easier for tournaments to stream melee with slippi mirroring

SlippiBox

the SlippiBox would be a small computer (either an intel Next Unit of Computing (NUC) (small-form-factor barebone computer) or a Single Board Computer (SBC) (such as an Raspberry Pi or a zimablade) depending on factors that ill elaborate on in a little bit) that you would plug an ethernet cord into, and it would have a second ethernet port that you would plug (male to male) directly into a wii (using network sharing), and it would stream a slippi mirrored version of the game being played on the wii. no setup, nothing, just plug and play. ill elaborate more on other potential features in a sec

complications:

the forked dolphin version for slippi is based on a very old version of dolphin, that does not build on ARM64. there is a beta branch for slippi that aims to bring slippi in-line with the mainline branch of dolphin (and builds on ARM64, though an official build has not been released yet, it requires you to build it yourself). however this beta branch does not support console mirroring (yet) so this could be part of the project (or hopefully it'll just be added by someone else before next year :P). quote from one of slippi devs:

sharlot — Today at 17:28

what would be the prerequisite knowledge to add just console mirroring to mainline? wondering if its worth trying to have a crack at it myself or if its better to just wait for someone more qualified to have a go

nikki — Today at 17:30

can you read/write c++? can you understand the pipeline for playing replays? past that is asm stuff which doesn't need to be touched

i don't think it is necessarily hard but it takes some domain knowledge

and that isn't hard either

just tedious to walk through the whole thing and find where shit is failing

if i do go with a ARM based solution, i believe a Pi 4 would be sufficient as its able to run mainline dolphin SSBM at 60fps on all tournament legal stages

alternatively, an intel x86 NUC would allow stable slippi to run and would probably have better performance, allowing for more things to be run in the background, which ill elaborate in the following section:

"MVP" and "Stretch goals"

(no idea how you'd word this in an actual 489 project but ill use these terms here as i think they are the best way to describe what im talking about)

MVP:

box that you plug ethernet cord into, and then ethernet cord out to wii that streams slippi mirrored gameplay to twitch. no requirements on how to stream it, so if OBS (a popular streaming utility) is too much overhead, ffmpeg + x11grab would be sufficient. hopefully low cost too as this would make it even easier for local tournaments to use

very simple but theres a lot more stretch goals

Stretch goals (in order of priority)

  1. capture card:
    1. slippi mirroring only mirrors gameplay, so everything such as character select and stage select is not captured. project slippi comes with a script that will hook into OBS's websocket functionality to hide the emulator when there is no game currently being mirrored, so major tournaments will swap between high res emu and standard capture device after games automatically using this script. even if we cant use OBS as its too much overhead, this should be possible to replicate in ffmpeg or something.
    2. requires a usb capture device but something like AV > cheap av to hdmi convertor > cheap HDMI usb capture device should be sufficient just for character/stage select and most local tournaments will already have one
  2. mobile interface
    1. having the slippi box host a webserver with some sort of configuration utility would be extremely useful as things can easily go wrong and debugging headless computers get annoying fast. even just showing errors would be very useful, but configuration, such as what ethernet interface to use, being able to login to twitch so the slippibox can get a delegate stream key to use, being able to set the title of the stream, being able to set what usb capture device to use etc etc
  3. webcam
    1. having a usb webcam somewhere on stream showing the players (melee is a 4:3 game so cameras can be added on the side without covering gameplay)
    2. if we're already using OBS at this point this is very trivial, as OBS allows you to easily position "sources" around the stream
    3. otherwise could get complex
    4. could set what webcam to use in the mobile configurator
  4. overlay
    1. an overlay on top of the game showing the player names, and things like the score (can be automatically updated from the console mirroring output) would be very useful and basically required for the tournament to be watchable as more than a vod review
    2. again, trivial with OBS, much harder without
    3. could be configurable from the app
    4. existing overlay solutions include:
      1. TSH: very configurable, no slippi integration but does have start.gg integration, is a python qtwindow gui program but does have endpoints you can call to change things
      2. Slippi-HUD: nodejs which could be a lot of overhead but integrates with slippi well and has a lot of features such as stats and start.gg integration (see below), has its own web configuration tool, integrates with OBS
      3. boofstream: slippi, start.gg, and OBS integration but does not load sets automatically; nodejs but does have a web configuration tool
      4. Melee Ghost Streamer: start.gg, OBS, slippi, the works. electron tho, probs cant be controlled by web requests without some tinkering
  5. start.gg integration
    1. start.gg is the de-facto site for tournaments. virtually all tournaments are hosted on there.
    2. integration with start.gg would mean pulling the round name, best of x, the players, etc automatically from the stream queue on start.gg (you can set matches to be played "on stream" in start.gg)
    3. you could set the tournament URL in the configurator app
    4. see above other programs that do similar things
  6. other misc things
    1. change OBS scene (OBS has scenes which are just a collections of sources and their positioning that can be switched between during a stream) based on game state
      1. most tournaments will have a "between games" scene that makes the player cam full screen and makes the game either small or hidden.
      2. you could do this automatically
      3. could also show stats for the previous set (can be done automatically using something like Slippi Stats Graphic Generator)
      4. would require OBS
    2. save stream timestamps to file
      1. mostly useful for watching the stream after the fact, but great for people wanting to see a specific match after its happened
      2. basically requires start.gg integration in some form
    3. output as NDI source
      1. just useful to show the stream on a projector in the venue or something
    4. cool 3d printed case
      1. completely unnecessary but would be cool
    5. there are plenty and plenty of other things to add but i think this list is pretty complete