GG
ggozad/ascii-moon-phase-python
Command line program that outputs ASCII art of the current moon phase. (Vibe coding experiment in Python.)
ascii-moon-phase-python
Prints the current moon phase as ASCII art. Install with pip install ascii-moon-phase and run with python3 -m ascii_moon_phase.
usage: ascii-moon [-h] [--size SIZE] [--hemisphere {north,south}] [--date DATE] [--phase PHASE] [--light-char CHAR]
[--dark-char CHAR] [--empty-char CHAR] [--show-phase]
Render the lunar phase as filled ASCII art.
options:
-h, --help show this help message and exit
--size SIZE Height in rows (width is 2*size). Default: 24
--hemisphere {north,south}
Orientation: 'north' shows waxing on the right (default).
--date DATE Calendar date YYYY-MM-DD (default: today).
--phase PHASE Phase fraction in [0.0, 1.0]; 0.0=new, 0.5=full, 1.0=new. Overrides --date.
--light-char CHAR Character for illuminated area (default: '@').
--dark-char CHAR Character for dark area (default: '.').
--empty-char CHAR Character outside the disc (default: space).
--show-phase Print the numeric phase after the art.
You can also call these functions from Python:
>>> import ascii_moon_phase as amp
>>> print(amp.render_moon())
...@@@@@@@@@@@
.....@@@@@@@@@@@@@@@@@@@
.......@@@@@@@@@@@@@@@@@@@@@@@
.......@@@@@@@@@@@@@@@@@@@@@@@@@@@
........@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
........@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
.........@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
.........@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
..........@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
..........@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
..........@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
..........@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
..........@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
..........@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
..........@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
..........@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
.........@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
.........@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
........@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
........@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
.......@@@@@@@@@@@@@@@@@@@@@@@@@@@
.......@@@@@@@@@@@@@@@@@@@@@@@
.....@@@@@@@@@@@@@@@@@@@
...@@@@@@@@@@@
The parameters of render_moon() are:
def render_moon(
size: int = 24,
northern_hemisphere: bool = True,
phase_date: date | None = None,
light_char: str = "@",
dark_char: str = ".",
empty_char: str = " ",
phase: float | None = None,
) -> str:
You can also call animate_phases() to play a smooth animation of the moon, or call animate_future() to show the phase of each day progressing into the future.
The Rust version is at https://github.com/asweigart/ascii-moon-phase-rust
On this page
Contributors
Created November 16, 2025
Updated November 16, 2025