From bb8d4e5b57c05c008af83d6c599405a84c28a504 Mon Sep 17 00:00:00 2001 From: Souldbminer <162390887+souldbminersmwc@users.noreply.github.com> Date: Mon, 6 Oct 2025 19:24:08 -0400 Subject: [PATCH 1/6] Update main.yml --- .github/workflows/main.yml | 100 ++++++++++++++++--------------------- 1 file changed, 43 insertions(+), 57 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 69a1b7df..8d9a4c68 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -4,16 +4,13 @@ on: push: branches: - '**' + workflow_dispatch: permissions: - contents: read + contents: write pages: write id-token: write -concurrency: - group: "release-deploy" - cancel-in-progress: true - jobs: release: runs-on: ubuntu-latest @@ -22,74 +19,63 @@ jobs: uses: actions/checkout@v3 - name: Install dependencies - run: | - sudo apt-get update - sudo apt-get install -y zip gh + run: sudo apt-get update && sudo apt-get install -y zip jq - name: Create dist zip run: | mkdir -p release zip -r release/dist.zip dist - - name: Get latest release tag - id: get_latest_tag + - name: Determine latest release tag + id: get_latest run: | - LATEST_TAG=$(gh release list --limit 1 --json tagName -q '.[0].tagName' || echo "") - echo "LATEST_TAG=$LATEST_TAG" >> $GITHUB_ENV - - - name: Determine release tag - run: | - if [ -z "${{ env.LATEST_TAG }}" ]; then + LATEST=$(curl -s -H "Authorization: token ${{ secrets.PAT_TOKEN }}" \ + https://api.github.com/repos/${GITHUB_REPOSITORY}/releases/latest \ + | jq -r '.tag_name // empty') + echo "LATEST_TAG=$LATEST" >> $GITHUB_ENV + if [ -z "$LATEST" ]; then echo "RELEASE_TAG=v0.1.0" >> $GITHUB_ENV else - echo "RELEASE_TAG=${{ env.LATEST_TAG }}" >> $GITHUB_ENV + echo "RELEASE_TAG=$LATEST" >> $GITHUB_ENV fi - - name: Create or update GitHub release + - name: Create or update release + id: release run: | - gh auth setup-git - if gh release view "$RELEASE_TAG" &>/dev/null; then - gh release edit "$RELEASE_TAG" --generate-notes + RELEASE_NAME=${{ env.RELEASE_TAG }} + # Check if release exists + RELEASE_ID=$(curl -s -H "Authorization: token ${{ secrets.PAT_TOKEN }}" \ + https://api.github.com/repos/${GITHUB_REPOSITORY}/releases/tags/${{ env.RELEASE_TAG }} \ + | jq -r '.id // empty') + + if [ -z "$RELEASE_ID" ]; then + echo "Creating release $RELEASE_NAME" + RELEASE_ID=$(curl -s -X POST -H "Authorization: token ${{ secrets.PAT_TOKEN }}" \ + -H "Content-Type: application/json" \ + -d "{\"tag_name\":\"${{ env.RELEASE_TAG }}\",\"name\":\"$RELEASE_NAME\",\"draft\":false,\"prerelease\":false}" \ + https://api.github.com/repos/${GITHUB_REPOSITORY}/releases | jq -r '.id') else - gh release create "$RELEASE_TAG" --generate-notes + echo "Release exists, using ID $RELEASE_ID" fi - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + echo "RELEASE_ID=$RELEASE_ID" >> $GITHUB_ENV - name: Upload hoc.kip - run: gh release upload "$RELEASE_TAG" dist/atmosphere/hoc.kip --clobber - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + ASSET="dist/atmosphere/hoc.kip" + FILENAME=$(basename $ASSET) + curl -s -X POST \ + -H "Authorization: token ${{ secrets.PAT_TOKEN }}" \ + -H "Content-Type: application/octet-stream" \ + --data-binary @"$ASSET" \ + "https://uploads.github.com/repos/${GITHUB_REPOSITORY}/releases/${{ env.RELEASE_ID }}/assets?name=$FILENAME" - name: Upload dist.zip - run: gh release upload "$RELEASE_TAG" release/dist.zip --clobber - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - deploy: - runs-on: ubuntu-latest - needs: release - environment: - name: github-pages - steps: - - name: Checkout repository - uses: actions/checkout@v3 - - - name: Setup Pages - uses: actions/configure-pages@v2 - - - name: Ensure dist exists run: | - if [ ! -d "./pages/dist" ]; then - echo "Error: ./pages/dist does not exist" - exit 1 - fi - - - name: Upload artifact - uses: actions/upload-pages-artifact@v1 - with: - path: './pages/dist' - - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@v1 + ASSET="release/dist.zip" + FILENAME=$(basename $ASSET) + curl -s -X POST \ + -H "Authorization: token ${{ secrets.PAT_TOKEN }}" \ + -H "Content-Type: application/zip" \ + --data-binary @"$ASSET" \ + "https://uploads.github.com/repos/${GITHUB_REPOSITORY}/releases/${{ env.RELEASE_ID }}/assets?name=$FILENAME" From a85525aee37bcdf2ff203bc3902ab5794c20fd45 Mon Sep 17 00:00:00 2001 From: Souldbminer <162390887+souldbminersmwc@users.noreply.github.com> Date: Mon, 6 Oct 2025 19:26:52 -0400 Subject: [PATCH 2/6] Update main.yml --- .github/workflows/main.yml | 81 ++++++++++++++++++++++---------------- 1 file changed, 48 insertions(+), 33 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 8d9a4c68..282a0938 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,81 +1,96 @@ -name: Release and Deploy +name: Release on: push: branches: - - '**' - workflow_dispatch: + - main + tags-ignore: + - '*' permissions: - contents: write - pages: write - id-token: write + contents: write # Required to create releases and push tags jobs: - release: + unit-test: runs-on: ubuntu-latest + permissions: + contents: read steps: - - name: Checkout repository - uses: actions/checkout@v3 + - uses: actions/checkout@v5 + - run: make test - - name: Install dependencies - run: sudo apt-get update && sudo apt-get install -y zip jq + integration-test: + runs-on: ubuntu-latest + needs: unit-test + permissions: + contents: write + steps: + - uses: actions/checkout@v5 - - name: Create dist zip + - name: Create dist.zip run: | mkdir -p release zip -r release/dist.zip dist - - name: Determine latest release tag - id: get_latest + - name: Determine release tag + id: tag run: | - LATEST=$(curl -s -H "Authorization: token ${{ secrets.PAT_TOKEN }}" \ + LATEST_TAG=$(curl -s -H "Authorization: token ${{ secrets.PAT_TOKEN }}" \ https://api.github.com/repos/${GITHUB_REPOSITORY}/releases/latest \ | jq -r '.tag_name // empty') - echo "LATEST_TAG=$LATEST" >> $GITHUB_ENV - if [ -z "$LATEST" ]; then - echo "RELEASE_TAG=v0.1.0" >> $GITHUB_ENV + if [ -z "$LATEST_TAG" ]; then + RELEASE_TAG="v0.1.0" else - echo "RELEASE_TAG=$LATEST" >> $GITHUB_ENV + RELEASE_TAG="$LATEST_TAG" fi + echo "RELEASE_TAG=$RELEASE_TAG" >> $GITHUB_ENV - - name: Create or update release - id: release + - name: Create or update GitHub release via API run: | - RELEASE_NAME=${{ env.RELEASE_TAG }} - # Check if release exists RELEASE_ID=$(curl -s -H "Authorization: token ${{ secrets.PAT_TOKEN }}" \ - https://api.github.com/repos/${GITHUB_REPOSITORY}/releases/tags/${{ env.RELEASE_TAG }} \ + https://api.github.com/repos/${GITHUB_REPOSITORY}/releases/tags/$RELEASE_TAG \ | jq -r '.id // empty') if [ -z "$RELEASE_ID" ]; then - echo "Creating release $RELEASE_NAME" RELEASE_ID=$(curl -s -X POST -H "Authorization: token ${{ secrets.PAT_TOKEN }}" \ -H "Content-Type: application/json" \ - -d "{\"tag_name\":\"${{ env.RELEASE_TAG }}\",\"name\":\"$RELEASE_NAME\",\"draft\":false,\"prerelease\":false}" \ + -d "{\"tag_name\":\"$RELEASE_TAG\",\"name\":\"$RELEASE_TAG\",\"draft\":false,\"prerelease\":false}" \ https://api.github.com/repos/${GITHUB_REPOSITORY}/releases | jq -r '.id') - else - echo "Release exists, using ID $RELEASE_ID" fi - echo "RELEASE_ID=$RELEASE_ID" >> $GITHUB_ENV - name: Upload hoc.kip run: | ASSET="dist/atmosphere/hoc.kip" - FILENAME=$(basename $ASSET) + if [ ! -f "$ASSET" ]; then + echo "File $ASSET not found!" + exit 1 + fi curl -s -X POST \ -H "Authorization: token ${{ secrets.PAT_TOKEN }}" \ -H "Content-Type: application/octet-stream" \ --data-binary @"$ASSET" \ - "https://uploads.github.com/repos/${GITHUB_REPOSITORY}/releases/${{ env.RELEASE_ID }}/assets?name=$FILENAME" + "https://uploads.github.com/repos/${GITHUB_REPOSITORY}/releases/$RELEASE_ID/assets?name=$(basename $ASSET)" - name: Upload dist.zip run: | ASSET="release/dist.zip" - FILENAME=$(basename $ASSET) curl -s -X POST \ -H "Authorization: token ${{ secrets.PAT_TOKEN }}" \ -H "Content-Type: application/zip" \ --data-binary @"$ASSET" \ - "https://uploads.github.com/repos/${GITHUB_REPOSITORY}/releases/${{ env.RELEASE_ID }}/assets?name=$FILENAME" + "https://uploads.github.com/repos/${GITHUB_REPOSITORY}/releases/$RELEASE_ID/assets?name=$(basename $ASSET)" + + release: + runs-on: ubuntu-latest + needs: integration-test + steps: + - uses: actions/checkout@v5 + with: + token: ${{ secrets.RELEASE_TOKEN }} # for pushing to protected branch + - name: Publish new tag + run: | + git config --global user.email "no_reply@gohr.digital" + git config --global user.name "Release Bot" + git tag -fa v5 -m "Update v5 tag" + git push origin v5 --force From 11080b8d84c82ca80d602ef33c00f24728dffbac Mon Sep 17 00:00:00 2001 From: Souldbminer <162390887+souldbminersmwc@users.noreply.github.com> Date: Mon, 6 Oct 2025 19:27:29 -0400 Subject: [PATCH 3/6] Create deploy_pages.yml --- .github/workflows/deploy_pages.yml | 42 ++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 .github/workflows/deploy_pages.yml diff --git a/.github/workflows/deploy_pages.yml b/.github/workflows/deploy_pages.yml new file mode 100644 index 00000000..54e3bfc8 --- /dev/null +++ b/.github/workflows/deploy_pages.yml @@ -0,0 +1,42 @@ +# Simple workflow for deploying static content to GitHub Pages +name: Deploy static content to Pages + +on: + # Runs on pushes targeting the default branch + push: + branches: ["master"] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow one concurrent deployment +concurrency: + group: "pages" + cancel-in-progress: true + +jobs: + # Single deploy job since we're just deploying + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Setup Pages + uses: actions/configure-pages@v2 + - name: Upload artifact + uses: actions/upload-pages-artifact@v1 + with: + # Upload entire repository + path: './pages/dist' + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v1 From 6852bd8e10c22584a6fcf23af99292052c254758 Mon Sep 17 00:00:00 2001 From: Souldbminer <162390887+souldbminersmwc@users.noreply.github.com> Date: Mon, 6 Oct 2025 19:28:04 -0400 Subject: [PATCH 4/6] Delete .github/workflows/main.yml --- .github/workflows/main.yml | 96 -------------------------------------- 1 file changed, 96 deletions(-) delete mode 100644 .github/workflows/main.yml diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml deleted file mode 100644 index 282a0938..00000000 --- a/.github/workflows/main.yml +++ /dev/null @@ -1,96 +0,0 @@ -name: Release - -on: - push: - branches: - - main - tags-ignore: - - '*' - -permissions: - contents: write # Required to create releases and push tags - -jobs: - unit-test: - runs-on: ubuntu-latest - permissions: - contents: read - steps: - - uses: actions/checkout@v5 - - run: make test - - integration-test: - runs-on: ubuntu-latest - needs: unit-test - permissions: - contents: write - steps: - - uses: actions/checkout@v5 - - - name: Create dist.zip - run: | - mkdir -p release - zip -r release/dist.zip dist - - - name: Determine release tag - id: tag - run: | - LATEST_TAG=$(curl -s -H "Authorization: token ${{ secrets.PAT_TOKEN }}" \ - https://api.github.com/repos/${GITHUB_REPOSITORY}/releases/latest \ - | jq -r '.tag_name // empty') - if [ -z "$LATEST_TAG" ]; then - RELEASE_TAG="v0.1.0" - else - RELEASE_TAG="$LATEST_TAG" - fi - echo "RELEASE_TAG=$RELEASE_TAG" >> $GITHUB_ENV - - - name: Create or update GitHub release via API - run: | - RELEASE_ID=$(curl -s -H "Authorization: token ${{ secrets.PAT_TOKEN }}" \ - https://api.github.com/repos/${GITHUB_REPOSITORY}/releases/tags/$RELEASE_TAG \ - | jq -r '.id // empty') - - if [ -z "$RELEASE_ID" ]; then - RELEASE_ID=$(curl -s -X POST -H "Authorization: token ${{ secrets.PAT_TOKEN }}" \ - -H "Content-Type: application/json" \ - -d "{\"tag_name\":\"$RELEASE_TAG\",\"name\":\"$RELEASE_TAG\",\"draft\":false,\"prerelease\":false}" \ - https://api.github.com/repos/${GITHUB_REPOSITORY}/releases | jq -r '.id') - fi - echo "RELEASE_ID=$RELEASE_ID" >> $GITHUB_ENV - - - name: Upload hoc.kip - run: | - ASSET="dist/atmosphere/hoc.kip" - if [ ! -f "$ASSET" ]; then - echo "File $ASSET not found!" - exit 1 - fi - curl -s -X POST \ - -H "Authorization: token ${{ secrets.PAT_TOKEN }}" \ - -H "Content-Type: application/octet-stream" \ - --data-binary @"$ASSET" \ - "https://uploads.github.com/repos/${GITHUB_REPOSITORY}/releases/$RELEASE_ID/assets?name=$(basename $ASSET)" - - - name: Upload dist.zip - run: | - ASSET="release/dist.zip" - curl -s -X POST \ - -H "Authorization: token ${{ secrets.PAT_TOKEN }}" \ - -H "Content-Type: application/zip" \ - --data-binary @"$ASSET" \ - "https://uploads.github.com/repos/${GITHUB_REPOSITORY}/releases/$RELEASE_ID/assets?name=$(basename $ASSET)" - - release: - runs-on: ubuntu-latest - needs: integration-test - steps: - - uses: actions/checkout@v5 - with: - token: ${{ secrets.RELEASE_TOKEN }} # for pushing to protected branch - - name: Publish new tag - run: | - git config --global user.email "no_reply@gohr.digital" - git config --global user.name "Release Bot" - git tag -fa v5 -m "Update v5 tag" - git push origin v5 --force From 1e56f1b016d7f0e71c17f887f372962e61ab2aa3 Mon Sep 17 00:00:00 2001 From: Dominator <160497584+dominatorul@users.noreply.github.com> Date: Fri, 10 Oct 2025 23:14:42 +0300 Subject: [PATCH 5/6] Update README.md --- README.md | 151 ++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 112 insertions(+), 39 deletions(-) diff --git a/README.md b/README.md index 4bf17ffe..c7e507db 100644 --- a/README.md +++ b/README.md @@ -1,58 +1,131 @@
+ +

+ logo
+ + Horizon OC + +

-![alt text](assets/logo.png "logo") +

+ Advanced Open Source Overclocking Tool for Nintendo Switch (Atmosphere CFW) +

+--- -![alt text](https://img.shields.io/badge/GPL--2.0-red?style=for-the-badge "logo") ![alt text](https://img.shields.io/badge/Nintendo_Switch-E60012?style=for-the-badge&logo=nintendo-switch&logoColor=white "logo") [![alt text](https://img.shields.io/badge/Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white)](https://discord.com/invite/S3eX47dHsB) ![alt text](https://img.shields.io/badge/VSCode-0078D4?style=for-the-badge&logo=visual%20studio%20code&logoColor=white) ![alt text](https://img.shields.io/badge/C%2B%2B-00599C?style=for-the-badge&logo=c%2B%2B&logoColor=white) [![Github All Releases](https://img.shields.io/github/downloads/souldbminersmwc/Horizon-OC/total.svg)]() + +![License: GPL-2.0](https://img.shields.io/badge/GPL--2.0-red?style=for-the-badge) +![Nintendo Switch](https://img.shields.io/badge/Nintendo_Switch-E60012?style=for-the-badge&logo=nintendo-switch&logoColor=white) +[![Discord](https://img.shields.io/badge/Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white)](https://discord.com/invite/S3eX47dHsB) +![VSCode](https://img.shields.io/badge/VSCode-0078D4?style=for-the-badge&logo=visual%20studio%20code&logoColor=white) +![C++](https://img.shields.io/badge/C%2B%2B-00599C?style=for-the-badge&logo=c%2B%2B&logoColor=white) +![Downloads](https://img.shields.io/github/downloads/souldbminersmwc/Horizon-OC/total.svg?style=for-the-badge) + +---
-### DISCLAIMER: THIS TOOL CAN BE DANGEROUS IF MISUSED. PROCEED WITH CAUTION -* Due to the design of Horizon OS, overclocking RAM can cause **NAND DAMAGE**. Ensure to have a NAND Backup
+## ⚠️ Disclaimer -A open source overclocking tool for Nintendo Switch consoles running Atmosphere custom firmware
+> **THIS TOOL CAN BE DANGEROUS IF MISUSED. PROCEED WITH CAUTION.** +> Overclocking RAM can cause **NAND DAMAGE** due to Horizon OS design. +> Always ensure you have a **full NAND backup** before proceeding. +--- -## Features: -CPU overclock up to 2397MHz on Mariko units, 2091MHz on Erista units
-GPU up to 1305MHz on Mariko units, 998MHz on Erista units
-RAM up to 3200MHz on Mariko units, 2360MHz on Erista units
-Over/undervolting
-Configurator
-Works with most homebrew
+## 🌀 About -*Higher (potentially dangerous) frequencies are unlockable*
-*The exact maximum overclock varies per console*
-## Installation -Ensure you have the latest version of [Atmosphere](https://github.com/Atmosphere-NX/Atmosphere) and [Ultrahand](https://github.com/ppkantorski/Ultrahand-Overlay) installed before continuing
-Grab latest hoc.kip from releases tab
-If using hekate, edit hekate_ipl.ini to include "kip1=atmosphere/kips/*". No need for editing if using fusee
-Download latest Horizon OC sysmodule from releases tab
-Extract sysmodule into root of SD card
+**Horizon OC** is an **open-source overclocking suite** for Nintendo Switch consoles running **Atmosphere** custom firmware. +It provides safe and flexible control over CPU, GPU, and RAM frequencies, with a modern configuration utility. -Alternatively, you can download the configurator and click the two install buttons
+--- +## 🚀 Features -## Configuration -Download the latest configurator on your computer
-Run the file
-Select the drive your SD card or UMS device is mounted as
-Configure the kip to your liking, and in the end, save it
+✅ CPU up to **2397MHz** (Mariko) / **2091MHz** (Erista) +✅ GPU up to **1305MHz** (Mariko) / **998MHz** (Erista) +✅ RAM up to **3200MHz** (Mariko) / **2360MHz** (Erista) +✅ Overclock & undervolt support +✅ Built-in configuration tool +✅ Compatible with most homebrew -## Building -Set up a development enviorment ready to compile Atmosphere
-Git clone Atmosphere, and move the cloned folder into build/
-Insert Source/stratosphere folder into build/
-Run build.sh +> ⚡ *Higher (potentially dangerous) frequencies are unlockable.* +> ⚙️ *Exact maximums vary per console.* -To build the configurator, cd into Source/Configurator
-Run build.bat or run "python -m PyInstaller --onefile --add-data "assets;assets" --icon=assets/icon.ico --noconsole src/main.py"
+--- +## 🧩 Installation -## Credits -Lightos for RAM timings
-KazushiMe and meha for Switch-Oc-Suite
-sys-clk team for sys-clk
-b0rd2death for Ultrahand sys-clk fork
-Lightos and Sammybigio2011 for early testing
+1. Install the latest versions of: + - [Atmosphere](https://github.com/Atmosphere-NX/Atmosphere) + - [Ultrahand Overlay](https://github.com/ppkantorski/Ultrahand-Overlay) + +2. Download the latest `hoc.kip` from the [Releases](../../releases) tab. +3. If using **Hekate**, edit `hekate_ipl.ini`: + ```ini + kip1=atmosphere/kips/* +```` + +*(No edits needed if using fusee.)* + +4. Download and extract the **Horizon OC sysmodule** to your SD card root. +5. Optionally, use the **Configurator** to install automatically via GUI. + +--- + +## ⚙️ Configuration + +1. Download the **Configurator** on your PC. +2. Run the executable. +3. Select your SD card or UMS device. +4. Adjust frequency settings. +5. Click **Save** to apply your configuration. + +--- + +## 🧱 Building from Source + +1. Set up a build environment for **Atmosphere**. +2. Clone the repo: + + ```bash + git clone https://github.com/Atmosphere-NX/Atmosphere.git + ``` +3. Move it into the `build/` folder. +4. Copy your `Source/stratosphere` folder into `build/`. +5. Build with: + + ```bash + ./build.sh + ``` + +**Build the Configurator:** + +```bash +cd Source/Configurator +build.bat +# or +python -m PyInstaller --onefile --add-data "assets;assets" --icon=assets/icon.ico --noconsole src/main.py +``` + +--- + +## 💎 Credits + +| Contributor | Contribution | +| ------------------------------- | ---------------------- | +| **Lightos**, **Dominatorul** | RAM timings | +| **KazushiMe**, **meha** | Switch-OC-Suite | +| **sys-clk team** | sys-clk base | +| **b0rd2death** | Ultrahand sys-clk fork | +| **Lightos**, **Sammybigio2011** | Early testing | + +--- + +
+ +💻 *Built with ❤️ by the Horizon OC community*
+⭐ Star this repo if you find it useful! + +
From 3dce26b03df48ac8019d69e84f8f4ba5675d0ccf Mon Sep 17 00:00:00 2001 From: Dominator <160497584+dominatorul@users.noreply.github.com> Date: Fri, 10 Oct 2025 23:16:11 +0300 Subject: [PATCH 6/6] Update README.md --- README.md | 108 ++++++++++++++++++++++-------------------------------- 1 file changed, 44 insertions(+), 64 deletions(-) diff --git a/README.md b/README.md index c7e507db..73219487 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,15 @@ +
- -

- logo
- - Horizon OC - -

- -

- Advanced Open Source Overclocking Tool for Nintendo Switch (Atmosphere CFW) -

+logo --- - ![License: GPL-2.0](https://img.shields.io/badge/GPL--2.0-red?style=for-the-badge) -![Nintendo Switch](https://img.shields.io/badge/Nintendo_Switch-E60012?style=for-the-badge&logo=nintendo-switch&logoColor=white) -[![Discord](https://img.shields.io/badge/Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white)](https://discord.com/invite/S3eX47dHsB) -![VSCode](https://img.shields.io/badge/VSCode-0078D4?style=for-the-badge&logo=visual%20studio%20code&logoColor=white) -![C++](https://img.shields.io/badge/C%2B%2B-00599C?style=for-the-badge&logo=c%2B%2B&logoColor=white) +![Nintendo Switch](https://img.shields.io/badge/Nintendo_Switch-E60012?style=for-the-badge\&logo=nintendo-switch\&logoColor=white) +[![Discord](https://img.shields.io/badge/Discord-5865F2?style=for-the-badge\&logo=discord\&logoColor=white)](https://discord.com/invite/S3eX47dHsB) +![VSCode](https://img.shields.io/badge/VSCode-0078D4?style=for-the-badge\&logo=visual%20studio%20code\&logoColor=white) +![C++](https://img.shields.io/badge/C%2B%2B-00599C?style=for-the-badge\&logo=c%2B%2B\&logoColor=white) ![Downloads](https://img.shields.io/github/downloads/souldbminersmwc/Horizon-OC/total.svg?style=for-the-badge) --- @@ -28,79 +18,79 @@ ## ⚠️ Disclaimer -> **THIS TOOL CAN BE DANGEROUS IF MISUSED. PROCEED WITH CAUTION.** -> Overclocking RAM can cause **NAND DAMAGE** due to Horizon OS design. -> Always ensure you have a **full NAND backup** before proceeding. +> **THIS TOOL CAN BE DANGEROUS IF MISUSED. PROCEED WITH CAUTION.** +> Due to the design of Horizon OS, **overclocking RAM can cause NAND DAMAGE.** +> Ensure you have a **full NAND backup** before proceeding. --- ## 🌀 About -**Horizon OC** is an **open-source overclocking suite** for Nintendo Switch consoles running **Atmosphere** custom firmware. -It provides safe and flexible control over CPU, GPU, and RAM frequencies, with a modern configuration utility. +**Horizon OC** is an open-source overclocking tool for Nintendo Switch consoles running **Atmosphere custom firmware**. +It enables advanced CPU, GPU, and RAM tuning with user-friendly configuration tools. --- ## 🚀 Features -✅ CPU up to **2397MHz** (Mariko) / **2091MHz** (Erista) -✅ GPU up to **1305MHz** (Mariko) / **998MHz** (Erista) -✅ RAM up to **3200MHz** (Mariko) / **2360MHz** (Erista) -✅ Overclock & undervolt support -✅ Built-in configuration tool -✅ Compatible with most homebrew +* **CPU:** Up to `2397MHz` (Mariko) / `2091MHz` (Erista) +* **GPU:** Up to `1305MHz` (Mariko) / `998MHz` (Erista) +* **RAM:** Up to `3200MHz` (Mariko) / `2360MHz` (Erista) +* Over/undervolting support +* Built-in configurator +* Compatible with most homebrew -> ⚡ *Higher (potentially dangerous) frequencies are unlockable.* -> ⚙️ *Exact maximums vary per console.* +> ⚡ *Higher (potentially dangerous) frequencies are unlockable.* +> ⚙️ *Exact maximum values vary per console.* --- ## 🧩 Installation -1. Install the latest versions of: - - [Atmosphere](https://github.com/Atmosphere-NX/Atmosphere) - - [Ultrahand Overlay](https://github.com/ppkantorski/Ultrahand-Overlay) +1. Ensure you have the latest versions of -2. Download the latest `hoc.kip` from the [Releases](../../releases) tab. -3. If using **Hekate**, edit `hekate_ipl.ini`: - ```ini + * [Atmosphere](https://github.com/Atmosphere-NX/Atmosphere) + * [Ultrahand Overlay](https://github.com/ppkantorski/Ultrahand-Overlay) +2. Download the latest **hoc.kip** file from the [Releases](../../releases) tab. +3. If using **Hekate**, edit `hekate_ipl.ini` to include: + + ``` kip1=atmosphere/kips/* -```` + ``` -*(No edits needed if using fusee.)* - -4. Download and extract the **Horizon OC sysmodule** to your SD card root. -5. Optionally, use the **Configurator** to install automatically via GUI. + *(No changes needed if using fusee.)* +4. Download and extract the **Horizon OC sysmodule** to the root of your SD card. +5. Alternatively, use the **Configurator** and click the **Install** buttons for automatic setup. --- ## ⚙️ Configuration -1. Download the **Configurator** on your PC. +1. Download the latest **Configurator** on your computer. 2. Run the executable. -3. Select your SD card or UMS device. -4. Adjust frequency settings. +3. Select your SD card or UMS drive. +4. Adjust overclocking settings as desired. 5. Click **Save** to apply your configuration. --- ## 🧱 Building from Source -1. Set up a build environment for **Atmosphere**. -2. Clone the repo: +1. Set up a development environment for compiling **Atmosphere**. +2. Clone Atmosphere: ```bash git clone https://github.com/Atmosphere-NX/Atmosphere.git ``` -3. Move it into the `build/` folder. -4. Copy your `Source/stratosphere` folder into `build/`. -5. Build with: +3. Move the cloned folder into `build/`. +4. Insert your `Source/stratosphere` folder into `build/`. +5. Run: ```bash ./build.sh ``` -**Build the Configurator:** +To build the Configurator: ```bash cd Source/Configurator @@ -113,19 +103,9 @@ python -m PyInstaller --onefile --add-data "assets;assets" --icon=assets/icon.ic ## 💎 Credits -| Contributor | Contribution | -| ------------------------------- | ---------------------- | -| **Lightos**, **Dominatorul** | RAM timings | -| **KazushiMe**, **meha** | Switch-OC-Suite | -| **sys-clk team** | sys-clk base | -| **b0rd2death** | Ultrahand sys-clk fork | -| **Lightos**, **Sammybigio2011** | Early testing | +* **Lightos** & **Dominatorul** – RAM timings +* **KazushiMe** & **meha** – Switch-OC-Suite +* **sys-clk team** – sys-clk +* **b0rd2death** – Ultrahand sys-clk fork +* **Lightos** & **Sammybigio2011** – Early testing ---- - -
- -💻 *Built with ❤️ by the Horizon OC community*
-⭐ Star this repo if you find it useful! - -