Skip to content

Alban1911/Rose

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐ŸŒน Rose - Effortless Skin Changer for LoL

Rose Icon

Installer Ko-Fi Discord License


Overview

Rose is an open-source automatic skin changer for League of Legends that enables seamless access to all skins in the game. The application runs silently in the system tray and automatically detects skin selections during champion select, injecting the chosen skin when the game loads.

Rose is built on two core technologies:

  • ๐ŸŽฎ Pengu Loader: Plugin system that injects JavaScript plugins into the League Client, enabling enhanced UI interactions and quick skin detection
  • ๐Ÿ”ง CSLOL: Safe skin injection framework that handles the actual skin injection process, fully compatible with Riot Vanguard

These technologies work together to provide a seamless and effortless automatic skin-changing experience without any manual intervention.

Architecture

Rose consists of two main components:

Python Backend

  • LCU API Integration: Communicates with the League Client via the League Client Update (LCU) API
  • CSLOL Injection: Uses CSLOL tools for safe skin injection
  • WebSocket Bridge: Operates a WebSocket server for real-time communication with frontend plugins
  • Skin Management: Downloads and manages skins from the LeagueSkins repository
  • Game Monitoring: Tracks game state, champion select phases, and loadout countdowns
  • Analytics: Sends periodic pings to track unique users (configurable, runs in background thread)

Pengu Loader Plugins

Rose includes a suite of JavaScript plugins that extend the League Client UI:

  • ROSE-UI: Unlocks locked skin previews in champion select, enabling hover interactions on all skins
  • ROSE-SkinMonitor: Monitors currently selected skin's name and sends it to the Python backend via WebSocket
  • ROSE-CustomWheel: Displays custom mod metadata for hovered skins and exposes quick access to the mods folder
  • ROSE-ChromaWheel: Enhanced chroma selection interface for choosing any chroma variant
  • ROSE-FormsWheel: Custom form selection interface for skins with multiple forms (Elementalist Lux, Sahn Uzal Mordekaiser, Spirit Blossom Morgana, Radiant Sett)
  • ROSE-SettingsPanel: Settings panel accessible from the League of Legends Client
  • ROSE-RandomSkin: Random skin selection feature
  • ROSE-HistoricMode: Access to the last used skin for every champion

How It Works

  1. League Client Integration: Rose activates Pengu Loader on startup, which injects the JavaScript plugins into the League Client
  2. Skin Detection: When you hover over a skin in champion select, ROSE-SkinMonitor detects the selection and sends it to the Python backend
  3. Game Opening Delay: To make sure the injection has time to occur we suspend League of Legend's game process as long as the overlay is not ran
  4. Game Injection: Using CSLOL tools, Rose injects the selected skin when the game starts
  5. Seamless Experience: The skin loads as if you owned it, with full chroma support and no gameplay impact (Rose will never provide any competitive advantage to its users)

Features

  • Automatic Skin Detection: Detects skin selections through hover events in champion select
  • All Skins Accessible: Access to every skin for every champion
  • Chroma Support: Select any chroma variant through the enhanced UI
  • Random Skin Mode: Automatically select random skins
  • Historic Mode: Access last used skin on every champion
  • Custom Mod Insights: ROSE-CustomWheel surfaces installed mods relevant to the skin you're hovering over, along with timestamps and quick folder access
  • Smart Injection: Never injects skins you already own
  • Safe & Compatible: Uses CSLOL injection tools compatible with Riot Vanguard
  • Multi-Language Support: Works with any client language
  • Open Source: Fully open source and extensible
  • Free: If you bought this software, you got scammed ๐Ÿ’€

Requirements

  • Windows 10/11
  • League of Legends installed

Installation

  1. Download the latest installer from Releases
  2. Run the installer as Administrator
  3. Launch Rose from the Start Menu or desktop shortcut

Setting up dev environment

# Create conda environment with Python 3.11
conda create -n rose python=3.11 -y

# Activate the environment
conda activate rose

# Clone the repository
git clone https://github.com/Alban1911/Rose.git

# Navigate to project directory
cd Rose

# Switch to dev branch
git checkout dev

# Initialize and update submodules (Pengu Loader plugins)
git submodule update --init --recursive

# Install all dependencies
pip install -r requirements.txt

# Ready to develop! Run main.py as administrator when testing

Analytics Configuration

Rose includes an optional analytics system that tracks unique users by sending periodic pings to a server. The analytics system:

  • Runs in background: Operates as a daemon thread, doesn't affect app performance
  • Sends pings every 5 minutes: Includes machine ID and app version
  • Configurable: Can be enabled/disabled via ANALYTICS_ENABLED in config.py
  • Privacy-friendly: Uses machine identifiers, no personal data collected

Current Configuration:

  • Server URL: https://api.leagueunlocked.net/analytics/ping
  • Ping interval: 5 minutes (300 seconds)
  • Enabled by default

To configure analytics:

  1. Edit config.py
  2. Update ANALYTICS_SERVER_URL to your server endpoint
  3. Adjust ANALYTICS_PING_INTERVAL_S if needed
  4. Set ANALYTICS_ENABLED = False to disable

For server setup instructions, see ANALYTICS_SERVER_SETUP.md.

Project Structure

Rose/
โ”œโ”€โ”€ main.py                 # Application entry point
โ”œโ”€โ”€ config.py              # Configuration constants
โ”œโ”€โ”€ requirements.txt        # Python dependencies
โ”œโ”€โ”€ assets/                 # Application assets (icons, fonts, images)
โ”‚
โ”œโ”€โ”€ main/                   # Main application package
โ”‚   โ”œโ”€โ”€ core/              # Core initialization and lifecycle
โ”‚   โ”‚   โ”œโ”€โ”€ initialization.py
โ”‚   โ”‚   โ”œโ”€โ”€ threads.py
โ”‚   โ”‚   โ”œโ”€โ”€ state.py
โ”‚   โ”‚   โ”œโ”€โ”€ signals.py
โ”‚   โ”‚   โ”œโ”€โ”€ lockfile.py
โ”‚   โ”‚   โ”œโ”€โ”€ lcu_handler.py
โ”‚   โ”‚   โ””โ”€โ”€ cleanup.py
โ”‚   โ”œโ”€โ”€ setup/             # Application setup and configuration
โ”‚   โ”‚   โ”œโ”€โ”€ console.py
โ”‚   โ”‚   โ”œโ”€โ”€ arguments.py
โ”‚   โ”‚   โ””โ”€โ”€ initialization.py
โ”‚   โ””โ”€โ”€ runtime/           # Main runtime loop
โ”‚       โ””โ”€โ”€ loop.py
โ”‚
โ”œโ”€โ”€ injection/             # CSLOL injection system
โ”‚   โ”œโ”€โ”€ core/              # Core injection logic
โ”‚   โ”‚   โ”œโ”€โ”€ manager.py    # Injection manager & coordination
โ”‚   โ”‚   โ””โ”€โ”€ injector.py   # CSLOL skin injector
โ”‚   โ”œโ”€โ”€ game/              # Game detection and monitoring
โ”‚   โ”‚   โ”œโ”€โ”€ game_detector.py
โ”‚   โ”‚   โ””โ”€โ”€ game_monitor.py
โ”‚   โ”œโ”€โ”€ config/            # Configuration management
โ”‚   โ”‚   โ”œโ”€โ”€ config_manager.py
โ”‚   โ”‚   โ””โ”€โ”€ threshold_manager.py
โ”‚   โ”œโ”€โ”€ mods/              # Mod management
โ”‚   โ”‚   โ”œโ”€โ”€ mod_manager.py
โ”‚   โ”‚   โ””โ”€โ”€ zip_resolver.py
โ”‚   โ”œโ”€โ”€ overlay/           # Overlay process management
โ”‚   โ”‚   โ”œโ”€โ”€ overlay_manager.py
โ”‚   โ”‚   โ””โ”€โ”€ process_manager.py
โ”‚   โ””โ”€โ”€ tools/             # CSLOL tools (cslol-dll.dll, mod-tools.exe, etc.)
โ”‚       โ””โ”€โ”€ tools_manager.py
โ”‚
โ”œโ”€โ”€ lcu/                   # League Client API integration
โ”‚   โ”œโ”€โ”€ core/              # Core LCU client components
โ”‚   โ”‚   โ”œโ”€โ”€ client.py      # Main LCU client orchestrator
โ”‚   โ”‚   โ”œโ”€โ”€ lcu_api.py     # LCU API wrapper
โ”‚   โ”‚   โ”œโ”€โ”€ lcu_connection.py
โ”‚   โ”‚   โ””โ”€โ”€ lockfile.py
โ”‚   โ”œโ”€โ”€ data/              # Data management
โ”‚   โ”‚   โ”œโ”€โ”€ skin_scraper.py
โ”‚   โ”‚   โ”œโ”€โ”€ skin_cache.py
โ”‚   โ”‚   โ”œโ”€โ”€ types.py
โ”‚   โ”‚   โ””โ”€โ”€ utils.py
โ”‚   โ””โ”€โ”€ features/          # LCU feature implementations
โ”‚       โ”œโ”€โ”€ lcu_properties.py
โ”‚       โ”œโ”€โ”€ lcu_skin_selection.py
โ”‚       โ”œโ”€โ”€ lcu_game_mode.py
โ”‚       โ””โ”€โ”€ lcu_swiftplay.py
โ”‚
โ”œโ”€โ”€ threads/               # Background threads
โ”‚   โ”œโ”€โ”€ core/              # Core thread implementations
โ”‚   โ”‚   โ”œโ”€โ”€ websocket_thread.py
โ”‚   โ”‚   โ”œโ”€โ”€ phase_thread.py
โ”‚   โ”‚   โ””โ”€โ”€ lcu_monitor_thread.py
โ”‚   โ”œโ”€โ”€ handlers/         # Event handlers
โ”‚   โ”‚   โ”œโ”€โ”€ champ_thread.py
โ”‚   โ”‚   โ”œโ”€โ”€ champion_lock_handler.py
โ”‚   โ”‚   โ”œโ”€โ”€ game_mode_detector.py
โ”‚   โ”‚   โ”œโ”€โ”€ injection_trigger.py
โ”‚   โ”‚   โ”œโ”€โ”€ lobby_processor.py
โ”‚   โ”‚   โ”œโ”€โ”€ phase_handler.py
โ”‚   โ”‚   โ””โ”€โ”€ swiftplay_handler.py
โ”‚   โ”œโ”€โ”€ utilities/         # Thread utilities
โ”‚   โ”‚   โ”œโ”€โ”€ timer_manager.py
โ”‚   โ”‚   โ”œโ”€โ”€ loadout_ticker.py
โ”‚   โ”‚   โ””โ”€โ”€ skin_name_resolver.py
โ”‚   โ””โ”€โ”€ websocket/         # WebSocket components
โ”‚       โ”œโ”€โ”€ websocket_connection.py
โ”‚       โ””โ”€โ”€ websocket_event_handler.py
โ”‚
โ”œโ”€โ”€ utils/                 # Utility modules
โ”‚   โ”œโ”€โ”€ core/              # Core utilities
โ”‚   โ”‚   โ”œโ”€โ”€ logging.py
โ”‚   โ”‚   โ”œโ”€โ”€ paths.py
โ”‚   โ”‚   โ”œโ”€โ”€ utilities.py
โ”‚   โ”‚   โ”œโ”€โ”€ validation.py
โ”‚   โ”‚   โ”œโ”€โ”€ normalization.py
โ”‚   โ”‚   โ””โ”€โ”€ historic.py
โ”‚   โ”œโ”€โ”€ download/          # Download utilities
โ”‚   โ”‚   โ”œโ”€โ”€ skin_downloader.py
โ”‚   โ”‚   โ”œโ”€โ”€ smart_skin_downloader.py
โ”‚   โ”‚   โ”œโ”€โ”€ repo_downloader.py
โ”‚   โ”‚   โ”œโ”€โ”€ hashes_downloader.py
โ”‚   โ”‚   โ””โ”€โ”€ hash_updater.py
โ”‚   โ”œโ”€โ”€ integration/       # External integrations
โ”‚   โ”‚   โ”œโ”€โ”€ pengu_loader.py
โ”‚   โ”‚   โ”œโ”€โ”€ tray_manager.py
โ”‚   โ”‚   โ””โ”€โ”€ tray_settings.py
โ”‚   โ”œโ”€โ”€ system/            # System utilities
โ”‚   โ”‚   โ”œโ”€โ”€ admin_utils.py
โ”‚   โ”‚   โ”œโ”€โ”€ win32_base.py
โ”‚   โ”‚   โ”œโ”€โ”€ window_utils.py
โ”‚   โ”‚   โ””โ”€โ”€ resolution_utils.py
โ”‚   โ””โ”€โ”€ threading/         # Threading utilities
โ”‚       โ””โ”€โ”€ thread_manager.py
โ”‚
โ”œโ”€โ”€ ui/                    # UI components
โ”‚   โ”œโ”€โ”€ core/              # Core UI management
โ”‚   โ”‚   โ”œโ”€โ”€ user_interface.py
โ”‚   โ”‚   โ””โ”€โ”€ lifecycle_manager.py
โ”‚   โ”œโ”€โ”€ chroma/            # Chroma selection UI
โ”‚   โ”‚   โ”œโ”€โ”€ selector.py
โ”‚   โ”‚   โ”œโ”€โ”€ ui.py
โ”‚   โ”‚   โ”œโ”€โ”€ panel.py
โ”‚   โ”‚   โ”œโ”€โ”€ preview_manager.py
โ”‚   โ”‚   โ”œโ”€โ”€ selection_handler.py
โ”‚   โ”‚   โ””โ”€โ”€ special_cases.py
โ”‚   โ””โ”€โ”€ handlers/          # UI feature handlers
โ”‚       โ”œโ”€โ”€ historic_mode_handler.py
โ”‚       โ”œโ”€โ”€ randomization_handler.py
โ”‚       โ””โ”€โ”€ skin_display_handler.py
โ”‚
โ”œโ”€โ”€ pengu/                 # Pengu Loader integration
โ”‚   โ”œโ”€โ”€ core/              # Core Pengu functionality
โ”‚   โ”‚   โ”œโ”€โ”€ websocket_server.py
โ”‚   โ”‚   โ”œโ”€โ”€ http_handler.py
โ”‚   โ”‚   โ””โ”€โ”€ skin_monitor.py
โ”‚   โ”œโ”€โ”€ communication/     # Communication layer
โ”‚   โ”‚   โ”œโ”€โ”€ message_handler.py
โ”‚   โ”‚   โ””โ”€โ”€ broadcaster.py
โ”‚   โ””โ”€โ”€ processing/        # Data processing
โ”‚       โ”œโ”€โ”€ skin_processor.py
โ”‚       โ”œโ”€โ”€ skin_mapping.py
โ”‚       โ””โ”€โ”€ flow_controller.py
โ”‚
โ”œโ”€โ”€ state/                 # Shared application state
โ”‚   โ””โ”€โ”€ core/
โ”‚       โ”œโ”€โ”€ shared_state.py
โ”‚       โ””โ”€โ”€ app_status.py
โ”‚
โ”œโ”€โ”€ launcher/              # Application launcher and updater
โ”‚   โ”œโ”€โ”€ core/
โ”‚   โ”‚   โ””โ”€โ”€ launcher.py
โ”‚   โ”œโ”€โ”€ sequences/         # Launch sequences
โ”‚   โ”‚   โ”œโ”€โ”€ hash_check_sequence.py
โ”‚   โ”‚   โ””โ”€โ”€ skin_sync_sequence.py
โ”‚   โ”œโ”€โ”€ update/            # Update system
โ”‚   โ”‚   โ”œโ”€โ”€ update_sequence.py
โ”‚   โ”‚   โ”œโ”€โ”€ update_downloader.py
โ”‚   โ”‚   โ”œโ”€โ”€ update_installer.py
โ”‚   โ”‚   โ””โ”€โ”€ github_client.py
โ”‚   โ”œโ”€โ”€ ui/
โ”‚   โ”‚   โ””โ”€โ”€ update_dialog.py
โ”‚   โ””โ”€โ”€ updater.py
โ”‚
โ”œโ”€โ”€ analytics/             # Analytics and user tracking
โ”‚   โ””โ”€โ”€ core/
โ”‚       โ”œโ”€โ”€ machine_id.py  # Machine ID retrieval (Windows Machine GUID)
โ”‚       โ”œโ”€โ”€ analytics_client.py  # HTTP client for analytics pings
โ”‚       โ””โ”€โ”€ analytics_thread.py  # Background thread for periodic pings
โ”‚
โ””โ”€โ”€ Pengu Loader/          # Pengu Loader and plugins
    โ”œโ”€โ”€ Pengu Loader.exe   # Pengu Loader executable
    โ””โ”€โ”€ plugins/           # JavaScript plugins
        โ”œโ”€โ”€ ROSE-UI/
        โ”œโ”€โ”€ ROSE-SkinMonitor/
        โ”œโ”€โ”€ ROSE-ChromaWheel/
        โ”œโ”€โ”€ ROSE-FormsWheel/
        โ”œโ”€โ”€ ROSE-CustomWheel/
        โ”œโ”€โ”€ ROSE-SettingsPanel/
        โ”œโ”€โ”€ ROSE-RandomSkin/
        โ””โ”€โ”€ ROSE-HistoricMode/

Development

Key Technologies

  • Python 3.11+: Backend application
  • Pengu Loader: Plugin system for League Client
  • CSLOL: Safe skin injection tools
  • LCU API: League Client communication
  • WebSocket: Real-time frontend-backend communication
  • JavaScript/HTML/CSS: Client UI plugins

Contributing

Rose is open source! Contributions are welcome:

  • Report bugs or suggest features via GitHub Issues
  • Submit pull requests for improvements
  • Join our Discord for discussions

Legal Disclaimer

Important: This project is not endorsed by Riot Games and does not represent the views or opinions of Riot Games or any of its affiliates. Riot Games and all related properties are trademarks or registered trademarks of Riot Games, Inc.

The use of custom skin tools may violate Riot Games' Terms of Service. Users proceed at their own risk.

Custom skins are allowed under Riot's terms of service and do not trigger detection as long as you are not discussing or advertising the use of the skins within the game.

Support

If you enjoy Rose and want to support its development:

ko-fi

Your support helps keep the project alive and motivates continued development!


Rose - League, unlocked.