Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 8 additions & 8 deletions .github/workflows/build-arcade-exe.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Build Lemonade Arcade Executable
name: Build Infinity Arcade Executable

on:
push:
Expand Down Expand Up @@ -48,18 +48,18 @@ jobs:

- name: Build executable with PyInstaller
run: |
python -m PyInstaller lemonade_arcade.spec
python -m PyInstaller infinity_arcade.spec
shell: pwsh

- name: Verify build outputs
run: |
if (-not (Test-Path "dist\LemonadeArcade.exe")) {
if (-not (Test-Path "dist\InfinityArcade.exe")) {
Write-Error "Executable not found"
exit 1
}

# Show file information
$exe = Get-Item "dist\LemonadeArcade.exe"
$exe = Get-Item "dist\InfinityArcade.exe"

Write-Host "Build artifact:"
Write-Host " - Executable: $($exe.Name) ($([math]::Round($exe.Length / 1MB, 2)) MB)"
Expand All @@ -69,8 +69,8 @@ jobs:
- name: Upload executable artifact
uses: actions/upload-artifact@v4
with:
name: lemonade-arcade-exe
path: dist/LemonadeArcade.exe
name: infinity-arcade-exe
path: dist/InfinityArcade.exe
retention-days: 30

- name: Upload to release (if release)
Expand All @@ -80,6 +80,6 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ github.event.release.upload_url }}
asset_path: dist/LemonadeArcade.exe
asset_name: LemonadeArcade.exe
asset_path: dist/InfinityArcade.exe
asset_name: InfinityArcade.exe
asset_content_type: application/octet-stream
3 changes: 2 additions & 1 deletion .github/workflows/lint-python.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,5 +30,6 @@ jobs:

- name: Lint with pylint
run: |
pylint lemonade_arcade --rcfile .pylintrc
pylint src/infinity_arcade --rcfile .pylintrc
pylint src/lemonade_client --rcfile .pylintrc

2 changes: 1 addition & 1 deletion .github/workflows/publish-website.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ on:

jobs:
build-n-publish-website:
name: Build and publish lemonade-arcade.com website
name: Build and publish infinity-arcade.com website
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@main
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/publish_to_pypi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ jobs:
shell: bash -el {0}
run: |
python -m pip install --upgrade pip
pip install "dist/lemonade_arcade-${{ env.VERSION }}-py3-none-any.whl[dev]"
pip install "dist/infinity_arcade-${{ env.VERSION }}-py3-none-any.whl[dev]"
- name: Publish distribution package to PyPI
if: startsWith(github.ref, 'refs/tags/v')
uses: pypa/gh-action-pypi-publish@release/v1
Expand Down
91 changes: 41 additions & 50 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,81 +1,72 @@

![Lemonade Arcade Banner](./img/banner.png)
<pre align="center">
██╗███╗ ██╗███████╗██╗███╗ ██╗██╗████████╗██╗ ██╗
██║████╗ ██║██╔════╝██║████╗ ██║██║╚══██╔══╝╚██╗ ██╔╝
██║██╔██╗ ██║█████╗ ██║██╔██╗ ██║██║ ██║ ╚████╔╝
██║██║╚██╗██║██╔══╝ ██║██║╚██╗██║██║ ██║ ╚██╔╝
██║██║ ╚████║██║ ██║██║ ╚████║██║ ██║ ██║
╚═╝╚═╝ ╚═══╝╚═╝ ╚═╝╚═╝ ╚═══╝╚═╝ ╚═╝ ╚═╝

█████╗ ██████╗ ██████╗ █████╗ ██████╗ ███████╗
██╔══██╗██╔══██╗██╔════╝██╔══██╗██╔══██╗██╔════╝
███████║██████╔╝██║ ███████║██║ ██║█████╗
██╔══██║██╔══██╗██║ ██╔══██║██║ ██║██╔══╝
██║ ██║██║ ██║╚██████╗██║ ██║██████╔╝███████╗
╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝╚═════╝ ╚══════╝
</pre>

<p align="center">
<a href="https://discord.gg/5xXzkMu8Zk">
<img src="https://img.shields.io/badge/Discord-7289DA?logo=discord&logoColor=white" alt="Discord" />
</a>
<img src="https://img.shields.io/badge/Discord-7289DA?logo=discord&logoColor=white" alt="Discord" /></a>
<a href="docs/README.md#installation" title="Check out our instructions">
<img src="https://img.shields.io/badge/Windows-11-0078D6?logo=windows&logoColor=white" alt="Windows 11" />
</a>
<img src="https://img.shields.io/badge/Windows-11-0078D6?logo=windows&logoColor=white" alt="Windows 11" /></a>
<a href="https://lemonade-server.ai/#linux" title="Ubuntu 24.04 & 25.04 Supported">
<img src="https://img.shields.io/badge/Ubuntu-24.04%20%7C%2025.04-E95420?logo=ubuntu&logoColor=white" alt="Ubuntu 24.04 | 25.04" />
</a>
<img src="https://img.shields.io/badge/Ubuntu-24.04%20%7C%2025.04-E95420?logo=ubuntu&logoColor=white" alt="Ubuntu 24.04 | 25.04" /></a>
<a href="#installation" title="Check out our instructions">
<img src="https://img.shields.io/badge/Python-3.10--3.13-blue?logo=python&logoColor=white" alt="Made with Python" />
</a>
<img src="https://img.shields.io/badge/Python-3.10--3.13-blue?logo=python&logoColor=white" alt="Made with Python" /></a>
<a href="https://github.com/lemonade-sdk/lemonade-arcade/releases/latest" title="Download the latest release">
<img src="https://img.shields.io/github/v/release/lemonade-sdk/lemonade-arcade?include_prereleases" alt="Latest Release" />
</a>
<img src="https://img.shields.io/github/v/release/lemonade-sdk/lemonade-arcade?include_prereleases" alt="Latest Release" /></a>
<a href="https://tooomm.github.io/github-release-stats/?username=lemonade-sdk&repository=lemonade-arcade">
<img src="https://img.shields.io/github/downloads/lemonade-sdk/lemonade-arcade/total.svg" alt="GitHub downloads" />
</a>
<img src="https://img.shields.io/github/downloads/lemonade-sdk/lemonade-arcade/total.svg" alt="GitHub downloads" /></a>
<a href="https://github.com/lemonade-sdk/lemonade-arcade/blob/main/LICENSE">
<img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="License: MIT" />
</a>
<img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="License: MIT" /></a>
<a href="https://star-history.com/#lemonade-sdk/lemonade-arcade">
<img src="https://img.shields.io/badge/Star%20History-View-brightgreen" alt="Star History Chart" />
</a>
<img src="https://img.shields.io/badge/Star%20History-View-brightgreen" alt="Star History Chart" /></a>
</p>

Use your overpowered GPU to run AI that produces creative retro-style games! Enter your prompt and the playable game pops open in minutes.
Create playable retro-style games with LLMs in minutes! Enter your prompt and your game pops open, it's that simple.

Push your imagination to the limit, it's 100% free and local.

![Infinity Arcade GIF](https://github.com/lemonade-sdk/assets/blob/main/arcade/infinity-arcade-demo.gif?raw=true)


## Hardware Requirement

Lemonade Arcade uses a 30 billion parameter LLM to generate games, which requires certain hardware specs to run well.
Infinity Arcade will detect the hardware you have available and load a recommended LLM.

| Configuration | GPU/APU | Memory | Disk Space |
|---------------|---------|---------|---------|
| **Minimum (CPU)** | Ryzen AI 7000-series chip or newer | 32 GB RAM | 20 GB |
| **Suggested (dGPU)** | Radeon 7800XT or newer | 16 GB VRAM | 20 GB |
| **Suggested (APU)** | Strix Halo (Ryzen AI MAX 395) | 64 GB unified memory | 20 GB |
| Configuration | GPU/APU | Memory | Disk Space | LLM |
|---------------|---------|---------|---------|---------|
| **Minimum (CPU)** | Ryzen AI 7000-series chip or newer | 32 GB RAM | 3 GB | Qwen3-4B-Instruct |
| **Suggested (NPU)** | Ryzen AI 300-series chip or newer | 32 GB RAM | 10 GB | Qwen-2.5-7B-Instruct-Hybrid |
| **Suggested (dGPU)** | Radeon 7800XT or newer | 16 GB VRAM | 20 GB | Qwen3-Coder-30B |
| **Suggested (APU)** | Strix Halo (Ryzen AI MAX 395) | 64 GB unified memory | 20 GB | Qwen3-Coder-30B |

## Quick Start


<p align="center">Windows: click this:</p>
<p align="center">
<a href="https://github.com/lemonade-sdk/lemonade-arcade/releases/latest/download/LemonadeArcade.exe"><img src=https://github.com/lemonade-sdk/assets/blob/main/arcade/exe_icon.png?raw=true alt="Arcade Quick Start"/></a>
<a href="https://github.com/lemonade-sdk/lemonade-arcade/releases/latest/download/InfinityArcade.exe"><img src=img/icon.ico?raw=true alt="Arcade Quick Start"/></a>
</p>

<p align="center">
Linux: click <a href="#linux-and-windows-devs">this</a>
</p>

## Demo

> [!TIP]
> Generate creative new retro-style games in minutes, based on prompts like `Make space invaders, but I can fly around the whole screen instead of being stuck on the bottom.`

![Lemonade Arcade GIF](https://github.com/lemonade-sdk/assets/blob/main/arcade/space_invaders_x.gif?raw=true)

> [!TIP]
> Right click any game you've generated to get the Python source code or the prompt, so you can edit and remix further!


<img src="https://github.com/lemonade-sdk/assets/blob/main/arcade/home2.png?raw=true" alt="Lemonade Arcade UI" width="75%">

> [!TIP]
> Everything you need to run an LLM on your GPU is automatically set up for you.

<img src="https://github.com/lemonade-sdk/assets/blob/main/arcade/setup.png?raw=true" alt="Lemonade Arcade setup" width="50%">

## Overview

Lemonade Arcade combines the convenience of a ChatGPT-like interface with the concept of a game emulator. Instead of emulating existing games, it uses LLMs (served by [Lemonade](https://github.com/lemonade-sdk/lemonade)) to generate completely new games based on your prompts, then lets you play them instantly.
Infinity Arcade combines the convenience of a ChatGPT-like interface with the concept of a game emulator. Instead of emulating existing games, it uses LLMs (served by [Lemonade](https://github.com/lemonade-sdk/lemonade)) to generate completely new games based on your prompts, then lets you play them instantly.

## Features

Expand All @@ -95,8 +86,8 @@ Navigate to the [Releases page](https://github.com/lemonade-sdk/lemonade-arcade/
From PyPI (recommended):

```bash
pip install lemonade-arcade
lemonade-arcade
pip install infinity-arcade
infinity-arcade
```

From Source:
Expand All @@ -114,7 +105,7 @@ From Source:

3. Run it:
```bash
lemonade-arcade
infinity-arcade
```

## Architecture
Expand All @@ -132,10 +123,10 @@ Games are generated with the following constraints:

### Game Cache

Games are cached under the `.lemonade-arcade` folder in your home directory.
Games are cached under the `.infinity-arcade` folder in your home directory.

```
~/.lemonade-arcade/
~/.infinity-arcade/
└── games/
├── metadata.json # Game titles and descriptions
├── abc12345.py # Generated game files
Expand All @@ -156,7 +147,7 @@ Games are cached under the `.lemonade-arcade` folder in your home directory.
### Generation Failures
- Try a simpler game concept.
- Make sure your selected model supports code generation.
- Check the `lemonade-arcade` and Lemonade Server logs for errors.
- Check the `infinity-arcade` and Lemonade Server logs for errors.

## Examples

Expand Down
10 changes: 5 additions & 5 deletions build_exe.ps1
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
# Lemonade Arcade Executable Build Script
# This script builds the Lemonade Arcade application using PyInstaller
# Infinity Arcade Executable Build Script
# This script builds the Infinity Arcade application using PyInstaller

param(
[switch]$Clean,
[string]$OutputDir = "dist"
)

Write-Host "Lemonade Arcade Executable Builder" -ForegroundColor Green
Write-Host "Infinity Arcade Executable Builder" -ForegroundColor Green
Write-Host "==================================" -ForegroundColor Green

# Get script directory
Expand Down Expand Up @@ -41,10 +41,10 @@ Invoke-Command-Safe "python -m pip install pyinstaller" "Failed to install PyIns

# Build executable
Write-Host "Building executable with PyInstaller..." -ForegroundColor Cyan
Invoke-Command-Safe "python -m PyInstaller lemonade_arcade.spec" "Failed to build executable"
Invoke-Command-Safe "python -m PyInstaller infinity_arcade.spec" "Failed to build executable"

# Verify executable was created
$ExePath = "$OutputDir\LemonadeArcade.exe"
$ExePath = "$OutputDir\InfinityArcade.exe"
if (-not (Test-Path $ExePath)) {
Write-Error "Executable not found at $ExePath"
exit 1
Expand Down
24 changes: 12 additions & 12 deletions docs/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Lemonade Arcade - Make Retro-Style Games in Minutes with AI</title>
<title>Infinity Arcade - Make Retro-Style Games in Minutes with AI</title>
<link rel="icon" type="image/x-icon" href="assets/favicon.ico">
<link rel="stylesheet" href="assets/homepage.css">
</head>
Expand All @@ -24,12 +24,12 @@
<!-- Hero Section -->
<main class="hero-section">
<div class="ascii-banner">
<pre>██╗ ███████╗███╗ ███╗ ██████╗ ███╗ ██╗ ███████████╗ ███████╗
██║ ██╔════╝████╗ ████║██╔═══██╗████╗ ██║██══██╗██╔══██╗██╔════
██║ █████╗ ██╔████╔██║██║ ██║██╔██╗ ██║███████║██║ ██║█████╗
██║ ██╔══╝ ██║╚██╔╝██║████║██║╚██╗██║██╔══██║██║ ██║██╔══
███████╗███████╗██║ ╚═╝ ██║╚██████╔╝██║ ╚████║██║ ██║██████╔╝███████╗
╚══════╝╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══╝╚═╝ ╚═╝╚═════╝ ╚══════╝
<pre>██╗███ █████████╗██╗███╗ ██╗██╗████████╗██╗ ██╗
██║████╗ ██║██╔════╝██║████╗ ██║██║╚══██╔══╝╚██╗ ██╔╝
██║██╔██╗ ██║█████╗ ██║██╔██╗ ██║████║ ╚████╔╝
██║██║╚████║██╔══╝ ██║██║╚██╗██║████║ ╚██╔
██║██║ ╚████║██║ ██║██║ ╚████║██║ ██║ ██║
╚═╝╚═╝ ╚═══╝╚═╝ ╚═╝╚═╝ ╚═══╝╚═╝ ╚═╝ ╚═╝

█████╗ ██████╗ ██████╗ █████╗ ██████╗ ███████╗
██╔══██╗██╔══██╗██╔════╝██╔══██╗██╔══██╗██╔════╝
Expand All @@ -44,7 +44,7 @@ <h1 class="hero-subtitle">
</h1>

<p class="hero-description">
Lemonade Arcade uses local LLMs to create retro-style games in minutes.
Infinity Arcade uses local LLMs to create retro-style games in minutes.
Build and play new games where the limit is your creativity.
</p>

Expand All @@ -55,7 +55,7 @@ <h1 class="hero-subtitle">
<span class="platform-label">Windows</span>
<span class="platform-desc">Ready to run<br>executable</span>
</div>
<a href="https://github.com/lemonade-sdk/lemonade-arcade/releases/latest/download/LemonadeArcade.exe" class="download-btn secondary-download" id="windowsDownloadBtn">
<a href="https://github.com/lemonade-sdk/lemonade-arcade/releases/latest/download/InfinityArcade.exe" class="download-btn secondary-download" id="windowsDownloadBtn">
<img src="assets/favicon.ico" alt="Download" class="download-icon">
<span class="download-text">Download</span>
</a>
Expand All @@ -73,8 +73,8 @@ <h1 class="hero-subtitle">
</div>

<div class="game-preview">
<img src="https://github.com/lemonade-sdk/assets/raw/main/arcade/space_invaders_x.gif?raw=true"
alt="Space Invaders Game Preview"
<img src="https://github.com/lemonade-sdk/assets/raw/main/arcade/infinity-arcade-demo.gif?raw=true"
alt="Infinity Arcade Demo"
class="game-preview-gif">
</div>

Expand Down Expand Up @@ -128,7 +128,7 @@ <h3 class="feature-title">Game Ready</h3>
</div>

<div class="copyright">
<p>&copy; 2025 AMD - Lemonade Arcade. All rights reserved.</p>
<p>&copy; 2025 AMD - Infinity Arcade. All rights reserved.</p>
<p>Built for fun with Python and AI for gamers by gamers.</p>
</div>
</footer>
Expand Down
13 changes: 10 additions & 3 deletions docs/lemonade_client_api.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ Here's the typical sequence of API calls for setting up a lemonade-server-based

### 1. Initial Setup and Environment Check
```python
from lemonade_arcade.lemonade_client import LemonadeClient
from lemonade_client import LemonadeClient

# Create client with minimum version requirement
client = LemonadeClient(minimum_version="8.1.9")
Expand Down Expand Up @@ -83,22 +83,29 @@ Once the above steps complete successfully, your application can make inference

## Constructor

#### `LemonadeClient(minimum_version: str = "8.1.0")`
#### `LemonadeClient(minimum_version: str = "8.1.0", logger=None)`
Initialize a new LemonadeClient instance.

**Parameters:**
- `minimum_version` (str, optional): Minimum required version of lemonade-server. Defaults to "8.1.0". The client will check server compatibility against this version.
- `logger` (logging.Logger, optional): Logger instance to use for logging. If None, creates a default logger named "lemonade_client".

**When to use:** Create a client instance at the start of your application. Specify the minimum version your application requires to ensure compatibility.

**Example:**
```python
# Use default minimum version (8.1.0)
import logging

# Use default minimum version (8.1.0) and default logger
client = LemonadeClient()

# Specify custom minimum version
client = LemonadeClient(minimum_version="8.1.9")

# Use custom logger
custom_logger = logging.getLogger("my_app")
client = LemonadeClient(minimum_version="8.1.9", logger=custom_logger)

# Version checking will use your specified minimum
version_info = await client.check_lemonade_server_version()
print(f"Required: {version_info['required_version']}") # Shows your minimum_version
Expand Down
2 changes: 1 addition & 1 deletion examples/lemonade_client_integration_example.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import asyncio
from openai import AsyncOpenAI

from lemonade_arcade.lemonade_client import LemonadeClient
from lemonade_client import LemonadeClient


# Run everything in an async context
Expand Down
Binary file modified img/icon.ico
Binary file not shown.
Loading
Loading