diff options
-rw-r--r-- | roles/caption/tasks/main.yml | 39 | ||||
-rwxr-xr-x | roles/caption/templates/process-captions.py | 18 | ||||
-rwxr-xr-x | roles/caption/templates/process-prerec.sh | 18 | ||||
-rwxr-xr-x | roles/caption/templates/reencode.sh | 43 | ||||
-rwxr-xr-x | roles/caption/templates/run-aeneas.sh | 14 | ||||
-rwxr-xr-x | roles/caption/templates/update-task-status.sh | 10 | ||||
-rwxr-xr-x | roles/caption/templates/upload.sh | 6 | ||||
-rw-r--r-- | roles/edit/templates/emacsconf-edit.el | 21 | ||||
-rw-r--r-- | roles/obs/overlay.svg | 28 | ||||
-rw-r--r-- | roles/obs/tasks/emacs.yml | 39 | ||||
-rw-r--r-- | roles/obs/tasks/main.yml | 13 | ||||
-rw-r--r-- | roles/obs/tasks/obs-setup.yml | 6 | ||||
-rw-r--r-- | roles/obs/tasks/track.yml | 5 | ||||
-rw-r--r-- | roles/obs/tasks/user.yml | 1 | ||||
-rw-r--r-- | roles/obs/templates/emacsconf-stream-config.el | 13 | ||||
-rw-r--r-- | roles/obs/templates/mpv.conf | 6 | ||||
-rw-r--r-- | roles/obs/templates/scenes.json | 433 | ||||
-rw-r--r-- | roles/publish/tasks/main.yml | 17 | ||||
-rw-r--r-- | roles/publish/templates/emacsconf-config.el | 5 |
19 files changed, 299 insertions, 436 deletions
diff --git a/roles/caption/tasks/main.yml b/roles/caption/tasks/main.yml index c1511cf..a69d848 100644 --- a/roles/caption/tasks/main.yml +++ b/roles/caption/tasks/main.yml @@ -30,20 +30,41 @@ state: present - name: Ensure the directory exists file: - path: "{{ emacsconf_caption_dir }}" + path: "{{ emacsconf_caption_dir }}/scripts" state: directory -- name: Copy the script for processing the files - tags: process-captions + owner: "{{ emacsconf_user }}" + group: "{{ emacsconf_group }}" +- name: Recreate encoding script + tags: process-prerec template: - src: process-captions.py - dest: "{{ emacsconf_caption_dir }}/process-captions.py" + src: "{{ item }}" + dest: "{{ emacsconf_caption_dir }}/scripts/{{ item }}" + owner: "{{ emacsconf_user }}" + group: "{{ emacsconf_group }}" + force: no mode: 0775 -- name: Copy the inotify script - tags: process-captions + loop: + - reencode.sh +- name: Copy scripts for processing + tags: process-prerec template: - src: inotify-process-captions.sh - dest: "{{ emacsconf_caption_dir }}/inotify-process-captions.sh" + src: "{{ item }}" + dest: "{{ emacsconf_caption_dir }}/scripts/{{ item }}" + owner: "{{ emacsconf_user }}" + group: "{{ emacsconf_group }}" mode: 0775 + loop: + - process-captions.py + - process-prerec.sh + - update-task-status.sh + - upload.sh + - run-aeneas.sh +# - name: Copy the inotify script +# tags: process-captions +# template: +# src: inotify-process-captions.sh +# dest: "{{ emacsconf_caption_dir }}/inotify-process-captions.sh" +# mode: 0775 - name: Copy talks.json tags: talks-json template: diff --git a/roles/caption/templates/process-captions.py b/roles/caption/templates/process-captions.py index 223531b..1b6515c 100755 --- a/roles/caption/templates/process-captions.py +++ b/roles/caption/templates/process-captions.py @@ -81,6 +81,8 @@ def get_files_to_work_on(directory): info[slug]['vtt'] = f elif re.search('srv2$', filename): info[slug]['srv2'] = f + elif re.search('txt$', filename): + info[slug]['txt'] = f needs_work = [] if JSON_FILE: with open(JSON_FILE) as f: @@ -108,10 +110,11 @@ def extract_audio(work): if 'Audio: vorbis' in output.decode(): extension = 'ogg' new_file = work['base'] + '.' + extension - acodec = 'copy' if re.search('\\.(webm|mp4|mkv)$', work['video']) else 'libopus' + acodec = 'copy' if re.search('\\.webm$', work['video']) else 'libopus' log("Extracting audio from %s acodec %s" % (work['video'], acodec)) output = subprocess.check_output(['ffmpeg', '-y', '-i', work['video'], '-acodec', acodec, '-vn', new_file], stderr=subprocess.STDOUT) work['audio'] = new_file + subprocess.call(["/data/emacsconf/2022/scripts/upload.sh", work['audio']]) return work def to_sec(time_str): @@ -142,18 +145,21 @@ def generate_captions(work): result = clean_up_timestamps(result) with open(new_file, 'w') as vtt: whisper.utils.write_vtt(result['segments'], file=vtt) - with open(work['base'] + '.txt') as txt: + with open(work['base'] + '.txt', 'w') as txt: whisper.utils.write_txt(result['segments'], file=txt) work['vtt'] = new_file + work['txt'] = work['base'] + '.txt' + subprocess.call(["/data/emacsconf/2022/scripts/upload.sh", work['vtt'], work['txt']]) if 'srv2' in work: del work['srv2'] return work def generate_text(work): - with open(work['base'] + '.txt') as txt: + with open(work['base'] + '.txt', 'w') as txt: for i, caption in enumerate(webvtt.read(work['vtt'])): - txt.write(caption.text) - work['text'] = work['base'] + '.txt' - + txt.write(caption.text + "\n") + work['txt'] = work['base'] + '.txt' + return work + def generate_srv2(work): """Generate a SRV2 file.""" log("Generating SRV2") diff --git a/roles/caption/templates/process-prerec.sh b/roles/caption/templates/process-prerec.sh new file mode 100755 index 0000000..e49aa72 --- /dev/null +++ b/roles/caption/templates/process-prerec.sh @@ -0,0 +1,18 @@ +#!/bin/bash +# {{ ansible_managed }} + +ORIGINAL=$1 +REENCODED=$(echo "$ORIGINAL" | perl -pe 's/^(emacsconf-[0-9]*-.*?--.*?--.*?--).*/$1reencoded.webm/') +SLUG=$(echo "$ORIGINAL" | perl -ne '/^emacsconf-[0-9]*-(.*?)--/ && print $1') +MAIN=$(echo "$ORIGINAL" | perl -pe 's/^(emacsconf-[0-9]*-.*?--.*?--.*?--).*/$1main.webm/') +SCREEN=reencode-$SLUG +if ! ( screen -ls | grep -q $SLUG ); then + screen -dmS $SCREEN +fi +( cd /data/emacsconf/cache; ./update-cache ) +/data/emacsconf/2022/scripts/update-task-status.sh $SLUG "WAITING_FOR_PREREC" "PROCESSING" +#if [[ ! -f "$REENCODED" ]]; then +screen -S $SCREEN -X screen -t reencode-$SLUG /bin/bash -c "/data/emacsconf/2022/scripts/reencode.sh \"$ORIGINAL\" \"$REENCODED\" && /data/emacsconf/2022/scripts/upload.sh $REENCODED && exec /bin/bash" & +#fi +screen -S $SCREEN -X screen -t captions-$SLUG /bin/bash -c "/data/emacsconf/2022/scripts/process-captions.py $(dirname $ORIGINAL); /data/emacsconf/2022/scripts/update-task-status.sh $SLUG PROCESSING TO_ASSIGN; exec /bin/bash" +screen -x $SCREEN diff --git a/roles/caption/templates/reencode.sh b/roles/caption/templates/reencode.sh new file mode 100755 index 0000000..e3a82eb --- /dev/null +++ b/roles/caption/templates/reencode.sh @@ -0,0 +1,43 @@ +#!/usr/bin/env bash + +set -euo pipefail + +# Defaults +q=32 +cpu=4 +time_limit="" +print_only=false + +while getopts :q:c:t:s OPT; do + case $OPT in + q|+q) + q="$OPTARG" + ;; + c|+c) + cpu="$OPTARG" + ;; + t|+t) + time_limit="-to $OPTARG" + ;; + s) + print_only=true + ;; + *) + echo "usage: `basename $0` [+-q ARG] [+-c ARG} [--] ARGS..." + exit 2 + esac +done +shift `expr $OPTIND - 1` +OPTIND=1 + +command="$(cat<<EOF +ffmpeg -y -i "$1" $time_limit -c:v libvpx-vp9 -b:v 0 -crf $q -an -row-mt 1 -tile-columns 2 -tile-rows 2 -cpu-used $cpu -g 240 -pass 1 -f webm -threads $cpu /dev/null && + ffmpeg -y -i "$1" $time_limit -c:v libvpx-vp9 -b:v 0 -crf $q -c:a libopus -row-mt 1 -tile-columns 2 -tile-rows 2 -cpu-used $cpu -pass 2 -g 240 -threads $cpu "$2" +EOF +)" + +if [ $print_only == true ]; then + echo "$command" +else + eval "$command" +fi diff --git a/roles/caption/templates/run-aeneas.sh b/roles/caption/templates/run-aeneas.sh new file mode 100755 index 0000000..6f40134 --- /dev/null +++ b/roles/caption/templates/run-aeneas.sh @@ -0,0 +1,14 @@ +#!/usr/bin/bash +# +# {{ ansible_managed }} +# +AUDIO=$(ls *.opus *.ogg | head -n1) +BASE=$(echo $AUDIO | perl -pe 's/^(emacsconf-2022-.*?--.*?--.*?)--.*/$1/') +echo $AUDIO +echo $BASE +if [ ! -f $BASE--whisper.vtt ]; then + cp ${BASE}--main.vtt ${BASE}--whisper.vtt +fi +python3 -m aeneas.tools.execute_task $AUDIO *.txt "task_language=eng|os_task_file_format=vtt|is_text_type=plain" ${BASE}--aeneas.vtt +cp ${BASE}--aeneas.vtt ${BASE}--main.vtt +/data/emacsconf/2022/scripts/upload.sh ${BASE}--main.vtt diff --git a/roles/caption/templates/update-task-status.sh b/roles/caption/templates/update-task-status.sh new file mode 100755 index 0000000..18b7c1b --- /dev/null +++ b/roles/caption/templates/update-task-status.sh @@ -0,0 +1,10 @@ +#!/bin/bash +# {{ ansible_managed }} +SLUG="$1" +FROM_STATUS="$2" +TO_STATUS="$3" +cd ~/emacsconf-2022-private +git pull +emacsclient --eval "(progn (emacsconf-update-talk-status \"$SLUG\" \"$FROM_STATUS\" \"$TO_STATUS\") (emacsconf-with-talk-heading \"$SLUG\" (emacsconf-cache-video-data (emacsconf-get-talk-info-for-subtree)) (save-buffer)))" +git commit -m "Update task status for $SLUG" conf.org +git push diff --git a/roles/caption/templates/upload.sh b/roles/caption/templates/upload.sh new file mode 100755 index 0000000..f723d29 --- /dev/null +++ b/roles/caption/templates/upload.sh @@ -0,0 +1,6 @@ +#!/bin/bash +# {{ ansible_managed }} + +scp $* orga@media.emacsconf.org:~/backstage +emacsclient --eval "(emacsconf-publish-backstage-index)" +rsync -avze ssh orga@media.emacsconf.org:~/backstage/ /data/emacsconf/cache/ diff --git a/roles/edit/templates/emacsconf-edit.el b/roles/edit/templates/emacsconf-edit.el index 481892b..e187c69 100644 --- a/roles/edit/templates/emacsconf-edit.el +++ b/roles/edit/templates/emacsconf-edit.el @@ -18,9 +18,6 @@ (modus-themes-load-vivendi) (org-babel-do-load-languages 'org-babel-load-languages '((emacs-lisp . t) (shell . t))) (setq backup-directory-alist '(("." . "~/.emacs.d/backups"))) -(find-file "{{ emacsconf_private_dir }}/conf.org") -(split-window-horizontally) -(magit-status "{{ emacsconf_edit_wiki_dir }}") (global-auto-revert-mode 1) (with-eval-after-load 'projectile (projectile-mode +1) @@ -37,12 +34,13 @@ (setq completion-category-overrides '((file (styles orderless)))) (defhydra hydra-emacsconf () + ("aa" emacsconf-agenda "agenda") + ("ad" (emacsconf-track-agenda "dev") "dev") + ("ag" (emacsconf-track-agenda "gen") "gen") ("e" embark-act "embark") ("t" emacsconf-go-to-talk "talk") - ("c" - (find-file emacsconf-org-file) "conf.org") - ("C" - (let ((default-directory (file-name-directory emacsconf-org-file))) + ("c" (find-file emacsconf-org-file) "conf.org") + ("C" (let ((default-directory (file-name-directory emacsconf-org-file))) (call-interactively #'projectile-find-file)) "org dir") ("w" @@ -51,7 +49,7 @@ "wiki") ("o" (find-file (expand-file-name (concat emacsconf-year "/organizers-notebook/index.org") emacsconf-directory)) "org notes") - ("a" (let ((default-directory emacsconf-ansible-directory)) + ("A" (let ((default-directory emacsconf-ansible-directory)) (call-interactively #'projectile-find-file)) "ansible") ("i" (switch-to-buffer (erc-get-buffer "#emacsconf-org"))) @@ -59,8 +57,15 @@ (call-interactively #'projectile-find-file)) "lisp") ("b" emacsconf-backstage-dired "backstage") + ("i" emacsconf-stream-set-talk-info "info") + ("m" emacsconf-stream-play-video "mpv") + ("p" emacsconf-stream-open-pad "pad") + ("q" emacsconf-stream-join-qa "qa") ("u" emacsconf-upload-dired "upload")) (global-set-key (kbd "C-c e") #'hydra-emacsconf/body) (require 'ox-md) (server-start) + +(find-file "{{ emacsconf_private_dir }}/conf.org") + diff --git a/roles/obs/overlay.svg b/roles/obs/overlay.svg index 13e1b03..b3314f6 100644 --- a/roles/obs/overlay.svg +++ b/roles/obs/overlay.svg @@ -27,18 +27,18 @@ inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:zoom="0.62998576" - inkscape:cx="543.66308" - inkscape:cy="369.05596" + inkscape:cx="129.368" + inkscape:cy="373.81797" inkscape:document-units="in" inkscape:current-layer="layer1" inkscape:document-rotation="0" showgrid="false" units="in" - inkscape:window-width="1366" + inkscape:window-width="699" inkscape:window-height="709" - inkscape:window-x="0" + inkscape:window-x="667" inkscape:window-y="0" - inkscape:window-maximized="1" + inkscape:window-maximized="0" inkscape:showpageshadow="0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1" /><metadata @@ -265,31 +265,21 @@ GhoaGhoaGhoaauJ/z6sVgaPaB24AAAAASUVORK5CYII= style="stroke-width:2.33685" /><text xml:space="preserve" style="font-size:5.64444px;line-height:70%;font-family:AbcCursiveDottedLined;-inkscape-font-specification:AbcCursiveDottedLined;text-decoration:none;text-decoration-line:none;text-decoration-color:#000000;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-rule:evenodd;stroke-width:2.8448;stop-color:#000000" - x="38.344975" + x="36.757473" y="188.41483" id="url"><tspan sodipodi:role="line" id="tspan398" style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#ffffff;stroke-width:2.8448" - x="38.344975" + x="36.757473" y="188.41483">Initializing...</tspan></text><text xml:space="preserve" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.87778px;line-height:70%;font-family:sans-serif;-inkscape-font-specification:sans-serif;text-decoration:none;text-decoration-line:none;text-decoration-color:#000000;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583;stroke-dasharray:none;stop-color:#000000" - x="2.535063" - y="10.061478" - id="news"><tspan - sodipodi:role="line" - id="tspan452" - style="font-size:9.87778px;fill:#ffffff;stroke:#000000;stroke-width:0.264583;stroke-dasharray:none" - x="2.535063" - y="10.061478">Initializing...</tspan></text><text - xml:space="preserve" style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05556px;line-height:70%;font-family:sans-serif;-inkscape-font-specification:sans-serif;text-decoration:none;text-decoration-line:none;text-decoration-color:#000000;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-rule:evenodd;stroke:none;stroke-width:0.264583;stroke-dasharray:none;stop-color:#000000" - x="38.2995" + x="36.711998" y="180.71815" id="bottom"><tspan sodipodi:role="line" id="tspan452-6" style="font-size:7.05556px;fill:#ffffff;stroke:none;stroke-width:0.264583;stroke-dasharray:none" - x="38.2995" + x="36.711998" y="180.71815">Initializing...</tspan></text></g></svg> diff --git a/roles/obs/tasks/emacs.yml b/roles/obs/tasks/emacs.yml new file mode 100644 index 0000000..0b013b3 --- /dev/null +++ b/roles/obs/tasks/emacs.yml @@ -0,0 +1,39 @@ +- name: Check out emacsconf-el + ansible.builtin.git: + repo: https://git.emacsconf.org/emacsconf-el + dest: "~{{ emacsconf_user }}/emacsconf-el" + register: elisp + failed_when: + - elisp.failed + - not 'Local modifications exist in repository' in elisp.msg + - not 'Failed to checkout branch' in elisp.msg + debugger: on_failed +- name: Install Emacs packages + become_user: "{{ emacsconf_user }}" + shell: | + emacs --batch --exec "(progn (require 'package) + (let ((packages (seq-remove #'package-installed-p '({% for package in packages %}{{ package }} {% endfor %})))) + (when packages + (package-refresh-contents) + (mapc #'package-install packages))))" + vars: + packages: + - modus-themes + - vertico + - orderless +- name: Set up Emacs configuration for interactive editing + template: + src: emacsconf-stream-config.el + dest: "{{ emacs_config_dir }}/emacsconf-stream-config.el" + owner: "{{ emacsconf_user }}" + group: "{{ emacsconf_group }}" +- name: Add to Emacs configuration + lineinfile: + dest: "{{ emacs_config_dir }}/init.el" + state: present + regexp: "emacsconf-stream-config" + line: "(load-file \"{{ emacs_config_dir }}/emacsconf-stream-config.el\")" + owner: "{{ emacsconf_user }}" + group: "{{ emacsconf_group }}" + create: yes + diff --git a/roles/obs/tasks/main.yml b/roles/obs/tasks/main.yml index bf856ec..8c1e059 100644 --- a/roles/obs/tasks/main.yml +++ b/roles/obs/tasks/main.yml @@ -11,6 +11,7 @@ name: - xserver-xorg-video-dummy - i3 + - inkscape # OBS overlaying PNG is prettier than SVG - socat - ffmpeg - pulseaudio @@ -54,7 +55,6 @@ replace: \1 {{ emacsconf_id }}-{{ item.id }} loop: "{{ emacsconf_tracks }}" - name: Allow sudo from {{ emacsconf_user }} to the stream users - tags: wip become: true become_user: root copy: @@ -63,3 +63,14 @@ {{ emacsconf_user }} ALL=({{ emacsconf_id }}-{{ item.id }}) NOPASSWD: ALL {% endfor %} dest: /etc/sudoers.d/50_emacsconf +- name: Create directories + file: + owner: "{{ emacsconf_user }}" + group: "{{ emacsconf_group }}" + path: "{{ item }}" + state: directory + mode: 0775 + loop: + - /data/{{ emacsconf_id }}/stream + - /data/{{ emacsconf_id }}/overlays + diff --git a/roles/obs/tasks/obs-setup.yml b/roles/obs/tasks/obs-setup.yml index 59170f1..911f609 100644 --- a/roles/obs/tasks/obs-setup.yml +++ b/roles/obs/tasks/obs-setup.yml @@ -32,19 +32,21 @@ group: "{{ emacsconf_group }}" dest: "~{{ emacsconf_user }}/.config/obs-studio/basic/scenes/{{ item.id }}.json" - name: Copy overlay template for video - tags: obs-scene + tags: obs-scene, wip copy: src: overlay.svg dest: "~{{ emacsconf_user }}/video.svg" owner: "{{ emacsconf_user }}" group: "{{ emacsconf_group }}" + mode: 0664 - name: Copy overlay template for video - tags: obs-scene + tags: obs-scene, wip copy: src: overlay.svg dest: "~{{ emacsconf_user }}/other.svg" owner: "{{ emacsconf_user }}" group: "{{ emacsconf_group }}" + mode: 0664 - name: Create text files for OBS sources copy: content: "Initializing..." diff --git a/roles/obs/tasks/track.yml b/roles/obs/tasks/track.yml index a0acf16..14533df 100644 --- a/roles/obs/tasks/track.yml +++ b/roles/obs/tasks/track.yml @@ -27,7 +27,7 @@ group: "{{ emacsconf_group }}" state: directory - name: Add MPV profile - tags: mpv-conf + tags: mpv-conf, wip template: src: mpv.conf dest: "~{{ emacsconf_user }}/.config/mpv/mpv.conf" @@ -79,6 +79,9 @@ dest: "~{{ emacsconf_user }}/.config/i3/config" owner: "{{ emacsconf_user }}" group: "{{ emacsconf_group }}" + - name: Set up Emacs configuration + tags: wip + include: emacs.yml - name: Reset vars tags: obs-scene, obs-profile, mpv, wip set_fact: diff --git a/roles/obs/tasks/user.yml b/roles/obs/tasks/user.yml index caaf2d9..fae7d9f 100644 --- a/roles/obs/tasks/user.yml +++ b/roles/obs/tasks/user.yml @@ -14,7 +14,6 @@ state: directory mode: 700 - name: Set up SSH key access - tags: wip template: src: authorized_keys dest: "/home/{{ emacsconf_user }}/.ssh/authorized_keys" diff --git a/roles/obs/templates/emacsconf-stream-config.el b/roles/obs/templates/emacsconf-stream-config.el new file mode 100644 index 0000000..8770d60 --- /dev/null +++ b/roles/obs/templates/emacsconf-stream-config.el @@ -0,0 +1,13 @@ +;; {{ ansible_managed }} + +;; Configuration +(vertico-mode) +(fset 'yes-or-no-p 'y-or-n-p) +(modus-themes-load-vivendi) +(org-babel-do-load-languages 'org-babel-load-languages '((emacs-lisp . t) (shell . t))) +(setq backup-directory-alist '(("." . "~/.emacs.d/backups"))) +(setq completion-styles '(orderless)) +(setq completion-category-defaults nil) +(setq completion-category-overrides '((file (styles orderless)))) + + diff --git a/roles/obs/templates/mpv.conf b/roles/obs/templates/mpv.conf index b1bd1ca..dce6481 100644 --- a/roles/obs/templates/mpv.conf +++ b/roles/obs/templates/mpv.conf @@ -14,15 +14,15 @@ video-align-y=-1 sub-use-margins=yes sub-scale-by-window=yes sub-pos=103 -sub-margin-x=120 -sub-margin-y=20 +sub-margin-x=105 +sub-margin-y=60 sub-align-x=left # Style sub-font="{{ emacsconf_font }}" sub-color="1/0.82/0" sub-blur=0.2 sub-scale=0.9 -sub-font-size=40 +sub-font-size=30 sub-border-size=0 sub-border-color=0/1 sub-shadow-color=0/1 diff --git a/roles/obs/templates/scenes.json b/roles/obs/templates/scenes.json index a92f29e..6d8e7ad 100644 --- a/roles/obs/templates/scenes.json +++ b/roles/obs/templates/scenes.json @@ -2,159 +2,10 @@ "current_program_scene": "Video audio and screen", "current_scene": "Video audio and screen", "current_transition": "Fade", - "groups": [ - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": { - "libobs.hide_scene_item.Logo": [], - "libobs.hide_scene_item.News": [], - "libobs.hide_scene_item.URL": [], - "libobs.show_scene_item.Logo": [], - "libobs.show_scene_item.News": [], - "libobs.show_scene_item.URL": [] - }, - "id": "group", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "{{ emacsconf_id }} base", - "prev_ver": 469762051, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "custom_size": true, - "cx": 494, - "cy": 715, - "id_counter": 0, - "items": [ - { - "align": 5, - "blend_method": "default", - "blend_type": "normal", - "bounds": { - "x": 0, - "y": 0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 8, - "locked": false, - "name": "News", - "pos": { - "x": 12, - "y": 0 - }, - "private_settings": {}, - "rot": 0, - "scale": { - "x": 1, - "y": 1 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_method": "default", - "blend_type": "normal", - "bounds": { - "x": 0, - "y": 0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 7, - "locked": false, - "name": "URL", - "pos": { - "x": 114, - "y": 691 - }, - "private_settings": {}, - "rot": 0, - "scale": { - "x": 1, - "y": 1 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_method": "default", - "blend_type": "normal", - "bounds": { - "x": 0, - "y": 0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 6, - "locked": false, - "name": "Logo", - "pos": { - "x": 0, - "y": 603 - }, - "private_settings": {}, - "rot": 0, - "scale": { - "x": 0.40234375, - "y": 0.40234375 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - } - ] - }, - "sync": 0, - "versioned_id": "group", - "volume": 1 - } - ], + "groups": [], "modules": { "auto-scene-switcher": { - "active": false, + "active": true, "interval": 300, "non_matching_scene": "All track audio and screen", "switch_if_not_matching": true, @@ -236,8 +87,6 @@ "push-to-talk": false, "push-to-talk-delay": 0, "settings": { - "color2": 4294967295, - "drop_shadow": false, "font": { "face": "Sans Serif", "flags": 0, @@ -259,11 +108,11 @@ "enabled": true, "flags": 0, "hotkeys": {}, - "id": "text_ft2_source", + "id": "image_source", "mixers": 0, "monitoring_type": 0, "muted": false, - "name": "URL", + "name": "Other overlay", "prev_ver": 469762051, "private_settings": {}, "push-to-mute": false, @@ -271,17 +120,10 @@ "push-to-talk": false, "push-to-talk-delay": 0, "settings": { - "font": { - "face": "Sans Serif", - "flags": 0, - "size": 20, - "style": "" - }, - "from_file": true, - "text_file": "/home/{{ emacsconf_id }}-{{ item.id }}/url.txt" + "file": "/home/{{ emacsconf_id }}-{{ item.id }}/other.svg" }, "sync": 0, - "versioned_id": "text_ft2_source_v2", + "versioned_id": "image_source", "volume": 1 }, { @@ -295,7 +137,7 @@ "mixers": 0, "monitoring_type": 0, "muted": false, - "name": "Logo", + "name": "Video", "prev_ver": 469762051, "private_settings": {}, "push-to-mute": false, @@ -303,7 +145,32 @@ "push-to-talk": false, "push-to-talk-delay": 0, "settings": { - "file": "/home/{{ emacsconf_id }}-{{ item.id }}/logo.png" + "file": "/home/{{ emacsconf_id }}-{{ item.id }}/video.svg" + }, + "sync": 0, + "versioned_id": "image_source", + "volume": 1 + }, + { + "balance": 0.5, + "deinterlace_field_order": 0, + "deinterlace_mode": 0, + "enabled": true, + "flags": 0, + "hotkeys": {}, + "id": "image_source", + "mixers": 0, + "monitoring_type": 0, + "muted": false, + "name": "Video overlay", + "prev_ver": 469762051, + "private_settings": {}, + "push-to-mute": false, + "push-to-mute-delay": 0, + "push-to-talk": false, + "push-to-talk-delay": 0, + "settings": { + "file": "/home/{{ emacsconf_id }}-{{ item.id }}/video.png" }, "sync": 0, "versioned_id": "image_source", @@ -347,14 +214,14 @@ "flags": 0, "hotkeys": { "OBSBasic.SelectScene": [], - "libobs.hide_scene_item.Bottom": [], + "libobs.hide_scene_item.News": [], + "libobs.hide_scene_item.Other overlay": [], "libobs.hide_scene_item.Screen Capture (XSHM)": [], - "libobs.hide_scene_item.emacsconf base": [], "libobs.hide_scene_item.gen-qa": [], "libobs.hide_scene_item.gen-vid": [], - "libobs.show_scene_item.Bottom": [], + "libobs.show_scene_item.News": [], + "libobs.show_scene_item.Other overlay": [], "libobs.show_scene_item.Screen Capture (XSHM)": [], - "libobs.show_scene_item.emacsconf base": [], "libobs.show_scene_item.gen-qa": [], "libobs.show_scene_item.gen-vid": [] }, @@ -371,7 +238,7 @@ "push-to-talk-delay": 0, "settings": { "custom_size": false, - "id_counter": 22, + "id_counter": 24, "items": [ { "align": 5, @@ -498,54 +365,17 @@ "crop_left": 0, "crop_right": 0, "crop_top": 0, - "group_item_backup": true, + "group_item_backup": false, "hide_transition": { "duration": 0 }, - "id": 8, + "id": 23, "locked": false, - "name": "News", + "name": "Other overlay", "pos": { - "x": 21, - "y": 6 - }, - "private_settings": {}, - "rot": 0, - "scale": { - "x": 1, - "y": 1 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_method": "default", - "blend_type": "normal", - "bounds": { "x": 0, "y": 0 }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 7, - "locked": false, - "name": "URL", - "pos": { - "x": 123, - "y": 697 - }, "private_settings": {}, "rot": 0, "scale": { @@ -572,91 +402,17 @@ "crop_left": 0, "crop_right": 0, "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 6, - "locked": false, - "name": "Logo", - "pos": { - "x": 9, - "y": 609 - }, - "private_settings": {}, - "rot": 0, - "scale": { - "x": 0.40234375, - "y": 0.40234375 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_method": "default", - "blend_type": "normal", - "bounds": { - "x": 0, - "y": 0 - }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, "group_item_backup": false, "hide_transition": { "duration": 0 }, - "id": 21, + "id": 24, "locked": false, - "name": "{{ emacsconf_id }} base", + "name": "News", "pos": { - "x": 9, - "y": 6 - }, - "private_settings": {}, - "rot": 0, - "scale": { - "x": 1, - "y": 1 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_method": "default", - "blend_type": "normal", - "bounds": { "x": 0, "y": 0 }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": false, - "hide_transition": { - "duration": 0 - }, - "id": 22, - "locked": false, - "name": "Bottom", - "pos": { - "x": 112, - "y": 654 - }, "private_settings": {}, "rot": 0, "scale": { @@ -736,11 +492,15 @@ "flags": 0, "hotkeys": { "OBSBasic.SelectScene": [], + "libobs.hide_scene_item.News": [], "libobs.hide_scene_item.Screen Capture (XSHM)": [], - "libobs.hide_scene_item.emacsconf base": [], + "libobs.hide_scene_item.Video": [], + "libobs.hide_scene_item.Video overlay": [], "libobs.hide_scene_item.gen-vid": [], + "libobs.show_scene_item.News": [], "libobs.show_scene_item.Screen Capture (XSHM)": [], - "libobs.show_scene_item.emacsconf base": [], + "libobs.show_scene_item.Video": [], + "libobs.show_scene_item.Video overlay": [], "libobs.show_scene_item.gen-vid": [] }, "id": "scene", @@ -756,7 +516,7 @@ "push-to-talk-delay": 0, "settings": { "custom_size": false, - "id_counter": 11, + "id_counter": 14, "items": [ { "align": 5, @@ -846,54 +606,17 @@ "crop_left": 0, "crop_right": 0, "crop_top": 0, - "group_item_backup": true, + "group_item_backup": false, "hide_transition": { "duration": 0 }, - "id": 8, + "id": 12, "locked": false, - "name": "News", + "name": "Video overlay", "pos": { - "x": 12, - "y": 0 - }, - "private_settings": {}, - "rot": 0, - "scale": { - "x": 1, - "y": 1 - }, - "scale_filter": "disable", - "show_transition": { - "duration": 0 - }, - "visible": true - }, - { - "align": 5, - "blend_method": "default", - "blend_type": "normal", - "bounds": { "x": 0, "y": 0 }, - "bounds_align": 0, - "bounds_type": 0, - "crop_bottom": 0, - "crop_left": 0, - "crop_right": 0, - "crop_top": 0, - "group_item_backup": true, - "hide_transition": { - "duration": 0 - }, - "id": 7, - "locked": false, - "name": "URL", - "pos": { - "x": 114, - "y": 691 - }, "private_settings": {}, "rot": 0, "scale": { @@ -904,7 +627,7 @@ "show_transition": { "duration": 0 }, - "visible": true + "visible": false }, { "align": 5, @@ -920,22 +643,22 @@ "crop_left": 0, "crop_right": 0, "crop_top": 0, - "group_item_backup": true, + "group_item_backup": false, "hide_transition": { "duration": 0 }, - "id": 6, + "id": 13, "locked": false, - "name": "Logo", + "name": "Video", "pos": { "x": 0, - "y": 603 + "y": 0 }, "private_settings": {}, "rot": 0, "scale": { - "x": 0.40234375, - "y": 0.40234375 + "x": 1, + "y": 1 }, "scale_filter": "disable", "show_transition": { @@ -961,9 +684,9 @@ "hide_transition": { "duration": 0 }, - "id": 11, + "id": 14, "locked": false, - "name": "{{ emacsconf_id }} base", + "name": "News", "pos": { "x": 0, "y": 0 @@ -985,38 +708,6 @@ "sync": 0, "versioned_id": "scene", "volume": 1 - }, - { - "balance": 0.5, - "deinterlace_field_order": 0, - "deinterlace_mode": 0, - "enabled": true, - "flags": 0, - "hotkeys": {}, - "id": "text_ft2_source", - "mixers": 0, - "monitoring_type": 0, - "muted": false, - "name": "Bottom", - "prev_ver": 469762051, - "private_settings": {}, - "push-to-mute": false, - "push-to-mute-delay": 0, - "push-to-talk": false, - "push-to-talk-delay": 0, - "settings": { - "font": { - "face": "Sans Serif", - "flags": 0, - "size": 28, - "style": "" - }, - "from_file": true, - "text_file": "/home/{{ emacsconf_id }}-{{ item.id }}/bottom.txt" - }, - "sync": 0, - "versioned_id": "text_ft2_source_v2", - "volume": 1 } ], "transition_duration": 300, diff --git a/roles/publish/tasks/main.yml b/roles/publish/tasks/main.yml index ddee975..128b0fa 100644 --- a/roles/publish/tasks/main.yml +++ b/roles/publish/tasks/main.yml @@ -9,19 +9,6 @@ owner: "{{ emacsconf_user }}" group: "{{ emacsconf_group }}" mode: '0600' -- name: Check SSH config for line - blockinfile: - path: /home/{{ emacsconf_user }}/.ssh/config - mode: '0600' - owner: "{{ emacsconf_user }}" - group: "{{ emacsconf_group }}" - create: yes - block: | - Host anon-emacsconf - Hostname git.emacsconf.org - Port 22 - User anon - IdentityFile ~/.ssh/id_rsa_anon_git_emacsconf - name: Install the SSH key for orga copy: src: "{{ item }}" @@ -78,8 +65,9 @@ block: - name: Check out wiki repository ansible.builtin.git: - repo: git@anon-emacsconf:/emacsconf-wiki + repo: anon@git.emacsconf.org:/emacsconf-wiki dest: "{{ emacsconf_edit_wiki_dir }}" + ssh_opts: "-i ~/.ssh/id_rsa_anon_git_emacsconf -u anon" key_file: "~{{ emacsconf_user }}/.ssh/id_rsa_anon_git_emacsconf" register: wiki_clone failed_when: @@ -91,6 +79,7 @@ args: chdir: "{{ emacsconf_edit_wiki_dir }}" - name: Check out emacsconf-el + tags: wip ansible.builtin.git: repo: git@git.emacsconf.org:pub/emacsconf-el key_file: "~{{ emacsconf_user }}/.ssh/id_rsa" diff --git a/roles/publish/templates/emacsconf-config.el b/roles/publish/templates/emacsconf-config.el index e9e4fcc..36ca8a2 100644 --- a/roles/publish/templates/emacsconf-config.el +++ b/roles/publish/templates/emacsconf-config.el @@ -40,4 +40,7 @@ :tramp "/ssh:gen:") (:name "Development" :color "skyblue" :id "dev" :channel "emacsconf-dev" :tramp "/ssh:dev:"))) - +(setq emacsconf-stream-overlay-dir + (expand-file-name "overlays" (file-name-directory emacsconf-org-file))) +(setq emacsconf-stream-asset-dir + (expand-file-name "assets" (file-name-directory emacsconf-org-file))) |