A powerful, offline procedural floorplan layout generator package optimizing room placement, wall snapping, and Vastu compliance
Project description
RoomRubiksPack (Client Library)
Links:
- PyPI: https://pypi.org/project/roomrubikspack/
- GitHub: https://github.com/architectvijeshkumarv/roomrubikspack-0.1.0-Public
RoomRubiksPack is a powerful procedural architectural floorplan layout generator package. It optimizes room placement, wall snapping, checks for non-overlapping areas, and inherently supports Vastu compliance while respecting predefined connectivity and topological constraints.
This unified version is 100% offline and runs its Elitist Genetic Algorithm entirely on your local machine—no server setup required!
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 .
Quick Start
1. Initialization and Settings
import roomrubikspack as rr
# Initialize a new session/project
rr.init()
# Set global preferences (unit: 'm' or 'ft')
rr.settings(unit="m")
# 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")
)
# Enable Vastu compliance (inherently supported)
rr.vastu(True)
# 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", "vastu"])
# 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", "vastu"])
# Export layout to DXF locally
rr.exportlayout(n=1, filepath="output_layout.dxf")
# Blocks execution until plots are closed
rr.wait_for_plots()
Example Visualizations
When you run the script above, you can use the built-in visualisation functions to plot the network graph and the generated floorplan layout using Matplotlib.
1. Connectivity Network Diagram (rr.connectivityshow())
2. Layout with Position Constraint (Vastu Off)
3. Layout with Vastu Compliance Engine (No hard constraints needed)
4. Generated Layout with Overlaid Connectivity Network (shownetwork=True)
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.vastu(keep: bool): Enable or disable Vastu Shastra rules during generation.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}
}
Support and Discussions
For any questions, bug reports, feature requests, or general discussions regarding RoomRubiks, please visit our GitHub Discussions page. We prefer managing all support requests publicly via GitHub rather than email to help the community build a shared knowledge base.
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.2.5.tar.gz.
File metadata
- Download URL: roomrubikspack-0.2.5.tar.gz
- Upload date:
- Size: 48.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0412bcbfc0985d077effe5ecc9babc6728157a58ff4c1aaf7ec4e4480d6ef376
|
|
| MD5 |
b4c0fe778f299c855dd48b59f29b1081
|
|
| BLAKE2b-256 |
e8f3c71b30d8df4d8606b109df655b140907013e7e93b27dd993c75e8a078041
|
File details
Details for the file roomrubikspack-0.2.5-py3-none-any.whl.
File metadata
- Download URL: roomrubikspack-0.2.5-py3-none-any.whl
- Upload date:
- Size: 53.3 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 |
7d5c30b60f985b01f75db31bd9f57e514f19da934c4c9d94f32dd2e76d13e442
|
|
| MD5 |
d242e51dd0f743aa7d74cf6946cf668c
|
|
| BLAKE2b-256 |
42e6b935a20832d12f283ce77abc73fa80ddfed00aa36fe7ee436b7cc6909019
|