THE MACHINE · IN THE OPEN · FROM THE WITNESSED RUN OF 2026-10-09
mars.py, every command showing its working.
A small Python program, standard library only. Your AI runs it; you can too. Every block below is pasted from the card’s own WITNESS.md, as printed.
windows | next Earth-to-Mars Hohmann departure windows (circular, coplanar orbits) |
|---|
hohmann | transfer time, departure and arrival v-infinity, C3 |
|---|
tmi | delta-v from a circular low Earth orbit to the transfer; capture at Mars |
|---|
rocket | the rocket equation forward; with --need, the payload it allows, or (with --payload) the propellant it takes; or stages |
|---|
refill | the full tank, as first asked |
|---|
fleet | tons per window, windows and years to a target tonnage |
|---|
cost | cost per ton to Mars from your inputs only, in your currency |
|---|
crew | oxygen, water and food (NASA planning values, overridable) |
|---|
solar | sunlight at Mars, panel area for a power need, the sol |
|---|
light | one-way light time Earth-Mars on a date, and the extremes |
|---|
radiation | dose from Curiosity's measurements against NASA's career limit |
|---|
gravity | surface gravity, escape speed, weight on Mars |
|---|
selftest | 32 checks that prove the machine; it must print 32/32 |
|---|
windows · NEXT EARTH-TO-MARS HOHMANN DEPARTURE WINDOWS (CIRCULAR, COPLANAR ORBITS)
$ mars.py windows --from 2026-10-09 --count 4
Earth-to-Mars Hohmann departure windows after 2026-10-09 (approximate: circular, coplanar orbits):
1. depart about 2026-11-16, arrive about 2027-08-01 · the 2010 NASA handbook puts minimum-energy launches for this window at 2026-10-31 (C3 9.14) to 2026-11-14 (C3 11.11)
2. depart about 2029-01-04, arrive about 2029-09-19 · the 2010 NASA handbook puts minimum-energy launches for this window at 2028-12-02 (C3 8.93) to 2028-12-10 (C3 9.05)
3. depart about 2031-02-22, arrive about 2031-11-08 · the 2010 NASA handbook puts minimum-energy launches for this window at 2031-01-28 (C3 8.24) to 2031-02-23 (C3 9.00)
4. depart about 2033-04-12, arrive about 2033-12-27 · the 2010 NASA handbook puts minimum-energy launches for this window at 2033-04-06 (C3 7.78) to 2033-04-28 (C3 8.41)
Mars must lead the Earth by 44.3° at departure; the windows repeat every synodic period of 779.94 days (25.6 months, 2.14 years).
formula: phase θ = 180° − n_Mars·t_H; window when (L_Mars − L_Earth) mod 360° = θ; synodic S = 360° / (n_Earth − n_Mars)
source: JPL Solar System Dynamics, Approximate Positions of the Planets, Table 1 (1800-2050 AD) (J2000 mean longitudes and mean motions); NASA/TM-2010-216764 (2010), Earth-to-Mars Mission Opportunities 2026 to 2045, Tables 2-5 for the real minimum-energy dates
limit: circular, coplanar orbits: a real window is read from porkchop plots of the true orbits and differs by weeks; Mars's eccentric orbit makes some windows cost far more than others; launch periods run several weeks around the best day.
hohmann · TRANSFER TIME, DEPARTURE AND ARRIVAL V-INFINITY, C3
$ mars.py hohmann
minimum-energy (Hohmann) transfer, Earth's orbit to Mars's orbit:
- transfer orbit semi-major axis 1.2619 AU; time of flight 258.9 days (8.5 months)
- departure v∞ 2.94 km/s (C3 = v∞² = 8.67 km²/s²); arrival v∞ 2.65 km/s
- the Earth moves at 29.78 km/s around the Sun, Mars at 24.13 km/s
formula: t = π·√(a³/μ☉), a = (r₁+r₂)/2; v∞ = √(μ☉(2/r − 1/a)) − √(μ☉/r)
source: μ☉ = 1.32712440018e20 m³/s² (IAU/JPL); orbit sizes from JPL Solar System Dynamics, Approximate Positions of the Planets, Table 1 (1800-2050 AD)
limit: circular, coplanar orbits at the mean distances; real minimum C3 runs from about 7.8 to 11.1 km²/s² across 2026-2033 (NASA/TM-2010-216764 (2010), Earth-to-Mars Mission Opportunities 2026 to 2045, Tables 2-5); faster trips cost more Δv.
tmi · DELTA-V FROM A CIRCULAR LOW EARTH ORBIT TO THE TRANSFER; CAPTURE AT MARS
$ mars.py tmi --leo 400
leaving a circular 400 km Earth orbit onto the Hohmann transfer (v∞ 2.94 km/s):
- orbit speed 7.67 km/s; speed needed at the burn 11.24 km/s; Δv 3.57 km/s (trans-Mars injection)
arriving at Mars (v∞ 2.65 km/s):
- capture by engine into a circular 300 km orbit: Δv 2.09 km/s
- capture by engine into a loose ellipse (300 km by about 33,804 km, one sol per lap): Δv 0.90 km/s
- straight into the atmosphere: about 5.6 km/s at 125 km up
What the air changes: entry, aerocapture or aerobraking lets drag remove most of the arrival speed, so the capture Δv above is mostly not burned; the cost moves into the heat shield's mass, and the last part of a landing still needs parachutes or engines (Mars's air is about 0.6% as thick as the Earth's at the surface).
formula: Oberth: Δv = √(v∞² + 2μ/r) − √(μ/r); ellipse speed at periapsis √(μ(2/r − 1/a))
source: μ⊕ = 3.986004418e14 m³/s², R⊕ = 6,378.137 km (WGS 84); μ♂ = 4.282837e13 m³/s², R♂ = 3,396.2 km, surface pressure 6.36 mb (NASA Mars Fact Sheet (NSSDCA, read 2026-10-09))
limit: one impulsive burn, no gravity or steering losses, no plane change; the departure v∞ is the circular-orbit Hohmann value (the real one changes with each window).
light · ONE-WAY LIGHT TIME EARTH-MARS ON A DATE, AND THE EXTREMES
$ mars.py light --date 2026-10-09
on 2026-10-09 the Earth and Mars are about 1.606 AU apart (240.2 million km): light takes 13.4 minutes one way, 26.7 there and back.
Mars is 70° from the Sun as seen from the Earth.
the range: about 3.0 minutes at the closest (54.6 million km) to 22.3 minutes at the farthest (401.4 million km); circular orbits alone would give 4.4 to 21.0.
what it means: nothing on Mars can be driven by joystick from the Earth. Rovers carry out a day's plan and steer around rocks themselves; a crew must handle an emergency alone, because help is at least 6 minutes away there and back.
formula: t = d / c, d = |r_Mars − r_Earth| from Keplerian orbits on the date
source: JPL Solar System Dynamics, Approximate Positions of the Planets, Table 1 (1800-2050 AD); c exact; extremes from NASA Mars Fact Sheet (NSSDCA, read 2026-10-09)
limit: mean elements: good to about 50,000 km of distance, a fraction of a second of light time; the Earth is taken at the Earth-Moon barycentre; relays and processing add time.
light · ONE-WAY LIGHT TIME EARTH-MARS ON A DATE, AND THE EXTREMES
$ mars.py light --date 2026-01-09
on 2026-01-09 the Earth and Mars are about 2.404 AU apart (359.6 million km): light takes 20.0 minutes one way, 40.0 there and back.
Mars is 1° from the Sun as seen from the Earth. Near solar conjunction the Sun blocks and scrambles radio; missions pause most commanding for about two weeks.
the range: about 3.0 minutes at the closest (54.6 million km) to 22.3 minutes at the farthest (401.4 million km); circular orbits alone would give 4.4 to 21.0.
what it means: nothing on Mars can be driven by joystick from the Earth. Rovers carry out a day's plan and steer around rocks themselves; a crew must handle an emergency alone, because help is at least 6 minutes away there and back.
formula: t = d / c, d = |r_Mars − r_Earth| from Keplerian orbits on the date
source: JPL Solar System Dynamics, Approximate Positions of the Planets, Table 1 (1800-2050 AD); c exact; extremes from NASA Mars Fact Sheet (NSSDCA, read 2026-10-09)
limit: mean elements: good to about 50,000 km of distance, a fraction of a second of light time; the Earth is taken at the Earth-Moon barycentre; relays and processing add time.
gravity · SURFACE GRAVITY, ESCAPE SPEED, WEIGHT ON MARS
$ mars.py gravity --mass 80
surface gravity 3.71 m/s² at the equatorial radius (0.379 of the Earth's standard gravity); 3.73 at the mean radius
escape speed 5.03 km/s; circular orbit at 300 km 3.40 km/s
a mass of 80 kg weighs 297 N on Mars, as 30.3 kg would on the Earth; its mass does not change.
formula: g = GM/R², v_esc = √(2GM/R), v_orbit = √(GM/r), weight = m·g
source: GM = 0.042828 × 10⁶ km³/s², R = 3,396.2 km (equatorial) and 3,389.5 km (mean): NASA Mars Fact Sheet (NSSDCA, read 2026-10-09), which gives 3.73 m/s² mean, 3.69 at the equator with the spin included, escape 5.03 km/s
limit: a sphere with no spin, mountains or mass lumps; the long-term effect of 0.38 g on the human body is not known.
rocket · THE ROCKET EQUATION FORWARD; WITH --NEED, THE PAYLOAD IT ALLOWS, OR (WITH --PAYLOAD) THE
$ mars.py rocket --isp 380 --dry 120 --prop 1200 --payload 100
Δv 6,949 m/s (6.95 km/s): Isp 380 s, 1,420.0 t at the start, 220.0 t at burnout, mass ratio 6.455
for scale: low Earth orbit to the Mars transfer is about 3.6 km/s (`tmi`); the ground to low Earth orbit is roughly 9.4 km/s once gravity and drag losses are counted.
formula: Δv = Isp·g0·ln(m0 / mf)
source: Tsiolkovsky (1903); g0 = 9.80665 m/s² exact; about 9.4 km/s to low Earth orbit is the usual textbook figure with losses. The inputs are yours; any vehicle figure is an assumption (references/THE-ASSUMPTIONS.md)
limit: ideal: no gravity, drag or steering losses; the dry mass is whatever you call dry; vehicle figures are published targets that change, not facts.
rocket · THE ROCKET EQUATION FORWARD; WITH --NEED, THE PAYLOAD IT ALLOWS, OR (WITH --PAYLOAD) THE
$ mars.py rocket --isp 380 --dry 120 --prop 1200 --payload 100 --need 3.57
to get 3.57 km/s with Isp 380 s, 120.0 t dry and 100.0 t of payload, the mass ratio must be 2.606
propellant needed: 353.4 t — 29% of the 1,200.0 t tank
formula: propellant = (m_dry + payload) × (R − 1), R = e^(Δv / (Isp·g0))
source: Tsiolkovsky (1903); g0 = 9.80665 m/s² exact; about 9.4 km/s to low Earth orbit is the usual textbook figure with losses. The inputs are yours; any vehicle figure is an assumption (references/THE-ASSUMPTIONS.md)
limit: ideal: no gravity, drag or steering losses; the dry mass is whatever you call dry; vehicle figures are published targets that change, not facts.
refill · THE FULL TANK, AS FIRST ASKED
$ mars.py refill --tank 1200 --tanker 100 --loss 0.05
to put 1,200.0 t into a 1,200.0 t tank that already holds 0.0 t:
- each tanker brings 100.0 t; 5.0% is lost to boil-off and transfer, so 95.0 t arrives
- tanker flights: 13 (propellant lifted 1,300.0 t, lost on the way 65.0 t)
every flight is a launch: each one adds its own cost, its own risk and its own days of waiting in orbit, during which more boils off.
formula: flights = ⌈(tank − already aboard) / (tanker load × (1 − loss))⌉
source: arithmetic on your inputs; tank and tanker sizes are assumptions (references/THE-ASSUMPTIONS.md)
limit: one loss fraction stands for boil-off and transfer together; real boil-off grows with the days between flights, and a tanker cannot always offload all it carries.
refill · THE FULL TANK, AS FIRST ASKED
$ mars.py refill --tank 353.4 --tanker 100 --loss 0.05
to put 353.4 t into a 353.4 t tank that already holds 0.0 t:
- each tanker brings 100.0 t; 5.0% is lost to boil-off and transfer, so 95.0 t arrives
- tanker flights: 4 (propellant lifted 400.0 t, lost on the way 20.0 t)
every flight is a launch: each one adds its own cost, its own risk and its own days of waiting in orbit, during which more boils off.
formula: flights = ⌈(tank − already aboard) / (tanker load × (1 − loss))⌉
source: arithmetic on your inputs; tank and tanker sizes are assumptions (references/THE-ASSUMPTIONS.md)
limit: one loss fraction stands for boil-off and transfer together; real boil-off grows with the days between flights, and a tanker cannot always offload all it carries.
rocket · THE ROCKET EQUATION FORWARD; WITH --NEED, THE PAYLOAD IT ALLOWS, OR (WITH --PAYLOAD) THE
$ mars.py rocket --isp 380 --dry 120 --prop 1200 --payload 100 --need 4.57
to get 4.57 km/s with Isp 380 s, 120.0 t dry and 100.0 t of payload, the mass ratio must be 3.409
propellant needed: 529.9 t — 44% of the 1,200.0 t tank
formula: propellant = (m_dry + payload) × (R − 1), R = e^(Δv / (Isp·g0))
source: Tsiolkovsky (1903); g0 = 9.80665 m/s² exact; about 9.4 km/s to low Earth orbit is the usual textbook figure with losses. The inputs are yours; any vehicle figure is an assumption (references/THE-ASSUMPTIONS.md)
limit: ideal: no gravity, drag or steering losses; the dry mass is whatever you call dry; vehicle figures are published targets that change, not facts.
rocket · THE ROCKET EQUATION FORWARD; WITH --NEED, THE PAYLOAD IT ALLOWS, OR (WITH --PAYLOAD) THE
$ mars.py rocket --stage 330,200,3400 --stage 380,120,1200 --payload 100
stacked stages, bottom first, payload 100.0 t:
- stage 1: Isp 330 s, dry 200.0 t, propellant 3,400.0 t, carrying 1,420.0 t above it → Δv 3,660 m/s
- stage 2: Isp 380 s, dry 120.0 t, propellant 1,200.0 t, carrying 100.0 t above it → Δv 6,949 m/s
total Δv 10,609 m/s (10.61 km/s); lift-off mass 5,020.0 t
formula: Δv = Σ Isp·g0·ln(m_start / m_end), each stage carrying everything above it
source: Tsiolkovsky (1903); g0 = 9.80665 m/s² exact; about 9.4 km/s to low Earth orbit is the usual textbook figure with losses. The inputs are yours; any vehicle figure is an assumption (references/THE-ASSUMPTIONS.md)
limit: ideal: no gravity, drag or steering losses; the dry mass is whatever you call dry; vehicle figures are published targets that change, not facts.
fleet · TONS PER WINDOW, WINDOWS AND YEARS TO A TARGET TONNAGE
$ mars.py fleet --ships 5 --payload 100 --growth 2 --target 1000000 --from 2026-10-09
5 ships of 100.0 t to the first window after 2026-10-09, the fleet × 2 each window:
| window | departs about | ships | tons this window | tons landed in all |
|---|---|---|---|---|
| 1 | 2026-11-16 | 5 | 500 | 500 |
| 2 | 2029-01-04 | 10 | 1,000 | 1,500 |
| 3 | 2031-02-22 | 20 | 2,000 | 3,500 |
| 4 | 2033-04-12 | 40 | 4,000 | 7,500 |
| 5 | 2035-06-01 | 80 | 8,000 | 15,500 |
| 6 | 2037-07-20 | 160 | 16,000 | 31,500 |
| 7 | 2039-09-08 | 320 | 32,000 | 63,500 |
| 8 | 2041-10-27 | 640 | 64,000 | 127,500 |
| 9 | 2043-12-16 | 1,280 | 128,000 | 255,500 |
| 10 | 2046-02-03 | 2,560 | 256,000 | 511,500 |
| 11 | 2048-03-24 | 5,120 | 512,000 | 1,023,500 |
the target of 1,000,000 t is reached in window 11, about 2048-03: 21.4 years after the first window (11 windows).
formula: tons in window k = ships_k × payload; ships_(k+1) = ⌊ships_k × growth⌋; one window every 779.94 days
source: arithmetic on your inputs; window dates as in `windows` (JPL Solar System Dynamics, Approximate Positions of the Planets, Table 1 (1800-2050 AD))
limit: every ship is assumed to land its full payload; no losses, no ships reused across windows unless you count them; window dates are approximate to weeks.
cost · COST PER TON TO MARS FROM YOUR INPUTS ONLY, IN YOUR CURRENCY
$ mars.py cost --launch 10 --tankers 4 --payload 100
per ship sent to Mars: 1 launch of the ship + 4 tanker launches = 5 launches at 10.00 each = 50.00
total 50.00 for 100.0 t delivered: 0.5000 per ton in your currency (the units you gave).
formula: per ton = (launch cost × (1 + tankers) + ship cost / trips) / payload
source: your inputs only; this card supplies no prices
limit: every launch is assumed to cost the same and the full payload to land; it leaves out operations, insurance, ground systems, failures and money's cost over time.
crew · OXYGEN, WATER AND FOOD (NASA PLANNING VALUES, OVERRIDABLE)
$ mars.py crew --people 4 --days 900 --surface-days 540 --recycle-water 0.9 --recycle-o2 0.75
4 people × 900 days = 3,600 person-days (360 days at in-space rates, 540 at surface rates)
planning values per person-day (defaults; override with --o2 --drink --food): oxygen 0.89 kg in space, 0.84 on the surface; drinking water 2.79 in space, 2.00 on the surface; hygiene 0.40, flush 0.30, food rehydration 0.50; food 2.39 kg as delivered, with packaging
- oxygen: 3,096 kg used; recycling 75% → 774 kg to carry
- water: 12,658 kg used; recycling 90% → 1,266 kg to carry
- food: 8,604 kg (not recycled)
- consumables to carry: 10,644 kg (10.6 t), before tanks, spares, reserves and the machines that recycle
for scale: the space station's water system reached 98% recovery in 2023 (NASA).
formula: carried = people × Σ(days × rate) × (1 − recycled fraction); food = people × days × 2.39 kg
source: NASA BVAD, NASA/TP-2015-218570/REV2 (Feb 2022), as carried by NASA ASCEND 2023 logistics rates (NTRS 20230012635) Table 8 (oxygen, water) and Tables 1-2 (food); food 2.39 kg is also BVAD REV1 (2018) Table 4-53. The BVAD 2022 tables could not be opened from here; check them (Table 3-31, Summary of Nominal Human Metabolic Interface Values, and Section 4.5, food) before design use
limit: planning values for an 82 kg crewmember with daily exercise, not a design; no reserve, no spares, no nitrogen for leaks, no extra for spacewalks; a recycling rate is a target the hardware must prove.
solar · SUNLIGHT AT MARS, PANEL AREA FOR A POWER NEED, THE SOL
$ mars.py solar --kw 10 --tau 0.5 --eff 0.22
sunlight above the air at 1.524 AU: 586.2 W/m² (43% of the Earth's); 713 W/m² at perihelion, 490 at aphelion
dust optical depth τ 0.50, flat panel at latitude 0° at equinox, direct beam only:
- noon 356 W/m²; averaged over the whole sol 94 W/m²
- panel area for 10 kW around the clock at 22% efficiency: 481 m² (a floor-size estimate from the beam alone)
- storage to carry 10 kW through the night (12.3 h): about 123 kWh, before battery losses
a sol lasts 24 h 39 min 35 s. Scattered light adds a large share at moderate τ, so the real area is smaller than this; in a global dust storm the beam nearly vanishes (Opportunity measured τ about 10.8 in June 2018), and dust settling on the panels cuts output until wind clears it.
formula: S = 1361 W/m² / r²; beam on a flat panel = S·cos z·e^(−τ/cos z), averaged over the sol; area = P / (average × efficiency)
source: S0 = 1361 W/m² (Kopp & Lean 2011); r, perihelion and aphelion from NASA Mars Fact Sheet (NSSDCA, read 2026-10-09); Beer's law for the beam (Appelbaum & Flood, NASA TM-102299, 1989); storm τ from the Opportunity team (2018)
limit: equinox, flat panel, no tracking, no scattered light, no temperature or dust losses; for the full sky use the Appelbaum & Flood net-flux tables (NASA TM-103623, 1990).
radiation · DOSE FROM CURIOSITY'S MEASUREMENTS AGAINST NASA'S CAREER LIMIT
$ mars.py radiation --cruise-days 180 --surface-days 500
cruise: 180 days × 2 legs × 1.84 mSv/day = 662 mSv
surface: 500 days × 0.64 mSv/day = 320 mSv
total about 982 mSv (0.98 Sv): 164% of the 600 mSv career limit — OVER it by 382 mSv
what changes it: galactic cosmic rays are strongest near solar minimum and weaker near solar maximum; a large solar particle event can add a big dose in hours, which is what a storm shelter is for; thin shielding barely lowers cosmic-ray dose and can raise it through secondary particles; on the surface the planet blocks half the sky and the air some more, and burying a habitat lowers it further. A shorter trip lowers the cruise share most.
formula: dose = rate × days, summed over cruise legs and the surface stay
source: cruise 1.84 mSv/day: Zeitlin et al. 2013, Science 340:1080 (RAD, inside the cruise spacecraft); surface 0.64 ± 0.12 mSv/day: Hassler et al. 2014, Science 343:1244797; limit 600 mSv: NASA-STD-3001 Vol 1 Rev B (2022). Hassler et al. give about 1.01 Sv for 180 days out, 500 on the surface and 180 back
limit: the measured rates are dose equivalent from one spacecraft and one site during a mild solar maximum; NASA's limit is effective dose; this is not a medical judgement for any person.
THE RUNS ARE PASTED FROM THE CARD’S OWN WITNESS.MD AS PRINTED. FIGURES MARKED FAKE ARE THE STUDIO’S OWN EXAMPLES, INVENTED FOR THE RECORD; PUBLISHED FIGURES ARE NAMED WITH THEIR SOURCES. NO PRIVATE PERSON IS NAMED.