Files
live-radio/src/ozan_radio/__main__.py
T

67 lines
1.9 KiB
Python
Raw Normal View History

from __future__ import annotations
import argparse
import asyncio
import uvicorn
from ozan_radio.config import Config
from ozan_radio.dj import DeepSeekDJ
from ozan_radio.lyria import LyriaEngine
from ozan_radio.queue import RadioQueue
from ozan_radio.server import app
from ozan_radio.taste import load_taste_seeds
from ozan_radio.web_playlist import export_gateway_playlist
async def generate_one() -> None:
"""CLI: generate a single track and print the result."""
cfg = Config.from_env()
seeds = load_taste_seeds()
if seeds:
print(f"Taste seeds: {seeds.summary}\n")
else:
print("No taste_seeds.json — DJ uses settings.json only.\n")
q = RadioQueue(cfg.output_dir)
plan = await DeepSeekDJ(cfg).plan_next(q.recent_titles, seeds)
print(f"DJ: {plan.dj_line}")
print(f"Title: {plan.title}")
print(f"Prompt: {plan.lyria_prompt}\n")
print("Generating with Lyria 3…")
track = LyriaEngine(cfg).generate(plan)
q.add(track)
print(f"Saved: {track.audio_path}")
def main() -> None:
parser = argparse.ArgumentParser(description="Live Ozan Radio")
parser.add_argument(
"command",
nargs="?",
default="serve",
choices=["serve", "generate", "export-web"],
help="serve = API server, generate = one-shot track, export-web = refresh gateway/index.html playlist",
)
args = parser.parse_args()
if args.command == "generate":
asyncio.run(generate_one())
return
if args.command == "export-web":
path = export_gateway_playlist()
if path:
print(f"Updated gateway playlist -> {path}")
else:
print("gateway/index.html missing — nothing exported")
return
cfg = Config.from_env()
uvicorn.run(app, host=cfg.radio_host, port=cfg.radio_port, log_level="info")
if __name__ == "__main__":
main()