Client wrapper for procedural architectural floorplan layout generator
Project description
RoomRubiksPack (Client Library)
Links:
- PyPI: https://pypi.org/project/roomrubikspack/
- GitHub: https://github.com/architectvijeshkumarv/roomrubikspack-0.1.0-Public/tree/main
RoomRubiksPack is a lightweight Python package for generating architectural floorplan layouts using procedural generation and an Elitist Genetic Algorithm.
This client library maintains a local, stateful API for creating room models, local graphing/connectivity check, local plotting/visualisation via matplotlib, and local CAD exports via ezdxf. The computationally heavy layout generation (GA) and auto-dimensioning are offloaded to a RoomRubiks API Server.
Installation
Option 1: Install from PyPI
Once published, install the package via:
pip install roomrubikspack
Option 2: Install from GitHub
pip install git+https://github.com/architectvijeshkumarv/roomrubikspack-0.1.0-Public.git
Option 3: Local Installation (After Downloading)
Navigate to the directory containing pyproject.toml and run:
pip install .
For local developers who want to modify the source code, run in editable mode:
pip install -e .
Configuring the Server Connection
By default, the client library will look for your live API server running at https://roomrubikspack-0-1-0-private-942524616275.asia-south1.run.app.
You can point to a different server endpoint in two ways:
1. In Python Code (Recommended)
Set the URL dynamically via rr.settings():
import roomrubikspack as rr
rr.init()
rr.settings(server_url="https://roomrubikspack-0-1-0-private-942524616275.asia-south1.run.app")
2. Via Environment Variable
Before running your script, set the ROOMRUBIKSPACK_SERVER_URL environment variable:
# Windows PowerShell
$env:ROOMRUBIKSPACK_SERVER_URL="https://roomrubikspack-0-1-0-private-942524616275.asia-south1.run.app"
# Windows Command Prompt
set ROOMRUBIKSPACK_SERVER_URL=https://roomrubikspack-0-1-0-private-942524616275.asia-south1.run.app
# Linux/macOS
export ROOMRUBIKSPACK_SERVER_URL="https://roomrubikspack-0-1-0-private-942524616275.asia-south1.run.app"
Quick Start
Here is a complete example. Make sure your local or remote RoomRubiks server is running before executing this script.
import roomrubikspack as rr
# Initialize session
rr.init()
# Configure the server (defaults to your live Cloud Run URL if omitted)
rr.settings(unit="m", server_url="https://roomrubikspack-0-1-0-private-942524616275.asia-south1.run.app")
# Define Rooms
rr.room("living", "Living Room", area=20.0, startSpace=True)
rr.room("kitchen", "Kitchen", w=3.0, h=3.0)
rr.room("bed1", "Master Bed", area=16.0)
rr.room("bath1", "Attached Bath", area=4.0, attachedSpace=True)
# Define site boundary
rr.site([{"x": 0, "y": 0}, {"x": 20, "y": 0}, {"x": 20, "y": 20}, {"x": 0, "y": 20}])
# Define connectivity
rr.connectivity(
("living", "kitchen"),
("living", "bed1"),
("bed1", "bath1")
)
# Optional: Draw connectivity graph locally
rr.connectivityshow()
# Add constraints to guide layout generation
rr.constraint("position", "bed1", "N")
rr.constraint("area", None, 120)
rr.constraint("perimeter", None, "minimize")
# Generate sizes for rooms missing width/height
rr.dimensiongen()
# Generate baseline layout variations (sent to the server engine)
rr.generatelayout()
# View first variation locally
rr.showlayout(n=1, label=["name", "dim", "area"])
# DEEP REFINEMENT: Tell the GA to deeply optimize the topological shape of Rank 1
# This extracts the shape of Rank 1 and strictly limits a 45-second deep GA search to that topology!
rr.generatelayout(selv=1)
# View the highly-optimized, mathematically clamped variation
rr.showlayout(n=1, label=["name", "dim", "area"])
# Export layout to DXF locally
rr.exportlayout(n=1, filepath="output_layout.dxf")
# Blocks execution until plots are closed
rr.wait_for_plots()
API Reference
rr.init(): Clears all current session state.rr.settings(unit, server_url): Set global measurement units ('m'or'f') and configure the solver backend API endpoint.rr.constructiongrid(add, remove, reset): View or manipulate the base construction grid sizes locally.rr.room(id, name, w, h, area, startSpace, attachedSpace, ...): Register a room.rr.site(points): Set an optional site boundary polygon.rr.connectivity(*pairs): Define room connections. Planarity check runs instantly on the client.rr.connectivityshow(): Opens a Matplotlib window showing the adjacency graph.rr.constraint(type, room_id, value): Registers a layout constraint.rr.dimensiongen(avar, mar): Requests standard room dimensions from the server.rr.generatelayout(lvar, sgap, max_variations, selv): Sends session state to the server to run the GA layout engine. Passselv=Nto perform a deep refinement search on the topological shape of the N-th variation.rr.showlayout(n, label): Plots then-th generated variation using Matplotlib.rr.exportlayout(n, filepath): Saves then-th layout to JSON or DXF.rr.wait_for_plots(): Helper to keep visual plots open.
Citation
If you use RoomRubiks in your academic or professional work, please cite the following paper:
APA: Valiyappurakkal, V. K. (2026). RoomRubiks: An Application for Floor Layout Generation Using a Nonfragmented Rectangular Approach. Journal of Architectural Engineering, 32(3). https://doi.org/10.1061/JAEIED.AEENG-2207
BibTeX:
@article{Valiyappurakkal2026RoomRubiks,
author = {Valiyappurakkal, Vijesh Kumar},
title = {RoomRubiks: An Application for Floor Layout Generation Using a Nonfragmented Rectangular Approach},
journal = {Journal of Architectural Engineering},
year = {2026},
volume = {32},
number = {3},
doi = {10.1061/JAEIED.AEENG-2207},
url = {https://doi.org/10.1061/JAEIED.AEENG-2207}
}
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file roomrubikspack-0.1.6.tar.gz.
File metadata
- Download URL: roomrubikspack-0.1.6.tar.gz
- Upload date:
- Size: 15.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
69e88481416c316ffc084d6b67fbb33571e0af286b9cd24e98bfb1c7460f5e01
|
|
| MD5 |
2c1490d53f1f93a160b01428a8dc5af6
|
|
| BLAKE2b-256 |
4c69a74eddbaf493e1353d67c81c7123d1980c55a29c1c502062edcedb0671ed
|
File details
Details for the file roomrubikspack-0.1.6-py3-none-any.whl.
File metadata
- Download URL: roomrubikspack-0.1.6-py3-none-any.whl
- Upload date:
- Size: 13.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cc1148eca5b28322f7a75e7b3643755818e0aa44898b2be55afa3b313b5be65b
|
|
| MD5 |
77176518a74bbda379b15e1c6a2f1aa3
|
|
| BLAKE2b-256 |
5425ed32ef189776fa7aa8542fc226b3f98aefe54e32a98243cdb831eddc390a
|