From 74d8aacd4c62c87ee79aaaf6f1e257ff3693a8aa Mon Sep 17 00:00:00 2001 From: Florian Larysch Date: Thu, 12 Nov 2015 00:28:43 +0100 Subject: [PATCH] nixcon2015: add intro --- nixcon2015/__init__.py | 122 ++++++++++++++++++++++++ nixcon2015/artwork/intro.svg | 176 +++++++++++++++++++++++++++++++++++ 2 files changed, 298 insertions(+) create mode 100644 nixcon2015/__init__.py create mode 100644 nixcon2015/artwork/intro.svg diff --git a/nixcon2015/__init__.py b/nixcon2015/__init__.py new file mode 100644 index 0000000..857bde7 --- /dev/null +++ b/nixcon2015/__init__.py @@ -0,0 +1,122 @@ +#!/usr/bin/python3 + +from renderlib import * +from easing import * +import math + +# URL to Schedule-XML +scheduleUrl = 'https://n621.de/fud/nixcon.xml' + +# For (really) too long titles +titlemap = { + #708: "Neue WEB-Anwendungen des LGRB Baden-Württemberg im Überblick" +} + +def introFrames(params): + move=40 + + # wait + frames = 1*fps + for i in range(0, frames): + yield ( + ) + + deltas = {} + for segment in range(1, 7): + angle = 60 * (segment - 1) + dist = 1000 + + dx = -dist * math.cos(math.radians(angle)) + dy = -dist * math.sin(math.radians(angle)) + + deltas[segment] = (dx, dy) + + # fly out + frames = int(1.5*fps) + for i in range(0, frames): + placements = [] + for segment in range(1, 7): + x = easeInCubic(i, 0, deltas[segment][0], frames) + y = easeInCubic(i, 0, deltas[segment][1], frames) + opacity = 1 - easeInCubic(i, 0, 1, int(0.8*frames)) + + placements.extend([ + ('segment%u' % segment, 'attr', 'transform', 'translate(%.4f, %.4f)' % (x, y)), + ('segment%u' % segment, 'style', 'opacity', '%.4f' % opacity) + ]) + + logotext_dx = easeInCubic(i, 0, 2000, frames) + logotext_opacity = 1 - easeInCubic(i, 0, 1, 20) + + placements.extend([ + ('logotext', 'attr', 'transform', 'translate(%.4f, 0)' % logotext_dx), + ('logotext', 'style', 'opacity', '%.4f' % logotext_opacity), + ]) + + if i > int(frames/2): + sub_frames = frames - int(frames/2) + sub_i = i - int(frames/2) + + talk_opacity = easeInCubic(sub_i, 0, 1, sub_frames) + + placements.extend([ + ('title', 'style', 'opacity', '%.4f' % talk_opacity), + ('person', 'style', 'opacity', '%.4f' % talk_opacity), + ]) + + + yield placements + + # wait + frames = int(2.5*fps) + for i in range(0, frames): + yield ( + ('title', 'style', 'opacity', '%.4f' % 1), + ('person', 'style', 'opacity', '%.4f' % 1), + ) + +def outroFrames(params): + pass + + +def debug(): + #render( + # 'outro.svg', + # '../outro.dv', + # outroFrames + #) + + render( + 'intro.svg', + '../intro.dv', + introFrames, + { + '$id': 904, + '$title': 'The sorry state of Python packaging and how it reflects in Nix', + '$personnames': 'Domen Kožar' + } + ) + +def tasks(queue, params): + # iterate over all events extracted from the schedule xml-export + for event in events(scheduleUrl, titlemap): + + # generate a task description and put them into the queue + queue.put(Rendertask( + infile = 'intro.svg', + outfile = str(event['id'])+".dv", + 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.dv', + # sequence = outroFrames + #)) diff --git a/nixcon2015/artwork/intro.svg b/nixcon2015/artwork/intro.svg new file mode 100644 index 0000000..b549a94 --- /dev/null +++ b/nixcon2015/artwork/intro.svg @@ -0,0 +1,176 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + NixCon2015 + + + $title $personnames +