SkyCanvas CLI Tool
- 6 Devlogs
- 14 Total hours
A CLI tool made in Python that maps real star constellations as ASCII art in your terminal using live astronomical data and templates of commonly known constellations.
A CLI tool made in Python that maps real star constellations as ASCII art in your terminal using live astronomical data and templates of commonly known constellations.
The last one ʕ•ᴥ•ʔ
Hey I hope you are all doing amazing!
This will be the final development log before SkyCanvas officially ships.
The last few steps were focused on preparing the project for release rather than adding new features.
I just:
I also fixed a few remaining bugs and gave the CLI last cleanup before release
Everything is finally in place, writing pyproject.toml was kind of muscle memory at this point. The project feels complete and ready for other people to install and use.
Preparing a project for release takes much more work than it seems, although I think the pyproject.toml file is the easy part.
Documentation and polishing ended up taking almost as much time as some of the features themselves.
Time to upload SkyCanvas to PyPI and ship v0.1.0 🤍
Hi eveyrone, I hope you are all doing great ʕ•ᴥ•ʔ
Andddd we are shipping soon!
This update of SkyCanvas was mainly focused on finishing the remaining major feature before release. I spent this time implementing the export system, improving the CLI experience, and fixing a lot of small bugs.
The biggest addition in this update was the new export functionality.
SkyCanvas can now export constellations directly into image files using:
skycanvas --export <target> <format>
Supported formats: JPG, PNG, SVG and BMP
Exported files are automatically saved to:
~/SkyCanvas/Exports/
with timestamps included in their filenames.
The export system keeps the same visual style as the terminal version.
The tonight target is also supported, allowing SkyCanvas to export every currently visible constellation into separate files automatically.
Honestly, I had a lot of problems implementing export feature, even though this command might seem like an overkill, I think it is useful is some cases.
Fixed issues related to:
The export system integrated surprisingly well with the existing renderer. Since the rendering pipeline was already separated from the CLI logic, adding new output formats was much easier than expected.
The biggest challenge was making exported images look exactly like the terminal version. Keeping the same proportions, colors, and Braille-style rendering outside the console required a lot of “adjustments”.
SkyCanvas is now really close to the first public release 🤍
I will update on those steps too!
Hey, I hope you are all doing amazing ʕ•ᴥ•ʔ
This update was mainly focused on improving how SkyCanvas looks and feels to use. I spent a lot of time reworking the rendering system, adding new CLI features, and making the overall experience much more polished.
One of the biggest changes was replacing the original ASCII rendering approach with a completely new one. Instead of relying on simple line characters, the renderer now uses a higher-resolution Braille-based drawing system, producing much smoother and cleaner constellation shapes in the terminal, hehe ;)
The rendering pipeline itself was also redesigned, making it easier to maintain and expand in the future.
I also gave the terminal output a visual refresh.
Stars are now highlighted in yellow, making them much easier to tell apart.
Connection lines use a different color for better readability.
These changes make the constellations far more enjoyable to look at while still keeping the project fully terminal-based.
New Commands & Features
This update also introduced several new commands
compare command allows two constellations to be displayed side by side for quick visual comparison. It also supports comparing any constellation against every constellation currently visible with the tonight command.
Speaking of that, tonight was added as well. It displays the constellations that are currently considered visible, making SkyCanvas feel much more interactive than simply viewing static constellation data.
Originally, I planned to implement a location command, but after thinking about it, I decided it didn’t fit the project very well, did it bruh?
Instead, I replaced it with an –animate flag.
Using this flag gradually draws a constellation in the terminal by animating its stars and connections before displaying the final result.
Overall, this update was mostly about improving presentation and usability rather than adding huge amounts of new data. SkyCanvas now feels significantly more polished and closer to a complete first release.
The new commands integrated into the existing CLI surprisingly well. Since the project structure has become much cleaner over time, adding features like compare, tonight, and the animation system was fairly straightforward.
The biggest challenge was redesigning the rendering. Getting constellation lines to look smooth with brail in a terminal while keeping everything aligned with stars and labels required several different approaches before I found one I was happy with.
I’m getting really close to the first public release now. There are only a few finishing touches left before SkyCanvas reaches version 1.0.
I am yet to implement export command though 🤍
Hey, I hope you are all doing amazing ʕ•ᴥ•ʔ
Lately, I focused on improving the visualization system and connecting the constellation data with the CLI experience.
The biggest addition in this session was creating the render.py system. It is responsible for generating ASCII representations of constellations using star coordinates and connections between them. This was an important step as SkyCanvas is now no longer just displaying astronomical data - it’s starting to actually visualize the constellations now ;)
I also created coordinates.py, which contains the positional data of stars used by the renderer. These coordinates define the relative placement of stars and allow the program to recreate recognizable constellation shapes inside the terminal.
Another major improvement was modifying the command skycanvas [constellation] command, to skycanvas constellation [name]. This allows users to choose a specific constellation and display its information table together with its ASCII visualization.
Example:
skycanvas constellation orion
The command now shows:
I also improved the existing rand command.
Previously, it only displayed the information table of a randomly selected constellation, and now it also renders the ASCII visualization, making the feature much more complete.
I think the easier part of this session was connecting existing constellation data with new CLI features, since the database was already prepared, adding new commands was much simpler.
The most challenging part was creating the rendering system. Turning star coordinates into readable ASCII art required a lot of testing and adjustments to make the constellations recognizable in the terminal.
Overall, this session was focused on turning stored astronomical data into an actual visual experience.
I hope you notice my progress and view it positively 🤍
Here is what I have done so far:
Expanded constellations.py with the remaining entries.
The database now contains 30 constellations, each with:
CLI Improvements
Finished the list command using Rich library.
Implemented rand command.
Next: I am not sure yet, but probably Skyfield lib integration and astronomy engine.
Hey!
First devlog for SkyCanvas, my new CLI tool that maps real star constellations as ASCII art in your terminal. Think of it as a tiny planetarium, but without leaving your keyboard.
skycanvas list prints “TODO”. Not impressive yet, but the foundation is solid. Python, Typer, Rich – the same stack that worked for KeyGlow (see my other project).Data. Spent two hours manually researching and writing constellation data into a Python dictionary. Orion, Ursa Major, Cassiopeia, Scorpius, Taurus, Gemini, Leo, Cygnus, Lyra, etc. each with their brightest stars, visibility months, and the connections that make them recognizable shapes in the night sky.
I also managed to create a cool ASCII logo for SKYCANVAS, and make it displayable by “skycanvas logo” command.
I’m not using an API for this – instead I’ll use the Skyfield library, which has a massive built-in star catalog and calculates positions mathematically. The manual data is just for the constellation shapes and metadata – Skyfield handles the actual astronomy.
Right now my constellations.py looks like a giant dictionary with empty spots waiting to be filled.
Next up: completing the data and turning those coordinates into actual ASCII art. Bresenham’s line algorithm, here I come. ʕ•ᴥ•ʔ