You are browsing as a guest. Sign up (or log in) to start making projects!

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.

Ship #1 Pending review

SkyCanvas v0.1.0 is officially released ʕ•ᴥ•ʔ

After some solid time of development, testing, debugging, and polishing, SkyCanvas has finally reached its first release.

SkyCanvas is a terminal-based ASCII constellation viewer powered by astronomical data. It allows you to explore constellations directly from your command line, view detailed information about stars and connections, compare different constellations, discover what is visible tonight, animate constellation drawings, and export them into image formats.

One of the biggest challenges during development was creating a custom rendering system that could display constellations smoothly inside a terminal while keeping the output readable and visually appealing.

I am so so proud that SkyCanvas grew from a simple terminal experiment into a complete application with its own renderer, animations, export pipeline, documentation, PyPI package etc.

The project is now available for everyone to try.
You can install it using:

“pip install skycanvas”

Then run:

“skycanvas –help”

to explore all available commands.

Thank you to everyone who followed the development journey 🤍

Enjoy exploring the night sky directly from your terminal, even though not perfect, it should be enjoyable!

  • 6 devlogs
  • 14h
Try project → See source code →
Open comments for this post

1h 12m 47s logged

Devlog #06

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:

  • finished writing the README
  • created the pyproject.toml
  • polished the documentation, and made sure everything is ready to be published as a proper Python package

I also fixed a few remaining bugs and gave the CLI last cleanup before release

What went good

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.

What was hard

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 🤍

1
0
62
Open comments for this post

3h 23m logged

Devlog #05

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.

Export System

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.

Bug Fixes & General Polish

Fixed issues related to:

  • Export generation
  • SVG formatting
  • CLI argument handling (callback just wasn’t working)
  • Duplicate console output
  • Rendering behavior
  • Various smaller bugs across the project

What went good

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.

What was hard

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 🤍

The remaining steps are:

  • Writing full README
  • PyPI preparation
  • Publishing version 0.1.0
  • Writing files like pyproject.toml and requirements.txt

I will update on those steps too!

0
0
22
Open comments for this post

2h 17m 11s logged

Devlog #04

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.

Completely New ASCII Renderer

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.

Improved Visuals

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.

Animation Support

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.

What went good

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.

What was hard

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 🤍

0
0
5
Open comments for this post

2h 10m 44s logged

Devlog #04

Constellation Rendering & CLI Integration

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:

  • constellation information
  • stars data
  • connections
  • ASCII art of stars

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.

What was easy and what challengin

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  🤍

0
0
33
Open comments for this post

2h 32m 8s logged

Devlog #02 - progress starts to be really visible ʕ•ᴥ•ʔ

Here is what I have done so far:

  • Expanded constellations.py with the remaining entries.

  • The database now contains 30 constellations, each with:

    • Name
    • Common name
    • Hemisphere
    • Best Months Visibility
    • Brightest star
    • Stars
    • Connections between them

CLI Improvements

Finished the list command using Rich library.

Added:

  • Two-column constellation table
  • Cleaner terminal output
  • Better readability

Implemented rand command.

It now:

  • Picks a random constellation
  • Displays full information in a Rich table
  • Shows stars and connections

Current Progress

Completed:

  • Typer CLI foundation
  • Logo command
  • Version command
  • List command
  • Random constellation viewer
  • Initial constellation database

Next: I am not sure yet, but probably Skyfield lib integration and astronomy engine.

0
0
24
Open comments for this post

2h 12m 2s logged

Devlog #01 – The Sky is Empty (For Now) ʕ•ᴥ•ʔ

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.

  • Right now, it does exactly one thing: 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).

What took the most time today?

  • 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. ʕ•ᴥ•ʔ

0
0
25

Delete project?

Are you sure you want to permanently delete this project? This action cannot be undone.

All devlogs, followers, and associated data will be removed.

Followers

Loading…