Deiteris' W Okada Fork Cloud

Last update: June 26, 2026


Introduction


Virtual Audio Cable

A Virtual Audio Cable (VAC) is required to use the realtime voice changer on Discord & Games.

  • A VAC makes a virtual audio device, used to re-route audio between programs.

  • In this context, it allows you to set the AI Converted Voice Output as your input device in programs like Discord.


Choose your Cloud Service

Set up the program using your preferred cloud service guide. Once configured, use the Public Tunnel URL to open the interface and continue with the next steps




Google Colab

  • 1. Access: Open the Deiteris Colab.

  • 2. Install: Start from the top and run the first cell. Colab Install

  • 3. Second Cell: When it finishes (it will output Done! Proceed with the next steps), run the second cell. Colab Second Cell

  • 4. Ngrok: Scroll to the last cell, place your Ngrok token into the TOKEN_HERE field. Ngrok Token

  • 5. Launch: Run the cell. (Optional) Under the token field, you can change the region selection for lower latency. Once it finishes downloading, click the generated Ngrok link to start the Web UI.


Kaggle

Account Setup

  • Start by making an account here.
Kaggle Sign In
  • Verify your account with a phone number. This is required to enable the "Internet" option in your notebooks, which is necessary for downloading models and dependencies.
Kaggle Phone Verification

Notebook Creation & Setup

  • Clone: Go to the realtime voice changer notebook and click "Copy and Edit". Wokada Deiteris Fork Kaggle Notebook

  • Persistence: In the sidebar on the right, turn on Internet. Make sure persistence is set to Files and variables. Internet

  • GPU: Turn on T4 x2 GPUs in the Accelerator settings. GPU

  • Save: (Optional) Turn on "Save version" to save your progress. Persistence

Installation & Ngrok Setup

  • Install: Starting from the top, run the first installation cell. When it outputs Done! Proceed with the next steps, run the third cell.
Install 1 Install 2
  • Ngrok: Scroll to the last cell, paste your token in the field, and run it to get your public URL. Token

Lightning.AI

Create an Account

LightningAI Signup
  • Make sure you verify yourself with a phone number. Once you've done that you will get an email that looks like this:
LightningAI Verification
  • Studio: Clone the Wokada-Deiteris-Fork Studio. Clone

  • GPU: Switch to a GPU environment (Studio Environment -> Switch To GPU). GPU Settings

  • Install: Run the first cell to install dependencies, and the second cell to configure the server.

  • Tunnels: In the third cell, choose your tunnel (Port Viewer recommended) and run it.

  • File Management: Use the Teamspace Drive button on the right sidebar to upload files. Drive

  • Notebook: If you want to return to the code, click the Jupyter icon on the right. Jupyter


Usage

Now that you have the Web UI running, the rest of the process is identical to using a local installation.

Continue with the Local Guide


Troubleshooting

The web interface (client) is just a control panel; the actual voice conversion and backend processes happen on the server. If the cloud server crashes or fails to launch properly, you can enable Debug Mode to read the exact error logs directly in your notebook's output cell.

To do this, you need to append the --log-level debug argument to the command that launches the server.

  1. Scroll to the bottom of your notebook to find the cell that starts the server.
  2. Look for the execution command: !./ML_Program
  3. Add the debug flag to the end of the command so it looks like this:
!./ML_Program --log-level debug
  1. Run the cell again.
  1. Locate the final cell in your notebook/studio that actually starts the server.
  2. Look for the execution command: !./VoiceChanger
  3. Add the debug flag to the end of the command so it looks like this:
!./VoiceChanger --log-level debug
  1. Run the cell again.

The notebook output cell will now print detailed debug logs. If the server crashes, copy the text output from that cell. Save it to a .txt file, or paste it to a site like Pastebin to share with others when asking for support.

  • This utility allows you to convert model weights both ways: PyTorch (.pth) to Safetensors (.safetensors), and Safetensors (.safetensors) back to PyTorch (.pth).
  • Safetensors ➜ PyTorch: W-Okada saves imported models internally as .safetensors files inside your model_dir folder. If you accidentally deleted your original .pth files, you can use this script to recover them.
  • PyTorch ➜ Safetensors: You can also convert standard .pth weights to .safetensors for safer sharing, faster loading, or local archiving.

Step 1: Install Requirements

  • You must have Python installed on your PC.
  • Open your terminal or command prompt (cmd) and run:
    pip install torch safetensors
  • For Notebooks (Google Colab & Kaggle): Run this command inside a new code cell:
    !pip install torch safetensors
  • For Studios (Lightning.AI): Open a new terminal tab and run:
    pip install torch safetensors

Step 2: Create the Script

  • Create a file named safetensors-pytorch-converter.py and paste the code below into it.
  • (For Google Colab & Kaggle, you can automatically create this file by running a new code cell with %%writefile safetensors-pytorch-converter.py as the very first line, followed by the script below).

    #  RVC Model Weight Converter (PTH <-> Safetensors)
    
    
    import argparse
    import os
    import sys
    import torch
    from safetensors.torch import load_file, save_file
    
    def convert_pth_to_safetensors(pth_path, output_path):
        # Loads a PyTorch .pth model and exports its state_dict to Safetensors
        print(f"Reading PyTorch weights from: {pth_path}")
        try:
            # weights_only=True prevents execution of arbitrary code during load
            weights = torch.load(pth_path, map_location="cpu", weights_only=True)
    
            # Unpack the state_dict if the file contains training metadata
            if isinstance(weights, dict) and "state_dict" in weights:
                weights = weights["state_dict"]
    
            print(f"Writing Safetensors weights to: {output_path}")
            save_file(weights, output_path)
            print("Conversion successful.")
        except Exception as e:
            print(f"Error during PTH conversion: {e}", file=sys.stderr)
    
    
    def convert_safetensors_to_pth(safetensors_path, output_path):
        # Loads a Safetensors model and exports it as a PyTorch .pth file
        print(f"Reading Safetensors weights from: {safetensors_path}")
        try:
            weights = load_file(safetensors_path, device="cpu")
            print(f"Writing PyTorch weights to: {output_path}")
            torch.save(weights, output_path)
            print("Conversion successful.")
        except Exception as e:
            print(f"Error during Safetensors conversion: {e}", file=sys.stderr)
    
    
    def main():
        parser = argparse.ArgumentParser(
            description="Convert RVC weights between PyTorch (.pth) and Safetensors formats."
        )
        parser.add_argument(
            "input_file", 
            type=str, 
            help="Path to the .pth or .safetensors file to convert"
        )
        parser.add_argument(
            "-o", "--output", 
            type=str, 
            default=None, 
            help="Optional custom output path"
        )
    
        args = parser.parse_args()
        input_path = args.input_file
    
        if not os.path.exists(input_path):
            print(f"Error: The file '{input_path}' does not exist.", file=sys.stderr)
            sys.exit(1)
    
        file_name, file_ext = os.path.splitext(input_path)
        ext = file_ext.lower()
    
        if ext == ".pth":
            output_path = args.output if args.output else f"{file_name}.safetensors"
            convert_pth_to_safetensors(input_path, output_path)
        elif ext == ".safetensors":
            output_path = args.output if args.output else f"{file_name}.pth"
            convert_safetensors_to_pth(input_path, output_path)
        else:
            print("Error: Input file must be a .pth or .safetensors file.", file=sys.stderr)
            sys.exit(1)
    
    
    if __name__ == "__main__":
        main()

Step 3: Run the Script

  1. Place your target file (.safetensors or .pth) in the same folder as safetensors-pytorch-converter.py.
  2. Open your command prompt (cmd) or terminal in that folder.
  3. Run the script by passing your filename:

    To convert Safetensors to PyTorch (.pth):

    python safetensors-pytorch-converter.py "model.safetensors"

    To convert PyTorch (.pth) to Safetensors:

    python safetensors-pytorch-converter.py "model.pth"
  1. Find the path to your target file (.safetensors or .pth) in your cloud workspace or notebook file manager.
  2. Execute the conversion:
    • For Notebooks (Google Colab & Kaggle): Run the script using !python in a new code cell:
      !python safetensors-pytorch-converter.py "/path/to/model.safetensors"
    • For Studios (Lightning.AI): Open your Lightning Studio terminal and run:
      python safetensors-pytorch-converter.py "/path/to/model.safetensors"

You have reached the end.

Report Issues

⚠️
SECURITY ALERT: COMMUNITY SAFETY NOTICE
  1. Discord Vanity Hijack: AI HUB official vanity discord.gg/aihub was hijacked on April 30, 2026. Do not join it, it's a malicious clone server. Please use our official permanent invite: discord.gg/mmRR2TUJF5.
  2. Weights.gg Vanity (At Risk): We are aware of actors targeting AI HUB's Former Partner Weights.gg's vanity discord.gg/weights. To ensure you remain on the legitimate server, please use our permanent invite: discord.gg/CHGgVRCHvm. Be aware that Weights.gg's Discord Server is semi closed since the shutdown on April 1st 2026.
  3. We aren't affiliated with W8ights / INERTIV: We have no affiliation with W8ights, which rebranded to INERTIV for the name being too close to Weights.gg, our former Partner. They currently don't seem adversial or malicious, but please be cautious.
  4. TL;DR: YOU ARE SAFE. This is the original, legitimate AI Hub Docs. We are just informing users about impersonations.