|
| 1 | +# AutoCreamAPI |
| 2 | + |
| 3 | +[](https://github.com/Mooshieblob1/AutoCreamAPI/actions/workflows/build.yml) |
| 4 | + |
| 5 | +A desktop application that automatically sets up [CreamAPI](https://cs.rin.ru/forum/viewtopic.php?f=29&t=70576) for Steam games. Built with **Rust/Tauri 2** and **Svelte 5**, replacing the original .NET-based AutoCreamAPI. |
| 6 | + |
| 7 | +## Features |
| 8 | + |
| 9 | +- **Automatic Game Discovery** — Scans all Steam library folders by parsing local ACF manifest files. No API key required. |
| 10 | +- **Dual-Source DLC Fetching** — Retrieves DLC lists from both the Steam Store API and steamcmd.net, including hidden/unlisted DLCs. |
| 11 | +- **One-Click Apply/Remove** — Backs up original Steam API DLLs, installs CreamAPI replacements, and generates `cream_api.ini` configuration automatically. |
| 12 | +- **x86 & x64 Support** — Detects and handles both 32-bit and 64-bit Steam API DLLs per game. |
| 13 | +- **Offline Mode** — Optional setting to force CreamAPI into offline mode. |
| 14 | +- **Extra Protection** — Optional flag for games with additional DRM checks. |
| 15 | +- **Applied Status Detection** — Shows which games already have CreamAPI installed by detecting backup DLLs. |
| 16 | +- **Hidden DLC Badges** — DLCs sourced from steamcmd.net (not visible on the Steam Store) are tagged as "Hidden". |
| 17 | +- **Search & Filter** — Quickly find games in large libraries. |
| 18 | + |
| 19 | +## Screenshots |
| 20 | + |
| 21 | +*Coming soon* |
| 22 | + |
| 23 | +## Requirements |
| 24 | + |
| 25 | +- **Windows 10/11** (64-bit) |
| 26 | +- **Steam** installed with at least one game library |
| 27 | +- **CreamAPI DLLs** — The app ships with bundled CreamAPI DLLs (`steam_api.dll` and `steam_api64.dll`) in its resources |
| 28 | + |
| 29 | +## Installation |
| 30 | + |
| 31 | +### Pre-built Installers |
| 32 | + |
| 33 | +Download the latest installer from the [Actions](https://github.com/Mooshieblob1/AutoCreamAPI/actions) artifacts or [Releases](https://github.com/Mooshieblob1/AutoCreamAPI/releases): |
| 34 | + |
| 35 | +- **`AutoCreamAPI_x.x.x_x64-setup.exe`** — NSIS installer (recommended) |
| 36 | +- **`AutoCreamAPI_x.x.x_x64_en-US.msi`** — MSI installer |
| 37 | + |
| 38 | +### Build from Source |
| 39 | + |
| 40 | +#### Prerequisites |
| 41 | + |
| 42 | +- [Rust](https://rustup.rs/) (stable, ≥1.77.2) |
| 43 | +- [Node.js](https://nodejs.org/) (≥22) |
| 44 | +- [pnpm](https://pnpm.io/) (≥10) |
| 45 | + |
| 46 | +#### Steps |
| 47 | + |
| 48 | +```bash |
| 49 | +git clone https://github.com/Mooshieblob1/AutoCreamAPI.git |
| 50 | +cd AutoCreamAPI |
| 51 | +pnpm install |
| 52 | +pnpm tauri build |
| 53 | +``` |
| 54 | + |
| 55 | +The built executable and installers will be in `src-tauri/target/release/` and `src-tauri/target/release/bundle/`. |
| 56 | + |
| 57 | +For development with hot-reload: |
| 58 | + |
| 59 | +```bash |
| 60 | +pnpm tauri dev |
| 61 | +``` |
| 62 | + |
| 63 | +## Usage |
| 64 | + |
| 65 | +1. **Launch AutoCreamAPI** — The app automatically scans your Steam libraries for installed games. |
| 66 | +2. **Select a game** from the left panel. |
| 67 | +3. **Review the DLC list** — All available DLCs are fetched and pre-selected. Deselect any you don't want. |
| 68 | +4. **Configure settings** (optional): |
| 69 | + - **Offline Mode** — Forces CreamAPI to work without a network connection. |
| 70 | + - **Extra Protection** — Enables additional compatibility for certain games. |
| 71 | +5. **Click "Apply CreamAPI"** — The app will: |
| 72 | + - Back up the original `steam_api.dll` / `steam_api64.dll` |
| 73 | + - Rename originals to `steam_api_o.dll` / `steam_api64_o.dll` |
| 74 | + - Write the CreamAPI DLLs in their place |
| 75 | + - Generate a `cream_api.ini` with your selected DLCs |
| 76 | +6. **To revert**, select the game and click **"Remove CreamAPI"** — originals are restored from backups. |
| 77 | + |
| 78 | +## How It Works |
| 79 | + |
| 80 | +### Game Discovery |
| 81 | + |
| 82 | +The app reads the Windows registry (`HKCU\Software\Valve\Steam`) to find Steam's installation path, then parses `libraryfolders.vdf` to locate all library folders. Each library's `steamapps/` directory is scanned for `.acf` manifest files which contain game metadata (app ID, name, install directory). Games are checked for the presence of `steam_api.dll` and/or `steam_api64.dll` to confirm they use the Steam API. |
| 83 | + |
| 84 | +### DLC Fetching |
| 85 | + |
| 86 | +Two sources are queried concurrently: |
| 87 | + |
| 88 | +| Source | Endpoint | What it provides | |
| 89 | +|--------|----------|-----------------| |
| 90 | +| **Steam Store API** | `store.steampowered.com/api/appdetails` | Official DLC list with names | |
| 91 | +| **SteamCMD Web API** | `api.steamcmd.net/v1/info` | Hidden/unlisted DLCs via `extended.listofdlc` and depot metadata | |
| 92 | + |
| 93 | +Results are merged and deduplicated. DLCs only found via SteamCMD are marked as "Hidden" in the UI. Placeholder names are resolved with follow-up Store API calls. |
| 94 | + |
| 95 | +### CreamAPI Application |
| 96 | + |
| 97 | +When applied, the app: |
| 98 | + |
| 99 | +1. Reads the bundled CreamAPI DLLs from Tauri's resource directory |
| 100 | +2. Creates a `.backup` copy of the original Steam API DLL |
| 101 | +3. Renames the original to `*_o.dll` (required by CreamAPI as the "original API" reference) |
| 102 | +4. Writes the CreamAPI DLL in place of the original |
| 103 | +5. Generates `cream_api.ini` with app ID, DLC list, and settings |
| 104 | + |
| 105 | +## Tech Stack |
| 106 | + |
| 107 | +| Layer | Technology | |
| 108 | +|-------|-----------| |
| 109 | +| **Framework** | [Tauri 2](https://tauri.app/) | |
| 110 | +| **Backend** | Rust (edition 2021) | |
| 111 | +| **Frontend** | [Svelte 5](https://svelte.dev/) + TypeScript | |
| 112 | +| **Build Tool** | [Vite 8](https://vite.dev/) | |
| 113 | +| **HTTP Client** | reqwest 0.12 | |
| 114 | +| **VDF Parsing** | keyvalues-serde 0.2 | |
| 115 | +| **Registry** | winreg 0.55 | |
| 116 | +| **CI/CD** | GitHub Actions (Windows) | |
| 117 | +| **Package Manager** | pnpm | |
| 118 | + |
| 119 | +## Project Structure |
| 120 | + |
| 121 | +``` |
| 122 | +AutoCreamAPI/ |
| 123 | +├── src/ # Frontend (Svelte) |
| 124 | +│ ├── App.svelte # Main UI component |
| 125 | +│ ├── main.ts # Entry point |
| 126 | +│ └── styles.css # Dark theme styles |
| 127 | +├── src-tauri/ # Backend (Rust/Tauri) |
| 128 | +│ ├── src/ |
| 129 | +│ │ ├── lib.rs # Tauri command handlers |
| 130 | +│ │ ├── steam.rs # Steam game discovery |
| 131 | +│ │ ├── dlc.rs # DLC fetching (dual-source) |
| 132 | +│ │ └── creamapi.rs # DLL management & config generation |
| 133 | +│ ├── resources/ # Bundled CreamAPI DLLs |
| 134 | +│ │ ├── steam_api.dll |
| 135 | +│ │ └── steam_api64.dll |
| 136 | +│ ├── Cargo.toml |
| 137 | +│ └── tauri.conf.json |
| 138 | +├── .github/workflows/ |
| 139 | +│ └── build.yml # CI: Windows build + artifact upload |
| 140 | +├── package.json |
| 141 | +└── vite.config.ts |
| 142 | +``` |
| 143 | + |
| 144 | +## Background |
| 145 | + |
| 146 | +This project is a ground-up rewrite of the original [AutoCreamAPI](https://github.com/MoebiusZero/AutoCreamAPI), which was a .NET Core 3.1 WPF application. The original stopped working due to: |
| 147 | + |
| 148 | +1. **.NET Core 3.1 reaching end-of-life** — The compiled binary would no longer launch on systems without the deprecated runtime. |
| 149 | +2. **Steam API deprecation** — The `ISteamApps/GetAppList/v2` endpoint used for game discovery was shut down (returns 404). |
| 150 | +3. **Stale CreamAPI DLLs** — The bundled DLLs were outdated and incompatible with newer Steam client updates. |
| 151 | + |
| 152 | +This rewrite addresses all three issues by using Rust (no runtime dependency), local file-based game discovery (no Steam web API needed), and bundling current CreamAPI DLLs as Tauri resources. |
| 153 | + |
| 154 | +## License |
| 155 | + |
| 156 | +GPL-3.0 — see [LICENSE](LICENSE) for details. |
| 157 | + |
| 158 | +## Disclaimer |
| 159 | + |
| 160 | +This software is provided for educational and personal use. The authors are not responsible for any misuse. Use at your own risk and in accordance with applicable terms of service. |
0 commit comments