This commit is contained in:
ltadeu6 2026-04-15 16:39:18 -03:00
parent 8364260ec0
commit 9b07740b53
No known key found for this signature in database
GPG key ID: FB9FDAB6B6F3418D
6 changed files with 153 additions and 0 deletions

29
.gitignore vendored Normal file
View file

@ -0,0 +1,29 @@
# Python bytecode / caches
__pycache__/
*.py[cod]
*.pyo
# Virtualenvs
.venv/
venv/
ENV/
# direnv / nix
.direnv/
.envrc
result
result-*
# Env/config files (keep secrets out of git even for local projects)
.env
.env.*
# IDE / OS
.idea/
.vscode/
.DS_Store
Thumbs.db
# Logs / temp
*.log
*.tmp

51
AGENTS.md Normal file
View file

@ -0,0 +1,51 @@
# music-light (agent notes)
This repo is a single Python script (`luz-musica.py`) that:
- reads the currently playing track via `playerctl` (MPRIS metadata),
- fetches the album art (URL or `file://`),
- extracts a dominant color (filtering dark/low-saturation pixels),
- sends `light.turn_on` to a Home Assistant instance with `rgb_color` + `brightness_pct`.
## How to run (local)
- System dependency: `playerctl` must be installed and your player must expose MPRIS metadata.
- Python deps: `requests`, `Pillow`.
- Run: `python3 luz-musica.py`
## Dependencies (recommended setups)
### Option A (NixOS / Nix): reproducible dev shell (no pip)
If you have Nix with flakes enabled:
- Enter shell: `nix develop`
- Run: `python3 luz-musica.py`
Without flakes:
- Enter shell: `nix-shell`
- Run: `python3 luz-musica.py`
### Option B (Ubuntu/Debian/etc): isolated venv (pip)
Install system bits:
- `sudo apt-get update`
- `sudo apt-get install -y python3 python3-venv playerctl`
Create a venv and install Python deps:
- `python3 -m venv .venv`
- `source .venv/bin/activate`
- `python -m pip install -U pip`
- `pip install -r requirements.txt`
Then run:
- `python luz-musica.py`
## Configuration
Edit constants at the top of `luz-musica.py`:
- `HA_URL`, `HA_TOKEN`, `LIGHT_ENTITY`
- tuning: `BRIGHTNESS_PCT`, `SATURATION_BOOST`, `MIN_SATURATION`, `MIN_VALUE`, `REQUEST_TIMEOUT`
## Expected behavior / troubleshooting
- If nothing is playing (or `playerctl` fails), the loop sleeps and retries.
- If `mpris:artUrl` is missing, it logs and waits for the next track change.
- If Home Assistant is unreachable or returns an error, it logs the exception and retries.
## Suggested improvements (optional)
- Read `HA_URL`/`HA_TOKEN` from env vars (keep defaults as fallback) to avoid editing the script.
- Add a `requirements.txt` and a short `README.md` once the project grows.

15
Makefile Normal file
View file

@ -0,0 +1,15 @@
PY ?= python3
VENV ?= .venv
.PHONY: venv deps run
venv:
$(PY) -m venv $(VENV)
$(VENV)/bin/python -m pip install -U pip
deps: venv
$(VENV)/bin/pip install -r requirements.txt
run: deps
$(VENV)/bin/python luz-musica.py

42
flake.nix Normal file
View file

@ -0,0 +1,42 @@
{
description = "music-light: dev environment (Python + playerctl) for NixOS/Nix";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
};
outputs = { self, nixpkgs }:
let
systems = [
"x86_64-linux"
"aarch64-linux"
];
forAllSystems = f: nixpkgs.lib.genAttrs systems (system: f system);
in
{
devShells = forAllSystems (system:
let
pkgs = import nixpkgs { inherit system; };
# Use a stable Python version with good binary coverage for Pillow.
py = pkgs.python312.withPackages (ps: [
ps.requests
ps.pillow
]);
in
{
default = pkgs.mkShell {
packages = [
py
pkgs.playerctl
];
shellHook = ''
echo "music-light devShell ready: $(python --version)"
'';
};
});
};
}

2
requirements.txt Normal file
View file

@ -0,0 +1,2 @@
requests>=2.0
Pillow>=9.0

14
shell.nix Normal file
View file

@ -0,0 +1,14 @@
{ pkgs ? import <nixpkgs> { } }:
let
py = pkgs.python312.withPackages (ps: [
ps.requests
ps.pillow
]);
in
pkgs.mkShell {
packages = [
py
pkgs.playerctl
];
}