What is Cloudy Pad ?

Cloudy Pad lets you deploy a Cloud gaming server anywhere in the world and play your own games - without requiring a powerful gaming machine or a costly subscription:

Features โœจ

  • Stream with Moonlight client
  • Run your games through Steam, Pegasus or Lutris
  • Deploy on AWS, Google Cloud, Azure, Scaleway or Paperspace
  • Setup automated Cost alerts to avoid overspending ๐Ÿ’ธ
  • Use Spot instances for up to 90% cheaper instances
  • Play 30 hours per month for ~15$ / month or less
  • Pay by the hour, no subscription required

Not familiar with Cloud Gaming ? See What's Cloud Gaming and how is Cloudy Pad useful ?

Getting started

๐Ÿš€ Follow Getting started guide to deploy your Cloudy Pad instance

๐Ÿ’ฐ Understand Cloud provider costs - Cloudy Pad itself is free, but Cloud provider usage is not. Make sure you understand Cloud costs before deploying your instance ๐Ÿ˜‰

Need help ? A question ?

Discord

๐Ÿ› File an issue on GitHub

Development status ๐Ÿงช

This project is still at an experimental phase. While working and allowing you to play in the Cloud seamlessly, there may be breaking changes in the future. Your feedback, bug reports and contribution will be greatly appreciated !

Cloud Providers

Available Cloud providers:

Potential future Cloud providers - upvote them on their GitHub issues!

How does it work?

See What's Cloud Gaming and how is Cloudy Pad useful ?

What's Cloud Gaming ? How is Cloudy Pad useful ?

This page is aimed at non-technical people or those unfamiliar with Cloud Gaming who wants a better understand of what Cloudy Pad can provide. We'll explain:

  • What's "Cloud gaming" ?
  • What is Moonlight and how is it related to Cloud Gaming ?
  • What is a Cloud provider ?
  • What is Docker and why do we need it ?
  • What is the cloudypad CLI ?

Cloud Gaming is the act of playing play video games directly from a server on the internet. This is called "Cloud Gaming". Our goal is to make Cloudy Pad usable by even non-tech savy users. While we're not there yet, we hope this page will help you have a better understanding.

Cloud Gaming

Cloud gaming lets you play video games without needing a powerful console or computer at home. Think of it like streaming a movie on YouTube or Netflix: you open your browser and play a video. In this situation, the video comes from YouTube's Servers into your computer. The Server does the heavy work of generating images for the video, while you only get the result as a video stream.

To play video games you need lots of physical resources, more than what's required to generate a "simple" video stream like YouTube. That's why dedicated consoles or "gaming" computers are often required for recent games. This includes powerful GPUs (Graphical Processing Units) to generate the video stream for our video game. In a classic setup, your GPU is physically located within your machine.

With Cloud Gaming, GPU power is delegated to a computer somewhere on the internet - in the Cloud - while you get the video game stream as a result.

Hence, you don't need a powerful computer at home anymore, just something capable of handling a video stream and a good internet connection. It lets player enjoy games without requiring a high-end computer and occasional players can enjoy games without huge investment in costly materiel.

How do we get such as Server in the Cloud? See Cloud Provider below.

Moonlight

Moonlight is to Cloud Gaming what your browser (Firefox, Safari, Chrome...) is to YouTube: it allows you to connect to a server to play video game while your browser lets you connect to YouTube to watch videos. You install and run it like any other program !

Moonlight is called a Client which will connect to our Server.

Cloud Provider

A Cloud Provider allow you to rent Servers in the Cloud. Much like you'd rent a car for your holidays for a daily fee, Cloud Providers let you rent Servers for an hourly fee. With Cloud Gaming, we're gonna rent a server in order to play our games.

You may already have heard of Cloud Providers such as AWS, Google Cloud, Microsoft Azure, etc. Cloudy Pad lets you (or will let you) play on these Cloud Providers and others, less known but cheaper, more adapted to our usage.

CLI and console

CLI (short for Command Line Interface) allow you to run commands in a terminal (a small window in which you can type text). That's a basic but very powerful way of running programs, and the primary way to run Cloudy Pad which does not (yet) have a graphical interface like your browser would.

Worry not, cloudypad CLI is easy to use and you'll be guided through usage.

Docker

Docker is a tool required by Cloudy Pad to work. While it may seem strange to rely on yet-another technology do run Cloudy Pad, this allows Cloudy Pad to actually much more simpler to install and use, preventing you to install quite a lot of software and applications.

How does it all fit in ?

Here's the thing: deploying a Cloud Server with everything you need to play video games is... a bit complex, to say the least. This documentation may seem a lot already, but it's only scratching the surface.

That's where Cloudy Pad comes in ! Cloudy Pad lets you:

  • Create a Cloud Server suitable for video games and Cloud Gaming using the Cloud Provider of your choice ๐Ÿช„
  • Configure your Cloud Server and Moonlight with all you need to stream video games โœจ
  • Manage your server lifecycle: create, start/stop, destroy... ๐Ÿค–
  • Avoid the complexity of installing and configuring lots of (even more) complicated software, Cloudy Pad does it for you with Docker ! ๐Ÿš€

Getting started ๐Ÿš€

Cloudy Pad deploys a Cloud gaming gear using a Cloud provider of your choice:


Prerequisites

  • Moonlight streaming client
    • Moonlight is client allowing you to connect to your instance and play your games
  • A Cloud provider account, one of:
    • AWS
    • Azure
    • Google Cloud
    • Paperspace
    • Scaleway
  • Docker
    • Rootless Docker is not supported yet
    • For MacOS, OrbStack is recommended over Docker Desktop

Installation

Install latest version of cloudypad CLI:

curl -fsSL https://raw.githubusercontent.com/PierreBeucher/cloudypad/master/install.sh | bash

โžก๏ธ See Installation page for more installation methods on Linux, Mac and Windows.

Cloud provider setup

You may need to setup a few things on your Cloud provider (eg. API key or SSH key).

โžก๏ธ Checkout per-Cloud provider setup specifities.

Deploy your instance

Create your instance with cloudypad CLI:

cloudypad create
# How shall we name your Cloudy Pad instance? (default: mypad) 
#
# Creating Cloudy Pad instance 'mypad'
#
# [...]
#
# ๐Ÿฅณ Your Cloudy Pad instance is ready !

Cloudy Pad will guide you through creation process:

  • Prompt important information (eg. machine type, GPU, cost alerts, etc.)
  • Create a new Cloud machine and related configurations automatically
  • Install GPU drivers and streaming server (Wolf or Sunshine)
  • Help your Pair with Moonlight streaming client

Run Moonlight and connect to your instance

Run Moonlight, select your instance and run Steam. cloudypad create should have let you pair your Moonlight client with your instance. If needed, you can pair your Moonlight client with your instance manually:

โžก๏ธ See Moonlight setup and pairing guide

Sign-in to Steam and play your game

To sign-in to Steam, either:

  • Type your login and password directly
    • ๐Ÿ’ก Copy/pasting your login and password in Moonlight: use CTRL+C on your host and paste in Moonlight with CTRL+SHIFT+ALT+V
  • Use Steam mobile app and scan QR code: run Steam app on your phone, and click on shield ๐Ÿ›ก๏ธ button (bottom middle of the screen). Scan QR code from Moonlight.

Stop your instance after gaming sessions

Once you are done, remember to stop your instance to avoid unnecessary costs ๐Ÿ’ธ

cloudypad stop mypad
# or 
# cloudypad destroy mypad

Problem ?

๐Ÿ˜ฑ Something went wrong? See FAQ and known issues or create an issue

Cloudy Pad Roadmap

Next big features and improvements

Cloudy Pad platform

Cloudy Pad plaform will provide a way to deploy and managed your instances using a non-technical user friendly platform. Head to Cloudy Pad Platform to try out the beta version !

Cost reduction: OS Disk snapshot

On stopping your instance, a disk snapshot will be made instead of keeping disk as-is. On next usage, instance will be restored from snapshot.

As snapshot are generally cheaper than disks it will provide a great cost reduction.

Cost reduction: Data move to S3 on stop (or cheap Cloud storage)

On instance stop, instead of keeping data disk (and being billed for it), your data will be moved to an S3 bucket (or equivalent storage) which is much cheaper. On next usage S3 data will be moved back to data disk.

As S3 is much cheaper than disks, this will provide subsequent cost reduction on data disk.

Installation and Upgrade

Requirements for all OS

  • A Cloud provider account, one of:
    • AWS
    • Azure
    • Google Cloud
    • Paperspace
    • Scaleway
  • Moonlight streaming client
  • Docker
    • Rootless Docker is not supported yet
    • For MacOS, OrbStack is recommended over Docker Desktop

Installation

Linux

Install latest version of cloudypad CLI:

curl -fsSL https://raw.githubusercontent.com/PierreBeucher/cloudypad/master/install.sh | bash

MacOS

Install latest version of cloudypad CLI:

curl -fsSL https://raw.githubusercontent.com/PierreBeucher/cloudypad/master/install.sh | zsh

OrbStack is recommended over Docker Desktop as it's more compatible for Cloudy Pad usage.

Windows

Running Cloudy Pad on Windows requires WSL to be installed.

Once WSL is installed, run a Linux shell and follow Linux installation steps.

Note: If you are using SSH keys mounted from Windows host, make sure they have proper permissions: chmod 0600 ~/.ssh/<key>

Nix / NixOS

Cloudy Pad is packaged as a Nix Flake, see flake.nix

You can include it in your NixOS config or run directly with nix run:

nix run github:PierreBeucher/cloudypad create
nix run github:PierreBeucher/cloudypad -- --version

Upgrade

To upgrade to the latest version of cloudypad, run the installation process again. It will check for the latest version and install it.

Then, upgrade your instance(s) to get latest changes with:

cloudypad provision my-instance
cloudypad configure my-instance

Cloudy Pad will do its best to provide retrocompatibility, but some feature may remain disabled if you're upgrading from an older version.

See Upgrade guide to enable new features on existing instances after upgrade.

cloudypad CLI usage

๐Ÿงช cloudypad CLI interface is still experimental and may change in the future

Available commands:

$ cloudypad --help

Usage: cloudypad [options] [command]

Cloudy Pad CLI to manage your own gaming instance in the Cloud.

Options:
  --verbose, -v               Verbosity level (0: silly, 1: trace, 2: debug, 3: info, 4: warn, 5: error, 6: fatal)
                              Alternatively, use CLOUDYPAD_LOG_LEVEL environment variable.
  -V, --version               output the version number
  -h, --help                  display help for command

Commands:
  create                      Create a new instance, prompting for details. Use `create <provider> for provider-specific creation commands.`
  list [options]              List all instances
  start <name>                Start an instance
  stop <name>                 Stop an instance
  restart <name>              Restart an instance
  get <name>                  Get details of an instance
  provision [options] <name>  Provision an instance (deploy or update Cloud resources)
  configure <name>            Configure an instance (connect to instance and install drivers, packages, etc.)
  destroy <name>              Destroy an instance
  pair <name>                 Pair an instance with Moonlight
  help [command]              display help for command

Create instances

Use cloudypad create. It will prompt for required parameters depending on your Cloud Provider.

cloudypad create 

# Or for a specific provider
cloudy pad create azure
cloudy pad create aws
cloudy pad create gcp # Google
cloudy pad create paperspace
cloudy pad create scaleway

You can also specify all arguments as flags for non-interactive creation, for example:

cloudypad create aws \
  --name $instance_name \
  --private-ssh-key ~/.ssh/id_ed25519 \
  --instance-type g4dn.xlarge \
  --disk-size 100 \
  --public-ip-type static \
  --region eu-central-1 \
  --spot \
  --streaming-server [sunshine|wolf] \
  --cost-alert [disable|no|false|0] \
  --cost-limit 40 \
  --cost-notification-email me@example.com \
  --yes --overwrite-existing

Use cloudypad create <provider> --help for available flags.

Alternatively, see CLI integration tests for available flags

Manage instances

List existing instances:

cloudypad list

Get instance details:

cloudypad get mypad

Start/stop/restart instance:

cloudypad start mypad
cloudypad stop mypad
cloudypad restart mypad

By default instance stop/start/restart triggers the action without waiting. Wait for action to finish with --wait (and optionally timeout <seconds>)

cloudypad [start|top|restart] mypad --wait --timeout 180

Destroy instance:

cloudypad destroy mypad [--yes]

Instance deployment lifecycle

When you create your instance, creation process goes through various steps:

  • Provisioning: create all Cloud resources for your instance (virtual machine, IP address, virtual disk...)
  • Configuration: install required packages and softwares on your instance (eg. Wolf server)
  • Pairing: pair your instance with Moonlight

These actions can be performed directly via commands below.

Provision an instance to create/update Cloud resources for your instance.

cloudypad provision mypad

Run instance configuration:

cloudypad configure mypad

Pair Moonlight with an existing instance:

cloudypad pair mypad

Environment variables

Cloudy Pad built-in environment variables

Environment variables used by Cloudy Pad and example values

# Log level. Also exposed via CLI --verbose flag.
# 0: silly, 1: trace, 2: debug, 3: info, 4: warn, 5: error, 6: fatal
CLOUDYPAD_LOG_LEVEL=3

# Set -x bash flag to show all commands executed by launcher script
CLOUDYPAD_CLI_LAUNCHER_DEBUG=1

# Home directory for Cloudy Pad data
CLOUDYPAD_HOME=~/.cloudypad

# Cloudy Pad version to use for launcher.
# Beware: changing this value will change Cloudy Pad container image used
# which may not be compatible with launch version installed
CLOUDYPAD_VERSION=0.7.0

# Override Cloudy Pad container image used by launcher
CLOUDYPAD_IMAGE="crafteo/cloudypad:$CLOUDYPAD_VERSION"

Other environment variables

Cloudy Pad relies on external tools and libraries like AWS library and Ansible to manage your instances. Some variables can set to alter behavior.

See env_vars variable in launcher script for details.

Global configuration

A global configuration is saved under $HOME/.cloudypad/config.yml. Later version will add commands to manipulate this configuration.

Moonlight setup and pairing guide

Cloudy Pad requires Moonlight streaming client to connect to your instance.

Install Moonlight

Moonlight is available Windows, MacOS and Linux.

See Moonlight installation instructions for other installation methods.

Run Moonlight and connect to your instance

Pairing is done automatically when you run cloudypad create.

If needed, can pair your instance using Cloudy Pad CLI:

cloudypad pair my-instance

# Run this command in another terminal to pair your instance:
#
#   moonlight pair 35.181.136.176 --pin 1234

Mac and Apple specificities

Some Mac / Apple device may prevent Moonlight to pair on non-local address. To workaround this, use an IPv6 address instead of the default IPv4 address when pairing by prefixing with [::ffff:[YOUR_IP]].

For example this IPv4

200.123.4.56

Becomes Ipv6

[::ffff:200.123.4.56]

Streaming servers: Sunshine and Wolf

Choose your streaming server

Cloudy Pad supports two streaming servers:

You can choose between them when creating your instance on prompt or by passing --streaming-server [sunshine|wolf] flag to cloudypad create.

Sunshine

Sunshine is a modern streaming server that supports a wide range of games and is known to be very stable. It provides a web interface to manage configuration.

Note: Sunshine support is still experimental and only Steam is available for now.

Accessing web interface and configuration

For security reasons Sunshine interface is not exposed on the internet. You must run an SSH tunnel to access it:

Get your instance IP address:

cloudypad get <instance-name>

Showing something like this:

{
  "provision": {
    "ssh": {
      "user": "ubuntu", //<USER>
      //[...]
    },
    "output": {
      "host": "10.234.56.78", // <INSTANCE_IP>
    },
    // [...]
  },
  "configuration": {
    "input": {
      "sunshine": {
        "passwordBase64": "c3Vuc2hpbmU=",
        "username": "sunshine"
        // [...]
      }
    }
  }
}

Decode base64 password:

echo "c3Vuc2hpbmU=" | base64 -d
# sunshine

Run an SSH tunnel:

ssh -L 47990:localhost:47990 <USER>@<INSTANCE_IP>

Open your browser and go to https://localhost:47990. Sunshine's default certificate will probably not be trusted by your browser as it's self-signed, you can safely ignore this error.

Use login/password entered during instance creation, also shown by cloudypad get <instance-name>.

Note: future versions of Cloudy Pad will either

  • Allow secure remote access via internet with valid HTTPS (TLS) certificate
  • Provide more automation to run SSH tunnel for you

Wolf

Wolf is a Moonlight-compatible streaming server. Main features include allowing multiple users to stream from the same instance and sharing a single GPU with multiple games.

Auto Stop: inactivity detection and automatic shutdown

Inactivity detection (Auto Stop) automatically shuts down your instance when no activity is detected to avoid overcost.

Instance is considered inactive when all these conditions are met:

  • You're not connected via Moonlight
  • You're not downloading a game (no significant incoming network activity is detected)
  • You're not updating the instance using cloudypad commands like cloudypad configure (to avoid interrupting instance during configuration or updates)

Configuration

Enabling/disabling Auto Stop is done on instance creation via cloudypad create <provider> --autostop-enable=[true|false] --autostop-timeout <seconds> or interactive prompt.

To change configuration post-creation use cloudypad update, for example:

cloudypad update <provider> --name <my-insytance> --autostop-enable true --autostop-timeout 600

How it works

Auto Stop regularly check for:

  • Moonlight activity on port 47999 (Control Port).
  • Network download activity
  • Ansible process activity used by cloudypad commands like cloudypad configure (to avoid shutting down instance during configuration or updates)

If no activity is detected within the configured timeout, Auto Stop will shut down the instance.

Auto Stop is installed as systemd service cloudypad-autostop. You can stop/start and get logs with:

sudo systemctl stop|start|status cloudypad-autostop
sudo journalctl -u cloudypad-autostop -f

Connect via SSH to instance

You specified an SSH key when creating your instance. Retrieve your instance details to show its IP and SSH user:

$ cloudypad get mypad
{
  "name": "mypad",
  "host": "5.120.23.178", <==== Instance IP
  "ssh": {
    "privateKeyPath": "/home/crafteo/.ssh/id_ed25519",
    "user": "ubuntu"  <===== SSH user
  },
  "status": {
    ...
  },
  "provider": {
    "aws": {
      ...
    }
  },
}

Connect via SSH:

ssh ubuntu@5.120.23.178

# If needed, specify SSH key
ssh -i /home/crafteo/.ssh/id_ed25519 ubuntu@5.120.23.178

Moonlight: install and connect

Download and install Moonlight

Moonlight is available for:

See Official Moonlight website for more information.

Connect to your instance

You must pair your instance with Moonlight before you can connect to it.

Cloudy Pad SaaS

Using app.cloudypad.gg, you can pair your instance via the web UI. Click on "Connect" button and follow instructions.

Cloudy Pad CLI

Pairing is done automatically when you run cloudypad create.

If needed, can pair your instance using Cloudy Pad CLI:

cloudypad pair my-instance

# Run this command in another terminal to pair your instance:
#
#   moonlight pair 35.181.136.176 --pin 1234

Moonlight usage and configuration

See Moonlight usage: screen size, latency, keyboard shortcuts, etc.

Moonlight usage: screen size, latency, keyboard shortcuts, etc.

How to exit Moonlight session

Press:

  • PC / Windows keyboard :CTRL+ALT+SHIFT+Q
  • MacOS keyboard: SHIFT+CONTROL+OPTION+Q

Display / screen resolution

Moonlight screen resolution may be different than your actual screen. By default Moonlight is configured to use a 720p resolution (1280x720) which may be lower than your actual screen.

If you experience blurry image and/or improperly scaled image, Moonlight resolution may be improperly set.

To set Moonlight display resolution:

  • Open Moonlight client.
    • If already connected to your instance in Moonlight, exit your session and click Stop button to fully disconnect.
  • Open Settings โš™๏ธ (top-right gear button).
  • Under "Resolution and FPS" choose your desired resolution. Use the following values:
    • Native to match your current screen resolution
    • 1080p for 1920x1080 screen resolution
    • 4k for 3840x2160 screen resolution

Known limitations:

  • NVIDIA Datacenter GPUs maximum resolution is 2560x1600. Resolution will automatically be adjusted to fit your screen but may be smaller as it will be capped at 2560x1600. See #144.

Latency, stutter and image quality: FPS and bitrate

Moonlight has a "FPS" and "Bitrate" limit. Setting these values may improve your connection quality / latency:

If you experience lag, stutter or warnings while streaming:

  • Open Moonlight client.
  • Open settings โš™๏ธ (top-right gear button).
  • Decrease bitrate by ~10% to 30%.
    • Slightly lower quality but better latency for slower internet connections.
  • Decrease FPS (eg. 60 FPS => 40 FPS)
    • FPS is "Frame per second". Lower FPS means less data to sent but slightly lower quality.
  • Decrease resolution (eg. 1080p => 720p)
    • Lower resolution means less data to sent but slightly lower quality.

Moonlight keyboard shortcuts

PC / Windows keyboard:

  • Exit session: CTRL+ALT+SHIFT+Q
  • Show statistics (FPS, latency, etc.): CTRL+ALT+SHIFT+S
  • Windowed mode: CTRL+ALT+SHIFT+X

MacOS keyboard:

  • Exit session: SHIFT+CONTROL+OPTION+Q
  • Show statistics (FPS, latency, etc.): SHIFT+CONTROL+S
  • Windowed mode: SHIFT+CONTROL+OPTION+X

See also

Sign in to Steam

Steam is automatically installed by Cloudy Pad and starts automatically.

Steam welcome screen shows a login with a QR code and a login/password prompt.

Use your phone or tablet to:

  • Download Steam application and sign in via the app
  • Tap on the shield ๐Ÿ›ก๏ธ button at the bottom of the screen
  • Scan the QR code shown by Steam on Moonlight

Password authentication

You can enter your Steam login and password directly

Note: it may be possible to copy/paste your password from host using CTRL+ALT+SHIFT+V on Linux/Windows or Command+ALT+SHIFT+V on MacOS, but a known issue may prevent it from working

I forgot my Steam username and/or password

On your phone or tablet download Steam application and:

  • Select "I need help signing in" at bottom left
  • Select "I forgot my Steam account name or password"
  • Enter your email address or phone number and click on "Continue"
  • Follow instructions to reset your password

Sign in to Steam

Steam is automatically installed by Cloudy Pad and starts automatically.

Steam welcome screen shows a login with a QR code and a login/password prompt.

Use your phone or tablet to:

  • Download Steam application and sign in via the app
  • Tap on the shield ๐Ÿ›ก๏ธ button at the bottom of the screen
  • Scan the QR code shown by Steam on Moonlight

Password authentication

You can enter your Steam login and password directly

Note: it may be possible to copy/paste your password from host using CTRL+ALT+SHIFT+V on Linux/Windows or Command+ALT+SHIFT+V on MacOS, but a known issue may prevent it from working

I forgot my Steam username and/or password

On your phone or tablet download Steam application and:

  • Select "I need help signing in" at bottom left
  • Select "I forgot my Steam account name or password"
  • Enter your email address or phone number and click on "Continue"
  • Follow instructions to reset your password

Join the community to get help

Join our Discord server to get help from the community !

FAQ

General recommendations:

  • Choose a location or region as close as possible to you to avoid too much latency (eg. if you live in the US don't create your instance in Europe)
  • Just provision what you need for: don't create a 500 GB disk if you intend to play a game that will only use 100 GB.
  • GPU / machine type depends on the game you play. See below for recommendations.

AWS

xlarge instances should be enough for most usage. For instance, g4dn.xlarge can run Baldur's Gate 3 in Ultra with 60 FPS 1080 without issues. Use a larger instance only if you have latency related to resource consumption.

Paperspace

Paperspace RTX4000 or P4000 or M4000 are relatively cheap and powerful enough for most use. A P4000 can run Baldur's Gate 3 in Ultra with 60 FPS 1080 without issues.

Use higher-tier instance if you have latency related to resource consumption.

Azure

Use NC or NV instances with 4 to 8 CPUs, eg. one of:

  • NC4as T4 v3 (4 CPU, 28 GB RAM)
  • NC8as T4 v3 (8 CPU, 56 GB RAM)
  • NV6ads A10 v5 (6 CPU, 55GB RAM)

Azure provide more opwerful instance but they are likely too expansive (providing lots of memory and ephemeral storage which is likely unused for gaming but expensive).

Azure gaming instances NG are not yet supported (they use AMD GPU while only NVIDIA is supported for now)

Google Cloud

Use N1 Standard instances with 4 to 16 CPUs with T4 or P4 GPUs. They are the cheapest while providing a good experience, eg. a P4 with 15GB RAM and 8 CPU can run Baldur's Gate 3 in Ultra with 60 FPS.

Scaleway

Scaleway GPU-3070-S (NVIDIA RTX 3070, 8 CPUs, 16 GB RAM) and L4-1-24G (NVIDIA L4 GPU, 8 CPUs, 48 GB RAM) are great for gaming.

Scaleway also provide instances with multiple GPU or powerful and expensive GPUs like H100 but they may not be the best choice for gaming (expensive and not designed for gaming).

Using Steam, why does my game take forever to "cache Vulkan shader" ?

If this is the first time you run your game this is (unfortunately) expected. Steam may cache Vulkan shaders to optimize in-game performance. It should be faster on subsequent runs, if not instantaneous.

I have a black screen when I connect to my instance

If this is the first time you connect to your instance, it may take a few minutes to setup the required components. If after 5 min the problem persists, please file an issue.

I Found an bug or I have a suggestion

If you found a bug or have a suggestion, please report an issue. Thanks for your feedback !

How does all of this work?

cloudypad is a wrapper around a few technologies:

  • Wolf gaming server
  • Clouder-specific tools and APIs to deploy and manage Cloud machines
  • When possible, Pulumi to deploy Cloud machines and resources
  • Ansible to configure machines (drivers, gaming server, etc.)
  • ๐Ÿง  Brain juice from me and other awesome open-source community members

Will Cloudy Pad become a paid product ?

Cloudy Pad is a Free and Open Source project. However it deploys Cloud resources on providers like AWS, Azure, Google Cloud, Scaleway etc. which are usually not free.

Cloudy Pad Platform provides an experience similar to other Cloud Gaming services, based on Cloudy Pad Open Source. Like a Cloud Provider, payment is done by the hour based on resource consumption.

Note from the creator: Considering I'm really not happy about the enshittification of the internet, Cloudy Pad will remain a Free and Open Source project along Cloudy Pad platform.

How are my data collected? How does analytics works?

Cloudy Pad may, with your consent, collect some personal information. Here's the full list of information collected if you consent:

  • OS name and details (distribution and version)

This data is only used internally and won't be shared with third party or used for targeted ads. Your data are only used for analytics purpose to understand usage, track feature usage and help resolve issues.

Cloudy Pad will, by default, collect technical data such as when a command is run or certain technical event occurs, without collecting any personal information. Collected data:

  • Cloudy Pad version
  • Techical events (action performed such as instance start/stop without instance details, error without personal info, etc.)

To completely opt out of any data collection (even technical non-personal data) or change data collection method, open $HOME/.cloudypad/config.yml and set analytics.enabled: false, eg:

analytics:
  posthog:
    collectionMethod: none # <<===== EDIT HERE, valid value: "none", "technical", "all"
    distinctId: xxx

Cloudy Pad uses Post Hog and will keep data for 1 or 3 months.

To opt-out of analytics, either:

  • Refuse analytics on initial installation
  • Export environment variable CLOUDYPAD_ANALYTICS_DISABLE=true
  • Edit local configuration at $HOME/.cloudypad/config.yml and set analytics.enabled: false

Known issues

Moved to known-issues.md

Known issues

Apple / MacOS

Docker for MacOS and VirtioFS

For MacOS, if your Docker installation use VirtioFS, Cloudy Pad may fail with a Docker-related error such as:

Error response from daemon: error while creating mount source path '/private/tmp/com.apple.launchd.ABCDEF/Listeners': mkdir /private/tmp/com.apple.launchd.ABCDEF/Listeners: operation not supported

This is a bug when using Docker for Mac VirtioFS file sharing with SSH agent. The bug is still being worked on, as a workaround you can either:

  • Disable SSH agent before running Cloudy Pad, eg. unset SSH_AUTH_SOCK
  • Switch Docker for Mac config to non-VirtioFS (eg. gRPC FUSE): go to config > Resources > File Sharing and update config.

Scaleway

Legacy b_ssd volumes support

Running cloudypad provision with Scaleway provider may yield error such as:

error: scaleway:instance/server:Server resource 'my-instance' has a problem: b_ssd volumes are not supported anymore. Remove explicit b_ssd volume_type, migrate to sbs or downgrade terraform.

This is caused by Scaleway deprecation of b_ssd volumes support which we can't create/update anymore. To workaround this issue, you can either:

  • Follow Scaleway migration guide
  • Use cloudypad configure instead of cloudypad provision or cloudypad update - Note that it will not fully update your instance since provision will be skipped, but it should work nonetheless
  • Create a new instance (but you'll need to reinstall your games)

Upgrade guide

On upgrade Cloudy Pad will ensure retrocompatibility as best as possible. However some features may remain disabled if you're upgrading from an older version to avoid breaking changes or data loss.

Only changes requiring manual intervention are listed here. If not, upgrade process is transparent.

0.24.0 - Scaleway volume deprecation and data disk

This version introduces several changes for Scaleway

Scaleway legacy volume deprecation

Scaleway is deprecating b_ssd volumes support and you won't be able to cloudypad provision existing Scaleway instances unless you upgrade your instance's volume following Scaleway migration guide.

Alternatively:

  • Use cloudypad configure instead of cloudypad provision or cloudypad update - Note that it will not fully update your instance since provision will be skipped, but it should work nonetheless
  • Create a new instance (but you'll need to reinstall your games)

Dedicated data disk for Scaleway instances

Dedicated data disk is a feature splitting OS (system) disk and data disk to improve maintenability and help with cost reduction (to avoid paying for OS disk while instance is stopped in later releases).

Older instances won't enable dedicated data disk by default to keep retrocompatibility. To enable Scaleway dedicated Data disk:

  • Migrate legacy root volume to new volume type following Scaleway migration guide
  • Perform upgrade and update with cloudypad configure - choose a 0 GB data disk size for now
  • SSH into your instance and move (not copy) folder mv /var/lib/cloudypad/data /var/lib/cloudypad/data-backup
  • Run cloudypad update scaleway --name my-instance --data-disk-size <size-gb> with your desired data disk size
    • This will create a new data disk and mount it in your instance at /var/lib/cloudypad/data
  • SSH into your instance and move back data folder mv /var/lib/cloudypad/data-backup /var/lib/cloudypad/data

You're all done ! Your instance is now using a dedicated data disk.

Cloud provider setup

Cloud provider accounts may require some setup before you can your deploy Cloudy Pad instance.

Typical needs:

  • Create your Cloud provider account - If not already done, you'll need to create an account on the Cloud provider you want to use.
  • Configure your Cloud provider credentials - they are required by Cloudy Pad to create your instance.
  • Define Quotas allowing you to deploy GPU - Most Cloud providers require a "quota increase" before allowing you to deploy GPU instances suitable for Cloud gaming.
  • Profile verification - for new accounts, some Cloud provider may require some kind of verification.

Note: future version of Cloudy Pad will automate away most of this setup for you.

See detailed setup per Cloud provider:

AWS account setup

If you don't already have an AWS account, create an account or use an existing account.

Configure your credentials locally (see official documentation)

Check your configuration:

$ aws sts get-caller-identity
{
    "UserId": "AID...YOUR_USER_ID",
    "Account": "123456789",
    "Arn": "arn:aws:iam::123456789:user/crafteo"
}

You're good to go ! Create your instance with

cloudypad create

Quotas

You may need to increase quota to create the related instance type. If you get an error related to quota:

  • Go to AWS EC2 quota console (or search for "Quota" in the AWS console and go to Amazon Elastic Compute Cloud (Amazon EC2) quota page)
  • For Spot instances: search for All G and VT Spot Instance Requests (or the related instance type) and request a quota increase
  • For On-Demand instances: search for Running On-Demand G and VT instances (or the related instance type) and request a quota increase
  • Use a quota value according to the instance type you want to use. For example, 2xlarge requires at least 8 vCPU.

See AWS service quotas for details.

Azure account setup

If you don't already have an Azure account, create an account or use an existing account.

Configure your credentials locally (see official documentation)

Check your configuration:

$ az account list
[
  {
    "cloudName": "AzureCloud",
    "homeTenantId": "xxx",
    "id": "xxx",
    "isDefault": true,
    "managedByTenants": [],
    "name": "My Azure Subcription",
    "state": "Enabled",
    "tenantId": "xxx",
    "user": {
      "name": "you@example.com",
      "type": "user"
    }
  }
]

Quotas

You may need to increase quota to create the desired instance type. If you get an error related to quota:

  • Go to Azure Quota dashboard (or search for "Quota" in the Azure portal)
  • Go to Compute > filter for your Subscription / Location and search for NC, NC or the instance type prefix you want to use
  • Click on quota name and New Quota Request
  • Fill-out the quota request and submit

Quota is usually accepted within 24 to 48h.

See:

Google Cloud account setup

If you don't already have a Google Cloud account, create an account or use an existing account.

Configure your credentials locally (see official documentation)

โš ๏ธ You must authenticate using Application Default Credentials such as:

$ gcloud auth application-default login

Otherwise Google API won't be able to use "classic" gcloud auth login credentials.

Quotas

You may need to increase quota to create the desired instance type. If you get an error related to quota, see:

Paperspace account setup

If you don't already have a Paperspace account, create an account.

If you haven't already setup an SSH key in your profile:

  • If needed, generate an SSH key with ssh-keygen -t ed25519 -a 100
  • Log into your account and go to Your account > SSH Keys > Add new SSH key to add your key. (see doc for details)

You'll need an API key to create your instance:

You're good to go ! Create your instance with

cloudypad create

Scaleway account setup

If you don't already have an Scaleway account, create an account or use an existing account.

Configure your credentials using scw CLI, see official documentation

Check your configuration:

scw info

You do not need additional configuration appart, maybe, a Quota increase (see below). SSH key needed to access the instance will be configured by Cloudypad.

Quotas

You may need to increase quota to create the desired instance type. If you get an error related to quota:

  • Go to Scaleway Quota dashboard
  • Search for "GPU" and identify the quota you need to increase
  • Fill a quota increase request

How much will I pay ? ๐Ÿซฐ

Cloudy-Pad is free and open-source; however, charges may apply when using a Cloud provider. Typically billed resources:

  • Machine usage (GPU, CPU, RAM)
  • Disk storage
  • IP address reservation
  • Past a certain time played per month, data transfer charges may apply (typically if you play 50h+ per months)

Cost estimations

Estimations for a setup with 8 CPUs, ~30GB RAM, 100GB Disk for 30 hours / month:

  • Google Cloud: ~$15.68 (n1-standard-8 with NVIDIA T4000)
  • AWS: ~$15.67 (g4dn.2xlarge with NVIDIA T4000)
  • Azure: ~$11.06 (NC8as T4 v3 with NVIDIA T4000)
  • Paperspace: ~$22.30 (NVIDIA P4000, a bit more powerful than T4000)

See per cloud providers estimations:

Cost optimizations

Some general recommandations to avoid unnecessary costs

Spot instances

๐Ÿ’ธ It's recommenced to use Spot instances as they are 30% to 90% cheaper ! As Spot instances interrupton is generally low, you probably won't get interruped during your session. However, make sure to save often nonetheless ๐Ÿ˜‰

Spot instances are supported for Cloud providers:

  • AWS
  • Azure
  • Google Cloud

Paperspace doesn't support Spot instances.

Spot instance usage is specified during instance creation with cloudypad create - you'llbe prompted for Spot instance usage, or you can use flag cloudypad create <provider> --spot for providers supporting Spot instances.

To have a better understand about spot instances, see this article.

Egress (sending data out to Internet from Cloud provider network)

Most clouders (including AWS, Azure and GCP) will bill Egress traffic (outgoing traffic from their network to the internet) past a certain threshold. Cloudy Pad incurs egress traffic as video stream will be sent from Clouder network to internet on your machine.

Egress charges may apply typically after 50 hours / month with a 1080p 60FPS streaming setup - time varies depending on your setup and Cloud provider used. See Clouder cost recommandations for details.

Instance setup and specs recommandations

  • Choose a location or region as close as possible to you to avoid too much latency (eg. if you live in the US don't create your instance in Europe)
  • Just provision what you need for: don't create a 500 GB disk if you intend to play a game that will only use 100 GB.
  • GPU / machine type depends on the game you play. Some game will run fine with 4 CPUs but needs high amount of memory such as 32 GB and more, while other will run fine with 4 GB memory but require lots of CPU or a stronger GPU. Refer to requirements and recommended settings for your game.

Turn off your instance while not in use

That goes without saying, remember to turn off your instance while you're not using it to avoid unnecessary costs:

cloudypad stop mypad

AWS costs

Monthly cost estimations

Cloudy-Pad is free and open-source; however, charges may apply when using a Cloud provider. Typically billed resources:

  • Machine usage (GPU, CPU, RAM)
  • Disk storage
  • IP address reservation

๐Ÿ’ธ It's recommenced to use Spot instances as they are 30% to 90% cheaper ! As Spot instances interrupton is generally low, you probably won't get interruped during your session. However, make sure to save often nonetheless ๐Ÿ˜‰

Example: using a g4dn.xlarge (16 GB RAM, 4 CPUs, NVIDIA T4) Spot instance for 10 hours / month would cost approximatively 9.63$ / month.

Instance typeRAM (GB)CPUsGPUSpot ?Disk sizeInstance $ / hh / monthCompute $ / monthDisk / month $Total $ / month
g4dn.xlarge164NVIDIA T4Yes100$0.16310$1.63$8.00$9.63
g4dn.2xlarge328NVIDIA T4Yes100$0.25630$7.67$8.00$15.67
g5.2xlarge328NVIDIA A10GYes250$0.41230$12.36$20.00$32.36
g6.2xlarge328NVIDIA L4Yes250$0.39130$11.73$20.00$31.73
g4dn.xlarge164NVIDIA T4No100$0.52610$5.26$8.00$13.26
g4dn.2xlarge328NVIDIA T4No100$0.75230$22.56$8.00$30.56
g5.2xlarge328NVIDIA A10GNo250$1.21230$36.36$20.00$56.36
g6.2xlarge328NVIDIA L4No250$0.97830$29.33$20.00$49.33

*Estimations based on AWS eu-east-1 pricing as of September 2024. Exact prices may vary over time and by region.

Egress costs - Data transfer out from Amazon to Internet

AWS bills data transfer out to internet past a 100GB free data threshold. As Cloudy Pad streams from AWS to your machine via internet, you may be billed for data transfer past a certain usage. AWS bills 0.09$ per GB in most regions up to 10 TB after the free threshold.

Past 40 or 50 hours per month, AWS may start billing additional data transfer charges.

Considering a 1080p 60 FPS stream, data transfer would be around 2.25 GB/hr @ 5 Mbps, incuring additional cost depending on time played:

Time played / month (h)102040445060100
Data transfered (GB)22.5045.0090.0099.00112.50135.00225.00
Cost ($)$0.00$0.00$0.00$0.00$1.13$3.15$11.25

Azure costs

Monthly cost estimations

Cloudy-Pad is free and open-source; however, charges may apply when using a Cloud provider. Typically billed resources:

  • Machine usage (GPU, CPU, RAM)
  • Disk storage
  • IP address reservation

๐Ÿ’ธ It's recommenced to use Spot instances as they are 30% to 90% cheaper ! As Spot instances interrupton is generally low, you probably won't get interruped during your session. However, make sure to save often nonetheless ๐Ÿ˜‰

Example: using an NV6ads A10 v5 (35 GB RAM, 6 CPUs, 1/6 NVIDIA A10) Spot instance with 100 GB disk for 10 hours / month would cost approximatively 9.24$ / month.

Instance typeRAM (GB)CPUsGPUSpot ?Disk sizeInstance $ / hh / monthCompute $ / monthDisk / month $Total $ / month
NV6ads A10 v55561/6 NVIDIA A10Yes100$0.11410$1.14$8.10$9.24
NC8as T4 v3568NVIDIA T4Yes100$0.09930$2.96$8.10$11.06
NC16as T4 v311016NVIDIA T4Yes250$0.15830$4.73$20.25$24.98
NV6ads A10 v55561/6 NVIDIA A10No100$0.45430$13.62$8.10$21.72
NC8as T4 v3568NVIDIA T4No100$0.75230$22.56$8.10$30.66
NC16as T4 v311016NVIDIA T4No250$1.20030$36.00$20.25$56.25

*Estimations based on Azure US pricing as of September 2024. Exact prices may vary over time and by region.

Egress costs - Data transfer out from Azure to Internet

Azure bills data transfer out to internet past a 100GB free data threshold. As Cloudy Pad streams from Azure to your machine via internet, you may be billed for data transfer past a certain usage. Azure bills 0.08$ to 0.12$ per GB depending on your localisation up to 10 TB after the free threshold.

Considering a 1080p 60 FPS stream, data transfer would be around 2.25 GB/hr. Past 40 or 50 hours per month, Azure may start billing additional data transfer charges:

Time played / month (h)102040445060100
Data transfered (GB)22.5045.0090.0099.00112.50135.00225.00
Cost ($)$0.00$0.00$0.00$0.00$1.00$2.80$10.00

Google Cloud Platform costs

Monthly cost estimations

Cloudy-Pad is free and open-source; however, charges may apply when using a Cloud provider. Typically billed resources:

  • Machine usage (GPU, CPU, RAM)
  • Disk storage
  • IP address reservation

๐Ÿ’ธ It's recommenced to use Spot instances as they are 30% to 90% cheaper ! As Spot instances interrupton is generally low, you probably won't get interruped during your session. However, make sure to save often nonetheless ๐Ÿ˜‰

Example: using a n1-standard-4 (15 GB RAM, 4 CPUs, NVIDIA T4) Spot instance with 100 GB disk for 10 hours / month would cost approximatively 11.54$ / month.

Instance typeRAM (GB)CPUsGPUSpot ?Disk sizeInstance $ / hGPU $ / hh / monthCompute $ / monthDisk $ / monthTotal $ / month
n1-standard-4154NVIDIA T4Yes100$0.0350.11910$1.54$10.00$11.54
n1-standard-8308NVIDIA T4Yes100$0.0700.11930$5.68$10.00$15.68
n1-standard-8308NVIDIA T4Yes250$0.0700.11930$5.68$25.00$30.68
n1-standard-8308NVIDIA P4Yes100$0.0700.24030$9.31$10.00$19.31
n1-standard-8308NVIDIA P4Yes250$0.0700.24030$9.31$25.00$34.31
n1-standard-4154NVIDIA T4No100$0.2200.35010$5.70$10.00$15.70
n1-standard-8308NVIDIA T4No100$0.4400.35030$23.70$10.00$33.70
n1-standard-8308NVIDIA T4No250$0.4400.35030$23.70$25.00$48.70
n1-standard-8308NVIDIA P4No100$0.4400.60030$31.20$10.00$41.20
n1-standard-8308NVIDIA P4No250$0.4400.60030$31.20$25.00$56.20

Instances used for estimation: N1 Standard. Estimations based on Google Cloud on-demand and spot us-central-1 as of September 2024. Exact prices may vary over time and by region.

Egress costs - Data transfer out from Google to Internet

Google bills data transfer out to internet past a 200GB free data threshold. As Cloudy Pad streams from Google to your machine via internet, you may be billed for data transfer past a certain usage. Google bills 0.085$ per GB up to 10 TB after the free threshold.

Considering a 1080p 60 FPS stream, data transfer would be around 2.25 GB/hr. Past 90 or 100 hours per month, Google may start billing additional data transfer charges:

Time played / month (h)1020408090100150
Data transfered (GB)22.5045.0090.00180.00202.50225.00337.50
Cost ($)$0.00$0.00$0.00$0.00$0.21$2.13$11.69

Paperspace costs

Monthly cost estimations

Cloudy-Pad is free and open-source; however, charges may apply when using a Cloud provider. Typically billed resources:

  • Machine usage (GPU, CPU, RAM)
  • Disk storage

Example: Using a P4000 with 30 GB RAM, 8 CPU and 100 GB disk for 10 h / month will cost approximatively 12.10$.

Instance typeRAM (GB)CPUsDisk size (GB)Instance $ / hh / monthDisk / month $Total $ / month
P4000308100$0.51010$7.00$12.10
P4000308100$0.51030$7.00$22.30
RTX4000308100$0.56030$7.00$23.80
P5000308250$0.78030$10.00$33.40
RTX5000308250$0.82030$10.00$34.60

*Estimations based on Paperspace pricing as of September 2024. Exact prices may vary over time and by region.

Egress costs - Data transfer out from Paperspace to Internet

Paperspace does not charge for data transfer. (or it's not documented on their pricing page)

Scaleway costs

Monthly cost estimations

Cloudy-Pad is free and open-source; however, charges may apply when using a Cloud provider. Typically billed resources:

  • Machine usage (GPU, CPU, RAM)
  • Disk storage

More information on Scaleway pricing

More details coming soon.

Egress costs - Data transfer out from Scaleway to Internet

Scaleway charges for data transfer out from Scaleway to Internet. As of 2025-03-09, data transfer costs โ‚ฌ0.000118/GB/hour

More information on Scaleway Storage pricing

More details coming soon.

Development guide

Release

Set export GITHUB_TOKEN=xxx variable and run:

# Will prompt for details and describe required actions
task release-create

Tests

Unit tests

Can be run without prior setup:

task test-unit

Integration tests

Integration tests are manual for now:

  • They require real Cloud accounts
  • They create real Cloud resources which are billed and may persist in case of failure, requiring manual cleanup and knowing about underlying tools

Do NOT run these integration tests if you're not sure about what you're doing to avoid being billed for Cloud resources.

Integration tests using CLI

test/integ/cli-full-lifecycle/run.sh [aws|gcp|azure|paperspace]

Using Mocha

npx mocha test/integ/pulumi/preview.spec.ts
npx mocha test/integ/pulumi/up.spec.ts
npx mocha test/integ/paperspace/client.spec.ts

Development

Development can be done under Nix development shell:

nix develop

Various dev tasks

Run app directly with npx:

npx tsx src/index.ts configure test-create-destroy-gcp

To debug Ansible playbook easily:

  • Run cloudypad with verbose log to show Ansible inventory temporary file, eg:
npx tsx src/index.ts configure test-create-destroy-gcp -v 4
# ...
# 2024-11-07 10:06:53.036 DEBUG   /dist/src/tools/ansible.js:14   AnsibleClient   Ansible command: ansible-playbook ["-i","/tmp/cloudypad-KlRsDX/inventory.yml","/cloudypad/dist/ansible/playbook.yml"]
# ...

Then run Ansible directly:

ansible-playbook -i /tmp/nix-shell.fD63LM/cloudypad-BX2kYb/inventory.yml ansible/playbook.yml -t wolf --start-at-task="Copy docker-compose file"

Will eventually add an easier way to pass custom Ansible options such as --ansible-additional-flag option or environment variable.

Development Virtual Machine

A local Virtual Machine can be created with Vagrant:

vagrant up

Machine IP is hardcoded in Vagrantfile to 192.168.56.43.

Can be used to run Sunshine container and test Ansible playbook easily.

Fast Sunshine container build and import:

task dev-docker-sunshine-to-vm

Ansible test:

ansible-playbook -i ansible/inventories/dev-vagrant.yml ansible/sunshine.yml -t sunshine

Connect to Sunshine web UI (Sunshine is forwarded to local machine):

http://localhost:47990

Local Pulumi stack manipulation

Nix development shell automatically set PULUMI_BACKEND_URL and PULUMI_CONFIG_PASSPHRASE environment variables, allowing to manipulate Pulumi stacks locally.

# List stacks
pulumi stack ls -a

# Show stack resources
pulumi stack -s <organization/CloudyPad-XXX/STACK> --show-ids

# Destroy stack
pulumi destroy -s <organization/CloudyPad-XXX/STACK>

Maintenance

Updating Wolf version

Wolf is deployed via Docker Compose and templated config. To ensure reproducibility, Wolf version and apps images are pinned to a specific SHA.

To update Wolf:

  • Update Wolf version in ansible/roles/wolf/templates/docker-compose.nvidia.yml (stable with SHA)
  • Update images versions in ansible/roles/wolf/defaults/main.yml to use latest stable (master with SHA)
  • Update Wolf config template in ansible/roles/wolf/templates/wolf-config.toml using default config
    • Ensure proper Ansible templates variables are used

Adding a new provider

This section outlines how to add a new provider. It's still scarce but provides a basic entrypoint to help implemented a new provider.

Implementing a new provider requires to:

  • Implement various components to manage instance lifecycle (Runner, Provisioner, Initializer...)
  • Integrating these components into main code

Provider components

Each component must implement a stricly defined interface, allowing seamless integration in Cloudy Pad core:

  • Initializer - Prompt users for required options during creation.
  • Provisioner - Use Pulumi to deploy the instance.
    • Will require a Pulumi stack definition under src/tools/pulumi
  • Runner - Start/stop/restart instance.
  • State - Describe configuration and current state (outputs) for the instance.
  • Factory - Create Provisioner and Runner instances for global Instance Manager

Along with clients, Pulumi stack, etc. as required.

See existing providers for example in src/providers.

Integrate provider in Core

Integrate Provider in core:

  • Add provider name and classes in src/core/const.ts
  • Add provider registration in src/core/manager-builder.ts
  • Add a create sub-command for provider in src/cli/program.ts with options matching provider state interface.

Tests

  • Add unit test in test/unit/<provider>
  • Add CLI full lifecycle tests in test/integ/cli-full-lifecycle
  • Add Pulumi tests in test/integ/pulumi
  • Add provider tests in test/integ/<provider>

Adding new CLI args

To add a new global or commong CLI argument used by all or multiple providers:

  • Add new CLI_ option variable in src/cli/command.ts
  • Ensure CLI option variable is used by all relevant providers in src/providers
  • Ensure CLI option is handled by cliArgsIntoPartialInput
  • Update state Inputs if needed
  • Update tests default values if needed

Extend and customize Cloudy Pad container images

Cloudy Pad rely on Docker to run your games and streaming server. You can extend and customize the container images to fit your needs.

This section assumes you know about Docker, Docker Compose and Docker image build.

Sunshine

Create a Dockerfile such as:

# Use the same version returned by cloudypad --version
FROM ghcr.io/pierrebeucher/cloudypad/sunshine:0.19.0

# Example: add custom packages
RUN --mount=type=cache,target=/var/cache --mount=type=tmpfs,target=/var/log \
    apt update && \
    apt install -y my-package another-package && \
    apt clean

#
# Add other instructions...
#

Build and push your image, for example:

docker buildx build . -t your-registry/cloudypad-custom:some-tag
docker push your-registry/cloudypad-custom:some-tag

Update the Cloudy Pad Sunshine image used by your instance:

cloudypad update aws my-instance \
    --sunshine-image-registry your-registry/cloudypad-custom \
    --sunshine-image-tag some-tag

During development you'll probably need to update your image often to test changes. For faster feedback loop:

  • Build and push your image
  • Connect to instance via SSH, cd sunshine and run:
    docker-compose -f docker-compose.yml -f docker-compose.nvidia.yml up -d --pull always
    

This will update your instance to use your custom image without having to run entire cloudypad update.

Wolf

Wolf Docker images are based on GoW images. They are not maintained by Cloudy Pad but instruction can be found here to create custom images. You can then update configuration directly in your instance at /etc/wolf/cfg following Wolf configuration instructions

Note: Wolf custom image is not fully supported yet. On next Cloudy Pad update or cloudypad configure run your Wolf config will be overwritten with a custom template. Use this only for development or experimental purposes.

License

Cloudy Pad is licensed under GNU General Public License v3.0