Проект: ModelRift: Cursor для 3D моделирования (CAD)  Публичный пост
2 февраля 2026  514
ModelRift: Cursor для 3D моделирования (CAD)
https://modelrift.com

Портал

Недавно я купил 3D принтер. Быстро выяснилось, что это лучший подарок себе за много лет.

Попечатав немного чужие модели с makerworld и printables, погрузился в новый, чудный мир - построения инженерных CAD моделей. С каждым новым вопросом я проваливался глубже и глубже в кроличью нору. Быстро оказалось, что печатать и адаптировать чужие модели совсем не так интересно, как создавать новые модели для других людей. Открыл для себя параметрический дизайн, Fusion 360. Flanges, hinges, dovetail, chamfer, fillet, loft, sweep, extrude, revolve. Я этих слов не знал даже толком. Всё это стало частью лексикона, теперь я у мамы настоящий инженер-архитектор, а не этот программист, которых развелось!

мой первый проект для Makerworld. hexagons are bestagons
мой первый проект для Makerworld. hexagons are bestagons

Ладно... быстро выяснилось, есть модели, которые тяжело/неудобно рисовать статичными, пусть и параметрическими, чертежами - программно генерируемые штукенции. К примеру, всяческие формы со сложными ребрами с замысловатым синусоидальным распределением. Вспомнил тригонометрию и тангенс. Узнал такие абстрактные понятия, как Platonic Solids, открыл для себя что Эйлер, великий математик, в 1736 году пытался решить проблему "семи мостов" в Кёнигсберге (теперь Калининграде) (можно ли пройти по каждому из 7 мостов города, но по каждому только один раз?) - открыл новый раздел математики.

еще один мой проект - холдер для карты tangem, с прикольными ребрами как у воздушного фильтра
еще один мой проект - холдер для карты tangem, с прикольными ребрами как у воздушного фильтра

Теория графов - всегда для меня это звучало скучно. Я вообще слаб в алгоритмах, больше продукт и конечный результат меня интересует. И тут вдруг всё это засияло красками, и обрело вес и смысл, когда я задался простым вопросом: как спроектировать и напечатать рандомный лабиринт для шарика? Называется эта штука Гамильтонов путь в планаре.

На этом погружение не остановилось. Я узнал, что можно описывать 3D модели программным кодом. О, это уже знакомая среда, тут меньше тыкать мышкой! Есть великолепная штука - OpenSCAD. Фактически, DSL для 3д моделирования.

Понятное дело, сложную геометрию описать программно оказалось сложно. Сунулся в ChatGPT и Gemini - оказалось, что они сносно выдают базовый OpenSCAD "скелет". Но галлюцинируют жёстко, и типовой воркфлоу получился такой: просим ChatGPT выдать OpenSCAD код → несём код в OpenSCAD редактор → рендерим там модельку → ужасаемся результату → делаем скриншот → рисуем на скриншоте стрелки и выделяем проблемы → опять идём в ChatGPT, и так по кругу.

Увлекательнейшее занятие, скажу я вам, и даже неплохой результат выдавало (к десятой итерации).

Догадайтесь к чему это привело? Антон бросил все дела, забросил даже собственно печать на 3D принтере, и вместо этого начал собирать браузерный редактор - "Cursor для OpenSCAD" - который по промпту выдаёт .scad код и сразу рендерит его в модель. И самое главное - позволяет быстро итерировать скриншотами.

Для архитектуры и сборки проекта использовал одновременно Claude Code, Codex, и Cursor - переключался между ними, максимально используя доступные тарифы за 20 баксов, и обычную доку в markdown, чтобы не лочиться на конкретного кодинг агента. Никаких скиллов и новых модных штук. Интерфейс аннотации скриншотов точился долго и упорно, да и в вообще - весь интерфейс редактора три раза сильно переделывался, после размышлений и фидбека первых пользователей.

Стек

UI на Shadcn+React, деплой в докер, бекенд - Node.js + pg, очереди - pg-boss, LLM модель пока Gemini 3 Flash.

Что характерно, я максимально избегаю Gemini CLI, который все еще выглядит самым слабым CLI агентом из моего опыта (Antigravity многие хвалят, но у меня не завелся вообще). А вот сама модель Gemini 3 по API показалась оптимальной для конкретного кейса в плане цены-качества (генерация OpenSCAD кода с наименьшим количеством глюков).

Результаты

Вот несколько примеров того, что позволяет делать ModelRift сейчас. Любой человек, знакомый с CAD редакторами, усмехнется - ведь это легко делается за 10 минут в SolidWorks или Fusion - и будет прав. Но. Куча людей не планирует изучать CAD редакторы, не желает ставить тяжелый софт, но все еще хочет напечатать себе органайзер в шкафчик, а спроектированный кем-то Gridfinity - это скучно. ModelRift спроектирует несложную деталь за пару минут.

Гамильтонов путь
Гамильтонов путь

корпус для умного электрокотла в дом

вдолбить в LLM чертеж - сложно.
рабочий процесс - модель с первого захода вышла кривая, поэтому нажимаем Cmd-A для перехода в Annotation Mode, рисуем скриншот докинув туда чертеж сверху,  и нажимаем Cmd+Enter для прикрепления картинки к чату AI ассистента
рабочий процесс - модель с первого захода вышла кривая, поэтому нажимаем Cmd-A для перехода в Annotation Mode, рисуем скриншот докинув туда чертеж сверху, и нажимаем Cmd+Enter для прикрепления картинки к чату AI ассистента

Просто стаканчики для ручек
Просто стаканчики для ручек

видео-демка с интерфейсом - ниже.

Про деньги

LLM стоит денег. Я люблю деньги.
Поэтому ModelRift платный. Оплата зарубежными картами, принимаю через Stripe на американскую C-Corp.
10 долларов = 500 кредитов. 500 кредитов - примерно сотня простых моделек.
Но сейчас всем новеньким выдается 250 кредитов в подарок - можно приобщиться к миру продуктового дизайна. Не стесняйся, проходи, пробуй спроектировать коробочку, задавай вопросы!

Про планы

Улучшать сам процесс моделирования. ModelRift слаб в сборках. Сделать кейс для наушников, с FDM-печатаемой петлей - это пока сложно. Но примерно понятно как это реализовать (кодовое магическое слово - BOSL2). Но об этом в следующий раз.

Ссылка на проект:
ModelRift.

Видео-демка №1 (кратко)

Видео-демка №2 (подробнее, с голосом, плохой звук, плохой англ)

4 комментария 👇

https://modelrift.com

сделал полноценный сайт - лендинг, блог, шоукейс моделей, видео демка
сделал полноценный сайт - лендинг, блог, шоукейс моделей, видео демка

публичный сборник OpenSCAD моделей, можно стартануть и редактировать любую одной кнопкой:
https://modelrift.com/models

Community-built projects
Community-built projects

Написал обстоятельный блог пост про то, почему OpenSCAD:
https://modelrift.com/blog/why-openscad

  Развернуть 1 комментарий

Не по теме поста, но рядом: есть еще классная связка cad-программы rhino + надстройки grasshopper. В архитектуре для похожих задач - "золотой стандарт", работает с nurbs, для 3D печати тоже должно подойти.

  Развернуть 1 комментарий

@vl_mikheev, да, Nurbs и кривые Безье - это очень интересно.
До rhino я пока не дошел, но скоро надеюсь дойти)

OpenSCAD часто ругают за то, что он умеет только .stl генерировать, фактически, "растр" с точки зрения 3д чертежей. Это удобно в прикладном применении дома - чтобы загрузить в слайсер типа Bambu Studio и спокойно напечатать модель - .stl отлично подойдет. Тем более, сам исходник геометрии у нас описан в формате еще более высокоуровневом, чем step (ведь .scad синтаксис - и есть исходник)

Но для серьезных архитектурных работ часто нужен .step - это "векторные" 3д чертежи.

.step vs .stl

Объяснение, для тех, кому интересно:

Предположим, у нас в модели есть "арка" - полукруг.

Мы в OpenSCAD описываем арку:

арка, ModelRift сгенерировал по промпту "draw a half-circle arc. thickness: 5mm. radius: 60mm. put it on XY plane."
арка, ModelRift сгенерировал по промпту "draw a half-circle arc. thickness: 5mm. radius: 60mm. put it on XY plane."

Обратите внимание на переменную $fn которая задает "разрешение" модели.
вот код:

outer_radius = 60;
thickness = 5;      // Width of the arc wall
height = 5;         // Height on the Z-axis
$fn = 150;          // Smoothness

// Create the arc by extruding a square profile 180 degrees
rotate_extrude(angle = 180) {
    translate([outer_radius - thickness, 0])
        square([thickness, height]);
}

Мы экспортируем из OpenSCAD / ModelRift .stl модель этой арки и получаем файл 90KB весом.

Потом меняем $fn на 150 и получаем файл 140KB весом.
OpenSCAD кодирует окружность арки как миллион (или два миллиона - зависит от $fn) мелких полигонов.

Прямая аналогия - как задать для экспортируемого из Figma векторного рисунка разрешение для .png файлика.

OpenSCAD основывается на геометрическом движке Manifold:
https://github.com/elalish/manifold

А можем ли мы программно описывать арку как математическую полукружность?

Можем, но для этого нужен другой движок, например
OpenCascade: https://dev.opencascade.org/

И две классных реализации этого движка на Питоне - это

https://github.com/gumyr/build123d
и https://github.com/CadQuery/cadquery

вот та же арка описанная CadQuery:

# Centerline parameters
radius = 60
thickness = 5
height = 5

result = (
    cq.Workplane("XZ")
    .moveTo(radius, height / 2)       # Move to center of the profile
    .rect(thickness, height)          # Default is centered=True
    .revolve(180)
)

арка в cq-editor
арка в cq-editor

получается, на этапе описания модели что OpenSCAD, что CadQuery - одинаково плюс-минус выглядят, но на этапе экспорта - подход отличается.

экспортируем мы из CadQuery, благодаря ее чисто векторному движку OCC, в векторный чертеж и получаем arc.step - файлик 16KB

Но этот arc.step нельзя напечатать напрямую в слайсере - нам теперь нужен промежуточный этап для конверсии этого .step файла в полигоны.
ЗАТО мы можем сгенерировать какую-то сложную программную херовину в CadQuery, а потом импортировать получившийся .step файл в CAD софт типа Fusion или SolidWorks и продолжить там работу с ним как с реальным "чертежом" - а не с набором полигонов, с которыми ничего и сделать уже толком нельзя.
Или, если нам модель надо не печатать на 3D принтере, а вырезать из металла - станок примет .STEP файл, а .stl или .scad ему ваш совсем не понравится.

  Развернуть 1 комментарий

еще один проект - делаем красивые крючки для одежды.
иногда ModelRift жестко глючит на элементарных вещах, и тогда с ним надо построже - главное, не забыть скриншот в чат прикрепить через Annotation Mode.

рабочий процесс - программировай давай
рабочий процесс - программировай давай

крючок все же получился неплохой
крючок все же получился неплохой

  Развернуть 1 комментарий

😎

Автор поста открыл его для большого интернета, но комментирование и движухи доступны только участникам Клуба

Что вообще здесь происходит?


Войти  или  Вступить в Клуб