Compare commits

..

No commits in common. "6168798d198bdb2dfe31bc4ab6bed6103e5e8b31" and "3c5a5aa37ab66d4aa2af4682e9fb988d5ef61b52" have entirely different histories.

23 changed files with 105 additions and 265 deletions

4
.gitignore vendored
View File

@ -8,3 +8,7 @@ wheels/
# Virtual environments # Virtual environments
.venv .venv
# configs of IDEs
.idea/
.vscode/

5
.idea/.gitignore generated vendored Normal file
View File

@ -0,0 +1,5 @@
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/

View File

@ -2,7 +2,6 @@
<module type="PYTHON_MODULE" version="4"> <module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager"> <component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$"> <content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
<excludeFolder url="file://$MODULE_DIR$/.venv" /> <excludeFolder url="file://$MODULE_DIR$/.venv" />
</content> </content>
<orderEntry type="jdk" jdkName="uv (StarSkyPresenter)" jdkType="Python SDK" /> <orderEntry type="jdk" jdkName="uv (StarSkyPresenter)" jdkType="Python SDK" />

View File

@ -0,0 +1,12 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="PyUnresolvedReferencesInspection" enabled="true" level="WARNING" enabled_by_default="true">
<option name="ignoredIdentifiers">
<list>
<option value="logging.Logger.trace" />
</list>
</option>
</inspection_tool>
</profile>
</component>

View File

@ -0,0 +1,6 @@
<component name="InspectionProjectProfileManager">
<settings>
<option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" />
</settings>
</component>

8
.idea/modules.xml generated Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/StarSkyPresenter.iml" filepath="$PROJECT_DIR$/.idea/StarSkyPresenter.iml" />
</modules>
</component>
</project>

6
.idea/vcs.xml generated Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>

92
.idea/workspace.xml generated
View File

@ -1,92 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="AutoImportSettings">
<option name="autoReloadType" value="SELECTIVE" />
</component>
<component name="ChangeListManager">
<list default="true" id="ae2847d5-ce86-4d84-8e66-f1369f1438e2" name="Changes" comment="">
<change beforePath="$PROJECT_DIR$/pyproject.toml" beforeDir="false" afterPath="$PROJECT_DIR$/pyproject.toml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/uv.lock" beforeDir="false" afterPath="$PROJECT_DIR$/uv.lock" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="FileTemplateManagerImpl">
<option name="RECENT_TEMPLATES">
<list>
<option value="Python Script" />
</list>
</option>
</component>
<component name="Git.Settings">
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component>
<component name="ProjectColorInfo">{
&quot;associatedIndex&quot;: 2
}</component>
<component name="ProjectId" id="364Xx2Nxly7bFdlBA2xgPnKm0Er" />
<component name="ProjectViewState">
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" />
</component>
<component name="PropertiesComponent">{
&quot;keyToString&quot;: {
&quot;ModuleVcsDetector.initialDetectionPerformed&quot;: &quot;true&quot;,
&quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;,
&quot;RunOnceActivity.TerminalTabsStorage.copyFrom.TerminalArrangementManager&quot;: &quot;true&quot;,
&quot;RunOnceActivity.git.unshallow&quot;: &quot;true&quot;,
&quot;git-widget-placeholder&quot;: &quot;restructuring&quot;,
&quot;last_opened_file_path&quot;: &quot;/home/linus/Desktop/HomeLabProjects/StarSkyPresenter/src/starsky_presenter/main.py&quot;,
&quot;settings.editor.selected.configurable&quot;: &quot;preferences.pluginManager&quot;,
&quot;uv run.StarSky Presenter.executor&quot;: &quot;Run&quot;
}
}</component>
<component name="RecentsManager">
<key name="CopyFile.RECENT_KEYS">
<recent name="$PROJECT_DIR$/resources" />
</key>
<key name="MoveFile.RECENT_KEYS">
<recent name="$PROJECT_DIR$/src/starsky_presenter" />
<recent name="$PROJECT_DIR$/src" />
<recent name="$PROJECT_DIR$" />
<recent name="$PROJECT_DIR$/resources" />
</key>
</component>
<component name="RunManager">
<configuration name="StarSky Presenter" type="UvRunConfigurationType" factoryName="UvRunConfigurationType">
<option name="args">
<list />
</option>
<option name="checkSync" value="false" />
<option name="env">
<map />
</option>
<option name="runType" value="MODULE" />
<option name="scriptOrModule" value="starsky_presenter.entry" />
<option name="uvArgs">
<list />
</option>
<option name="uvSdkKey" value="uv (StarSkyPresenter)" />
<method v="2" />
</configuration>
</component>
<component name="SharedIndexes">
<attachedChunks>
<set>
<option value="bundled-python-sdk-41e8cd69c857-64d779b69b7a-com.jetbrains.pycharm.pro.sharedIndexes.bundled-PY-251.26927.90" />
</set>
</attachedChunks>
</component>
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="ae2847d5-ce86-4d84-8e66-f1369f1438e2" name="Changes" comment="" />
<created>1764267059790</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1764267059790</updated>
</task>
<servers />
</component>
</project>

View File

@ -1,23 +1,16 @@
[project] [project]
name = "starsky-presenter" name = "starsky"
version = "0.1.0" version = "0.1.3"
description = "Small utility for projecting a sky full of stars" description = "Add your description here"
readme = "README.md" readme = "README.md"
authors = [
{ name = "Linus Vogel", email = "linus@linvogel.ch" }
]
requires-python = ">=3.13" requires-python = ">=3.13"
dependencies = [ dependencies = [
"pygame>=2.6.1", "pygame>=2.6.1",
"pyqt6>=6.10.0", "pyqt6>=6.10.0",
"pyyaml>=6.0.3",
] ]
[project.scripts] [project.scripts]
starsky-presenter = "starsky_presenter:main" starsky = "main:cli_main"
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.setuptools.package-data]
myModule = ["resources/main_window.qml"]

View File

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -4,12 +4,11 @@ from time import time
class Controller(QObject): class Controller(QObject):
def __init__(self, window, screen, parent=None): def __init__(self, window, parent=None):
super().__init__(parent) super().__init__(parent)
self.window = window self.window = window
self.last_close_press = 0 self.last_close_press = 0
self.successful_clicks = 0 self.successful_clicks = 0
self.screen = screen
@pyqtSlot() @pyqtSlot()
def close_application(self): def close_application(self):
@ -26,6 +25,4 @@ class Controller(QObject):
@pyqtSlot(int) @pyqtSlot(int)
def select_scene(self, scene: int): def select_scene(self, scene: int):
self.screen.last_scene = self.screen.active_scene self.window.selected_scene = scene
self.screen.active_scene = scene
self.screen.scene_time = 0

View File

@ -1,22 +1,21 @@
from pathlib import Path
from PyQt6.QtGui import QGuiApplication from PyQt6.QtGui import QGuiApplication
from PyQt6.QtQml import QQmlApplicationEngine from PyQt6.QtQml import QQmlApplicationEngine
from starsky_presenter.controller.controller import Controller from src.controller.controller import Controller
from starsky_presenter.projection.screen import Screen from src.projection.screen import Screen
class ControlWindow: class ControlWindow:
def __init__(self, screen): def __init__(self):
self.app = QGuiApplication([]) self.app = QGuiApplication([])
self.running = True self.running = True
self.engine = QQmlApplicationEngine(self.app) self.engine = QQmlApplicationEngine(self.app)
self.controller = Controller(self, screen) self.controller = Controller(self)
self.engine.quit.connect(self.app.quit) self.engine.quit.connect(self.app.quit)
self.engine.rootContext().setContextProperty("controller_backend", self.controller) self.engine.rootContext().setContextProperty("controller_backend", self.controller)
self.engine.load(f"{Path(__file__).parent.parent}/resources/main_window.qml") self.engine.load("resources/main_window.qml")
def process_events(self): def process_events(self):
return self.app.processEvents() return self.app.processEvents()

44
src/main.py Normal file
View File

@ -0,0 +1,44 @@
import sys
import json
from random import random, seed
from pygame.transform import scale
import pygame
from src.controller.window import ControlWindow
from src.projection.screen import Screen, Star
def cli_main():
seed(43)
image = pygame.image.load('resources/star.png')
stars = [
Star(**{
"_id": i,
"x": random(),
"y": random(),
"alpha": random() * 360,
"rot": random() * 360,
"scale": random() * 0.5 + 0.25,
"offset": random(),
"image": image
})
for i in range(4)
]
control_window = ControlWindow()
screen = Screen(stars)
while control_window.is_running():
control_window.process_events()
screen.update()
screen.close()
control_window.close()
if __name__ == "__main__":
cli_main()

View File

@ -6,8 +6,8 @@ from time import time, sleep
from random import random from random import random
class Star: class Star:
def __init__(self, sid: str, x: int, y: int, alpha: float, rot: float, scale: float, offset: float, image: pygame.Surface): def __init__(self, _id: int, x: int, y: int, alpha: float, rot: float, scale: float, offset: float, image: pygame.Surface):
self.sid = sid self.id = _id
self.x = x self.x = x
self.y = y self.y = y
self.rot = rot self.rot = rot
@ -25,24 +25,13 @@ class Screen:
self.stars = stars self.stars = stars
self.last = time() self.last = time()
self.brightness = 1.0 self.brightness = 1.0
self.active_scene = 0
self.last_scene = 0
self.scene_time: float = 0
def update(self, scene_data): def update(self):
self.screen.fill((0, 0, 0)) self.screen.fill((0, 0, 0))
now = time() now = time()
delta = now - self.last delta = now - self.last
self.last = now self.last = now
self.scene_time += delta
weight = sin(min(self.scene_time, pi/2)) ** 2
def update_star_scene(star, old, new, weight):
star.x = weight*new['x'] + (1-weight)*old['x']
for star in self.stars: for star in self.stars:
star.alpha += star.rot * delta star.alpha += star.rot * delta
scaled = transform.rotozoom(star.image, star.alpha, star.scale) scaled = transform.rotozoom(star.image, star.alpha, star.scale)

View File

@ -1,4 +0,0 @@
from starsky_presenter.entry import cli_main
def main() -> None:
cli_main()

View File

@ -1,66 +0,0 @@
import sys
import json
from importlib.resources import open_text, open_binary
from importlib.readers import FileReader
from importlib.machinery import SourcelessFileLoader
from io import BufferedReader
from pathlib import Path
import yaml
from random import random, seed
from copy import deepcopy
from pygame.transform import scale
import pygame
from starsky_presenter.controller.window import ControlWindow
from starsky_presenter.projection.screen import Screen, Star
def cli_main():
seed(43)
reader = FileReader(SourcelessFileLoader("resource_loader", f"{Path(__file__).parent}/resources"))
scenes = yaml.safe_load(reader.open_resource('resources/scenes.yml'))
objects = yaml.safe_load(reader.open_resource('resources/objects.yml'))
print(json.dumps(objects, indent=4))
print(objects['stars'][0]['sid'])
scene_data = [
{ obj['sid']: deepcopy(obj).update(scene[obj['sid']]) if scene and obj['sid'] in scene else deepcopy(obj) for obj in objects["stars"] }
for scene in scenes
]
star_references = {}
print(json.dumps(scenes, indent=4))
print(json.dumps(objects, indent=4))
def setup_star_instance(data: dict) -> Star:
image_path = f"resources/{data['image']}"
image = pygame.image.load(reader.open_resource(image_path))
data['image'] = image
star = Star(**data)
star_references[data['sid']] = star
return star
stars = [ setup_star_instance(star) for star in objects["stars"] ]
screen = Screen(stars)
control_window = ControlWindow(screen)
while control_window.is_running():
control_window.process_events()
screen.update(scene_data)
screen.close()
control_window.close()
if __name__ == "__main__":
cli_main()

View File

@ -1,17 +0,0 @@
stars:
- sid: star-bg-01
x: 0.1
y: 0.1
scale: 0.6
alpha: 0
rot: 30
offset: 0
image: star.png
- sid: star-bg-02
x: 0.3
y: 0.4
scale: 0.8
alpha: 25
rot: 29
offset: 0
image: star.png

View File

@ -1,5 +0,0 @@
-
- star-bg-01:
x: 0.6
star-bg-02:
y: 0.6

44
uv.lock generated
View File

@ -67,54 +67,16 @@ wheels = [
] ]
[[package]] [[package]]
name = "pyyaml" name = "starsky"
version = "6.0.3" version = "0.1.3"
source = { registry = "https://pypi.org/simple" } source = { virtual = "." }
sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669, upload-time = "2025-09-25T21:32:23.673Z" },
{ url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252, upload-time = "2025-09-25T21:32:25.149Z" },
{ url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081, upload-time = "2025-09-25T21:32:26.575Z" },
{ url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", size = 841159, upload-time = "2025-09-25T21:32:27.727Z" },
{ url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626, upload-time = "2025-09-25T21:32:28.878Z" },
{ url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613, upload-time = "2025-09-25T21:32:30.178Z" },
{ url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115, upload-time = "2025-09-25T21:32:31.353Z" },
{ url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427, upload-time = "2025-09-25T21:32:32.58Z" },
{ url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090, upload-time = "2025-09-25T21:32:33.659Z" },
{ url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246, upload-time = "2025-09-25T21:32:34.663Z" },
{ url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814, upload-time = "2025-09-25T21:32:35.712Z" },
{ url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809, upload-time = "2025-09-25T21:32:36.789Z" },
{ url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454, upload-time = "2025-09-25T21:32:37.966Z" },
{ url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355, upload-time = "2025-09-25T21:32:39.178Z" },
{ url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175, upload-time = "2025-09-25T21:32:40.865Z" },
{ url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228, upload-time = "2025-09-25T21:32:42.084Z" },
{ url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194, upload-time = "2025-09-25T21:32:43.362Z" },
{ url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429, upload-time = "2025-09-25T21:32:57.844Z" },
{ url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912, upload-time = "2025-09-25T21:32:59.247Z" },
{ url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108, upload-time = "2025-09-25T21:32:44.377Z" },
{ url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641, upload-time = "2025-09-25T21:32:45.407Z" },
{ url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901, upload-time = "2025-09-25T21:32:48.83Z" },
{ url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132, upload-time = "2025-09-25T21:32:50.149Z" },
{ url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261, upload-time = "2025-09-25T21:32:51.808Z" },
{ url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272, upload-time = "2025-09-25T21:32:52.941Z" },
{ url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923, upload-time = "2025-09-25T21:32:54.537Z" },
{ url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062, upload-time = "2025-09-25T21:32:55.767Z" },
{ url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" },
]
[[package]]
name = "starsky-presenter"
version = "0.1.0"
source = { editable = "." }
dependencies = [ dependencies = [
{ name = "pygame" }, { name = "pygame" },
{ name = "pyqt6" }, { name = "pyqt6" },
{ name = "pyyaml" },
] ]
[package.metadata] [package.metadata]
requires-dist = [ requires-dist = [
{ name = "pygame", specifier = ">=2.6.1" }, { name = "pygame", specifier = ">=2.6.1" },
{ name = "pyqt6", specifier = ">=6.10.0" }, { name = "pyqt6", specifier = ">=6.10.0" },
{ name = "pyyaml", specifier = ">=6.0.3" },
] ]