You are my design partner for an X1 Racing flying-car racer. Write ONE Python script for Blender 3.6 / 4.x that builds my own original, rule-legal X1 Racing machine as a game-ready 3D model.

INSPIRATION IMAGE
- I've attached an image to this message. Use it for the LOOK: body shape, canopy, proportions, surfaces, colours and overall feel.
- No image of my own? Attach x1_skyracer_inspiration.png from buildflyingcars.com/x1-skyracer/ instead.
- The image is inspiration, not a blueprint. The X1 Racing rules below decide every dimension, fan count and size. If the image and the rules disagree, the rules win, and tell me what you changed.

HOW TO START
1. First, describe what you see in the image in 5–8 short bullets (body shape, canopy, where the fans sit, wings or arms, colours, anything distinctive). Then ask me up to 3 quick questions about my style. Wait for my answers.
2. After I confirm, write the full script.

MY STYLE
- Anything to add or change from the image: [e.g. "sharper nose, matte grey with orange stripes" — or "just follow the image"]
- Name for my machine: [name]
- Use original designs only: no real brand logos, wordmarks or copyrighted characters, even if they appear in the image.

X1 RACING RULES THE MODEL MUST MEET (rule book: x1racing.com/rule-book)
- Overall size in flight: span tip to tip ≤ 15.5 ft (186 in / 4.724 m), length ≤ 18 ft (216 in / 5.486 m), height ≤ 9.2 ft (110.4 in / 2.804 m).
- Transport: the machine must fold to fit a hauler box 90 in wide × 216 in long × 53 in tall (2.286 × 5.486 × 1.346 m). Model the folding with hinge empties and a "Fold" animation (frame 1 = flight, frame 60 = stowed).
- Lift: exactly 4 ducted lift-fan locations, each with a coaxial counter-rotating pair = 8 lift fans. Lift duct inner diameter ≤ 44 in, measured at the fan plane. If a duct rotates with its fan (blade-tip rim), its outer diameter ≤ 45 in.
- Forward flight: exactly 2 ducted forward-flight fans, duct inner diameter ≤ 36 in.
- Cockpit: two side-by-side bare-frame seats. No one is aboard during races (the seats are for demos and certification). The front seats must carry 500 lb of ballast in total (250 lb each); ballast may be traded for instrumentation.
- Powertrain: series hybrid — combustion generator charges a ≤ 10 kWh accumulator that powers electric fans. Show a generator/engine bay and an accumulator block, both fully inside the fuselage skin (nothing hanging below the belly).
- Fuel: propane only for racing, 200 lb max onboard. Tanks need ≥ 223 L total water capacity (200 lb ÷ 0.508 kg/L ÷ 80 % fill). Tanks are pressure vessels: cylinders or capsules, single or multiple.
- Weight: max recommended takeoff weight 3,500 lb, ready to race: no pilot, full 200 lb propane and full 500 lb ballast. About 2,500 lb dry.

MODEL REQUIREMENTS
- Build everything procedurally in the script (no external files). Real scale in metres. Nose points −Y, Z up, origin on the ground under the centre.
- Every lift rotor, forward fan and wheel is its own object with its origin on its spin axis (spin about local Z) so a game can animate it.
- Separate named parts (body, canopy, seats, wings/arms, ducts, rotors, fans, tanks, wheels), parented to one root empty.
- Simple materials with a livery in my colours; dark tinted canopy glass.
- Engine space (not a rule, just packaging): leave room for the generator. Put a placeholder box named Engine_Bay, about 52 in long × 38 in wide × 18 in tall (1.32 × 0.97 × 0.46 m), inside the fuselage. It only has to fit inside the body without overlapping the seats, fuel tanks or accumulator.
- Hidden collision proxies named COL_*, plus empties for a driver-eye camera and a chase camera.
- Export a .glb and save a .blend to ~/X1_SkyRacer.
- The script must print a RULE CHECK that measures the built geometry (span, length, height, stowed width/height/length, lift and forward duct inner diameters, fan counts, tank litres) against the limits above and marks each OK or OVER. Fix anything that's OVER before you hand me the script. Also report whether the Engine_Bay box fits inside the body.

FLIGHT MODEL (written by the same script, next to the .glb)
- From the geometry the script just built, write a JSBSim flight model: jsbsim/aircraft/<Name>/<Name>.xml. JSBSim is the open-source flight dynamics engine used by simulators such as PteroSim (https://pterolabs.ai) with PX4 or ArduPilot. Use only the Python standard library (xml.etree), no extra installs.
- Mass: a table of items (lb and where each one sits in MY model): generator, 10 kWh accumulator, 4 lift units, 2 forward fans, wings or arms, fuselage + seats + canopy, wheels, about 2,500 lb dry in total. Compute the CG and the inertias (Ixx, Iyy, Izz, Ixz) from it. Add 200 lb of propane split across my tanks at their modelled positions. Races run with no one aboard but with the full ballast, so load it by default: add the ballast as two JSBSim <pointmass> entries, one per front seat at the ballast CG (about 0.28 m above each cushion), 250 lb each, adjustable through inertia/pointmass-weight-lbs[0] and [1].
- Thrust: 8 lift fans at their modelled hub positions pushing straight up in the body frame, and 2 forward fans pushing forward. One 0–1 command per fan (fcs/rotor<N>-cmd-norm), demanded thrust = hardware max × command², 0.15 s first-order spool-up lag. Treat each lift duct as ONE coaxial unit, not two independent fans: both fans push the same air through the same 44 in bore, so the duct's power follows momentum theory for one disk, P_duct = COAX_LOSS × T_duct^1.5 / (FM × sqrt(2ρA) × DUCT_GAIN^1.5). The upper fan carries 55 % of the duct thrust at torque balance; the lower fan runs in its wake and needs more torque per pound (0.40 ft/lbf upper, 0.49 ft/lbf lower). Coaxial pairs spin opposite ways, and yaw comes from shifting torque between the upper and lower fan.
- Power and fuel: the generator burns propane at 60 % thermal efficiency (LHV 46.35 MJ/kg) and gives 1,500 hp continuous; burst to 2,000 hp comes from the 10 kWh accumulator (recharged from generator surplus, 2 kWh held back for the power-off landing). Drain the tanks as the generator runs (fuel flow = generator power / (0.60 × LHV)), so weight and CG change; when the propane runs out, only the accumulator is left. Each step, add up the power the 4 ducts and 2 pushers ask for (pusher power = T × (V + v_i) / 0.75 with v_i from momentum theory); if it exceeds what's available, scale the lift thrust down first and give the pushers what's left. Named constants at the top of the script: P_CONT_HP 1500, P_BURST_HP 2000, FM 0.75, DUCT_GAIN 1.13, COAX_LOSS 1.12, COAX_UPPER_SHARE 0.55, hardware caps 1,000 lbf per lift fan and 600 lbf per forward fan, drag area CdA 1.8 m². Wing lift uses my wings' actual area, with lift and drag tables valid through ±180° angle of attack (it hovers and flies sideways).
- Ground contacts: one per wheel at its modelled position, plus structure contacts at the nose, tail and the bottom of each duct.
- Frames: the Blender model is metres with nose at −Y, +X = craft left, +Z up. The JSBSim structural frame is inches with +X aft, +Y right, +Z up: X_s = 39.37·y, Y_s = −39.37·x, Z_s = 39.37·z. Use that conversion everywhere.
- Also write <Name>_manifest.json: rotor index ↔ Blender object name, spin direction, hub position in both frames, max thrust, the mass table, CG and inertias.
- The script must print a FLIGHT CHECK for two cases, race weight (full fuel + 500 lb ballast) and ballast removed: weight (and margin to the 3,500 lb recommended max takeoff weight), CG position, the centre of the 4 lift ducts and how far the CG sits from it, the hover thrust each duct (and each upper/lower fan) needs to balance the craft in pitch and roll, hover power, and the power-limited max lift and thrust-to-weight on 1,500 hp continuous and 2,000 hp burst, and propane endurance at full continuous power and in a hover. Races run 22–44 min plus a lap on at most 200 lb of propane, so managing energy is part of racing: report the average power the fuel can sustain for a 44 min race plus one lap, and mark WARN only if hovering alone needs more than that. Mark WARN if hover needs more than 80 % of continuous power, if any fan needs more than 80 % of its hardware cap to hover, or the CG sits outside the rectangle of the 4 duct centres.

When you're done, list what you took from the image and anything you changed to meet the rules, tell me how to run it (Blender → Scripting → paste → Run Script), list the rule-check and flight-check results, and tell me how to load the flight model in JSBSim.
