Skip to content

BardOfCodes/migumi

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MiGumi

MiGumi Teaser

MiGumi (Millable Gumi) is a library for creating and visualizing tightly coupled integral joints that are manufacturable via CNC milling. This repository contains the code accompanying the paper MiGumi: Making Tightly Coupled Integral Joints Millable.

Overview

MiGumi provides:

  • Symbolic Geometry Representation: Define millable joints using symbolic expressions with support for polyarcs, height fields, and stateful geometry
  • State-Based Animation: Create assembly/disassembly animations showing how joint components fit together
  • Shader Compilation: Compile geometry expressions to GLSL shaders for real-time visualization
  • Multi-pass Rendering: Generate multi-buffer shader pipelines for advanced rendering effects

Note: The current version supports the node-based visual editor. Optimization routines for joint design are still being integrated.

Installation

# Clone the repository
git clone https://github.com/BardOfCodes/migumi.git
cd migumi

# Install in development mode
pip install -e .

Dependencies

MiGumi requires the following companion libraries:

# GeoLiPI - Geometric Language for Procedural Images
pip install -e path/to/geolipi

# SySL - Shader Symbolic Language  
pip install -e path/to/sysl

# ASMBLR - Node assembly system
pip install -e path/to/asmblr

Project Structure

migumi/
├── migumi/
│   ├── symbolic/           # Symbolic geometry representations
│   │   └── base.py         # Core classes (RegisterGeometry, RegisterState, etc.)
│   ├── shader/             # Shader compilation
│   │   ├── compiler.py     # Single-pass shader compilation
│   │   ├── compile_multipass.py  # Multi-buffer rendering
│   │   ├── transition_evaluate.py  # State transition code generation
│   │   └── state_based_converter.py  # State-to-motion conversion
│   ├── torch_compute/      # PyTorch-based computation
│   │   ├── evaluate.py     # Expression evaluation
│   │   ├── optimize.py     # Optimization routines
│   │   └── polyline_utils.py  # Polyline geometry utilities
│   └── utils/              # Utility functions
│       ├── converter.py    # Format conversion utilities
│       └── vis.py          # Visualization helpers
├── notebooks/              # Example notebooks
│   ├── test_basic.ipynb    # Basic usage examples
│   └── visualize.ipynb     # Visualization examples
└── assets/                 # Images and media

Quick Start

import json
from asmblr.base import BaseNode
from migumi.utils.converter import fix_format, get_expr_and_state, fix_expr_dict
from migumi.shader.compile_multipass import compile_set_multipass

# Load a joint design
with open("path/to/joint.json") as f:
    data = json.load(f)

# Parse the design
module_data = data['moduleList']['migumi']
corrected_data = fix_format(module_data)
expressions = BaseNode.from_dict(corrected_data)

# Extract geometry and state information
if not isinstance(expressions, list):
    expressions = [expressions]
expr_dict, state_map = get_expr_and_state(expressions)
expr_dict = fix_expr_dict(expr_dict, mode="v4", add_bounding=False)

# Compile to shaders
settings = {
    "render_mode": "v4",
    "variables": {
        "resolution": (512, 512),
    }
}
shader_bundles = compile_set_multipass(
    expr_dict, 
    state_map, 
    settings=settings,
    post_process_shader=["part_outline_nobg"]
)

Visual Editor

MiGumi integrates with the ASMBLR Frontend for visual editing:

  1. Start the backend: python asmblr_backend/scripts/app.py
  2. Start the frontend: cd asmblr_frontend && yarn dev
  3. Select "Migumi" mode in the editor
  4. Load pre-built designs from migumi-dataset

Related Projects

  • GeoLiPI - Geometric Language for Procedural Images
  • SySL - Shader Symbolic Language
  • ASMBLR - Node-based assembly system

Citation

If you use MiGumi in your research, please cite:

@article{ganeshan2025migumi,
    author={Ganeshan, Aditya and Fleischer, Kurt and Jakob, Wenzel 
            and Shamir, Ariel and Ritchie, Daniel and Igarashi, Takeo 
            and Larsson, Maria},
    title={MiGumi: Making Tightly Coupled Integral Joints Millable},
    year={2025},
    publisher={Association for Computing Machinery},
    volume={44},
    number={6},
    url={https://doi.org/10.1145/3763304},
    doi={10.1145/3763304},
    journal={ACM Trans. Graph.},
    articleno={193},
}

License

MIT


⚠️ Research Code: This is research software accompanying an academic publication. Use at your own risk.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published