#!/usr/bin/env bash
# YouStore: convert any set of files/dirs into a video file
# that can be resistant to re-encoding
# Usage: ys [e|d] [vidfile.webm] [path...] [path...]
# Dependencies: tar, zstd, truncate/wc (coreutils), xpar, openssl, ffmpeg
# Created by Luxferre in 2026, released into the public domain

if [[ "$1" = "e" ]]; then
  OUTFILE="$2"
  shift
  shift
  PARFILE="$(mktemp -t 'YS-XXXXXXXX')"
  [[ -z "$YS_PASS" ]] && read -rs -p 'Encryption password: ' YS_PASS
  echo "Processing..."
  tar --use-compress-program='zstd -T0 -10' -cf - -- $* | \
    openssl aes-256-cbc -e -pbkdf2 -pass "pass:$YS_PASS" | \
    xpar -Je -i 3 -H blake2b > "$PARFILE"
  truncate -s $(( ( $(wc -c < "$PARFILE") + 7199 ) / 7200 * 7200 )) "$PARFILE"
  ffmpeg -hide_banner -f rawvideo -pixel_format monob -video_size 320x180 -framerate 60 \
    -i "$PARFILE" -vf "scale=1280:720:flags=neighbor,format=monob" \
    -c:v libvpx-vp9 -lossless 1 -deadline realtime -speed 8 -row-mt 1 -aq-mode 0 \
    -pix_fmt yuv420p -f webm "${OUTFILE}"
  rm -f "$PARFILE"
  echo "Done!"
elif [[ "$1" = "d" ]]; then
  echo "Processing..."
  [[ -z "$YS_PASS" ]] && read -rs -p 'Decryption password: ' YS_PASS
  ffmpeg -hide_banner -i "$2" -vf "scale=320:180:flags=neighbor,format=monob" -f rawvideo - | \
    xpar -Jdc | openssl aes-256-cbc -d -pbkdf2 -pass "pass:$YS_PASS" | \
    tar --use-compress-program='zstd -T0' -xf -
  echo "Done!"
else
  echo "Invalid mode! Use e or d"
fi
