desigma
Rust로 만든 무료 Figma 대안
origami CAD는 접힌 시트의 동작을 기술하면 파이프라인이 새로운 접힘 패턴을 설계하고 시뮬레이터가 검증한다
Describe the behaviour you want from a folded sheet; the pipeline designs a new crease pattern and the simulator verifies it.
디자인Python · JavaScriptGitHub @raphaeldchen온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기origami CAD: describe a force response in words, get back a simulator-verified fold pattern. Hackathon work only (from 2026-10-26).
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗This repository holds only work done during the Meta Global AI Developer Hackathon (from 2026-10-26, 11:00 America/Chicago). It builds on earlier code (the simulator, generators, world models, census and proposer v0/v0.5), which lives in a separate repository, origami-world-model-prior, and is fetched by
scripts/setup_prior.sh(setup). What came before and what was built this week: below and HACKATHON.md.
A pipeline that designs origami-inspired programmable force-response metamaterials from natural language. These are folded cells whose force–displacement curve is designed: a flat force plateau over a set stroke, a click at a set travel, resistance in stages, or a set of shapes the cell holds by itself. They recover elastically, so the part can be used again. You type or say the curve you need, in your own words and numbers. Meta's Muse Spark turns that into precise checks and plans which fold-pattern families to try. The pipeline searches and tunes crease layouts across those families on a physics simulator. You get back a crease pattern whose behaviour the simulator has verified and stress-tested, with a datasheet saying how far each number can be trusted, or an honest "not found within budget".
Example (live app, 2026-11-02, run r-e151c1ef). Request: "I want a pad that pushes back with the same force, about
5 N, from 20 % to 50 % of its travel, whatever the exact thickness of the part it clamps, and springs back fully when
released." Muse Spark mapped it to force_plateau (window 0.2–0.5 of the stroke) and springs_back, and listed the
5 N as unchecked (forces are relative). The planner tried four families. A tiling layout met both checks robustly: 10 of
10 perturbed copies and 3 of 3 nudged runs, 57 simulator calls, 7 minutes and $0.02 of compute. "Verified" means
verified by our simulator; forces in tiling layouts have not yet been checked against experiment.
| Question | Answer today (2026-11-02) |
|---|---|
| What does it design? | Force–displacement shapes (plateaus, clicks, staged and equal-force steps), multistable held shapes and heights, push–pull switching, stiffness switching and Poisson-programmed cores. All are quasi-static and elastic. |
| How often does it succeed? | On 8 force-response requests swept over 3 seeds, a planned run returned a robust, simulator-verified design in 17 of 24 runs at 120 simulator calls, and 17 of 24 at 360 calls (sweep). |
| Does it design new crease layouts? | It searches 8 families at once. These include tilings and mixed-vertex sheets outside the standard catalog, plus Kresling towers where a known family suffices. It composes and tunes layouts within those families' grammars, and doesn't claim new pattern classes. |
| Who decides that a design works? | The physics simulator, always, including a robustness test: refined run, 3 nudged runs, 8 of 10 perturbed copies. Muse Spark translates, plans and explains, but never grades a result. |
| How far can the numbers be trusted? | The Kresling family is validated against experiment (Zang et al., PNAS 2025). Other families agree with theory or are not yet validated, and the datasheet tags each. Forces are relative; newton units are validated on framed Kresling but not yet live. |
| Is the learned world model in the search loop? | No, not yet. No world model has passed its held-out gates on grids (see The world model). The search runs on the simulator alone, and the app's pipeline strip says "skipped". |
| Can I download the pattern? | Yes: FOLD v1.2 and an SVG cut-and-score file, but only for simulator-verified designs. |
| Has it been folded in real paper? | Not yet. A bench protocol for paper stiffness is prepared; no CAD design has been folded and measured. |
Force-response metamaterials get their behaviour from geometry rather than from the material. A folded paper cell can hold a part at constant force, give a gloved finger a click, or count presses without electronics. Engineers specify the curve they want, but designing a fold pattern that delivers it is still done by hand:
We found no tool, commercial or academic, that takes mechanical requirements in plain language and returns a verified, robustness-checked pattern across several families. The pipeline does that. The full argument is in docs/overview.md.
request, typed or spoken
│ Muse Voice Transcribe (spoken requests)
▼
Muse Spark: translation ──► checks: a template + slots, each quoting the words it came from;
│ asks when a threshold is missing; refuses what the simulator can't check
▼
runner: new-layout generators first ──► probe every generator, then concentrate the budget
│ (successive halving; Muse Spark can reallocate each round)
▼
[world-model screen: skipped, no model passes its gates]
▼
simulator, fanned out on Modal ──► pass rules (benchmark v3 amendment I) + 5% strain cap
▼
robustness clause: 10 perturbed copies (≥ 8 must pass) + 3 nudged runs
▼
verdict + datasheet (every number badged and linked to its simulator run)
│ exports (FOLD, SVG) only for a verified design
▼
paper test: fold it, film it, SAM 3.1 measures it (plan 07, in progress)
Each stage was built from its own plan; all are in docs/plans/. The index is
2026-10-27-cad-impl-00-index.md.
| Stage | Plan | Code | Status |
|---|---|---|---|
| Pipeline core: contracts, generators, check templates, runner, verdicts, exports | 01 | src/origami_wm/cad/ | Merged, PR #63; runner speed-up PR #71 |
| Pass rules for new layouts (benchmark v3 amendment I) | 02 | src/origami_wm/specs/, cad/templates_g.py | Merged, PR #62 |
| Serverless fan-out and the run API | 03 | cad/serve/ | Merged and deployed, PR #69 |
| Muse Spark design agent | 04 | cad/agent/ | Merged, PR #67 |
| Web app | 05 | cad/web/ | Merged and deployed, PR #75 |
| Request suite and capability sweep | 06 | — | In progress (results Oct 31) |
| SAM 3.1 paper test | 07 | — | In progress |
Muse Spark (muse-spark-1.3, pinned) works as a tool-calling agent. It never writes crease coordinates and never
judges success. It may propose a generator's parameters, or a topology plan in a fixed language, which code turns into
a certified pattern or rejects. Its jobs are below.
region_order, order = [1, 0]. Deterministic code assembles the check, so a check is
always well formed. Every default is recorded.Development numbers on 8 seed requests, 3 runs each: 7 of 8 translated exactly in all 3 runs, typed or spoken; every refusal and every question was right (plan 04 results). These are not design success rates. Translation accuracy on the held-out request suite: [pending: plan 06].
rigid or compliant.tiling (Dieleman tilings), tiling_stack and compliant. Known
families (miura, graded, degree4, kresling) run only from the "Compare with known families" button or as a
fallback (cad/registry.py).cad/runner.py).What counts as a pass is fixed before any search uses it, and is never tuned:
region_order) carry that warning on the datasheet.The pre-registration and its control results are in docs/plans/2026-10-26-benchmark-v3.md (amendment I).
POST /runs, GET /runs/{id}/events (server-sent events) and GET /runs/{id}.?run= link.The layout is a CAD layout, in four regions:
SIM-VERIFIED, PREDICTED, PENDING or MEASURED IN PAPER. It
also shows the robustness result (k of 10 copies), peak strain, simulator calls, the verdict and a known-family
comparison row.A capabilities panel shows which behaviours it can check and the measured success rate of each, with sample size and a 95% Wilson interval. Until plan 06's sweep lands, it says "success rate: not measured yet".
Before and after the request (2026-11-03):
cad/web/static/odds.json.POST /agent/generate, cad/agent/generate.py), or a fixed template does,
labelled so. The pipeline is never told: the text is translated, confirmed and run like a typed one, and the confirm
screen shows any value translation lost next to the generator's. The request carries the label "GENERATED ·
likely-to-succeed mode · …" in the intent column, on the datasheet and on a shared link (the run's meta keeps the
origin and the generator's record, outside the cache key), and "How was this picked?" shows the category, the
ranges, the odds and the exact prompt. No sentence may repeat a suite request (tested against both request files).GET /tally): this deploy's finished runs by origin, generated or typed, and how many were
robust, shown next to the generator and on the result beside the batch's figures.The user uploads a short side-view video of the hand-folded part. SAM 3.1 (through the Meta Model API) segments the
sheet in each frame. The app finds the rest frames and compares each rest shape's profile with the simulator's
prediction from the same viewpoint. The results are labelled MEASURED IN PAPER, apart from simulator-verified, and
are qualitative: paper creases are pseudo-plastic, so the test compares shapes and rest angles, not forces.
[pending: plan 07; the first paper fold is not done yet]
The project's long-term engine is a learned forward world model: crease pattern, material and loading in; behaviour and properties out, fast enough to screen thousands of new layouts. It is the part that lets the search scale beyond what the simulator can afford.
Where it stands, honestly:
"world_model": "skipped: …", and the app shows it.These are enforced in code and tests, not just stated:
cad/verdict.py, MIN_COMPARISON_CALLS).cad/export.py, export_verified). The closest design under any other verdict gets no pattern file.| Behaviour | Requests (held out) | Runs: ran / passed | Success rate (95% Wilson) | Verified design is a new layout | Median time | Known families on this check |
|---|---|---|---|---|---|---|
| [pending: plan 06 sweep, Oct 31] |
Simulator calls per verified design: without the world model [pending]; with it, not measured (no model passes its gates).
Measured so far:
region_order: new layout designed, robust 10 of 10, 29 calls, 5 min 11 s (run
r-732c99b5, above).region_order: new layout designed, robust 9 of 10, 17 calls, 80 s (run
r-1f4bb806). The known-family comparison, 24 calls, found no known family passing. That is too few calls to
claim a new pattern was needed, and the app did not claim it.tiling, worst margin −0.503 (run r-0a0572c1). Honest failures are
part of the product.region_order holds across paper's material range in simulation. Details and
the plan to close the gaps are in
the validation matrix (§0, §9.7).| Model | Where | What it does |
|---|---|---|
Muse Spark (muse-spark-1.3) | cad/agent/ | A tool-calling agent. It translates the request into checks, asks or refuses, reallocates simulator budget between generators each round, writes topology plans when the planner is switched on, and narrates grounded results. It answers follow-up questions about a run and can start a known-family comparison. |
Muse Voice Transcribe (muse-voice-transcribe-1.0) | cad/agent/, cad/web/static/js/voice.js | Spoken requests. The browser converts the recording to 16 kHz mono WAV, and the transcript is editable before translation. |
| SAM 3.1 | plan 07 (in progress) | Segments the hand-folded paper part in each video frame, to compare its rest shapes with the simulator's. |
All three are called through the Meta Model API (https://api.meta.ai/v1). The key is read from the environment or
.env, never committed.
You need Python 3.13 or later, git, rsync, and Node.js for the front-end tests.
This repository depends on the pre-hackathon code in
origami-world-model-prior, pinned at 7c6b49f1. Fetch it
first; the script clones it into .prior/, applies the hackathon's edits to 33 prior files
(prior-patches/event-edits-to-prior-files.patch), and lays the prior files into the working tree (never committed
here: they are listed in .git/info/exclude):
git clone https://github.com/raphaeldchen/origami-cad-hackathon.git
cd origami-cad-hackathon
bash scripts/setup_prior.sh
python3.13 -m venv .venv
.venv/bin/pip install -e '.[dev,cad,serve]'
make test # Python tests, plus the web app's tests (node --test)
One design request from the command line (the real simulator, on your machine; no API key needed):
cat > request.json <<'EOF'
{"text": "Push on the sheet and make the band farthest from me fold first.",
"checks": [{"template": "region_order", "params": {"order": [1, 0]},
"source_phrase": "make the band farthest from me fold first"}],
"budget_calls": 40, "seed": 0, "novelty": "new"}
EOF
nice -n 10 .venv/bin/python -m origami_wm.cad.run request.json --out runs/demo
runs/demo/ gets events.jsonl (the live event stream), result.json (the verdict, margins, robustness and
simulator run ids) and, only if the design is verified, pattern.fold and pattern.svg. Templates are listed in
src/origami_wm/cad/templates.py and src/origami_wm/specs/templates_g.py. Use "novelty": "known" to search the
known families instead.
The web app and run API on http://127.0.0.1:8000, with a local process pool in place of Modal:
.venv/bin/python -m origami_wm.cad.serve --workers 4
Muse Spark and Voice need META_API_KEY in .env (see .env.example). Without a key, the agent routes answer 503,
and you can still run checks directly through POST /runs.
The agent from the command line (needs the key):
.venv/bin/python -m origami_wm.cad.agent "It should hold three different shapes after I let go." --out runs/agent
Deploying to Modal (scripts/deploy_cad.sh) needs the owner's Modal workspace and a Modal secret named meta-api.
The research tools from before the hackathon (dataset generation, world-model training and evaluation, benchmarks)
are listed in CLAUDE.md §4 (a prior file, laid in by the setup script).
The hackathon started on 2026-10-26 at 11:00 America/Chicago. This repository was created afterwards and holds only
work committed after that moment, with its original commit times. Prior work is in
origami-world-model-prior: its hackathon-start tag
(fac6afe) is the last commit before the start, and its main adds the three branches whose commits all predate the
start (Phase 0b, benchmark v3 calibration, the energy-model pilot) and the code ported from Pleatwright.
How the split was made: every path that existed in any prior commit, and the 20 files ported from Pleatwright, were
removed from this repository's whole history (git filter-repo). No file version in this history matches any file
version in the prior repository. The hackathon's edits to 33 prior files are kept as a patch in prior-patches/.
Before (prior work):
During the hackathon (one entry file per PR in hackathon/entries/, table in HACKATHON.md):
The video and the app show only hackathon work. The prior parts appear once, as "built on".
src/origami_wm/
sim/ bar-and-hinge simulator (MERLIN physics, contact) prior work (prior repo), extended by the patch
generators/ Kresling, Miura, degree-4, graded Miura, zipper tubes, square twist
proposer/ new layouts: Dieleman tilings, compliant and stacking moves, flat-fold certification
specs/ requirements, protocols, amendment I's parametric checks and calibrated ranges
bench_v3/ benchmark v3 arms and controls
data/, wm/ dataset format and the world models (not in the CAD loop yet)
cad/ the CAD: schema, registry, templates, runner, verdicts, export
agent/ Muse Spark: translation, allocation, grounded narration, voice
serve/ run API, Modal app, fan-out, limits
web/ the web app
docs/plans/ every plan, with pre-registrations and results
docs/research/ census, prior-art notes, market research
hackathon/ one log entry per hackathon PR
prior-patches/ the hackathon's edits to 33 prior files, applied by scripts/setup_prior.sh
Apache-2.0 (LICENSE, NOTICE). Code ported from the author's earlier project,
Pleatwright (the box-pleat pipeline in proposer/pleat/ and the layer
certifier in proposer/certify/), is pre-existing code, so it lives in the prior repository, marked in each file; this
repository holds only the code that wires it in. Prior art for every part is cited in its plan (CLAUDE.md §0). The demo
design's survey is in §9 of the demo spec.