Guide

Using AeroSculpt

AeroSculpt has three wind tunnels; pick one with the switch at the top of the workspace, and change it whenever you like.

TunnelSpeedsUse it for
RC2–60 m/sAnything whose propeller matters: drag in the slipstream, thrust, power, top speed. Guide
Generalto Mach 1.2Rockets, UAV fuselages, pods and fairings: drag across the envelope and shape optimization.
SupersonicMach 1.2–12Rockets, missiles, re-entry bodies: wave and base drag, heating, wall temperature against material limits. Guide

Above each body's critical Mach number (typically 0.7–0.85) the General tunnel's drag is a transonic estimate that joins the Supersonic tunnel at Mach 1.2 (see compressibility). The steps below are those of the General tunnel; the RC and Supersonic tunnels add their own. Contents: 1 Model · 2 Protect · 3 Flight envelope · 4 Simulate · 5 Optimize · templates (named dimensions) · rockets · fixed-wing UAVs · RC tunnel · Supersonic tunnel · accuracy tools · cars · CAD and Fusion · structure and mission · reports and exports · teams · desktop app · physics · safety · limits · API

1. Model

2. Protect

Regions tell the optimizer what it must respect. Each is a box or a cylinder (a cylinder runs along the flow axis until you turn it), with its centre and size in your model's own units. Add one and click the model to place it. Then shape it in the 3D view: drag the handles to Move (W), Turn (E) or Resize (R) it — the centre handle of Resize scales evenly, and Snap (or holding Shift) steps turns by 15° and sizes by 5 %. Click any region in the view to select it. The card on the left shows the same numbers, including the turn as roll, pitch and yaw about the airframe's axes, and you can type them exactly.

RegionEffectTypical use
ProtectGeometry inside never moves; the change fades out smoothly around it so the surface never tears.Screw holes, mounting faces, fins, rail buttons, camera windows, couplers
Keep insideThe volume must stay enclosed by the body. Shapes that would cut into it are rejected before any CFD is spent.Payload bay, battery, motor tube, avionics sled
Design onlyIf any exist, only geometry inside them may change.Optimize just a nose cone, a pod or a fairing

Volume limits (in step 5) add a global constraint on top: keep at least, and at most, a given share of the original volume.

3. Flight envelope

Instead of a single condition, you give an airspeed range and an angle-of-attack range, each with a number of points. Every result — and every optimization — covers all combinations.

4. Simulate

FidelityTunnel cellsTime / run (GPU)Time / run (CPU)Credits / runUse it for
Draft300,000≈ 3 s≈ 20 s1Exploration, long optimizations
Standard1,000,000≈ 10 s≈ 1.5 min3Design decisions
High2,500,000≈ 25 s≈ 5 min8Final numbers, thin wings and fins

The tunnel runs on an NVIDIA GPU when the server has one (measured on a laptop GTX 1650 Ti: about 400 million lattice updates a second, twelve times the 6-core CPU) and falls back to the CPU otherwise; both give the same answer to within 0.2 %. A run is one angle of attack; later angles warm-start from the flow of the previous one and finish sooner. The workspace shows the time measured on the server you are using.

Results include the drag polar (Cd against angle at each speed), lift curve and its slope CLα, L/D and where it peaks, pitching moment and its slope Cmα (negative means statically stable about the body centre), drag and power at every speed, a pressure/friction breakdown, and surface pressure, streamlines and slices at every angle. Use the α and V selectors at the bottom of the 3D view to move between conditions.

5. Optimize

Choose a goal and how hard to search (Quick, Balanced or Thorough), then press Optimize. By default AeroSculpt decides what to change: every whole-body change your plan allows (nose, tail, cross-section, length, camber, edges) plus new geometry it designs itself — a boat-tail, a rounded front, a rear slant, a rear diffuser angle. It keeps only what the wind tunnel confirms, then designs new ideas on the improved shape and tests those, round after round, until a round finds nothing more. Protected regions and your limits always hold. Under Show advanced options you can instead pick the changes yourself, add shape features, set the exact budget and the volume and size limits.

Every design is scored against your original at every (angle, speed) condition, so the winner is better across the envelope, not just at one point. Each round spends its runs in four steps:

  1. Measure the error. The original is re-run shifted by part of a grid cell. The scatter is the solver's run-to-run error for this body on this grid; a change is only accepted when it beats twice that (or 0.2–0.4% for the deterministic models).
  2. Screen. Each free parameter is moved once by a quarter of its range, each alternative profile is tried once, and the parameters are ranked by their effect. You see the ranking with the error line drawn on it. Only the top few (your choice) with a real effect go on.
  3. Search. A Gaussian-process model of the objective chooses each next design by expected improvement. It stops at the budget, or when several designs in a row bring no gain larger than the error.
  4. Confirm. The best candidates and the original are re-run one level up — CFD bodies explore on a coarser grid and confirm at the fidelity you chose (a body too small for the coarser grid explores at your fidelity and confirms one level finer, at no extra credits); wings explore on a coarse wing model and confirm at full resolution. Each candidate is also re-run at both grid shifts of the error probe and must win at every one: a shape that only wins where the grid happens to fall is exploiting the grid, not the air. If the gain does not survive by more than the error, the result says no reliable improvement and keeps your original.

Every candidate is checked before it costs a run: your size and wall limits, the volume range, keep-inside and protected regions, a watertight surface with no part passing through itself, and for winged designs stall and stability. Identical cases are never run twice (results are cached by a hash of the geometry and settings), and each run starts from the previous flow field. Runs are not spread over several processes at once: one run already uses every processor core.

GoalScores each design by
Minimize drag across the envelopeaverage of drag ÷ original drag over all conditions
Best lift-to-drag ratio (L/D)the highest L/D anywhere in the envelope — indicative
Lowest drag, keeping the liftaverage drag ratio, penalised wherever lift falls below the original — indicative

An optimizer finds whatever the solver rewards. The tunnel's lift still reads low on thin wings (see the validation page), so the lift-based goals are marked indicative: use them to compare designs, not to size a wing from the lift numbers. Lift needs two or more angles of attack — at a single angle a body may make almost no lift. Results show lift against drag (the drag polar, one point per angle) and lift and drag force against airspeed.

AspectWhat changes
Nose / forebodyCross-section of the front third, sharper or fuller
Tail / aft-bodyBoat-tail taper of the rear third (base drag)
Cross-sectionMid-body width and height independently
Length / finenessOverall stretch along the flow
CamberNose droop and tail upsweep (for bodies at incidence)
Edge fairingRounds sharp edges by smoothing the surface

On an uploaded mesh the parameters are these whole-body controls. Hold the wing (planform) area stops the optimizer from winning by shrinking a wing. Continue from this design starts a new project from the winner for another round.

When the grid is too coarse. On slender bodies the draft grid can put only a few cells across the body, and the measured error (±3–7%) can be larger than what nose or tail changes achieve. The optimizer then reports no reliable improvement rather than a number made of noise; raise the fidelity, or optimize noses in the Supersonic tunnel.

Shape features

Shape features edit any model the way a CAD timeline does: a list of named operations applied in order, each with its own dimensions. Open Shape features in the workspace and pick one; features you place with a click start sized to the model where you clicked.

FeatureWhat it does
Nose coneA new nose (conical, ogive, elliptical, power-law or von Kármán) on the front of the body; on a pointed nose it starts at the shoulder and covers the old one.
Tail coneA boat-tail or cone from the body's rear section, smooth or conical, to any end diameter.
Fairing over a partEncloses everything inside its box (a motor, a camera, bolt heads, landing gear) in one streamlined shell with a nose and tail you can lengthen.
Pod / nacelleA body of revolution: payload pod, motor nacelle, tank or sensor pod.
Wing / tail surfaceA NACA 4- or 5-digit lifting surface from its root leading edge: span, chords, sweep, dihedral, twist and incidence. One side and a 90° roll makes a fin.
Fin set2–6 flat fins around the body axis.
Slant cutCuts the body along a plane and closes it flat: an upswept tail, a chamfered nose, a wedge. The cut starts square to the surface where you click; tilt, heading and depth set it.
Adjust a wingReshapes a wing that is part of your upload: span, chord, thickness, sweep and dihedral, with the root kept attached to the fuselage.
Move / scale a partMoves, scales or turns whatever lies inside its box, fading the change into the surrounding surface.

Drag a feature's box or marker in the 3D view with the same Move, Turn and Resize tools as protected regions. Each dimension has a lock and an optimizer range: unlock one (a fairing's tail length, a cut's depth, a wing's span) and the optimizer screens and searches it with everything else. Added parts merge with the body in the tunnel, and surfaces buried inside another part never count as wetted area. Every result is checked to be watertight and free of self-intersections before it is simulated. The UAV and wing templates use the wing model rather than the CFD, so shape features are not available on them.

Generative design ideas

Generate design ideas proposes new geometry for the body you uploaded: a boat-tail that continues the body's own rear section and tapers it, a rounded front when the front is blunt, and rear slant and diffuser angles. Each idea is optional: the optimizer first measures the original, then the design with each idea added, keeps every idea that beats the solver's measured error (adding them one at a time), and only then searches the kept ideas' dimensions. When nothing clears the error, the result still shows the most promising design, labelled unconfirmed, so you can look at it, download it and check it at higher fidelity.

Ideas are judged by paired comparisons: each one is simulated at its normal position and shifted by part of a grid cell, against the original at the same shift. Moving the whole body moves both drags together, so the error that matters is how well those two comparisons agree. When a body is under about 12 cells across on the exploration grid, exploration moves to the grid you chose (on a GPU).

An optional AI design assistant can choose and size the ideas from a sentence you write. It uses any OpenAI-compatible model — a free one running on the server with Ollama, or a hosted free tier — set by AI_BASE_URL, AI_MODEL and AI_API_KEY. It never writes geometry: its choices are built by the same code and tested by the same CFD.

Visual meshes: make a solid copy

Models made for rendering (cars and aircraft from asset sites, game exports) are open panels with gaps: thousands of pieces, windows as single sheets. Air leaks through them in the tunnel, drag jumps from run to run and no change can be trusted. The Model section flags such files and offers Make a solid copy: the panels are wrapped like shrink film (seams and holes narrower than a few grid cells are closed, the inside is filled) into one watertight body, as a new project with the same settings. If the file's units are unusual, choose Set the real length and type the real overall length.

Templates: named dimensions

Instead of uploading a mesh you can start from a rocket, fixed-wing UAV or wing template on the Projects page. Every dimension is a parameter with a unit, a slider, a number box, an optimizer range and a lock; moving one rebuilds the geometry in milliseconds without simulating anything. The optimizer changes the real dimensions and the result is a list of them, not just a mesh.

GroupParameters
NoseProfile (conical, tangent ogive, elliptical, power law with its exponent, von Kármán / Haack with C), length, tip radius (a sphere tangent to the profile). Fineness ratio is shown.
Body / tailLength, maximum diameter, boat-tail or taper length, base-to-body diameter
WingSpan, root and tip chord, leading-edge sweep, NACA 4-digit (camber, its position, thickness) or 5-digit (design lift coefficient, camber position, thickness) section, dihedral, twist, incidence, position along and up the body
Tail surfaces, finsSpans, chords, position, incidence; fin count, chords, span, sweep and thickness (locked by default)

The NACA formulas take any value, so the optimizer can settle on 2.3% camber at 38% and 10.4% thickness; the result names the nearest catalogue section (“≈ NACA 2410”). Which section is “most efficient” depends on the lift you need, which is why wings are optimized for drag at fixed lift: give the flight mass (or the original design’s lift is kept) and each design flies at the angle that carries it. The thinnest symmetric section has the least drag at zero lift but is no use for flying, and a smaller wing only wins if it can still carry the load without stalling.

How wings are scored. The 3D CFD cannot rank airfoils — good sections differ by a few thousandths in drag — and its thin-wing lift is not validated, so winged templates use the wing model: a vortex lattice for lift and induced drag, NeuralFoil for each strip’s section drag at its own lift and Reynolds number, and Hoerner’s method for the fuselage. A design takes about a second, so large budgets cost almost nothing. Stall (any strip above 92% of its section’s maximum lift) and stability (the neutral point may move at most 5% of the mean chord) are checked on every design. Not modelled: propeller slipstream on the wing, pitch trim, structure — set a minimum wall thickness for the thinnest section you can build.

Noses. At supersonic speed the nose profile matters: the Supersonic tunnel marches second-order shock-expansion theory along each meridian, validated on cones and ogives. Subsonic, nose shape changes little as long as the flow stays attached, so the UAV template locks its nose profile by default.

Rockets: from a kit to a flight, step by step

Rocket projects carry a flight model beside the wind tunnels: the component drag build-up, Barrowman stability, fin flutter and a flight simulation with your motor, on a launch rail, in wind. It runs in milliseconds, so the Flight tab updates as you move a slider.

  1. Start from the Rocket template on the Projects page, or drop an OpenRocket (.ork) or RockSim (.rkt) file: its nose, body, boat-tail, fins, launch lug, part masses, parachute and motor are read in (anything that could not be reproduced is listed on the Flight tab).
  2. Design parameters: nose profile and length, body, boat-tail, fin shape (trapezoidal / swept / elliptical), fin count 3–6, fin position. Lock what your kit fixes; unlock what you are free to change.
  3. Rocket flight: pick Imperial if you think in inches and feet. Masses either estimated from the geometry and typical materials (the optimizer then pays for every gram it adds), measured (dry mass and balance point) or part by part. Choose the motor from the built-in list (approximate curves shaped to the published impulse), upload the manufacturer's .eng / .rse file, or search ThrustCurve.org for the certified curve. Set the rail length, launch angle, wind, site elevation and the parachute.
  4. Read the Flight tab: the verdict first (ready to fly, or what fails), then apogee, top speed and Mach, the static margin at liftoff and at top speed (CP and CG drawn on the rocket; aim for 1–2 calibres), speed off the rail (about 15 m/s / 50 ft/s or more), the optimal ejection delay and the nearest delay the motor offers, fin flutter speed against top speed, descent time and drift. Altitude and speed over time, the drag curve by part, and every mass are below.
  5. Optimize with the goal Highest apogee: every design is flown on your motor and must keep the static margin, pass the flutter check and leave the rail fast enough before it is scored. Lowest drag (rocket drag model) works the same on the drag build-up. Lowest drag (CFD) compares shapes in the wind tunnel and still checks stability and flutter.
  6. Compare with a real flight: upload the altimeter's CSV (time, altitude in m or ft) and it is drawn over the simulated altitude.
  7. Build and fly safely. This is a simulation. Fly within the NAR and Tripoli safety codes and your local rules: certified motors, a rail or rod, a recovery system, a clear range, no flights into wind above the code's limit. The simulation does not replace a swing test, a range safety officer or the motor manufacturer's recommendations. See safety and limits.

Accuracy. The drag build-up follows Hoerner, Barrowman and the OpenRocket documentation; for a typical 3-fin kit it gives Cd ≈ 0.6 against Gregorek's measured 0.45–0.75, and the Estes Alpha III on a C6-5 comes out within a few per cent of the published altitude. Stability and the integrator match their references to a few per cent (validation). Built-in motor curves are approximate: use the certified file for the real thing. Not modelled: a 6-degree-of-freedom flight (the rocket is assumed to weathercock perfectly into the relative wind), base-drag reduction while the motor burns, spin, clusters and stages, fins on a transition, and body lift at large angles.

Fixed-wing UAVs

RC tunnel: propellers

The General tunnel plus spinning propellers. Each propeller is described the way it is sold — blade family, diameter and pitch in inches, blade count (2–6), rpm and rotation — and placed where it will really be.

Supersonic tunnel: shock, heat and materials

Above Mach 1.2 the flow is computed face by face on your mesh with the engineering methods used for conceptual supersonic and hypersonic design (the S/HABP family), so a whole sweep takes seconds.

WhereMethod
Windward faces of bodiesTangent cone (exact Taylor–Maccoll conical flow)
Windward faces of plate-like parts (wings, fins)Tangent wedge (exact oblique shock)
Blunt noses and faces past shock detachmentModified Newtonian, Cp = Cp,max sin²θ
Leeward facesPrandtl–Meyer expansion, floored at the separated (base) pressure
BaseEmpirical base pressure Cp,b = −0.25/M
Skin friction and heatingEckert reference temperature with each face's running length; laminar, turbulent or transition at a Reynolds number you set
Nose stagnation heatingFay–Riddell, distributed over the nose cap with the local pressure (Lees)
Wall temperatureRadiative equilibrium with the material's emissivity, or a fixed wall temperature

Accuracy tools

Wall model. A grid can carry a limited Reynolds number, so on its own it grows thick, laminar-like boundary layers that separate too early. When the flight boundary layer is turbulent (Reynolds number above 5×105), every wall cell slips tangentially by just enough that the shear the grid feels equals the log law of the wall at the flight Reynolds number (a wall-modelled LES). It is on automatically and costs nothing.

Refine near the body (Simulate step). After the normal run, a box around the body and its near wake is run again on a grid about twice as fine, its faces held at the first run's mean flow — a nested "zoom" grid. Forces come from the fine grid. It costs about 3× a run, where refining the whole tunnel twice as finely would cost about 16×. On the Ahmed car body it brings the drag from about 2× the measured value to within about 25%.

Check grid convergence (Simulate step). The design is also run on two coarser grids (2.2× fewer cells each, refinement ratio 1.3); from the three drag values the result shows the observed order of accuracy, the grid-independent (Richardson-extrapolated) value and the uncertainty on your grid as a Grid Convergence Index (Roache; procedure of Celik et al., 2008). When the values oscillate between grids, no extrapolation is shown and the band is conservative. About 1.6× the time; the coarse runs are billed at the exploration rate.

Confirmation on a different grid. The optimizer explores on one grid and confirms on another, re-running each candidate at two sub-cell shifts, so a shape that only wins through one grid's error is not reported.

Cars and ground vehicles

Turn on Rolling road in the flight envelope. The tunnel floor becomes a road moving with the air, as on a moving-belt wind tunnel, and the car sits level on it (only 0° is run). Detect wheels proposes a box around each wheel from the lowest points of the model — check and adjust them; wheels spin at road speed (rolling without slip) and are never reshaped. Keep at least 3 grid cells between the road and the underbody: below that the result warns, and Refine near the body doubles the resolution there. Not modelled: cooling flow through the radiator, and underbody detail the model does not have.

CAD exchange and Fusion

In: STL, OBJ, STEP and IGES. STEP/IGES are tessellated with the OpenCASCADE kernel (by curvature: fine on a nose radius, coarse on a flat side); the original file is kept beside the project. Out: a template design downloads as smooth STEP solids lofted through its own sections, which a CAD system can fillet, shell and dimension; any other design as a faceted STEP solid (exact to its triangles, up to 60,000), or STL.

Fusion. Template designs export a Fusion script that writes every dimension as a Fusion user parameter (named like the template's), so a parametric Fusion model built on the same names rebuilds to the optimized shape. When AeroSculpt runs on the same computer as Fusion (the desktop app, or a local preview) and the FusionMCPBridge add-in is running, Send dimensions to Fusion and Import into Fusion do it directly; this is never available on a public server.

Structure and mission (winged designs)

Every wing design the optimizer considers gets a spar: two caps at the airfoil's depth sized for load factor × 1.5 × the weight (strength), then grown until the tip bends no more than the allowed fraction of the semi-span at limit load (stiffness). A wing too thin to hold the caps is rejected, so the optimizer can no longer return a wing that would break. Set the material, load factor and stiffness under Optimize → Structure. The results plot drag against structure mass for every design; the front of that cloud is the trade-off, and any point opens as a new project.

Mission. From the drag polar at the flight weight: stall speed, best-endurance and best-range speeds, endurance and range from your battery (Wh, usable fraction, propulsion efficiency) and the rate of climb from the motor's power. A design optimized for cruise drag often stalls faster and flies shorter — the mission table shows it.

Reports, exports and comparing runs

Every finished run downloads as a PDF engineering report (setup, grid, conditions, forces, polars, convergence, flow slices, geometry, how the optimizer spent its runs, structure, mission, and the methods with the solver's measured accuracy), as flow fields for ParaView (VTK: the mean velocity, pressure and Q-criterion on a grid, and the body with its surface pressure), and as STEP. The 3D view shows vortex surfaces (Q-criterion) beside streamlines and slices. In the Runs tab, tick two runs and Compare them condition by condition.

Teams and single sign-on

On Pro, create a team under Account and invite colleagues by email (someone without an account joins when they first sign in). Share a project from its Model step. Roles: viewer opens results and downloads reports; editor also changes the design and runs jobs (billed to whoever starts them); admin manages members and reads the team's audit trail (who shared, ran, invited or changed what, and when); owner can do everything. A server can offer single sign-on through any OpenID Connect provider (Okta, Microsoft Entra ID, Google Workspace, Auth0, Keycloak): set OIDC_ISSUER, OIDC_CLIENT_ID, OIDC_CLIENT_SECRET and optionally OIDC_ALLOWED_DOMAINS; the provider's ID token is verified before any account is touched.

Desktop app

AeroSculpt also runs as a desktop app on your own computer: AeroSculpt.exe (or python desktop.py) starts it privately on 127.0.0.1 with no sign-in, keeps projects in your user folder, simulates on your NVIDIA graphics card (or the CPU) and opens it in your browser. Nothing leaves the computer unless you ask (motor search, update check), which suits CAD that cannot be uploaded. The app only answers to localhost and opens through a launch link with a one-time token, so no website you visit can drive it. Without a licence key it runs the free desktop tier; a Pro key from your account page unlocks the rest (checked offline, with a 30-day grace period after it expires). The GPU pack (CUDA runtime) is a separate download for NVIDIA cards; STEP/IGES import needs gmsh, which is GPL and not bundled. Build it with python scripts/build_desktop.py --gpu-pack --installer; AeroSculpt.exe --check says what the computer can use; Account → Desktop app saves a diagnostic bundle and checks for updates.

How the solver works

AeroSculpt builds a uniform voxel wind tunnel sized to the body (about 1.5 near-field lengths upstream and to the sides, 4 downstream, with absorbing sponge layers; flat airframes are sized by their mean chord) and runs a 3D lattice-Boltzmann large-eddy simulation: D3Q19 lattice, regularized collision, Smagorinsky sub-grid model and bulk-viscosity acoustic damping. Walls use interpolated (Bouzidi) bounce-back on the true triangle surface, so forces change smoothly with shape. Forces come from momentum exchange with a blockage correction, and each run continues until the windowed mean drag coefficient moves by less than 1%. Runs at the same angle warm-start from each other's flow.

Two regimes. Where the grid resolves the flight Reynolds number the simulated force is used directly. Above that the tunnel runs at the highest Reynolds number the grid supports: pressure drag, lift and moments come from the simulation, while skin friction is re-scaled to flight conditions with the Prandtl–Schlichting flat-plate law. See validation for accuracy.

Safety, responsibility and export control

AeroSculpt is an engineering estimate, not a certification. Rocketry carries real risk: follow the NAR / Tripoli safety codes (or your national association's), use certified motors, and have a range safety officer decide what flies. Vehicles you build from these results are your responsibility. The methods implemented here are published, public-domain engineering methods (Hoerner, Barrowman, NACA reports, textbook gas dynamics); users remain responsible for complying with the export-control and other laws that apply to their own projects and the data they upload.

Limitations

REST API (Pro)

Create a key under Account and send it as a bearer token. All endpoints return JSON.

# upload a model (STL or OBJ bytes)
curl -X POST "$HOST/api/projects?filename=uav.stl&name=UAV" \
  -H "Authorization: Bearer $KEY" --data-binary @uav.stl

# sweep and optimize
curl -X POST "$HOST/api/projects/$PROJECT/jobs" -H "Authorization: Bearer $KEY" \
  -H "Content-Type: application/json" -d '{
    "kind": "optimize", "fidelity": "standard", "units": "mm", "forward": "-x", "up": "+z",
    "envelope": {"speed_min": 15, "speed_max": 30, "speed_count": 4, "aoa_min": -2, "aoa_max": 8,
                 "aoa_count": 5, "altitude": 500, "yaw": 0, "ref_area": 0.42},
    "zones": [{"type": "keep", "shape": "box", "center": [320, 0, 10], "size": [180, 90, 70], "name": "payload"}],
    "optimize": {"objective": "drag", "aspects": ["nose", "tail", "fairing"], "iterations": 20,
                 "max_change": 0.25, "min_volume": 0.95, "max_volume": 1.5, "verify": "high"}}'

# poll, then download the optimized geometry
curl "$HOST/api/jobs/$JOB" -H "Authorization: Bearer $KEY"
curl -o optimized.stl "$HOST/api/jobs/$JOB/files/optimized.stl" -H "Authorization: Bearer $KEY"

Other files per job: result.json (polars for every angle and speed), history.json, fields_baseline_N.json / fields_best_N.json (flow fields per simulated angle) and baseline_body.stl / best_body.stl. Exports: /api/jobs/$JOB/export/pdf (report), /export/step, /export/vtk (zip) and /export/fusion-script; POST /api/jobs/$JOB/mission recomputes the mission with {"battery_wh", "usable", "efficiency", "motor_w", "mass_kg"}; POST /api/projects/$PROJECT/estimate takes a job body and returns how long it would take; analyses accept "grid_study": true and "refine": true.

Python client and command line. aerosculpt_client.py is one file with no dependencies: python aerosculpt_client.py upload wing.step --units mm, analyze PROJECT --grid-study --wait, optimize PROJECT --effort balanced --wait, download JOB pdf report.pdf, compare JOB_A JOB_B and sweep PROJECT --param wing_span=2.0,2.4,2.8 for batch studies. Set AEROSCULPT_URL and AEROSCULPT_KEY.