summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--roles/caption/tasks/main.yml39
-rwxr-xr-xroles/caption/templates/process-captions.py18
-rwxr-xr-xroles/caption/templates/process-prerec.sh18
-rwxr-xr-xroles/caption/templates/reencode.sh43
-rwxr-xr-xroles/caption/templates/run-aeneas.sh14
-rwxr-xr-xroles/caption/templates/update-task-status.sh10
-rwxr-xr-xroles/caption/templates/upload.sh6
-rw-r--r--roles/edit/templates/emacsconf-edit.el21
-rw-r--r--roles/obs/overlay.svg28
-rw-r--r--roles/obs/tasks/emacs.yml39
-rw-r--r--roles/obs/tasks/main.yml13
-rw-r--r--roles/obs/tasks/obs-setup.yml6
-rw-r--r--roles/obs/tasks/track.yml5
-rw-r--r--roles/obs/tasks/user.yml1
-rw-r--r--roles/obs/templates/emacsconf-stream-config.el13
-rw-r--r--roles/obs/templates/mpv.conf6
-rw-r--r--roles/obs/templates/scenes.json433
-rw-r--r--roles/publish/tasks/main.yml17
-rw-r--r--roles/publish/templates/emacsconf-config.el5
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)))