sky-ceiling-projector


Namesky-ceiling-projector JSON
Version 1.0.0 PyPI version JSON
download
home_pagehttps://github.com/yourusername/sky-ceiling-projector
SummaryA realistic sky ceiling projector with weather effects, celestial objects, and enhanced starfield
upload_time2025-07-08 21:34:00
maintainerNone
docs_urlNone
authorSky Projector Team
requires_python>=3.8
licenseMIT
keywords astronomy projector ceiling sky weather stars moon planets pygame raspberry-pi
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            ## **live-ceiling – Bring the Real-Time Sky Indoors**

update: You can now install this using `pip install sky-ceiling-projector`!

Live-ceiling turns a Raspberry Pi Zero 2 W and any HDMI projector into a miniature planetarium that shows a weather-accurate, time-accurate sky for **any city in the world**—complete with stars, Moon phases, planets, shooting stars, clouds, rain, snow, lightning, and smooth colour transitions when you “fly” to another location. All data comes from free, no-key public APIs, so the setup can run indefinitely with nothing more than Wi-Fi.

## **✨ Key Features**
 

* **Real-time sky gradient** that matches local dawn, day, sunset, dusk and night.

* **Accurate weather effects** powered by Open-Meteo’s Geocoding and Forecast APIs—no API key required. [open-meteo.com](https://open-meteo.com/en/docs/geocoding-api?utm_source=chatgpt.com)[open-meteo.com](https://open-meteo.com/en/docs?utm_source=chatgpt.com)[open-meteo.com](https://open-meteo.com/?utm_source=chatgpt.com)

* **Detailed celestial objects**: variable stars, red/blue giants, Milky Way band, realistic Moon with pre-generated craters, Sun with sunspots, planets, satellites and meteor showers.

* **Weather-sensitive particles** for rain, drizzle, snow and fog, plus branching lightning during thunderstorms.

* **Demo-mode “world tour”** that cycles through famous cities on a timer (or on key-press) with a 5-second cross-fade.

* **Optimised for Raspberry Pi Zero 2 W** (quad-core 1 GHz, 512 MB RAM) so it runs smoothly at 1080p/30 FPS. [datasheets.raspberrypi.com](https://datasheets.raspberrypi.com/rpizero2/raspberry-pi-zero-2-w-product-brief.pdf?utm_source=chatgpt.com)[wired.com](https://www.wired.com/story/raspberry-pi-zero-2-w-review?utm_source=chatgpt.com)

* **Pygame full-screen output** with double-buffering and hardware surfaces for tear-free projection. [stackoverflow.com](https://stackoverflow.com/questions/74986624/how-to-toggle-fullscreen-mode-in-pygame?utm_source=chatgpt.com)

* **Zero-cost libraries** only: `pygame`, `numpy`, `requests`, `geopy`, `timezonefinder`, and `pytz`.

---

## **🛠️ Bill of Materials**

| Item | Notes |
| ----- | ----- |
| **Raspberry Pi Zero 2 W** | Any Pi works, but Zero 2 W is the smallest that can sustain 30 FPS. [datasheets.raspberrypi.com](https://datasheets.raspberrypi.com/rpizero2/raspberry-pi-zero-2-w-product-brief.pdf?utm_source=chatgpt.com) |
| micro-SD card (16 GB \+) | Flash the latest Raspberry Pi OS Lite. |
| Official Pi Zero camera/power adapter kit **or** 5 V/2 A USB power | The projector’s USB-A port usually provides enough current. |
| **HDMI cable (micro-HDMI → HDMI)** | Connects Pi to projector. Basic passive cables work. [fromdev.com](https://www.fromdev.com/2025/05/how-to-connect-raspberry-pi-to-a-projector.html?utm_source=chatgpt.com) |
| Any **HDMI projector** (720p–1080p) | Short-throw or ceiling-mounted mini projectors work best. |
| Wi-Fi connection | Required only for live weather; sky still renders offline. |

**Tip:** If your projector only has VGA, use an inexpensive HDMI→VGA adapter and enable `hdmi_safe=1` in `/boot/config.txt`. [ask.tvsbook.com](https://ask.tvsbook.com/56763.1/?utm_source=chatgpt.com)

---

## **📦 Software Requirements**

| Package | Install command | Purpose |
| ----- | ----- | ----- |
| Python 3.7 \+ | `sudo apt install python3 python3-pip` | Interpreter |
| **pygame ≥ 2.1** | `sudo pip3 install pygame` | Rendering layer on Pi. [github.com](https://github.com/pygame/pygame/issues/3687?utm_source=chatgpt.com) |
| numpy, requests | `pip3 install numpy requests` | Math & HTTP |
| geopy | `pip3 install geopy` | Fallback geocoder. [gis.stackexchange.com](https://gis.stackexchange.com/questions/293615/user-agent-argument-in-nominatim-in-geopy?utm_source=chatgpt.com) |
| timezonefinder, pytz | `pip3 install timezonefinder pytz` | Local-time conversion. [pypi.org](https://pypi.org/project/timezonefinder/?utm_source=chatgpt.com) |

---

## **🔧 Installation**

bash  
CopyEdit  
`# 1. Flash Raspberry Pi OS (Lite or Desktop) to SD and boot.`  
`# 2. Enable SSH & Wi-Fi using raspi-config if needed.`  
`sudo apt update && sudo apt upgrade -y`

`# 3. Install SDL dependencies for pygame`  
`sudo apt install libsdl2-dev libsdl2-image-dev libsdl2-ttf-dev libfreetype6-dev libatlas-base-dev -y`

`# 4. Clone the repo`  
`git clone https://github.com/your-user/live-ceiling.git`  
`cd live-ceiling`

`# 5. Install Python deps`  
`pip3 install -r requirements.txt`

`# 6. (Optional) Test pygame opens in full-screen`  
`python3 - << 'PY'`  
`import pygame, sys`  
`pygame.init(); pygame.display.set_mode((0,0), pygame.FULLSCREEN); pygame.time.wait(2000); sys.exit()`  
`PY`

If the screen stays black after step 6, verify HDMI-0 is enabled and the projector is on the correct input. [raspberrypi.stackexchange.com](https://raspberrypi.stackexchange.com/questions/85570/hdmi-projector-doesnt-detect-my-pi?utm_source=chatgpt.com)

---

## **🚀 Running the Projector**

bash  
CopyEdit  
`# Basic: simulate current sky over Paris`  
`python3 live-ceiling.py --location "Paris, France"`

`# High-performance preset for 480 p pico-projectors`  
`python3 live-ceiling.py --preset performance --location "Tokyo, Japan"`

`# Demo mode: world tour every 5 min`  
`python3 live-ceiling.py --cycle-cities --cycle-interval 300`

### **Keyboard Controls**

| Key | Action |
| ----- | ----- |
| **ESC** | Quit |
| **I** | Toggle info overlay |
| **D** | Debug mode (cycles weather) |
| **R** | Regenerate starfield |
| **SPACE** | Trigger lightning (only if weather \= thunderstorm) |
| **N** | Next city (demo mode) |

---

## **⚙️ Configuration & Customisation**

| Flag | Default | Description |
| ----- | ----- | ----- |
| `--preset` | `balanced` | `performance` (≤ 15 fps), `balanced` (default), `quality` (\> 20 fps on Pi 4\) |
| `--location` | *required* | City or “City, State/ISO-Country”. Uses Open-Meteo geocoder. [open-meteo.com](https://open-meteo.com/en/docs/geocoding-api?utm_source=chatgpt.com) |
| `--cycle-cities` & `--cycle-interval` | – | Rotate through a curated list of major cities. |
| `--no-info` | off | Hide FPS, weather and location overlay. |

To add your own city list, edit `WORLD_CITIES` in the script.

---

## **🏎️ Performance Tips**

* Run headless Raspberry Pi OS Lite to free RAM.

* Use the `performance` preset for 720 p or lower projectors; it halves star and particle counts.

* Disable glow effects by setting `"enable_glow": False` inside `QUALITY_SETTINGS`.

* To force 30 FPS, add `pygame.time.Clock().tick(30)` inside the main loop (already set).

* For multiple projectors, add an HDMI splitter; the Pi outputs the same frame to all displays. [reddit.com](https://www.reddit.com/r/projectors/comments/190weyw/how_do_i_actually_connect_my_raspberry_pi_to/?utm_source=chatgpt.com)

---

## **🩻 How It Works (Quick Tech Peek)**

| Component | Library/API | Notes |
| ----- | ----- | ----- |
| Geocoding | Open-Meteo Geocoding (primary) → Geopy \+ Nominatim fallback | No key, fast, returns local timezone. [open-meteo.com](https://open-meteo.com/en/docs/geocoding-api?utm_source=chatgpt.com)[gis.stackexchange.com](https://gis.stackexchange.com/questions/293615/user-agent-argument-in-nominatim-in-geopy?utm_source=chatgpt.com) |
| Weather | Open-Meteo “current\_weather” endpoint | Supplies `weather_code`, `cloud_cover`, temperature, wind. [open-meteo.com](https://open-meteo.com/en/docs?utm_source=chatgpt.com) |
| Local time | TimezoneFinder \+ pytz for offline TZ lookup | Works without internet after first run. [pypi.org](https://pypi.org/project/timezonefinder/?utm_source=chatgpt.com) |
| Rendering | Pygame 2 HW surfaces, double buffer | Full-screen toggle example: see StackOverflow. [stackoverflow.com](https://stackoverflow.com/questions/74986624/how-to-toggle-fullscreen-mode-in-pygame?utm_source=chatgpt.com) |
| Hardware | Pi Zero 2 W (quad-core A53 @ 1 GHz, 512 MB RAM) | Small, silent, $15. [datasheets.raspberrypi.com](https://datasheets.raspberrypi.com/rpizero2/raspberry-pi-zero-2-w-product-brief.pdf?utm_source=chatgpt.com)[wired.com](https://www.wired.com/story/raspberry-pi-zero-2-w-review?utm_source=chatgpt.com) |
| Display | HDMI out to projector | Any modern HDMI projector or TV works. [fromdev.com](https://www.fromdev.com/2025/05/how-to-connect-raspberry-pi-to-a-projector.html?utm_source=chatgpt.com) |

APIs are free for non-commercial use; Open-Meteo imposes reasonable request rate limits (60 calls/min). [open-meteo.com](https://open-meteo.com/?utm_source=chatgpt.com)

---

## **🐛 Troubleshooting**

| Symptom | Fix |
| ----- | ----- |
| Black screen on boot | Ensure projector input is HDMI \#; add `hdmi_safe=1` in `/boot/config.txt` if using adapters. [ask.tvsbook.com](https://ask.tvsbook.com/56763.1/?utm_source=chatgpt.com) |
| “pygame.error: No available video device” | Run with a screen attached or set `export SDL_VIDEODRIVER=fbcon`. |
| Weather always “Loading…” | Check internet; Open-Meteo requires outbound HTTPS port 443\. |
| Wrong local time | Disable Wi-Fi power save (`iw dev wlan0 set power_save off`) and verify TZ in `raspi-config`. |
| Frame-rate dips below 20 FPS | Switch to `--preset performance`, close other processes, lower resolution to 720 p in `/boot/config.txt`. |

---

## **🤝 Acknowledgements**

* **Open-Meteo** – free weather & geocoding APIs. [open-meteo.com](https://open-meteo.com/en/docs/geocoding-api?utm_source=chatgpt.com)[open-meteo.com](https://open-meteo.com/en/docs?utm_source=chatgpt.com)[open-meteo.com](https://open-meteo.com/?utm_source=chatgpt.com)

* **Pygame** – SDL-based cross-platform game library. [github.com](https://github.com/pygame/pygame/issues/3687?utm_source=chatgpt.com)

* **Geopy / Nominatim (OSM)** – geocoding fallback. [gis.stackexchange.com](https://gis.stackexchange.com/questions/293615/user-agent-argument-in-nominatim-in-geopy?utm_source=chatgpt.com)

* **TimezoneFinder & pytz** – offline timezone look-ups. [pypi.org](https://pypi.org/project/timezonefinder/?utm_source=chatgpt.com)

* **Raspberry Pi Foundation** for the Pi Zero 2 W hardware. [datasheets.raspberrypi.com](https://datasheets.raspberrypi.com/rpizero2/raspberry-pi-zero-2-w-product-brief.pdf?utm_source=chatgpt.com)

---

## **📄 License**

This project is licensed under the MIT License (see `LICENSE`).



Happy sky-gazing\! 🌌




            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/yourusername/sky-ceiling-projector",
    "name": "sky-ceiling-projector",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": "Sky Projector Team <your-email@example.com>",
    "keywords": "astronomy, projector, ceiling, sky, weather, stars, moon, planets, pygame, raspberry-pi",
    "author": "Sky Projector Team",
    "author_email": "Sky Projector Team <your-email@example.com>",
    "download_url": "https://files.pythonhosted.org/packages/0c/9d/5a4c810862635092a6bfd6e625e653202155aebe93df2da92923f11cbe4f/sky_ceiling_projector-1.0.0.tar.gz",
    "platform": null,
    "description": "## **live-ceiling \u2013 Bring the Real-Time Sky Indoors**\n\nupdate: You can now install this using `pip install sky-ceiling-projector`!\n\nLive-ceiling turns a Raspberry Pi Zero 2 W and any HDMI projector into a miniature planetarium that shows a weather-accurate, time-accurate sky for **any city in the world**\u2014complete with stars, Moon phases, planets, shooting stars, clouds, rain, snow, lightning, and smooth colour transitions when you \u201cfly\u201d to another location. All data comes from free, no-key public APIs, so the setup can run indefinitely with nothing more than Wi-Fi.\n\n## **\u2728 Key Features**\n \n\n* **Real-time sky gradient** that matches local dawn, day, sunset, dusk and night.\n\n* **Accurate weather effects** powered by Open-Meteo\u2019s Geocoding and Forecast APIs\u2014no API key required. [open-meteo.com](https://open-meteo.com/en/docs/geocoding-api?utm_source=chatgpt.com)[open-meteo.com](https://open-meteo.com/en/docs?utm_source=chatgpt.com)[open-meteo.com](https://open-meteo.com/?utm_source=chatgpt.com)\n\n* **Detailed celestial objects**: variable stars, red/blue giants, Milky Way band, realistic Moon with pre-generated craters, Sun with sunspots, planets, satellites and meteor showers.\n\n* **Weather-sensitive particles** for rain, drizzle, snow and fog, plus branching lightning during thunderstorms.\n\n* **Demo-mode \u201cworld tour\u201d** that cycles through famous cities on a timer (or on key-press) with a 5-second cross-fade.\n\n* **Optimised for Raspberry Pi Zero 2 W** (quad-core 1 GHz, 512 MB RAM) so it runs smoothly at 1080p/30 FPS. [datasheets.raspberrypi.com](https://datasheets.raspberrypi.com/rpizero2/raspberry-pi-zero-2-w-product-brief.pdf?utm_source=chatgpt.com)[wired.com](https://www.wired.com/story/raspberry-pi-zero-2-w-review?utm_source=chatgpt.com)\n\n* **Pygame full-screen output** with double-buffering and hardware surfaces for tear-free projection. [stackoverflow.com](https://stackoverflow.com/questions/74986624/how-to-toggle-fullscreen-mode-in-pygame?utm_source=chatgpt.com)\n\n* **Zero-cost libraries** only: `pygame`, `numpy`, `requests`, `geopy`, `timezonefinder`, and `pytz`.\n\n---\n\n## **\ud83d\udee0\ufe0f Bill of Materials**\n\n| Item | Notes |\n| ----- | ----- |\n| **Raspberry Pi Zero 2 W** | Any Pi works, but Zero 2 W is the smallest that can sustain 30 FPS. [datasheets.raspberrypi.com](https://datasheets.raspberrypi.com/rpizero2/raspberry-pi-zero-2-w-product-brief.pdf?utm_source=chatgpt.com) |\n| micro-SD card (16 GB \\+) | Flash the latest Raspberry Pi OS Lite. |\n| Official Pi Zero camera/power adapter kit **or** 5 V/2 A USB power | The projector\u2019s USB-A port usually provides enough current. |\n| **HDMI cable (micro-HDMI \u2192 HDMI)** | Connects Pi to projector. Basic passive cables work. [fromdev.com](https://www.fromdev.com/2025/05/how-to-connect-raspberry-pi-to-a-projector.html?utm_source=chatgpt.com) |\n| Any **HDMI projector** (720p\u20131080p) | Short-throw or ceiling-mounted mini projectors work best. |\n| Wi-Fi connection | Required only for live weather; sky still renders offline. |\n\n**Tip:** If your projector only has VGA, use an inexpensive HDMI\u2192VGA adapter and enable `hdmi_safe=1` in `/boot/config.txt`. [ask.tvsbook.com](https://ask.tvsbook.com/56763.1/?utm_source=chatgpt.com)\n\n---\n\n## **\ud83d\udce6 Software Requirements**\n\n| Package | Install command | Purpose |\n| ----- | ----- | ----- |\n| Python 3.7 \\+ | `sudo apt install python3 python3-pip` | Interpreter |\n| **pygame \u2265 2.1** | `sudo pip3 install pygame` | Rendering layer on Pi. [github.com](https://github.com/pygame/pygame/issues/3687?utm_source=chatgpt.com) |\n| numpy, requests | `pip3 install numpy requests` | Math & HTTP |\n| geopy | `pip3 install geopy` | Fallback geocoder. [gis.stackexchange.com](https://gis.stackexchange.com/questions/293615/user-agent-argument-in-nominatim-in-geopy?utm_source=chatgpt.com) |\n| timezonefinder, pytz | `pip3 install timezonefinder pytz` | Local-time conversion. [pypi.org](https://pypi.org/project/timezonefinder/?utm_source=chatgpt.com) |\n\n---\n\n## **\ud83d\udd27 Installation**\n\nbash  \nCopyEdit  \n`# 1. Flash Raspberry Pi OS (Lite or Desktop) to SD and boot.`  \n`# 2. Enable SSH & Wi-Fi using raspi-config if needed.`  \n`sudo apt update && sudo apt upgrade -y`\n\n`# 3. Install SDL dependencies for pygame`  \n`sudo apt install libsdl2-dev libsdl2-image-dev libsdl2-ttf-dev libfreetype6-dev libatlas-base-dev -y`\n\n`# 4. Clone the repo`  \n`git clone https://github.com/your-user/live-ceiling.git`  \n`cd live-ceiling`\n\n`# 5. Install Python deps`  \n`pip3 install -r requirements.txt`\n\n`# 6. (Optional) Test pygame opens in full-screen`  \n`python3 - << 'PY'`  \n`import pygame, sys`  \n`pygame.init(); pygame.display.set_mode((0,0), pygame.FULLSCREEN); pygame.time.wait(2000); sys.exit()`  \n`PY`\n\nIf the screen stays black after step 6, verify HDMI-0 is enabled and the projector is on the correct input. [raspberrypi.stackexchange.com](https://raspberrypi.stackexchange.com/questions/85570/hdmi-projector-doesnt-detect-my-pi?utm_source=chatgpt.com)\n\n---\n\n## **\ud83d\ude80 Running the Projector**\n\nbash  \nCopyEdit  \n`# Basic: simulate current sky over Paris`  \n`python3 live-ceiling.py --location \"Paris, France\"`\n\n`# High-performance preset for 480 p pico-projectors`  \n`python3 live-ceiling.py --preset performance --location \"Tokyo, Japan\"`\n\n`# Demo mode: world tour every 5 min`  \n`python3 live-ceiling.py --cycle-cities --cycle-interval 300`\n\n### **Keyboard Controls**\n\n| Key | Action |\n| ----- | ----- |\n| **ESC** | Quit |\n| **I** | Toggle info overlay |\n| **D** | Debug mode (cycles weather) |\n| **R** | Regenerate starfield |\n| **SPACE** | Trigger lightning (only if weather \\= thunderstorm) |\n| **N** | Next city (demo mode) |\n\n---\n\n## **\u2699\ufe0f Configuration & Customisation**\n\n| Flag | Default | Description |\n| ----- | ----- | ----- |\n| `--preset` | `balanced` | `performance` (\u2264 15 fps), `balanced` (default), `quality` (\\> 20 fps on Pi 4\\) |\n| `--location` | *required* | City or \u201cCity, State/ISO-Country\u201d. Uses Open-Meteo geocoder. [open-meteo.com](https://open-meteo.com/en/docs/geocoding-api?utm_source=chatgpt.com) |\n| `--cycle-cities` & `--cycle-interval` | \u2013 | Rotate through a curated list of major cities. |\n| `--no-info` | off | Hide FPS, weather and location overlay. |\n\nTo add your own city list, edit `WORLD_CITIES` in the script.\n\n---\n\n## **\ud83c\udfce\ufe0f Performance Tips**\n\n* Run headless Raspberry Pi OS Lite to free RAM.\n\n* Use the `performance` preset for 720 p or lower projectors; it halves star and particle counts.\n\n* Disable glow effects by setting `\"enable_glow\": False` inside `QUALITY_SETTINGS`.\n\n* To force 30 FPS, add `pygame.time.Clock().tick(30)` inside the main loop (already set).\n\n* For multiple projectors, add an HDMI splitter; the Pi outputs the same frame to all displays. [reddit.com](https://www.reddit.com/r/projectors/comments/190weyw/how_do_i_actually_connect_my_raspberry_pi_to/?utm_source=chatgpt.com)\n\n---\n\n## **\ud83e\ude7b How It Works (Quick Tech Peek)**\n\n| Component | Library/API | Notes |\n| ----- | ----- | ----- |\n| Geocoding | Open-Meteo Geocoding (primary) \u2192 Geopy \\+ Nominatim fallback | No key, fast, returns local timezone. [open-meteo.com](https://open-meteo.com/en/docs/geocoding-api?utm_source=chatgpt.com)[gis.stackexchange.com](https://gis.stackexchange.com/questions/293615/user-agent-argument-in-nominatim-in-geopy?utm_source=chatgpt.com) |\n| Weather | Open-Meteo \u201ccurrent\\_weather\u201d endpoint | Supplies `weather_code`, `cloud_cover`, temperature, wind. [open-meteo.com](https://open-meteo.com/en/docs?utm_source=chatgpt.com) |\n| Local time | TimezoneFinder \\+ pytz for offline TZ lookup | Works without internet after first run. [pypi.org](https://pypi.org/project/timezonefinder/?utm_source=chatgpt.com) |\n| Rendering | Pygame 2 HW surfaces, double buffer | Full-screen toggle example: see StackOverflow. [stackoverflow.com](https://stackoverflow.com/questions/74986624/how-to-toggle-fullscreen-mode-in-pygame?utm_source=chatgpt.com) |\n| Hardware | Pi Zero 2 W (quad-core A53 @ 1 GHz, 512 MB RAM) | Small, silent, $15. [datasheets.raspberrypi.com](https://datasheets.raspberrypi.com/rpizero2/raspberry-pi-zero-2-w-product-brief.pdf?utm_source=chatgpt.com)[wired.com](https://www.wired.com/story/raspberry-pi-zero-2-w-review?utm_source=chatgpt.com) |\n| Display | HDMI out to projector | Any modern HDMI projector or TV works. [fromdev.com](https://www.fromdev.com/2025/05/how-to-connect-raspberry-pi-to-a-projector.html?utm_source=chatgpt.com) |\n\nAPIs are free for non-commercial use; Open-Meteo imposes reasonable request rate limits (60 calls/min). [open-meteo.com](https://open-meteo.com/?utm_source=chatgpt.com)\n\n---\n\n## **\ud83d\udc1b Troubleshooting**\n\n| Symptom | Fix |\n| ----- | ----- |\n| Black screen on boot | Ensure projector input is HDMI \\#; add `hdmi_safe=1` in `/boot/config.txt` if using adapters. [ask.tvsbook.com](https://ask.tvsbook.com/56763.1/?utm_source=chatgpt.com) |\n| \u201cpygame.error: No available video device\u201d | Run with a screen attached or set `export SDL_VIDEODRIVER=fbcon`. |\n| Weather always \u201cLoading\u2026\u201d | Check internet; Open-Meteo requires outbound HTTPS port 443\\. |\n| Wrong local time | Disable Wi-Fi power save (`iw dev wlan0 set power_save off`) and verify TZ in `raspi-config`. |\n| Frame-rate dips below 20 FPS | Switch to `--preset performance`, close other processes, lower resolution to 720 p in `/boot/config.txt`. |\n\n---\n\n## **\ud83e\udd1d Acknowledgements**\n\n* **Open-Meteo** \u2013 free weather & geocoding APIs. [open-meteo.com](https://open-meteo.com/en/docs/geocoding-api?utm_source=chatgpt.com)[open-meteo.com](https://open-meteo.com/en/docs?utm_source=chatgpt.com)[open-meteo.com](https://open-meteo.com/?utm_source=chatgpt.com)\n\n* **Pygame** \u2013 SDL-based cross-platform game library. [github.com](https://github.com/pygame/pygame/issues/3687?utm_source=chatgpt.com)\n\n* **Geopy / Nominatim (OSM)** \u2013 geocoding fallback. [gis.stackexchange.com](https://gis.stackexchange.com/questions/293615/user-agent-argument-in-nominatim-in-geopy?utm_source=chatgpt.com)\n\n* **TimezoneFinder & pytz** \u2013 offline timezone look-ups. [pypi.org](https://pypi.org/project/timezonefinder/?utm_source=chatgpt.com)\n\n* **Raspberry Pi Foundation** for the Pi Zero 2 W hardware. [datasheets.raspberrypi.com](https://datasheets.raspberrypi.com/rpizero2/raspberry-pi-zero-2-w-product-brief.pdf?utm_source=chatgpt.com)\n\n---\n\n## **\ud83d\udcc4 License**\n\nThis project is licensed under the MIT License (see `LICENSE`).\n\n\n\nHappy sky-gazing\\! \ud83c\udf0c\n\n\n\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "A realistic sky ceiling projector with weather effects, celestial objects, and enhanced starfield",
    "version": "1.0.0",
    "project_urls": {
        "Bug Reports": "https://github.com/yourusername/sky-ceiling-projector/issues",
        "Changelog": "https://github.com/yourusername/sky-ceiling-projector/blob/main/CHANGELOG.md",
        "Documentation": "https://github.com/yourusername/sky-ceiling-projector#readme",
        "Homepage": "https://github.com/yourusername/sky-ceiling-projector",
        "Repository": "https://github.com/yourusername/sky-ceiling-projector.git"
    },
    "split_keywords": [
        "astronomy",
        " projector",
        " ceiling",
        " sky",
        " weather",
        " stars",
        " moon",
        " planets",
        " pygame",
        " raspberry-pi"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "84ff4874e5c51d92b4f5e9be1dfbacbd0b39880b037b19cf4384764f7e2ad611",
                "md5": "796859b8c1f5954fa9e43612a0546a36",
                "sha256": "fbe9260a2b29b0436939df346bab14f2aecc8eec25e67559096fa8c3c8cebfaf"
            },
            "downloads": -1,
            "filename": "sky_ceiling_projector-1.0.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "796859b8c1f5954fa9e43612a0546a36",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 30450,
            "upload_time": "2025-07-08T21:33:58",
            "upload_time_iso_8601": "2025-07-08T21:33:58.336852Z",
            "url": "https://files.pythonhosted.org/packages/84/ff/4874e5c51d92b4f5e9be1dfbacbd0b39880b037b19cf4384764f7e2ad611/sky_ceiling_projector-1.0.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "0c9d5a4c810862635092a6bfd6e625e653202155aebe93df2da92923f11cbe4f",
                "md5": "73b3d1c45a3d4cd1cdae3da88a2b1bc4",
                "sha256": "f61b635cfdb089f84902ff41abfb16ba0ab268e25f21313c0798c51943738a94"
            },
            "downloads": -1,
            "filename": "sky_ceiling_projector-1.0.0.tar.gz",
            "has_sig": false,
            "md5_digest": "73b3d1c45a3d4cd1cdae3da88a2b1bc4",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 88731,
            "upload_time": "2025-07-08T21:34:00",
            "upload_time_iso_8601": "2025-07-08T21:34:00.031457Z",
            "url": "https://files.pythonhosted.org/packages/0c/9d/5a4c810862635092a6bfd6e625e653202155aebe93df2da92923f11cbe4f/sky_ceiling_projector-1.0.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-07-08 21:34:00",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "yourusername",
    "github_project": "sky-ceiling-projector",
    "github_not_found": true,
    "lcname": "sky-ceiling-projector"
}
        
Elapsed time: 0.93198s