Files
LegoGPT/index.html
2026-02-07 09:05:20 -05:00

544 lines
33 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- Metadata -->
<title>Generating Physically Stable and Buildable Brick Structures from Text</title>
<meta name="description"
content="Official website for BrickGPT, the first approach for generating physically stable toy brick models from text prompts.">
<meta property="og:title" content="Generating Physically Stable and Buildable Brick Structures from Text">
<meta property="og:description"
content="Official website for BrickGPT, the first approach for generating physically stable toy brick models from text prompts.">
<meta property="og:url" content="https://avalovelace1.github.io/BrickGPT/">
<meta property="og:type" content="website">
<meta property="og:image" content="images-optimized/teaser-1080.webp">
<meta property="og:video" content="videos/brickgpt-v2.mp4">
<!-- Favicon -->
<link rel="icon" type="image/png" href="./favicon/favicon-96x96.png" sizes="96x96"/>
<link rel="icon" type="image/svg+xml" href="./favicon/favicon.svg"/>
<link rel="shortcut icon" href="./favicon/favicon.ico"/>
<link rel="apple-touch-icon" sizes="180x180" href="./favicon/apple-touch-icon.png"/>
<meta name="apple-mobile-web-app-title" content="BrickGPT"/>
<link rel="manifest" href="./favicon/site.webmanifest"/>
<!-- Fonts -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Handlee&family=Source+Code+Pro:ital,wght@0,200..900;1,200..900&family=Source+Sans+3:ital,wght@0,200..900;1,200..900&family=Source+Serif+4:ital,opsz,wght@0,8..60,200..900;1,8..60,200..900&display=swap"
rel="preload" as="style" onload="this.onload=null;this.rel='stylesheet'">
<!-- Styles -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.7/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-LN+7fdVzj6u52u30Kp6M/trliBMCMKTyK833zpbD+pXdCLuTusPj697FH4R/5mcr" crossorigin="anonymous">
<link rel="stylesheet" href="./css/styles.css">
<!-- Photoswipe -->
<link href="https://cdn.jsdelivr.net/npm/photoswipe@5.4.4/dist/photoswipe.min.css" rel="preload" as="style"
onload="this.onload=null;this.rel='stylesheet'">
</head>
<body id="pswp-gallery">
<header>
<div class="container d-flex flex-column align-items-center py-5">
<div class="text-center mb-4 max-w-lg">
<hgroup class="mb-4">
<h1 class="display-4 text-balance">Generating Physically Stable and Buildable Brick Structures from Text</h1>
<p class="display-6 font-sans text-secondary text-balance">ICCV 2025 <strong>(Best Paper, Marr Prize)</strong></p>
</hgroup>
<div class="mb-3">
<ul class="list-unstyled d-flex flex-wrap justify-content-center column-gap-2 fs-5 mb-2">
<li>
<a class="badge text-bg-light link-body-emphasis" href="https://avapun.com/"
target="_blank" rel="author external noopener noreferrer">Ava Pun*</a>
</li>
<li>
<a class="badge text-bg-light link-body-emphasis" href="https://dunbar12138.github.io/"
target="_blank" rel="author external noopener noreferrer">Kangle Deng*</a>
</li>
<li>
<a class="badge text-bg-light link-body-emphasis" href="https://waynekyrie.github.io/"
target="_blank" rel="author external noopener noreferrer">Ruixuan Liu*</a>
</li>
<li>
<a class="badge text-bg-light link-body-emphasis" href="https://www.cs.cmu.edu/~deva/"
target="_blank" rel="author external noopener noreferrer">Deva Ramanan</a>
</li>
<li>
<a class="badge text-bg-light link-body-emphasis"
href="https://www.ri.cmu.edu/ri-faculty/changliu-liu/"
target="_blank" rel="author external noopener noreferrer">Changliu Liu</a>
</li>
<li>
<a class="badge text-bg-light link-body-emphasis" href="https://www.cs.cmu.edu/~junyanz/"
target="_blank" rel="author external noopener noreferrer">Jun-Yan Zhu</a>
</li>
</ul>
<div class="fs-5">Carnegie Mellon University</div>
</div>
<p class="text-secondary"><small>*Equal contribution</small></p>
</div>
<ul class="list-unstyled d-flex flex-wrap justify-content-center column-gap-3 row-gap-2">
<li>
<a class="btn btn-dark d-flex column-gap-2 align-items-center"
href="https://arxiv.org/abs/2505.05469" target="_blank" rel="external noopener noreferrer">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" class="bi bi-file-earmark-text-fill"
viewBox="0 0 16 16">
<path fill="currentColor"
d="M9.293 0H4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V4.707A1 1 0 0 0 13.707 4L10 .293A1 1 0 0 0 9.293 0M9.5 3.5v-2l3 3h-2a1 1 0 0 1-1-1M4.5 9a.5.5 0 0 1 0-1h7a.5.5 0 0 1 0 1zM4 10.5a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5m.5 2.5a.5.5 0 0 1 0-1h4a.5.5 0 0 1 0 1z"/>
</svg>
<span>Paper</span>
</a>
</li>
<li>
<a class="btn btn-dark d-flex column-gap-2 align-items-center" href="./brickgpt-poster.pdf">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" class="bi bi-postcard-fill"
viewBox="0 0 16 16">
<path fill="currentColor" d="M11 8h2V6h-2z"/>
<path fill="currentColor" d="M0 4a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2zm8.5.5a.5.5 0 0 0-1 0v7a.5.5 0 0 0 1 0zM2 5.5a.5.5 0 0 0 .5.5H6a.5.5 0 0 0 0-1H2.5a.5.5 0 0 0-.5.5M2.5 7a.5.5 0 0 0 0 1H6a.5.5 0 0 0 0-1zM2 9.5a.5.5 0 0 0 .5.5H6a.5.5 0 0 0 0-1H2.5a.5.5 0 0 0-.5.5m8-4v3a.5.5 0 0 0 .5.5h3a.5.5 0 0 0 .5-.5v-3a.5.5 0 0 0-.5-.5h-3a.5.5 0 0 0-.5.5"/>
</svg>
<span>Poster</span>
</a>
</li>
<li>
<a class="btn btn-dark d-flex column-gap-2 align-items-center" href="./demo">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" class="bi bi-rocket-takeoff-fill"
viewBox="0 0 16 16">
<path fill="currentColor"
d="M12.17 9.53c2.307-2.592 3.278-4.684 3.641-6.218.21-.887.214-1.58.16-2.065a3.6 3.6 0 0 0-.108-.563 2 2 0 0 0-.078-.23V.453c-.073-.164-.168-.234-.352-.295a2 2 0 0 0-.16-.045 4 4 0 0 0-.57-.093c-.49-.044-1.19-.03-2.08.188-1.536.374-3.618 1.343-6.161 3.604l-2.4.238h-.006a2.55 2.55 0 0 0-1.524.734L.15 7.17a.512.512 0 0 0 .433.868l1.896-.271c.28-.04.592.013.955.132.232.076.437.16.655.248l.203.083c.196.816.66 1.58 1.275 2.195.613.614 1.376 1.08 2.191 1.277l.082.202c.089.218.173.424.249.657.118.363.172.676.132.956l-.271 1.9a.512.512 0 0 0 .867.433l2.382-2.386c.41-.41.668-.949.732-1.526zm.11-3.699c-.797.8-1.93.961-2.528.362-.598-.6-.436-1.733.361-2.532.798-.799 1.93-.96 2.528-.361s.437 1.732-.36 2.531Z"/>
<path fill="currentColor"
d="M5.205 10.787a7.6 7.6 0 0 0 1.804 1.352c-1.118 1.007-4.929 2.028-5.054 1.903-.126-.127.737-4.189 1.839-5.18.346.69.837 1.35 1.411 1.925"/>
</svg>
<span>Demo</span>
</a>
</li>
<li>
<a class="btn btn-dark d-flex column-gap-2 align-items-center"
href="https://github.com/AvaLovelace1/BrickGPT/" target="_blank" rel="external noopener noreferrer">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" class="bi bi-github"
viewBox="0 0 16 16">
<path fill="currentColor"
d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27s1.36.09 2 .27c1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.01 8.01 0 0 0 16 8c0-4.42-3.58-8-8-8"/>
</svg>
<span>Code</span>
</a>
</li>
<li>
<a class="btn btn-dark d-flex column-gap-2 align-items-center"
href="https://huggingface.co/datasets/AvaLovelace/StableText2Brick" target="_blank"
rel="external noopener noreferrer">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" class="bi bi-database-fill"
viewBox="0 0 16 16">
<path fill="currentColor"
d="M3.904 1.777C4.978 1.289 6.427 1 8 1s3.022.289 4.096.777C13.125 2.245 14 2.993 14 4s-.875 1.755-1.904 2.223C11.022 6.711 9.573 7 8 7s-3.022-.289-4.096-.777C2.875 5.755 2 5.007 2 4s.875-1.755 1.904-2.223"/>
<path fill="currentColor"
d="M2 6.161V7c0 1.007.875 1.755 1.904 2.223C4.978 9.71 6.427 10 8 10s3.022-.289 4.096-.777C13.125 8.755 14 8.007 14 7v-.839c-.457.432-1.004.751-1.49.972C11.278 7.693 9.682 8 8 8s-3.278-.307-4.51-.867c-.486-.22-1.033-.54-1.49-.972"/>
<path fill="currentColor"
d="M2 9.161V10c0 1.007.875 1.755 1.904 2.223C4.978 12.711 6.427 13 8 13s3.022-.289 4.096-.777C13.125 11.755 14 11.007 14 10v-.839c-.457.432-1.004.751-1.49.972-1.232.56-2.828.867-4.51.867s-3.278-.307-4.51-.867c-.486-.22-1.033-.54-1.49-.972"/>
<path fill="currentColor"
d="M2 12.161V13c0 1.007.875 1.755 1.904 2.223C4.978 15.711 6.427 16 8 16s3.022-.289 4.096-.777C13.125 14.755 14 14.007 14 13v-.839c-.457.432-1.004.751-1.49.972-1.232.56-2.828.867-4.51.867s-3.278-.307-4.51-.867c-.486-.22-1.033-.54-1.49-.972"/>
</svg>
<span>Dataset</span>
</a>
</li>
</ul>
</div>
</header>
<main>
<div class="container d-flex flex-column align-items-center pb-5">
<noscript>
<p class="text-danger small text-center">Enable JavaScript to play videos.</p>
</noscript>
<video controls loop muted src="videos/brickgpt-v2.mp4" class="w-100 h-auto max-w-md"></video>
</div>
<div class="bg-dark text-bg-dark">
<div class="container py-5">
<h2 class="text-center mb-3">Overview</h2>
<p id="overview" class="lead max-w-sm mx-auto mb-5">
<b class="fw-bolder">BrickGPT</b> generates a toy brick structure from a user-provided text prompt in an
end-to-end manner. Notably, our generated brick structure is physically stable and buildable.
</p>
<a class="pswp-img" href="images-optimized/teaser-full.webp"
data-pswp-width="2336" data-pswp-height="1120" target="_blank">
<img srcset="images-optimized/teaser-540.webp 540w,
images-optimized/teaser-1080.webp 1080w,
images-optimized/teaser-1320.webp 1320w,
images-optimized/teaser-2640.webp 2640w"
sizes="(max-width: 575px) 100vw,
(max-width: 767px) 540px,
(max-width: 991px) 720px,
(max-width: 1199px) 960px,
(max-width: 1399px) 1140px,
1320px"
src="images-optimized/teaser-540.webp" alt="BrickGPT overview" aria-describedby="overview"
class="img-fluid" width="2336" height="1120"/>
</a>
</div>
</div>
<div class="bg-light text-bg-light">
<div class="container py-5">
<h2 class="text-center mb-3">Abstract</h2>
<p class="max-w-md mx-auto mb-4">
We introduce <b class="fw-bolder">BrickGPT</b>, the first approach for generating
physically stable toy brick models from text prompts. To achieve this, we construct a
large-scale, physically stable dataset of brick designs, along with their associated captions, and train
an autoregressive large language model to predict the next brick to add via next-token prediction.
To improve the stability of the resulting designs, we employ an efficient validity check and
physics-aware rollback during autoregressive inference, which prunes infeasible token
predictions using physics laws and assembly constraints. Our experiments show that
<b class="fw-bolder">BrickGPT</b> produces stable, diverse, and aesthetically pleasing
brick designs that align closely with the input text prompts. We also develop a text-based brick
texturing method to generate colored and textured designs. We show that our designs can be
assembled manually by humans and automatically by robotic arms. We also release our new dataset,
<b class="fw-bolder">StableText2Brick</b>, containing over 47,000 brick structures of
over 28,000 unique 3D objects accompanied by detailed captions, along with our code and models.
</p>
</div>
</div>
<div class="container py-5">
<h2 class="text-center fs-3 mb-4">StableText2Brick dataset</h2>
<figure class="figure">
<a class="pswp-img" href="images-optimized/dataset-full.webp"
data-pswp-width="3612" data-pswp-height="1178" target="_blank">
<img srcset="images-optimized/dataset-540.webp 540w,
images-optimized/dataset-1080.webp 1080w,
images-optimized/dataset-1320.webp 1320w,
images-optimized/dataset-2640.webp 2640w"
sizes="(max-width: 575px) 100vw,
(max-width: 767px) 540px,
(max-width: 991px) 720px,
(max-width: 1199px) 960px,
(max-width: 1399px) 1140px,
1320px"
src="images-optimized/dataset-540.webp" class="figure-img img-fluid" width="3612" height="1178"
alt="StableText2Brick dataset construction pipeline"/>
</a>
<figcaption class="figure-caption">
(a) From a ShapeNetCore mesh, we generate a brick structure by voxelizing it onto a 20×20×20 grid,
then constructing its brick layout with a delete-and-rebuild algorithm. (b) We augment each shape with
multiple structural variations by randomizing the brick layout while preserving the overall shape. (c)
Stability analysis is performed on each variation to filter out physically unstable designs. (d) To
obtain captions for each shape, we render the brick structure from 24 different viewpoints and use
GPT-4o to generate detailed geometric descriptions. (e) Data samples from 5 categories in our
<b class="fw-bolder">StableText2Brick</b> dataset.
</figcaption>
</figure>
<div class="py-4"></div>
<h2 class="text-center fs-3 mb-4">BrickGPT pipeline</h2>
<figure class="figure">
<a class="pswp-img" href="images-optimized/pipeline-full.webp"
data-pswp-width="3624" data-pswp-height="1610" target="_blank">
<img srcset="images-optimized/pipeline-540.webp 540w,
images-optimized/pipeline-1080.webp 1080w,
images-optimized/pipeline-1320.webp 1320w,
images-optimized/pipeline-2640.webp 2640w"
sizes="(max-width: 575px) 100vw,
(max-width: 767px) 540px,
(max-width: 991px) 720px,
(max-width: 1199px) 960px,
(max-width: 1399px) 1140px,
1320px"
src="images-optimized/pipeline-540.webp" class="figure-img img-fluid" width="3624" height="1610"
alt="BrickGPT pipeline"/>
</a>
<figcaption class="figure-caption">
(a) Our system tokenizes a brick structure into a sequence of text tokens, ordered in a raster-scan
manner from bottom to top. (b) We create an instruction dataset pairing brick sequences with
descriptions to fine-tune LLaMA-3.2-Instruct-1B. (c) At inference time,
<b class="fw-bolder">BrickGPT</b> generates brick structures incrementally by predicting one brick at a
time given a text prompt. For each generated brick, we perform validity checks to ensure it is
well-formatted, exists in our brick library, and does not collide with existing bricks. After completing
the design, we verify its physical stability. If the structure is unstable, we roll back to a stable
state by removing all unstable bricks and their subsequent ones, and resume generation from that point.
</figcaption>
</figure>
<div class="py-4"></div>
<h2 class="text-center fs-3 mb-4">Step-by-step generation of brick structures from text</h2>
<div class="container-fluid text-center font-cursive">
<div class="row align-items-start row-cols-2 row-cols-md-3 row-gap-2">
<div class="col">
<figure>
<video autoplay controls loop muted playsinline data-src="videos/step-by-step/vessel.mp4"
class="img-fluid mb-1" type="video/mp4"></video>
<figcaption>“A streamlined vessel with a long, narrow hull”</figcaption>
</figure>
</div>
<div class="col">
<figure>
<video autoplay controls loop muted playsinline data-src="videos/step-by-step/guitar.mp4"
class="img-fluid mb-1" type="video/mp4"></video>
<figcaption>“A classical guitar”</figcaption>
</figure>
</div>
<div class="col">
<figure>
<video autoplay controls loop muted playsinline data-src="videos/step-by-step/sofa.mp4"
class="img-fluid mb-1" type="video/mp4"></video>
<figcaption>“A basic sofa”</figcaption>
</figure>
</div>
<div class="col">
<figure>
<video autoplay controls loop muted playsinline data-src="videos/step-by-step/bookshelf.mp4"
class="img-fluid mb-1" type="video/mp4"></video>
<figcaption>“A bookshelf with horizontal tiers”</figcaption>
</figure>
</div>
<div class="col">
<figure>
<video autoplay controls loop muted playsinline data-src="videos/step-by-step/chair.mp4"
class="img-fluid mb-1" type="video/mp4"></video>
<figcaption>“A high-backed chair”</figcaption>
</figure>
</div>
<div class="col">
<figure>
<video autoplay controls loop muted playsinline data-src="videos/step-by-step/bench.mp4"
class="img-fluid mb-1" type="video/mp4"></video>
<figcaption>“A backless bench with armrest”</figcaption>
</figure>
</div>
</div>
</div>
<div class="py-4"></div>
<h2 class="text-center fs-3 mb-4">Automated assembly of generated brick structures using robots (8x speed)</h2>
<div class="container-fluid text-center font-cursive">
<div class="row align-items-start row-cols-2 row-gap-2">
<div class="col">
<figure>
<video autoplay controls loop muted playsinline data-src="videos/robots/vessel_8x.mp4"
class="img-fluid mb-1" type="video/mp4"></video>
<figcaption>“A streamlined vessel with a long, narrow hull […]”</figcaption>
</figure>
</div>
<div class="col">
<figure>
<video autoplay controls loop muted playsinline data-src="videos/robots/guitar_8x.mp4"
class="img-fluid mb-1" type="video/mp4"></video>
<figcaption>“An asymmetrical six-string guitar […]”</figcaption>
</figure>
</div>
</div>
</div>
<div class="py-4"></div>
<h2 class="text-center fs-3 mb-4">Generated brick structures assembled by humans</h2>
<a class="pswp-img" href="images-optimized/human_exec-full.webp"
data-pswp-width="3287" data-pswp-height="3008" target="_blank">
<img srcset="images-optimized/human_exec-540.webp 540w,
images-optimized/human_exec-1080.webp 1080w,
images-optimized/human_exec-1320.webp 1320w,
images-optimized/human_exec-2640.webp 2640w"
sizes="(max-width: 575px) 100vw,
(max-width: 767px) 540px,
(max-width: 991px) 720px,
(max-width: 1199px) 960px,
(max-width: 1399px) 1140px,
1320px"
src="images-optimized/human_exec-540.webp" class="img-fluid" width="3287" height="3008"
alt="Examples of brick structures built in the real world by humans."/>
</a>
<div class="py-4"></div>
<h2 class="text-center fs-3 mb-4">Generated textured brick models</h2>
<div class="container-fluid text-center font-cursive">
<div class="row align-items-start row-cols-2 row-cols-md-4 row-gap-2 mb-2">
<div class="col">
<figure>
<video autoplay controls loop muted playsinline
data-src="videos/texture/others/rustic_stone_bench_full_color_rotate.mp4"
class="img-fluid mb-1"
type="video/mp4"></video>
<figcaption>“Rustic stone bench with moss growth […]”</figcaption>
</figure>
</div>
<div class="col">
<figure>
<video autoplay controls loop muted playsinline
data-src="videos/texture/others/hot_rod_with_full_color_rotate.mp4"
class="img-fluid mb-1"
type="video/mp4"></video>
<figcaption>“Hot rod with flame paintwork […]”</figcaption>
</figure>
</div>
<div class="col">
<figure>
<video autoplay controls loop muted playsinline
data-src="videos/texture/others/rustic_farmhouse_chair_full_color_rotate.mp4"
class="img-fluid mb-1" type="video/mp4"></video>
<figcaption>“Rustic farmhouse chair built from reclaimed wood […]”</figcaption>
</figure>
</div>
<div class="col">
<figure>
<video autoplay controls loop muted playsinline
data-src="videos/texture/others/live_edge_walnut_full_color_rotate.mp4"
class="img-fluid mb-1"
type="video/mp4"></video>
<figcaption>“Live edge walnut table […]”</figcaption>
</figure>
</div>
<div class="col">
<figure>
<video autoplay controls loop muted playsinline
data-src="videos/texture/sofa/comfortable_lounge_chair_full_color_rotate.mp4"
class="img-fluid mb-1" type="video/mp4"></video>
<figcaption>“Comfortable lounge chair wrapped in Japanese shibori fabric […]”</figcaption>
</figure>
</div>
<div class="col">
<figure>
<video autoplay controls loop muted playsinline
data-src="videos/texture/sofa/cyberpunk_holographic_material_full_color_rotate.mp4"
class="img-fluid mb-1" type="video/mp4"></video>
<figcaption>“Cyberpunk holographic material with neon purple and blue gradients […]”
</figcaption>
</figure>
</div>
<div class="col">
<figure>
<video autoplay controls loop muted playsinline
data-src="videos/texture/sofa/rustic_farmhouse_armchair_full_color_rotate.mp4"
class="img-fluid mb-1" type="video/mp4"></video>
<figcaption>“Rustic farmhouse armchair built from reclaimed wood […]”</figcaption>
</figure>
</div>
<div class="col">
<figure>
<video autoplay controls loop muted playsinline
data-src="videos/texture//sofa/vintage_floral_tapestry_full_color_rotate.mp4"
class="img-fluid mb-1" type="video/mp4"></video>
<figcaption>“Vintage floral tapestry with deep reds and golds […]”</figcaption>
</figure>
</div>
</div>
<div class="row align-items-start row-cols-3 row-gap-2">
<div class="col">
<figure>
<video autoplay controls loop muted playsinline
data-src="videos/texture/bookshelf/gothic_cathedral_bookshelf_full_color_rotate.mp4"
class="img-fluid mb-1" type="video/mp4"></video>
<figcaption>“Gothic cathedral bookshelf with arch details, medieval style […]”</figcaption>
</figure>
</div>
<div class="col">
<figure>
<video autoplay controls loop muted playsinline
data-src="videos/texture/bookshelf/japanese_sliding_bookcase_full_color_rotate.mp4"
class="img-fluid mb-1" type="video/mp4"></video>
<figcaption>“Japanese sliding bookcase with shoji screens, traditional design […]”</figcaption>
</figure>
</div>
<div class="col">
<figure>
<video autoplay controls loop muted playsinline
data-src="videos/texture/bookshelf/victorian_library_shelving_full_color_rotate.mp4"
class="img-fluid mb-1" type="video/mp4"></video>
<figcaption>“Victorian library shelving with carved moldings […]”</figcaption>
</figure>
</div>
</div>
</div>
<div class="py-4"></div>
<h2 class="text-center fs-3 mb-4">Generated colored brick models</h2>
<div class="container-fluid text-center font-cursive">
<div class="row align-items-start row-cols-2 row-cols-md-4 row-gap-2">
<div class="col">
<figure>
<video autoplay controls loop muted playsinline data-src="videos/color/guitar/guitar_rotate.mp4"
class="img-fluid mb-1" type="video/mp4"></video>
<figcaption>“Parlor guitar with ladder bracing […]”</figcaption>
</figure>
</div>
<div class="col">
<figure>
<video autoplay controls loop muted playsinline data-src="videos/color/guitar/purple_rotate.mp4"
class="img-fluid mb-1" type="video/mp4"></video>
<figcaption>“Electric guitar in metallic purple […]”</figcaption>
</figure>
</div>
<div class="col">
<figure>
<video autoplay controls loop muted playsinline data-src="videos/color/guitar/steel_rotate.mp4"
class="img-fluid mb-1" type="video/mp4"></video>
<figcaption>“Steel resonator with engraved body […]”</figcaption>
</figure>
</div>
<div class="col">
<figure>
<video autoplay controls loop muted playsinline
data-src="videos/color/guitar/sunburst_rotate.mp4" class="img-fluid mb-1"
type="video/mp4"></video>
<figcaption>“Sunburst Les Paul with amber finish […]”</figcaption>
</figure>
</div>
</div>
</div>
</div>
</main>
<footer class="bg-light text-bg-light">
<div class="container py-5">
<h2 class="fs-4 mb-3">Citation</h2>
<pre><code class="small">@inproceedings{pun2025brickgpt,
title = {Generating Physically Stable and Buildable Brick Structures from Text},
author = {Pun, Ava and Deng, Kangle and Liu, Ruixuan and Ramanan, Deva and Liu, Changliu and Zhu, Jun-Yan},
booktitle = {ICCV},
year = {2025}
}</code></pre>
<h2 class="fs-4 mb-3 mt-5">Acknowledgements</h2>
<p class="small">
We thank Minchen Li, Ken Goldberg, Nupur Kumari, Ruihan Gao, and Yihao Shi for their discussions
and help. We also thank Jiaoyang Li, Philip Huang, and Shobhit Aggarwal for developing the bimanual
robotic system. This work is partly supported by the Packard Foundation, Cisco Research Grant,
and Amazon Faculty Award. This work is also in part supported by the Manufacturing Futures
Institute, Carnegie Mellon University, through a grant from the Richard King Mellon Foundation. KD is
supported by the Microsoft Research PhD Fellowship. The website template is taken from
<a href="https://www.cs.cmu.edu/~custom-diffusion/" class="fw-bolder link-body-emphasis" target="_blank"
rel="external noopener noreferrer">Custom Diffusion</a>
(which was built on
<a href="https://dreamfusion3d.github.io/index.html" class="fw-bolder link-body-emphasis" target="_blank"
rel="external noopener noreferrer">DreamFusion</a>s
project page).
</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/vanilla-lazyload@12.2.0/dist/lazyload.min.js"></script>
<script>
// LazyLoad
const lazyLoadInstance = new LazyLoad({
elements_selector: "video",
use_native: true,
});
</script>
<script type="module">
// PhotoSwipe
import PhotoSwipeLightbox from "https://cdn.jsdelivr.net/npm/photoswipe@5.4.4/dist/photoswipe-lightbox.esm.min.js";
const lightbox = new PhotoSwipeLightbox({
gallery: "#pswp-gallery",
children: "a.pswp-img",
pswpModule: () => import("https://cdn.jsdelivr.net/npm/photoswipe@5.4.4/+esm"),
});
lightbox.init();
</script>
</body>
</html>