Skip to content

Commit

Permalink
Generalize setup and starts scripts for any unixy environment, ./pika…
Browse files Browse the repository at this point in the history
…raoke.sh launch script, deprecate unused args
  • Loading branch information
vicwomg committed Dec 1, 2023
1 parent 1e8ed2c commit f48e74e
Show file tree
Hide file tree
Showing 6 changed files with 70 additions and 185 deletions.
111 changes: 23 additions & 88 deletions app.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,12 @@
import sys
import threading
import time
from functools import wraps

import cherrypy
import flask_babel
import psutil
from flask import (Flask, flash, jsonify, make_response, redirect,
render_template, request, send_file, send_from_directory,
url_for)
from flask import (Flask, flash, make_response, redirect, render_template,
request, send_file, url_for)
from flask_babel import Babel
from flask_paginate import Pagination, get_page_parameter
from selenium import webdriver
Expand All @@ -30,7 +28,6 @@
import karaoke
from constants import LANGUAGES, VERSION
from lib.get_platform import get_platform
from lib.vlcclient import get_default_vlc_path

try:
from urllib.parse import quote, unquote
Expand Down Expand Up @@ -516,7 +513,7 @@ def info():
# Delay system commands to allow redirect to render first
def delayed_halt(cmd):
time.sleep(1.5)
k.queue_clear() # stop all pending omxplayer processes
k.queue_clear()
cherrypy.engine.stop()
cherrypy.engine.exit()
k.stop()
Expand Down Expand Up @@ -606,22 +603,25 @@ def expand_fs():

def get_default_youtube_dl_path(platform):
if platform == "windows":
choco_ytdl_path = r"C:\ProgramData\chocolatey\bin\yt-dlp.exe"
scoop_ytdl_path = os.path.expanduser(r"~\scoop\shims\yt-dlp.exe")
if os.path.isfile(choco_ytdl_path):
return choco_ytdl_path
if os.path.isfile(scoop_ytdl_path):
return scoop_ytdl_path
return r"C:\Program Files\yt-dlp\yt-dlp.exe"
default_ytdl_unix_path = "/usr/local/bin/yt-dlp"
if platform == "osx":
if os.path.isfile(default_ytdl_unix_path):
return default_ytdl_unix_path
else:
# just a guess based on the default python 3 install in OSX monterey
return "/Library/Frameworks/Python.framework/Versions/3.10/bin/yt-dlp"
else:
return default_ytdl_unix_path
return os.path.join(os.path.dirname(__file__), ".venv/bin/yt-dlp.exe")
return os.path.join(os.path.dirname(__file__), ".venv/bin/yt-dlp")
# if platform == "windows":
# choco_ytdl_path = r"C:\ProgramData\chocolatey\bin\yt-dlp.exe"
# scoop_ytdl_path = os.path.expanduser(r"~\scoop\shims\yt-dlp.exe")
# if os.path.isfile(choco_ytdl_path):
# return choco_ytdl_path
# if os.path.isfile(scoop_ytdl_path):
# return scoop_ytdl_path
# return r"C:\Program Files\yt-dlp\yt-dlp.exe"
# default_ytdl_unix_path = "/usr/local/bin/yt-dlp"
# if platform == "osx":
# if os.path.isfile(default_ytdl_unix_path):
# return default_ytdl_unix_path
# else:
# # just a guess based on the default python 3 install in OSX monterey
# return "/Library/Frameworks/Python.framework/Versions/3.10/bin/yt-dlp"
# else:
# return default_ytdl_unix_path


def get_default_dl_dir(platform):
Expand Down Expand Up @@ -650,11 +650,7 @@ def get_default_dl_dir(platform):
default_log_level = logging.INFO

default_dl_dir = get_default_dl_dir(platform)
default_omxplayer_path = "/usr/bin/omxplayer"
default_adev = "both"
default_youtubedl_path = get_default_youtube_dl_path(platform)
default_vlc_path = get_default_vlc_path(platform)
default_vlc_port = 5002

# parse CLI args
parser = argparse.ArgumentParser()
Expand All @@ -673,14 +669,6 @@ def get_default_dl_dir(platform):
default=default_dl_dir,
required=False,
)
parser.add_argument(
"-o",
"--omxplayer-path",
help="Path of omxplayer. Only important to raspberry pi hardware. (default: %s)"
% default_omxplayer_path,
default=default_omxplayer_path,
required=False,
)
parser.add_argument(
"-y",
"--youtubedl-path",
Expand All @@ -691,8 +679,7 @@ def get_default_dl_dir(platform):
parser.add_argument(
"-v",
"--volume",
help="If using omxplayer, the initial player volume is specified in millibels. Negative values ok. (default: %s , Note: 100 millibels = 1 decibel)."
% default_volume,
help="Set initial player volume (default: %s)" % default_volume,
default=default_volume,
required=False,
)
Expand Down Expand Up @@ -730,13 +717,6 @@ def get_default_dl_dir(platform):
help="Hide splash screen before/between songs.",
required=False,
)
parser.add_argument(
"--adev",
help="Pass the audio output device argument to omxplayer. Possible values: hdmi/local/both/alsa[:device]. If you are using a rpi USB soundcard or Hifi audio hat, try: 'alsa:hw:0,0' Default: '%s'"
% default_adev,
default=default_adev,
required=False,
)
parser.add_argument(
"--dual-screen",
action="store_true",
Expand All @@ -749,30 +729,6 @@ def get_default_dl_dir(platform):
help="Download higher quality video. Note: requires ffmpeg and may cause CPU, download speed, and other performance issues",
required=False,
)
parser.add_argument(
"--use-omxplayer",
action="store_true",
help="Use OMX Player to play video instead of the default VLC Player. This may be better-performing on older raspberry pi devices. Certain features like key change and cdg support wont be available. Note: if you want to play audio to the headphone jack on a rpi, you'll need to configure this in raspi-config: 'Advanced Options > Audio > Force 3.5mm (headphone)'",
required=False,
),
parser.add_argument(
"--use-vlc",
action="store_true",
help="Use VLC Player to play video. Enabled by default. Note: if you want to play audio to the headphone jack on a rpi, see troubleshooting steps in README.md",
required=False,
),
parser.add_argument(
"--vlc-path",
help="Full path to VLC (Default: %s)" % default_vlc_path,
default=default_vlc_path,
required=False,
),
parser.add_argument(
"--vlc-port",
help="HTTP port for VLC remote control api (Default: %s)" % default_vlc_port,
default=default_vlc_port,
required=False,
),
parser.add_argument(
"--logo-path",
help="Path to a custom logo image file for the splash screen. Recommended dimensions ~ 500x500px",
Expand Down Expand Up @@ -805,26 +761,11 @@ def get_default_dl_dir(platform):
app.jinja_env.globals.update(filename_from_path=filename_from_path)
app.jinja_env.globals.update(url_escape=quote)

# Handle OMX player if specified
if platform == "raspberry_pi" and args.use_omxplayer:
args.use_vlc = False
else:
args.use_vlc = True

# check if required binaries exist
if not os.path.isfile(args.youtubedl_path):
print("Youtube-dl path not found! " + args.youtubedl_path)
sys.exit(1)
if args.use_vlc and not os.path.isfile(args.vlc_path):
print("VLC path not found! " + args.vlc_path)
sys.exit(1)
if (
platform == "raspberry_pi"
and not args.use_vlc
and not os.path.isfile(args.omxplayer_path)
):
print("omxplayer path not found! " + args.omxplayer_path)
sys.exit(1)

# setup/create download directory if necessary
dl_path = os.path.expanduser(args.download_path)
Expand All @@ -843,21 +784,15 @@ def get_default_dl_dir(platform):
k = karaoke.Karaoke(
port=args.port,
download_path=dl_path,
omxplayer_path=args.omxplayer_path,
youtubedl_path=args.youtubedl_path,
splash_delay=args.splash_delay,
log_level=args.log_level,
volume=args.volume,
hide_ip=args.hide_ip,
hide_raspiwifi_instructions=args.hide_raspiwifi_instructions,
hide_splash_screen=args.hide_splash_screen,
omxplayer_adev=args.adev,
dual_screen=args.dual_screen,
high_quality=args.high_quality,
use_omxplayer=args.use_omxplayer,
use_vlc=args.use_vlc,
vlc_path=args.vlc_path,
vlc_port=args.vlc_port,
logo_path=args.logo_path,
hide_overlay=args.hide_overlay
)
Expand Down
20 changes: 0 additions & 20 deletions karaoke.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,18 +56,12 @@ def __init__(
hide_ip=False,
hide_raspiwifi_instructions=False,
hide_splash_screen=False,
omxplayer_adev="both",
dual_screen=False,
high_quality=False,
volume=0,
log_level=logging.DEBUG,
splash_delay=2,
youtubedl_path="/usr/local/bin/yt-dlp",
omxplayer_path=None,
use_omxplayer=False,
use_vlc=True,
vlc_path=None,
vlc_port=None,
logo_path=None,
hide_overlay=False
):
Expand All @@ -77,25 +71,17 @@ def __init__(
self.hide_ip = hide_ip
self.hide_raspiwifi_instructions = hide_raspiwifi_instructions
self.hide_splash_screen = hide_splash_screen
self.omxplayer_adev = omxplayer_adev
self.download_path = download_path
self.dual_screen = dual_screen
self.high_quality = high_quality
self.splash_delay = int(splash_delay)
self.volume_offset = volume
self.youtubedl_path = youtubedl_path
self.omxplayer_path = omxplayer_path
self.use_omxplayer = use_omxplayer
self.use_vlc = use_vlc
self.vlc_path = vlc_path
self.vlc_port = vlc_port
self.logo_path = self.default_logo_path if logo_path == None else logo_path
self.hide_overlay = hide_overlay

# other initializations
self.platform = get_platform()
self.vlcclient = None
self.omxclient = None
self.screen = None

logging.basicConfig(
Expand All @@ -111,18 +97,12 @@ def __init__(
hide RaspiWiFi instructions: {self.hide_raspiwifi_instructions}
hide splash: {self.hide_splash_screen}
splash_delay: {self.splash_delay}
omx audio device: {self.omxplayer_adev}
dual screen: {self.dual_screen}
high quality video: {self.high_quality}
download path: {self.download_path}
default volume: {self.volume_offset}
youtube-dl path: {self.youtubedl_path}
omxplayer path: {self.omxplayer_path}
logo path: {self.logo_path}
Use OMXPlayer: {self.use_omxplayer}
Use VLC: {self.use_vlc}
VLC path: {self.vlc_path}
VLC port: {self.vlc_port}
log_level: {log_level}
hide overlay: {self.hide_overlay}""")

Expand Down
2 changes: 1 addition & 1 deletion start-pi.sh → pikaraoke.sh
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#!/bin/bash

source .venv/bin/activate
python3 app.py --hide-splash -l10
python3 app.py $@
9 changes: 2 additions & 7 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,12 +1,6 @@
# tempora==1.14.0
# jaraco.functools==2.0
# CherryPy==10.2.1
CherryPy
# six==1.12.0
Flask
# pillow
qrcode
# futures
psutil
unidecode
requests
Expand All @@ -15,4 +9,5 @@ jinja2==3.0.3 # Avoid escape issue: https://github.com/sphinx-doc/sphinx/issues/
Babel==2.9.1
Flask-Babel==2.0.0
selenium
ffmpeg-python
ffmpeg-python
yt-dlp
69 changes: 0 additions & 69 deletions setup-pi.sh

This file was deleted.

Loading

0 comments on commit f48e74e

Please sign in to comment.