qast / docs
Site Docs Home

Python API

qast exposes a clean Python API for automation, scheduled playback, and digital signage.

Public exports

from qast import discover, cast, Qast, Device, Status, QueueItem

Device discovery

from qast import discover

# Discover all TVs on the LAN (5-second scan)
devices = discover()

for d in devices:
    print(f"{d.name} [{d.protocol}] {d.host}:{d.port}")

# Extended scan with all protocol variants
devices = discover(timeout=15, show_all=True)

discover()

ParameterTypeDefaultDescription
timeoutint15Discovery timeout in seconds
show_allboolFalseInclude all protocol variants per device

Returns list[Device]. Each Device has name, protocol, host, port.

One-shot casting

from qast import discover, cast

devices = discover()

# Cast a URL
cast("https://youtube.com/watch?v=dQw4w9WgXcQ", device=devices[0])

# Cast a local file with duration limit
cast("video.mp4", device=devices[0], duration=60)

# Cast desktop for 30 seconds
cast("screen", device="roku", duration=30)

# Cast with YouTube cookies
cast("https://youtube.com/watch?v=...",
     device="Living Room TV",
     cookies_from_browser="chrome")

cast()

ParameterTypeDescription
sourcestrURL, file path, or capture source
deviceDevice | str | intTarget device, name, or index
durationint | NoneMax playback seconds
repeatboolLoop playback
shuffleboolRandomize order
cookies_from_browserstr | NoneBrowser for cookie extraction

Queue-based playback

from qast import Qast

# Create a queue targeting a specific device
q = Qast(device="Living Room TV")

# Add sources with optional durations
q.add("https://youtube.com/watch?v=VIDEO1")
q.add("~/Videos/workout.mp4", duration=300)
q.add("screen", duration=30)
q.add("window:Grafana", duration=120)

# Start playback
q.play()                          # play once
q.play(repeat=True)               # loop forever
q.play(repeat=True, shuffle=True) # loop + shuffle

# Dynamic control during playback
q.skip()       # skip to next item
q.remove(2)    # remove item at index
q.stop()       # stop playback

Queue status

# Get current playback status
status = q.status()

print(status.state)        # "playing", "stopped", etc.
print(status.now_playing)  # current source string
print(status.duration)     # elapsed seconds
print(status.position)     # current queue position
print(status.queue)        # list of QueueItem objects

Status fields

FieldTypeDescription
statestrCurrent state (playing, stopped, etc.)
now_playingstrActive source
durationfloatElapsed playback time
positionintQueue index
queuelist[QueueItem]All queued items

Use cases

References

Created by Rich LeGrand · MIT License