diff --git a/vcfb17/__init__.py b/vcfb17/__init__.py
index 039f102..8ba8007 100644
--- a/vcfb17/__init__.py
+++ b/vcfb17/__init__.py
@@ -4,148 +4,213 @@ from renderlib import *
from easing import *
# URL to Schedule-XML
-scheduleUrl = 'http://geruempel.ddns.net/schedule_voc.xml'
-
-# For (really) too long titles
-titlemap = {
- #708: "Neue WEB-Anwendungen des LGRB Baden-Württemberg im Überblick"
-}
-
-def introFrames(params):
- move=40
-
- # 0.5 Seconds
- frames = int(0.5*fps)
- for i in range(0, frames):
- yield (
- ('title', 'style', 'opacity', "%.4f" % 0),
- ('subtitle', 'style', 'opacity', "%.4f" % 0),
- ('personnames', 'style', 'opacity', "%.4f" % 0),
- )
-
- # 3 Sekunde Text Fadein
- frames = 3*fps
- for i in range(0, frames):
- yield (
- ('title', 'style', 'opacity', "%.4f" % easeDelay(easeLinear, 0*fps, i, 0, 1, 2*fps)),
- ('title', 'attr', 'transform', 'translate(%.4f, 0)' % easeDelay(easeOutQuad, 0*fps, i, -move, move, 2*fps)),
-
- ('subtitle', 'style', 'opacity', "%.4f" % easeDelay(easeLinear, 0*fps, i, 0, 1, 2*fps)),
- ('subtitle', 'attr', 'transform', 'translate(%.4f, 0)' % easeDelay(easeOutQuad, 0*fps, i, -move, move, 2*fps)),
-
- ('personnames', 'style', 'opacity', "%.4f" % easeDelay(easeLinear, 1*fps, i, 0, 1, 2*fps)),
- ('personnames', 'attr', 'transform', 'translate(%.4f, 0)' % easeDelay(easeOutQuad, 1*fps, i, -move, move, 2*fps)),
- )
-
- # 2 Sekunden stillstand
- frames = 2*fps
- for i in range(0, frames):
- yield tuple()
-
- # 1 Sekunde fadeout
- frames = 1*fps
- for i in range(0, frames):
- yield (
- ('title', 'style', 'opacity', "%.4f" % easeLinear(i, 1, -1, frames)),
- ('subtitle', 'style', 'opacity', "%.4f" % easeLinear(i, 1, -1, frames)),
- ('personnames', 'style', 'opacity', "%.4f" % easeLinear(i, 1, -1, frames)),
- )
-
- # 0.5 Sekunden stillstand
- frames = int(0.5*fps)
- for i in range(0, frames):
- yield (
- ('title', 'style', 'opacity', "%.4f" % 0),
- ('subtitle', 'style', 'opacity', "%.4f" % 0),
- ('personnames', 'style', 'opacity', "%.4f" % 0),
- )
-
-def outroFrames(params):
- move=50
-
- # 1 Sekunden stillstand
- frames = 1*fps
- for i in range(0, frames):
- yield (
- ('license', 'style', 'opacity', "%.4f" % 0),
- )
-
- # 4 Sekunde Text Fadein
- frames = 4*fps
- for i in range(0, frames):
- yield (
- ('license', 'style', 'opacity', "%.4f" % easeDelay(easeLinear, 0*fps, i, 0, 1, 2*fps)),
- ('license', 'attr', 'transform', 'translate(%.4f, 0)' % easeDelay(easeOutQuad, 0*fps, i, -move, move, 2*fps)),
- )
-
- # 2 Sekunden stillstand
- frames = 2*fps
- for i in range(0, frames):
- yield (
- ('license', 'style', 'opacity', "%.4f" % 1),
- )
+scheduleUrl = 'http://vcfb.de/2017/schedule.xml'
-def pauseFrames(params):
- # 1 Sekunden fade down
- frames = 1*fps
- for i in range(0, frames):
- yield (
- ('break', 'style', 'opacity', "%.4f" % easeLinear(i, 0.5, +0.5, frames)),
- )
+def introFrames(args):
+ # fade in title, subtitle, persons and id
+ frames = 3 * fps
+ for i in range(0, frames):
+ yield (
+ ('title', 'style', 'opacity', easeInQuad(i, 0, 1, frames)),
+ ('subtitle', 'style', 'opacity', easeInQuad(i, 0, 1, frames)),
+ ('persons', 'style', 'opacity', easeInQuad(i, 0, 1, frames)),
+ )
+ # show whole image for 5 seconds
+ frames = 5 * fps
+ for i in range(0, frames):
+ yield (
+ ('title', 'style', 'opacity', 1),
+ ('subtitle', 'style', 'opacity', 1),
+ ('persons', 'style', 'opacity', 1),
+ )
+
+
+def backgroundFrames(parameters):
+ # 40 Sekunden
+
+ frames = 20 * fps
+ for i in range(0, frames):
+ xshift = (i + 1) * 300 / frames
+ yshift = ((i + 1) * (150 / frames))
+ yield (
+ ('pillgroup', 'attr', 'transform', 'translate(%.4f, %.4f)' % (xshift, yshift)),
+ )
+
+ frames = 20 * fps
+ for i in range(0, frames):
+ xshift = 300 - ((i + 1) * (300 / frames))
+ yshift = 150 - ((i + 1) * (150 / frames))
+ yield (
+ ('pillgroup', 'attr', 'transform', 'translate(%.4f, %.4f)' % (xshift, yshift)),
+ )
+
+
+def outroFrames(args):
+ # fadein outro graphics
+ frames = 3 * fps
+ for i in range(0, frames):
+ yield (
+ ('pillgroup', 'style', 'opacity', easeInQuad(i, 0.01, 1, frames)),
+ ('logotext', 'style', 'opacity', easeInQuad(i, 0.01, 1, frames)),
+ ('c3voclogo', 'style', 'opacity', easeInQuad(i, 0.01, 1, frames)),
+ ('c3voctext', 'style', 'opacity', easeInQuad(i, 0.01, 1, frames)),
+ ('bysalogo', 'style', 'opacity', easeInQuad(i, 0.01, 1, frames)),
+ ('bysatext', 'style', 'opacity', easeInQuad(i, 0.01, 1, frames)),
+ )
+ frames = 3 * fps
+ for i in range(0, frames):
+ yield (
+ ('pillgroup', 'style', 'opacity', 1),
+ ('logotext', 'style', 'opacity', 1),
+ ('c3voclogo', 'style', 'opacity', 1),
+ ('c3voctext', 'style', 'opacity', 1),
+ ('bysalogo', 'style', 'opacity', 1),
+ ('bysatext', 'style', 'opacity', 1),
+ )
+
+
+def pauseFrames(args):
+ # fade heartgroups
+ frames = int(0.5 * fps)
+ for i in range(0, frames):
+ yield (
+ ('heartgroup1', 'style', 'opacity', easeInQuad(i, 0.25, 0.75, frames)),
+ ('heartgroup2', 'style', 'opacity', easeInQuad(i, 0.25, 0.75, frames)),
+ ('heartgroup3', 'style', 'opacity', easeInQuad(i, 0.25, 0.75, frames)),
+ )
+ for i in range(0, frames):
+ yield (
+ ('heartgroup1', 'style', 'opacity', easeInQuad(i, 1, -0.75, frames)),
+ ('heartgroup2', 'style', 'opacity', easeInQuad(i, 1, -0.75, frames)),
+ ('heartgroup3', 'style', 'opacity', easeInQuad(i, 1, -0.75, frames)),
+ )
+ for i in range(0, frames):
+ yield (
+ ('heartgroup1', 'style', 'opacity', easeInQuad(i, 0.25, 0.75, frames)),
+ ('heartgroup2', 'style', 'opacity', easeInQuad(i, 0.25, 0.75, frames)),
+ ('heartgroup3', 'style', 'opacity', easeInQuad(i, 0.25, 0.75, frames)),
+ )
+ for i in range(0, frames):
+ yield (
+ ('heartgroup1', 'style', 'opacity', easeInQuad(i, 1, -0.75, frames)),
+ ('heartgroup2', 'style', 'opacity', easeInQuad(i, 1, -0.75, frames)),
+ ('heartgroup3', 'style', 'opacity', easeInQuad(i, 1, -0.75, frames)),
+ )
+ for i in range(0, frames):
+ yield (
+ ('heartgroup1', 'style', 'opacity', easeInQuad(i, 0.25, 0.75, frames)),
+ ('heartgroup2', 'style', 'opacity', easeInQuad(i, 0.25, 0.75, frames)),
+ ('heartgroup3', 'style', 'opacity', easeInQuad(i, 0.25, 0.75, frames)),
+ )
+ for i in range(0, frames):
+ yield (
+ ('heartgroup1', 'style', 'opacity', easeInQuad(i, 1, -0.75, frames)),
+ ('heartgroup2', 'style', 'opacity', easeInQuad(i, 1, -0.75, frames)),
+ ('heartgroup3', 'style', 'opacity', easeInQuad(i, 1, -0.75, frames)),
+ )
+ for i in range(0, frames):
+ yield (
+ ('heartgroup1', 'style', 'opacity', easeInQuad(i, 0.25, 0.75, frames)),
+ ('heartgroup2', 'style', 'opacity', easeInQuad(i, 0.25, 0.75, frames)),
+ ('heartgroup3', 'style', 'opacity', easeInQuad(i, 0.25, 0.75, frames)),
+ )
+ for i in range(0, frames):
+ yield (
+ ('heartgroup1', 'style', 'opacity', easeInQuad(i, 1, -0.75, frames)),
+ ('heartgroup2', 'style', 'opacity', easeInQuad(i, 1, -0.75, frames)),
+ ('heartgroup3', 'style', 'opacity', easeInQuad(i, 1, -0.75, frames)),
+ )
+ for i in range(0, frames):
+ yield (
+ ('heartgroup1', 'style', 'opacity', easeInQuad(i, 0.25, 0.75, frames)),
+ ('heartgroup2', 'style', 'opacity', easeInQuad(i, 0.25, 0.75, frames)),
+ ('heartgroup3', 'style', 'opacity', easeInQuad(i, 0.25, 0.75, frames)),
+ )
+ for i in range(0, frames):
+ yield (
+ ('heartgroup1', 'style', 'opacity', easeInQuad(i, 1, -0.75, frames)),
+ ('heartgroup2', 'style', 'opacity', easeInQuad(i, 1, -0.75, frames)),
+ ('heartgroup3', 'style', 'opacity', easeInQuad(i, 1, -0.75, frames)),
+ )
- # 1 Sekunden fade up
- frames = 1*fps
- for i in range(0, frames):
- yield (
- ('break', 'style', 'opacity', "%.4f" % easeLinear(i, 1, -0.5, frames)),
- )
def debug():
-# render(
-# 'outro.svg',
-# '../outro.ts',
-# outroFrames
-# )
+ render('intro.svg',
+ '../intro.ts',
+ introFrames,
+ {
+ '$id': 7776,
+ '$title': 'StageWar live!',
+ '$subtitle': 'Metal Konzert',
+ '$persons': 'www.stagewar.de'
+ }
+ )
-# render(
-# 'pause.svg',
-# '../pause.ts',
-# pauseFrames
-# )
+ render('outro.svg',
+ '../outro.ts',
+ outroFrames
+ )
- render(
- 'intro.svg',
- '../intro.ts',
- introFrames,
- {
- '$id': 904,
- '$title': 'Was ist Open Source, wie funktioniert das?',
- '$subtitle': 'Die Organisation der Open Geo- und GIS-Welt. Worauf man achten sollte.',
- '$personnames': 'Arnulf Christl, Astrid Emde, Dominik Helle, Till Adams'
- }
- )
+ render(
+ 'background.svg',
+ '../background.ts',
+ backgroundFrames
+ )
-def tasks(queue, params):
- # iterate over all events extracted from the schedule xml-export
- for event in events(scheduleUrl, titlemap):
+ render('pause.svg',
+ '../pause.ts',
+ pauseFrames
+ )
- # generate a task description and put them into the queue
- queue.put(Rendertask(
- infile = 'intro.svg',
- outfile = str(event['id'])+".ts",
- sequence = introFrames,
- parameters = {
- '$id': event['id'],
- '$title': event['title'],
- '$subtitle': event['subtitle'],
- '$personnames': event['personnames']
- }
- ))
- # place a task for the outro into the queue
- queue.put(Rendertask(
- infile = 'outro.svg',
- outfile = 'outro.ts',
- sequence = outroFrames
- ))
+def tasks(queue, args, idlist, skiplist):
+ # iterate over all events extracted from the schedule xml-export
+ for event in events(scheduleUrl):
+ if event['room'] not in ('Bildungsraum'):
+ print("skipping room %s (%s [%s])" % (event['room'], event['title'], event['id']))
+ continue
+ if not (idlist == []):
+ if 000000 in idlist:
+ print("skipping id (%s [%s])" % (event['title'], event['id']))
+ continue
+ if int(event['id']) not in idlist:
+ print("skipping id (%s [%s])" % (event['title'], event['id']))
+ continue
+
+ # generate a task description and put them into the queue
+ queue.put(Rendertask(
+ infile='intro.svg',
+ outfile=str(event['id']) + ".ts",
+ sequence=introFrames,
+ parameters={
+ '$id': event['id'],
+ '$title': event['title'],
+ '$subtitle': event['subtitle'],
+ '$persons': event['personnames']
+ }
+ ))
+
+ # place a task for the outro into the queue
+ if not "out" in skiplist:
+ queue.put(Rendertask(
+ infile='outro.svg',
+ outfile='outro.ts',
+ sequence=outroFrames
+ ))
+
+ # place the pause-sequence into the queue
+ if not "pause" in skiplist:
+ queue.put(Rendertask(
+ infile='pause.svg',
+ outfile='pause.ts',
+ sequence=pauseFrames
+ ))
+
+ # place the background-sequence into the queue
+ if not "bg" in skiplist:
+ queue.put(Rendertask(
+ infile='background.svg',
+ outfile='background.ts',
+ sequence=backgroundFrames
+ ))
diff --git a/vcfb17/artwork/intro.svg b/vcfb17/artwork/intro.svg
index dff652b..641899e 100644
--- a/vcfb17/artwork/intro.svg
+++ b/vcfb17/artwork/intro.svg
@@ -14,7 +14,7 @@
viewBox="0 0 1920 1080"
id="svg3532"
version="1.1"
- inkscape:version="0.91 r13725"
+ inkscape:version="0.92.1 r15371"
inkscape:export-filename="/home/derpeter/projects/VOC/events/vcfb16/background.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
@@ -43,17 +43,18 @@
inkscape:current-layer="layer1"
showgrid="false"
units="px"
- inkscape:window-width="1920"
- inkscape:window-height="1004"
+ inkscape:window-width="1366"
+ inkscape:window-height="704"
inkscape:window-x="0"
- inkscape:window-y="24"
+ inkscape:window-y="27"
inkscape:window-maximized="1"
showguides="true"
inkscape:guide-bbox="true">
+ id="guide5769"
+ inkscape:locked="false" />
@@ -15524,43 +15525,41 @@
inkscape:connector-curvature="0" />
+ style="font-size:180px;line-height:1.25;fill:#dcdcdc">
$personnames
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:60px;line-height:1.25;font-family:'TeX Gyre Adventor';-inkscape-font-specification:'TeX Gyre Adventor';fill:#dcdcdc">$persons
$subtitle $title
+ style="font-size:125px;line-height:1.25;fill:#d3d3d3"
+ id="flowPara7385">