diff --git a/eh17/__init__.py b/eh17/__init__.py new file mode 100644 index 0000000..9d95357 --- /dev/null +++ b/eh17/__init__.py @@ -0,0 +1,233 @@ +#!/usr/bin/python3 + +import subprocess +import os.path +from renderlib import * +from easing import * +import svg.path + +# URL to Schedule-XML +scheduleUrl = 'https://programm.froscon.de/2016/schedule.xml' + +# For (really) too long titles +titlemap = { + # +} + + +def introFrames(args): + xml = etree.parse('froscon2016/artwork/intro.svg').getroot() + pathstr = xml.find(".//*[@id='animatePath']").get('d') + frog = xml.find(".//*[@id='animatePath']").get('d') + path = svg.path.parse_path(pathstr) + + init = path.point(0) + + frames = int(0.5*fps) + for i in range(0, frames): + p = path.point(i / frames) - init + yield ( + ('animatePath', 'style', 'opacity', 0), + ('date', 'style', 'opacity', 0), + ) + + frames = 3*fps + for i in range(0, frames): + p = path.point(i / frames) - init + yield ( + ('frog', 'attr', 'transform', 'translate(%.4f, %.4f)' % (p.real, p.imag)), + ) + + frames = int(0.5*fps) + for i in range(0, frames): + yield tuple() + + frames = 1*fps + for i in range(0, frames): + yield ( + ('url', 'style', 'opacity', easeOutQuad(i, 1, -1, frames)), + ('date', 'style', 'opacity', easeOutQuad(i, 0, 1, frames)), + ) + + frames = int(1.5*fps) + for i in range(0, frames): + yield ( + ('url', 'style', 'opacity', 0), + ('date', 'style', 'opacity', 1), + ('bar', 'style', 'opacity', easeLinear(i, 1, -1, frames)), + ('title', 'style', 'opacity', easeLinear(i, 1, -1, frames)), + ) + + + # frames = 1*fps + # for i in range(0, frames): + # yield ( + # ) + + frames = int(0.5*fps)+1 + for i in range(0, frames): + yield ( + ('bar', 'style', 'opacity', 0), + ('title', 'style', 'opacity', 0), + ) + +def outroFrames(args): + xml = etree.parse('froscon2016/artwork/outro.svg').getroot() + pathstr = xml.find(".//*[@id='animatePath']").get('d') + frog = xml.find(".//*[@id='animatePath']").get('d') + path = svg.path.parse_path(pathstr) + + init = path.point(0) + + frames = int(0.5*fps) + for i in range(0, frames): + p = path.point(i / frames) - init + yield ( + ('animatePath', 'style', 'opacity', 0), + ('license', 'style', 'opacity', 0), + ) + + frames = 3*fps + for i in range(0, frames): + p = path.point(i / frames) - init + yield ( + ('frog', 'attr', 'transform', 'translate(%.4f, %.4f)' % (p.real, p.imag)), + ) + + frames = int(0.5*fps)+1 + for i in range(0, frames): + yield tuple() + + frames = 1*fps + for i in range(0, frames): + yield ( + ('logo', 'style', 'opacity', easeLinear(i, 1, -1, frames)), + ) + + frames = 1*fps + for i in range(0, frames): + yield ( + ('logo', 'style', 'opacity', 0), + ('license', 'style', 'opacity', easeLinear(i, 0, 1, frames)), + ) + + frames = 2*fps + for i in range(0, frames): + yield ( + ('logo', 'style', 'opacity', 0), + ('license', 'style', 'opacity', 1), + ) + + frames = 1*fps + for i in range(0, frames): + yield ( + ('logo', 'style', 'opacity', 0), + ('license', 'style', 'opacity', easeLinear(i, 1, -1, frames)), + ) + + frames = 1*fps + for i in range(0, frames): + yield ( + ('logo', 'style', 'opacity', 0), + ('license', 'style', 'opacity', 0), + ) + +def pauseFrames(args): + frames = 2*fps + for i in range(0, frames): + yield ( + ('text1', 'style', 'opacity', 1), + ('text2', 'style', 'opacity', 0), + ) + + frames = 1*fps + for i in range(0, frames): + yield ( + ('text1', 'style', 'opacity', easeLinear(i, 1, -1, frames)), + ('text2', 'style', 'opacity', 0), + ) + + frames = 1*fps + for i in range(0, frames): + yield ( + ('text1', 'style', 'opacity', 0), + ('text2', 'style', 'opacity', easeLinear(i, 0, 1, frames)), + ) + + frames = 2*fps + for i in range(0, frames): + yield ( + ('text1', 'style', 'opacity', 0), + ('text2', 'style', 'opacity', 1), + ) + + frames = 1*fps + for i in range(0, frames): + yield ( + ('text1', 'style', 'opacity', 0), + ('text2', 'style', 'opacity', easeLinear(i, 1, -1, frames)), + ) + + frames = 1*fps + for i in range(0, frames): + yield ( + ('text1', 'style', 'opacity', easeLinear(i, 0, 1, frames)), + ('text2', 'style', 'opacity', 0), + ) + +def debug(): + render('intro.svg', + '../intro.ts', + introFrames, + { + '$id': 1302, + '$title': 'VlizedLab - Eine Open Source-Virtualisierungslösung für PC-Räume', + '$subtitle': 'IT Automatisierung und zentrales Management mit SALT', + '$personnames': 'Thorsten Kramm' + } + ) + + render('outro.svg', + '../outro.ts', + outroFrames + ) + + render('pause.svg', + '../pause.ts', + pauseFrames + ) + + +def tasks(queue, args): + # iterate over all events extracted from the schedule xml-export + for event in events(scheduleUrl): + if event['room'] not in ('Saal 1', 'Saal 3', 'Saal 4', 'Saal 5', 'Saal 6', 'Saal 7', 'Saal 8'): + print("skipping room %s (%s)" % (event['room'], event['title'])) + 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'], + '$personnames': event['personnames'] + } + )) + + # place a task for the outro into the queue + queue.put(Rendertask( + infile = 'outro.svg', + outfile = 'outro.ts', + sequence = outroFrames + )) + + # place the pause-sequence into the queue + queue.put(Rendertask( + infile = 'pause.svg', + outfile = 'pause.ts', + sequence = pauseFrames + )) diff --git a/eh17/artwork/background.png b/eh17/artwork/background.png new file mode 100644 index 0000000..3cd0879 Binary files /dev/null and b/eh17/artwork/background.png differ diff --git a/eh17/artwork/background.xcf b/eh17/artwork/background.xcf new file mode 100644 index 0000000..d9a487c Binary files /dev/null and b/eh17/artwork/background.xcf differ diff --git a/eh17/artwork/intro.svg b/eh17/artwork/intro.svg new file mode 100644 index 0000000..a04bd44 --- /dev/null +++ b/eh17/artwork/intro.svg @@ -0,0 +1,845 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + 0000000 45 61 73 74 65 72 68 65 67 67 20 32 30 31 370000017 0a 49 73 74 20 64 61 73 20 5a 75 66 61 6c 6c0000036 20 6f 64 65 72 20 6b 61 6e 6e 20 64 61 73 200000055 77 65 67 3f 0a 0a 31 34 2e 20 2d 20 31 37 2e0000074 20 41 70 72 69 6c 20 32 30 31 37 20 69 6e 200000113 4d c3 bc 68 6c 68 65 69 6d 2f 4d 61 69 6e 0a0000132 44 32 33 20 43 68 61 6f 73 77 65 6c 6c 65 200000151 26 20 63 63 63 2d 66 66 6d 20 61 6c 73 20 530000170 65 67 66 61 75 6c 74 20 56 65 72 61 6e 73 740000207 61 6c 74 75 6e 67 73 20 55 47 0a 0a 35 30 2e0000226 31 32 35 34 31 31 34 4e 20 38 2e 38 34 35 310000245 32 30 39 45 0a 0a 41 6e 62 69 6e 64 75 6e 670000264 20 6d 69 74 20 c3 96 50 4e 56 2c 20 48 61 6c0000303 74 65 73 74 65 6c 6c 65 20 22 4d c3 bc 68 6c0000322 68 65 69 6d 20 4d 61 69 6e 22 2e 20 4d 69 740000341 20 64 65 72 20 53 39 20 67 69 62 74 20 65 730000360 20 64 75 72 63 68 67 65 68 65 6e 64 65 20 560000377 65 72 62 69 6e 64 75 6e 67 65 6e 20 6e 61 630000416 68 20 46 72 61 6e 6b 66 75 72 74 20 48 61 750000435 70 74 62 61 68 6e 68 6f 66 20 28 32 32 20 4d0000454 69 6e 75 74 65 6e 29 20 75 6e 64 20 46 72 610000473 6e 6b 66 75 72 74 20 46 6c 75 67 68 61 66 650000512 6e 20 28 33 33 20 4d 69 6e 75 74 65 6e 29 2e0000531 20 44 61 7a 75 20 6b 6f 6d 6d 74 20 64 69 650000550 20 46 c3 a4 68 72 76 65 72 62 69 6e 64 75 6e0000567 67 20 6e 61 63 68 20 4d 61 69 6e 74 61 6c 200000606 6d 69 74 20 64 65 72 20 4d 61 69 6e 66 c3 a40000625 68 72 65 2c 20 64 72 c3 bc 62 65 6e 20 67 690000644 62 74 20 65 73 20 77 65 69 74 65 72 65 20 480000663 6f 74 65 6c 73 2e 0a 0a 45 72 73 74 65 73 200000702 45 61 73 74 65 72 68 65 67 67 20 6d 69 74 200000721 43 61 6d 70 69 6e 67 2c 20 69 6e 6b 6c 75 730000740 69 76 65 20 57 61 73 73 65 72 2c 20 53 74 720000757 6f 6d 20 61 75 66 20 64 65 6d 20 43 61 6d 700000776 69 6e 67 70 6c 61 74 7a 20 75 6e 64 20 44 750001015 73 63 68 65 6e 20 69 6d 20 47 65 62 c3 a4 750001034 64 65 2e 0a 52 69 65 73 69 67 65 73 20 48 610001053 63 6b 63 65 6e 74 65 72 20 6d 69 74 20 50 6c0001072 61 74 7a 20 66 c3 bc 72 20 61 6c 6c 20 65 750001111 72 65 20 50 72 6f 6a 65 6b 74 65 2e 20 48 610001130 63 6b 20 61 6c 6c 20 74 68 65 20 74 68 69 6e0001147 67 73 21 0a 53 63 68 6e 65 6c 6c 65 20 49 6e0001166 74 65 72 6e 65 74 61 6e 62 69 6e 64 75 6e 670001205 20 5c 6f 2f 20 0a 4b 6f 73 74 65 6e 6c 6f 730001224 65 73 20 61 75 73 67 65 64 65 68 6e 74 65 730001243 20 46 72 c3 bc 68 73 74 c3 bc 63 6b 2c 20 610001262 62 65 6e 64 73 20 7a 75 20 66 61 69 72 65 6e0001301 20 50 72 65 69 73 65 6e 20 77 61 72 6d 65 730001320 20 45 73 73 65 6e 2e 20 4e 61 74 c3 bc 72 6c0001337 69 63 68 20 67 69 62 74 20 65 73 20 4d 61 740001356 65 20 7a 75 6d 20 44 75 72 63 68 68 61 63 6b0001375 65 6e 2e 0a 44 61 73 20 57 69 63 68 74 69 670001414 73 74 65 3a 20 45 6e 64 6c 69 63 68 20 6e 6f0001433 72 6d 61 6c 65 20 4d 65 6e 73 63 68 65 6e 200001452 3c 33 20 0a 41 6c 6c 65 73 20 61 6e 64 65 720001471 65 20 c3 bc 62 65 72 6c 61 73 73 65 6e 20 770001510 69 72 20 64 65 6d 20 5a 75 66 61 6c 6c 2e 0a + http://programm.froscon.de/2016/events/$id.html 20.-21. August 2016 + + + + + + + + + + + + + + + + + + + + + + Easterhegg 2017 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $title + + $personnames + + diff --git a/eh17/artwork/logo-bw.svg b/eh17/artwork/logo-bw.svg new file mode 100644 index 0000000..f30babb --- /dev/null +++ b/eh17/artwork/logo-bw.svg @@ -0,0 +1,208 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + diff --git a/eh17/artwork/logo.svg b/eh17/artwork/logo.svg new file mode 100644 index 0000000..a57e99c --- /dev/null +++ b/eh17/artwork/logo.svg @@ -0,0 +1,222 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + diff --git a/eh17/artwork/outro.svg b/eh17/artwork/outro.svg new file mode 100644 index 0000000..ef2f5eb --- /dev/null +++ b/eh17/artwork/outro.svg @@ -0,0 +1,496 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + 20.- 21. August 2016 + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/eh17/artwork/overlay.svg b/eh17/artwork/overlay.svg new file mode 100644 index 0000000..76f5ffe --- /dev/null +++ b/eh17/artwork/overlay.svg @@ -0,0 +1,179 @@ + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + diff --git a/eh17/artwork/pause.svg b/eh17/artwork/pause.svg new file mode 100644 index 0000000..7fc2b1a --- /dev/null +++ b/eh17/artwork/pause.svg @@ -0,0 +1,479 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + Pause + + Grade + + http://programm.froscon.de/2014/events/$id.html + + + + + + + + + + + + + + +