diff --git a/pulsedmedia/README.md b/pulsedmedia/README.md
new file mode 100644
index 0000000..5a90f08
--- /dev/null
+++ b/pulsedmedia/README.md
@@ -0,0 +1,5 @@
+# App install on Pulsed Media Seedbox
+
+
+
+ curl https://gist.githubusercontent.com/gsj1377/a7eb727e079a1cefc9baff4e130d8900/raw/app-installation.sh | bash && source ~/.bashrc
diff --git a/pulsedmedia/app-installation.sh b/pulsedmedia/app-installation.sh
new file mode 100644
index 0000000..ad01951
--- /dev/null
+++ b/pulsedmedia/app-installation.sh
@@ -0,0 +1,401 @@
+#!/usr/bin/env bash
+
+rm -rf $HOME/.bin
+
+mkdir -p $HOME/.config/{radarr,sonarr,cloudplow,prowlarr,jellyfin,sabnzbd}
+
+## change version no to update SABNZBD and JELLYFINd
+
+SABNZBD_VERSION=$(curl -s https://api.github.com/repos/sabnzbd/sabnzbd/releases/latest | grep -E 'tag_name' | cut -d '"' -f 4)
+SABNZBD_URL=$(curl -s https://api.github.com/repos/sabnzbd/sabnzbd/releases/latest | grep -E 'browser_download_url' | grep '\-src' | cut -d '"' -f 4)
+JELLYFIN_VERSION=$(curl -s 'https://repo.jellyfin.org/releases/server/linux/stable/combined/' | egrep -m 1 -o "jellyfin_[0-9\.]+_amd64\.tar\.gz" | head -n 1 | cut -d "_" -f2)
+## to update ASPDOTNET find new url at https://dotnet.microsoft.com/en-us/download/dotnet/5.0
+ASPDOTNET_URL="https://download.visualstudio.microsoft.com/download/pr/f56adf04-e4a8-48bf-b2e2-722e7206a4f2/7f40d4ebeff281120ba76e7b091356b0/aspnetcore-runtime-5.0.14-linux-x64.tar.gz"
+
+random_open_port(){
+LOW_BOUND=10000
+UPPER_BOUND=65000
+comm -23 <(seq ${LOW_BOUND} ${UPPER_BOUND} | sort -u) <(ss -Htan | awk '{print $4}' | rev | cut -d':' -f1 | rev | sort -u) | shuf | head -n 1
+}
+
+SABNZBD_PORT=$(random_open_port)
+RADARR_PORT=$(random_open_port)
+PROWLARR_PORT=$(random_open_port)
+SONARR_PORT=$(random_open_port)
+JELLYFIN_PORT=$(random_open_port)
+USERNAME=$(whoami)
+
+## kill tmux
+kill -9 $(pgrep -f -u ${USERNAME} "tmux") > /dev/null 2>&1
+
+## install cloudplow
+installdir="$HOME/.bin/cloudplow"
+datadir="$HOME/.config/cloudplow"
+python3 -m venv ${installdir}
+cd ${installdir}
+git clone https://github.com/l3uddz/cloudplow.git > /dev/null 2>&1
+source ${installdir}/bin/activate
+python -m pip install -U pip > /dev/null 2>&1
+python3 -m pip install -r ${installdir}/cloudplow/requirements.txt > /dev/null 2>&1
+deactivate
+
+## install sabnzbd
+app="sabnzbd"
+installdir="$HOME/.bin/sabnzbd"
+datadir="$HOME/.config/sabnzbd"
+kill -9 $(pgrep -f -u ${USERNAME} "${app}") > /dev/null 2>&1
+python3 -m venv ${installdir}
+cd ${installdir}
+echo "Downloading...${app^^}"
+wget ${SABNZBD_URL} -O ${app}.tar.gz > /dev/null 2>&1
+mkdir ${app}
+tar -xf "${app}.tar.gz" -C ${app} --strip-components=1 > /dev/null 2>&1
+rm "${app}.tar.gz" > /dev/null 2>&1
+echo "Installation files downloaded and extracted"
+source ${installdir}/bin/activate
+python -m pip install -U pip > /dev/null 2>&1
+python3 -m pip install -r ${installdir}/${app}/requirements.txt > /dev/null 2>&1
+deactivate
+echo "${app^^} Installed"
+echo "configuring ${app^^}"
+if [ ! -f $datadir/${app}.ini ]; then
+cat << EOF > $datadir/${app}.ini
+[misc]
+port = 8080
+url_base = /sabnzbd
+host_whitelist = $hostname
+EOF
+fi
+sed -i -E "s#(url_base = ).*#\1/public-${USERNAME}/${app}#" $datadir/${app}.ini
+sed -i -E "s#^(port = ).*#\1${SABNZBD_PORT}#" $datadir/${app}.ini
+sed -i -E "s#^(host_whitelist = ).*#\1$(hostname)#" $datadir/${app}.ini
+echo "${app^^} configured"
+
+## install radarr
+app="radarr"
+installdir="$HOME/.bin"
+datadir="$HOME/.config/${app}"
+branch="master"
+ARCH=$(dpkg --print-architecture)
+kill -9 $(pgrep -f -u ${USERNAME} "${app^}") > /dev/null 2>&1
+# get arch
+dlbase="https://$app.servarr.com/v1/update/$branch/updatefile?os=linux&runtime=netcore"
+case "$ARCH" in
+"amd64") DLURL="${dlbase}&arch=x64" ;;
+"armhf") DLURL="${dlbase}&arch=arm" ;;
+"arm64") DLURL="${dlbase}&arch=arm64" ;;
+*)
+ echo "Arch not supported"
+ exit 1
+ ;;
+esac
+echo ""
+echo "Downloading...${app^^}"
+cd ${installdir}
+wget --content-disposition "$DLURL" > /dev/null 2>&1
+tar -xvzf ${app^}.*.tar.gz > /dev/null 2>&1
+rm ${app^}.*.tar.gz > /dev/null 2>&1
+echo "Installation files downloaded and extracted"
+touch "$datadir"/update_required
+echo "${app^^} Installed"
+echo "configuring ${app^^}"
+#tmux new-session -d -s "${app}" "$installdir/${app^}/${app^} -nobrowser -data=$datadir"
+#sleep 10
+#kill $(lsof -t -i :7878) &> /dev/null || true
+if [ ! -f $datadir/config.xml ]; then
+cat << EOF > $datadir/config.xml
+
+
+ 7878
+ *
+
+EOF
+fi
+sed -i -e "s/\(\)[^<]*\(<\/Port>\)/\1$RADARR_PORT\2/g" $datadir/config.xml
+sed -i -e "s/\(\)[^<]*\(<\/UrlBase>\)/\1\/public-${USERNAME}\/${app}\2/g" $datadir/config.xml
+sed -i -e "s/\(\)[^<]*\(<\/BindAddress>\)/\1127.0.0.1\2/g" $datadir/config.xml
+echo "${app^^} configured"
+
+
+## install prowlarr
+app="prowlarr"
+installdir="$HOME/.bin"
+datadir="$HOME/.config/${app}"
+branch="develop"
+ARCH=$(dpkg --print-architecture)
+kill -9 $(pgrep -f -u ${USERNAME} "${app^}") > /dev/null 2>&1
+# get arch
+dlbase="https://$app.servarr.com/v1/update/$branch/updatefile?os=linux&runtime=netcore"
+case "$ARCH" in
+"amd64") DLURL="${dlbase}&arch=x64" ;;
+"armhf") DLURL="${dlbase}&arch=arm" ;;
+"arm64") DLURL="${dlbase}&arch=arm64" ;;
+*)
+ echo "Arch not supported"
+ exit 1
+ ;;
+esac
+echo ""
+echo "Downloading...${app^^}"
+cd ${installdir}
+wget --content-disposition "$DLURL" > /dev/null 2>&1
+tar -xvzf ${app^}.*.tar.gz > /dev/null 2>&1
+rm ${app^}.*.tar.gz > /dev/null 2>&1
+echo "Installation files downloaded and extracted"
+touch "$datadir"/update_required
+echo "${app^^} Installed"
+echo "configuring ${app^^}"
+if [ ! -f $datadir/config.xml ]; then
+cat << EOF > $datadir/config.xml
+
+
+ 9696
+ *
+
+EOF
+fi
+sed -i -e "s/\(\)[^<]*\(<\/Port>\)/\1$PROWLARR_PORT\2/g" $datadir/config.xml
+sed -i -e "s/\(\)[^<]*\(<\/UrlBase>\)/\1\/public-${USERNAME}\/${app}\2/g" $datadir/config.xml
+sed -i -e "s/\(\)[^<]*\(<\/BindAddress>\)/\1127.0.0.1\2/g" $datadir/config.xml
+echo "${app^^} configured"
+
+
+## install sonarr
+app="sonarr"
+installdir="$HOME/.bin"
+datadir="$HOME/.config/${app}"
+branch="main"
+ARCH=$(dpkg --print-architecture)
+kill -9 $(pgrep -f -u ${USERNAME} "${app^}") > /dev/null 2>&1
+# get arch
+dlbase="https://services.$app.tv/v1/download/$branch/latest?version=3&os=linux&runtime=netcore"
+ARCH=$(dpkg --print-architecture)
+case "$ARCH" in
+"amd64") DLURL="${dlbase}&arch=x64" ;;
+"armhf") DLURL="${dlbase}&arch=arm" ;;
+"arm64") DLURL="${dlbase}&arch=arm64" ;;
+*)
+ echo "Arch not supported"
+ exit 1
+ ;;
+esac
+echo ""
+echo "Downloading...${app^^}"
+cd ${installdir}
+wget --content-disposition "$DLURL" > /dev/null 2>&1
+tar -xvzf ${app^}.*.tar.gz > /dev/null 2>&1
+rm ${app^}.*.tar.gz > /dev/null 2>&1
+echo "Installation files downloaded and extracted"
+touch "$datadir"/update_required
+echo "${app^^} Installed"
+echo "configuring ${app^^}"
+if [ ! -f $datadir/config.xml ]; then
+cat << EOF > $datadir/config.xml
+
+ 8989
+
+ *
+
+EOF
+fi
+sed -i -e "s/\(\)[^<]*\(<\/Port>\)/\1$SONARR_PORT\2/g" $datadir/config.xml
+sed -i -e "s/\(\)[^<]*\(<\/UrlBase>\)/\1\/public-${USERNAME}\/${app}\2/g" $datadir/config.xml
+#sed -i -e "s/\(\)[^<]*\(<\/BindAddress>\)/\1127.0.0.1\2/g" $datadir/config.xml
+echo "${app^^} configured"
+
+
+## Jellyfin
+
+## installing aspnetcore
+app="aspnetcore"
+echo ""
+echo "downloading...${app^^}"
+echo "to update find latest link from https://dotnet.microsoft.com/en-us/download/dotnet/5.0"
+installdir="$HOME/.bin/dotnet"
+mkdir -p ${installdir}
+cd ${installdir}
+wget $ASPDOTNET_URL > /dev/null 2>&1
+tar -xvzf *.tar.gz > /dev/null 2>&1
+rm *.tar.gz > /dev/null 2>&1
+echo "export DOTNET_ROOT=$HOME/.bin/dotnet" >> $HOME/.bashrc
+export DOTNET_ROOT=$HOME/.bin/dotnet
+echo "Installation files downloaded and extracted"
+echo "${app^^} Installed"
+
+
+## installing jellyfin
+app="jellyfin"
+installdir="$HOME/.bin"
+datadir="$HOME/.config/${app}"
+cd ${installdir}
+echo ""
+echo "Downloading...${app^^}"
+wget "https://repo.jellyfin.org/releases/server/portable/stable/combined/${app}_${JELLYFIN_VERSION}.tar.gz" -O ${app}.tar.gz> /dev/null 2>&1
+mkdir ${app}
+tar -xvzf ${app}.tar.gz -C ${app} --strip-components=2 > /dev/null 2>&1
+rm ${app}.tar.gz > /dev/null 2>&1
+echo "Installation files downloaded and extracted"
+echo "${app^^} Installed"
+echo "configuring ${app^^}"
+if [ ! -f $datadir/network.xml ]; then
+cat << EOF > $datadir/network.xml
+
+
+ false
+ 8096
+ false
+
+ false
+ true
+ false
+
+ 2
+ 100
+ true
+ vEthernet*
+ 60
+ false
+
+
+ false
+ true
+ 8920
+ 8096
+ 8920
+ false
+
+
+ true
+
+
+
+ false
+
+ false
+
+
+EOF
+fi
+sed -i -e "s/\(\)[^<]*\(<\/PublicPort>\)/\1$JELLYFIN_PORT\2/g" $datadir/network.xml
+sed -i -e "s/\(\)[^<]*\(<\/HttpServerPortNumber>\)/\1$JELLYFIN_PORT\2/g" $datadir/network.xml
+sed -i -e "s//<\/BaseUrl>/" $datadir/network.xml
+sed -i -e "s/\(\)[^<]*\(<\/BaseUrl>\)/\1\/public-${USERNAME}\/${app}\2/g" $datadir/network.xml
+echo "${app^^} configured"
+echo ""
+
+cat << 'EOF' >> $HOME/.bashrc
+alias jellyfin='tmux new-session -d -s "jellyfin" "export DOTNET_ROOT=$HOME/.bin/dotnet && export JELLYFIN_DATA_DIR=$HOME/.config/jellyfin && JELLYFIN_LOG_DIR=$HOME/.config/jellyfin/log && nice -n 19 sh -c $HOME/.bin/jellyfin/jellyfin"'
+alias sonarr='tmux new-session -d -s "sonarr" "mono $HOME/.bin/Sonarr/Sonarr.exe --data=$HOME/.config/sonarr; exec $SHELL"'
+alias radarr='tmux new-session -d -s "radarr" "$HOME/.bin/Radarr/Radarr -nobrowser -data=$HOME/.config/radarr; exec $SHELL"'
+alias prowlarr='tmux new-session -d -s "prowlarr" -n "prowlarr" "$HOME/.bin/Prowlarr/Prowlarr -nobrowser -data=$HOME/.config/prowlarr; exec $SHELL"'
+alias cloudplow='tmux new-session -d -s "cloudplow" "source $HOME/.bin/cloudplow/bin/activate && python3 $HOME/.bin/cloudplow/cloudplow/cloudplow.py run --config=$HOME/.config/cloudplow/config.json --loglevel=DEBUG --cachefile=$HOME/.config/cloudplow/cache.db --logfile=$HOME/.config/cloudplow/cloudplow.log"'
+alias sabnzbd='tmux new-session -d -s "sabnzbd" "source $HOME/.bin/sabnzbd/bin/activate && /usr/bin/nice -n 19 python3 $HOME/.bin/sabnzbd/sabnzbd/SABnzbd.py -b 0 -f $HOME/.config/sabnzbd/sabnzbd.ini"'
+EOF
+
+
+cat << EOF > $HOME/.lighttpd/custom
+\$HTTP["url"] =~ "^/sabnzbd($|/)" {
+ proxy.server = ( "" => ( (
+ "host" => "127.0.0.1",
+ "port" => $SABNZBD_PORT
+ ) ) ),
+ proxy.forwarded = (
+ "for" => 1,
+ "host" => 1,
+ "by" => 1
+ ),
+ proxy.header = ( "map-urlpath" => (
+ "/sabnzbd" => "/public-$USERNAME/sabnzbd"
+ ) )
+}
+
+\$HTTP["url"] =~ "^/radarr($|/)" {
+ proxy.server = ( "" => ( (
+ "host" => "127.0.0.1",
+ "port" => $RADARR_PORT
+ ) ) ),
+ proxy.forwarded = (
+ "for" => 1,
+ "host" => 1,
+ "by" => 1
+ ),
+ proxy.header = ( "map-urlpath" => (
+ "/radarr" => "/public-$USERNAME/radarr"
+ ) )
+}
+
+\$HTTP["url"] =~ "^/prowlarr($|/)" {
+ proxy.server = ( "" => ( (
+ "host" => "127.0.0.1",
+ "port" => $PROWLARR_PORT
+ ) ) ),
+ proxy.forwarded = (
+ "for" => 1,
+ "host" => 1,
+ "by" => 1
+ ),
+ proxy.header = ( "map-urlpath" => (
+ "/prowlarr" => "/public-$USERNAME/prowlarr"
+ ) )
+}
+
+\$HTTP["url"] =~ "^/sonarr($|/)" {
+ proxy.server = ( "" => ( (
+ "host" => "127.0.0.1",
+ "port" => $SONARR_PORT
+ ) ) ),
+ proxy.forwarded = (
+ "for" => 1,
+ "host" => 1,
+ "by" => 1
+ ),
+ proxy.header = ( "map-urlpath" => (
+ "/sonarr" => "/public-$USERNAME/sonarr"
+ ) )
+}
+
+\$HTTP["url"] =~ "^/jellyfin($|/)" {
+ proxy.server = ( "" => ( (
+ "host" => "127.0.0.1",
+ "port" => $JELLYFIN_PORT
+ ) ) ),
+ proxy.forwarded = (
+ "for" => 1,
+ "host" => 1,
+ "by" => 1
+ ),
+ proxy.header = ( "map-urlpath" => (
+ "/jellyfin" => "/public-$USERNAME/jellyfin"
+ ) )
+}
+EOF
+
+source ~/.bashrc
+
+echo ""
+echo "starting applications"
+tmux new-session -d -s "jellyfin" "export DOTNET_ROOT=$HOME/.bin/dotnet && export JELLYFIN_DATA_DIR=$HOME/.config/jellyfin && JELLYFIN_LOG_DIR=$HOME/.config/jellyfin/log && nice -n 19 sh -c $HOME/.bin/jellyfin/jellyfin"
+tmux new-session -d -s "sonarr" "mono $HOME/.bin/Sonarr/Sonarr.exe --data=$HOME/.config/sonarr; exec $SHELL"
+tmux new-session -d -s "radarr" "$HOME/.bin/Radarr/Radarr -nobrowser -data=$HOME/.config/radarr; exec $SHELL"
+tmux new-session -d -s "prowlarr" -n "prowlarr" "$HOME/.bin/Prowlarr/Prowlarr -nobrowser -data=$HOME/.config/prowlarr; exec $SHELL"
+tmux new-session -d -s "sabnzbd" "source $HOME/.bin/sabnzbd/bin/activate && /usr/bin/nice -n 19 python3 $HOME/.bin/sabnzbd/sabnzbd/SABnzbd.py -b 0 -f $HOME/.config/sabnzbd/sabnzbd.ini"
+
+echo ""
+echo "connect to running application use command 'tmux attach -t '"
+echo "e.g to attach to radarr 'tmux attach -t radarr'"
+echo "exit tmux session by pressing 'CTRL+b' then 'a' "
+echo ""
+echo "to start application manually use appname as commend"
+echo "e.g for SONARR use 'sonarr'"
+echo ""
+echo "RADARR-URL = https://$(hostname)/public-$USERNAME/radarr/"
+echo "SONARR-URL = https://$(hostname)/public-$USERNAME/sonarr/"
+echo "PROWLARR-URL = https://$(hostname)/public-$USERNAME/prowlarr/"
+echo "SABNZBD-URL = https://$(hostname)/public-$USERNAME/sabnzbd/"
+echo "SABNZBD-WIZARD-URL = https://$(hostname)/public-$USERNAME/sabnzbd/wizard/"
+echo "JELLYFIN-URL = https://$(hostname)/public-$USERNAME/jellyfin/web/index.html"
+echo "JELLYFIN-ALTERNATE-URL" = $(curl -s ifconfig.me):$JELLYFIN_PORT/public-$USERNAME/jellyfin/
+echo ""
+echo "restarting lighttpd"
+killall -9 -u $(whoami) lighttpd; killall -9 -u $(whoami) php-cgi
+echo "it may take 1-2 minutes to restart lighttpd"