Page load in progress

Current Exhibitions

see all

'19 Jun 14-16
Von einem der auszog eine Wohnung in Berlin zu finden. Ein Automatisierungsdrama in drei Akten — 2. Akt
(DE) Berlin
48 Stunden Neukölln 2019 @ Weisestraße 58

selected festival entry for the annual theme "Futur III"

'19 Apr 25 -     May 12
Was du willst (Teil 1 - 3)
(DE) Leipzig
Unstable Settings @ Halle 14 - Untergeschoss

THIS IS FAKE group show

'19 Apr 04
(UK) Cambridge
Ethics in Mathematics (EiM2) @ Cambridge University


Von einem der auszog eine Wohnung in Berlin zu finden. Ein Automatisierungsdrama in drei Akten — 1. Akt: Deine Zukunft ruft! Jetzt antworten
(DE) Leipzig
Verletzbare Subjekte @ HGB Galerie

group show coordinated by Peggy Buth

'18 Dec 30
(DE) Leipzig

lecture, self-organized session

Julian Assange, 47, (03.07.71) has today, Thursday 11 April, been further arrested on behalf of the United States authorities, at 10:53hrs after his arrival at a central London police station. This is an extradition warrant under Section 73 of the Extradition Act. He will appear in custody at Westminster Magistrates' Court later today (Thursday, 11 April).
[, emphasis added]

In completely unrelated news: IMF Executive Board Approves US$4.2 Billion Extended Fund Facility for Ecuador (Press Release No. 19/72 - March 11, 2019)
A picture of the internet

via @HumansOfLate Capitalism

Memo to self: LUKS + LVM + chroot + update-initramfs

As I will for sure skrew up things on my machine again sooner or later, here is a slightly nerdy memo to my future self.

  1. It assumes an LUKS-encrypted NVMe with LVM where the first partition is efi, then boot, then root.
  2. As my two NVMe drives enjoy swapping their /dev/nvmeX identifiers the first line checks for the identifier based on the drive's UUID (which you could get from blkid).
  3. The identifier chosen for cryptsetup has to match the /etc/crypttab of the machine your chroot-ing into.
  4. update-initramfs -u is not enough.

# get right NVMe decive
IFS=':'; DEV=(`sudo blkid | grep "UUIDv4"`); unset IFS;
echo "Detected NVMe ${DEV}"

# decrypt drive -- last identifier has to match the target's /etc/crypttab!
sudo cryptsetup luksOpen "${DEV}p3" root_crypt

# mount from mapper (not the identifier above!)
sudo mount /dev/mapper/ubuntu--vg-root /mnt

# mount all the things
sudo mount --bind /dev /mnt/dev
sudo mount --bind /sys /mnt/sys
sudo mount --bind /proc /mnt/proc
sudo mount --bind /run /mnt/run

# or shorter:
for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done

# set up DNS
sudo mount -o bind /etc/resolv.conf /mnt/etc/resolv.conf

# mount /boot
sudo mount "${DEV}p2" /mnt/boot

# mount EFI (wasn't necessary so far)
# sudo mount "${DEV}p1" /mnt/boot/efi

echo "Device mounted and ready to chroot. Run:"
echo "sudo chroot /mnt /bin/bash"

Now inside the machine it should be possible to update-initramfs -c -k all.

35C3 - Day 4 - 14:00 - Room 11 (CCL, floor 2)

A self-organized session to present and discuss People who write code at 35C3!
More information at
»Alles spricht dafür, dass Begriffe wie ‚Künstliche Intelligenz‘ bis zum Jahre 2010 stark relativiert und auf ihren rein technischen, werkzeughaften Sinn reduziert sind.«
- Theo Lutz, 1987 [Quelle]

(Lutz also did computer poetry. Back in 1959. On a Z22. With 3kHz and 38kB drum memory. Read it here.)

Mehr CSU-Wähler sind verstorben als zu irgend einer anderen Partei gewechselt.

Quelle: - und keine Ahnung wo *die* ihre Daten haben

Ableton Live Set Real Export

Assume you want to be able to export your Ableton project's arrangement into a machine readable format to... do some things that machines are good at.
You start by opening a .als file in a text editor and - if your computer doesn't crash - get to see a lot of random characters.

Luckily, Ableton recently released a tool called Ableton Live Set Export.
It does exactly not what the name says:
The library only contains functionality for generating Ableton Live projects. It does not support reading or parsing Live Sets or other Ableton-generated files.
Sounds like Alice, doesn't it?

But the internet always has answers.
It turns out that .als is just a gz-compressed proprietary XML format - and that is pretty easy to use. So, step one, rename your .als to .als.gz, decompress it and save the file as .xml.

Step two, build a little Python (3.6) script - using the help of lxml - and get the data you want!

Caveats (as found so far)

Some weird things when working with Ableton live set files:
  • Time is measured in beats. This kind of makes sense, but is also really annoying if you want to interact with other software.

The code

from lxml import etree
import math

tree = etree.parse('ableton.xml')
root = tree.getroot()

project_bpm = float(root.find('.//Tempo/Manual').get('Value'))

def beats_to_seconds(beats, bpm):
    return beats * 60 / bpm

def seconds_to_time_string(seconds):
    milliseconds = round((seconds % 1) * 1000)
    seconds = round(seconds)
    minutes = math.floor(seconds / 60)
    hours = math.floor(minutes / 60)
    minutes = minutes % 60
    seconds = seconds % 60

    return f'{hours:02d}:{minutes:02d}:{seconds:02d}.{milliseconds:03d}'

def beats_to_time_string(beats, bpm):
    return seconds_to_time_string(beats_to_seconds(beats, bpm))

tracks_xml = root.findall(".//AudioTrack")
tracks = {}
for track_xml in tracks_xml:
    track_id = track_xml.get('Id')
    track = {
        'id': track_id,
        'name': track_xml.find('Name/UserName').get('Value'),
        # it's handy to keep an XML element reference while debugging, but not necessary for 'production'
        '_xml': track_xml

    clips_xml = track_xml.findall('.//AudioClip')
    clips = []
    for clip_xml in clips_xml:
        clip_path = '/' + '/'.join([path_xml.get('Dir') for path_xml in clip_xml.findall('.//SearchHint/PathHint/RelativePathElement')]) + '/'
        clip = {
            'name': clip_xml.find('Name').get('Value'),
            'file': clip_xml.find('SampleRef/FileRef/Name').get('Value'),
            'path': clip_path,
            'start_on_track': beats_to_seconds(float(clip_xml.find('CurrentStart').get('Value')), project_bpm),
            'end_on_track': beats_to_seconds(float(clip_xml.find('CurrentEnd').get('Value')), project_bpm),
            'start_in_file': beats_to_seconds(float(clip_xml.find('Loop/LoopStart').get('Value')), project_bpm),
            'end_in_file': beats_to_seconds(float(clip_xml.find('Loop/LoopEnd').get('Value')), project_bpm),
            # it's handy to keep an XML element reference while debugging, but not necessary for 'production'
            '_xml': clip_xml

    track['clips'] = clips
    tracks[track_id] = track

# use this to find the IDs of the tracks you're interested in
# I don't think you can guess these from inside Ableton
# for track_id, track in tracks.items():
#     print(track_id, track['name'])

track_id_filter = ['144']
for track_id in track_id_filter:
    track = tracks[track_id]

    print("\n" + track['name'])

    for clip in track['clips']:
        print(f"{seconds_to_time_string(clip['start_on_track'])} - {seconds_to_time_string(clip['end_on_track'])} "
              f"| {clip['name']:20} | {clip['file']} ("
              f"{seconds_to_time_string(clip['start_in_file'])} - {seconds_to_time_string(clip['end_in_file'])})")

Sample output

I've redacted the actual values, but you get the idea:
00:00:00.000 - 00:00:02.500 | CLIP NAME          | FILE NAME (00:00:10.500 - 00:00:13.1000)
00:00:03.508 - 00:00:04.027 | CLIP NAME          | FILE NAME (00:02:59.625 - 00:03:00.144)
00:00:04.050 - 00:00:06.131 | CLIP NAME          | FILE NAME (00:00:21.479 - 00:00:24.560)
00:00:06.131 - 00:00:07.335 | CLIP NAME          | FILE NAME (00:00:09.459 - 00:00:11.663)
00:00:07.335 - 00:00:10.595 | CLIP NAME          | FILE NAME (00:00:28.572 - 00:00:30.831)
00:00:10.595 - 00:00:12.998 | CLIP NAME          | FILE NAME (00:00:15.439 - 00:00:18.842)
The first time range indicates the place within your arrangement, whereas the latter one (in brackets) refers to the portion of the source file being used.

Ableton, Ableton Live and some other words in this text are probably protected by copyright and therefore (somehow) belong to someone or something. Also, Ableton hasn't publicly encouraged people to hack there file format so I assume this isn't endorsed by them.

Art school

as it happened.
2016-01-04 19:12 - 20:23
A salmon catching a bear
Update (2019): Assuming the bear is society, I'd now opt for being the salmon.

How do you?

(or: What the internet really wants to know is slime)

French I
French II
Spanish I
Spanish II
Portuguese I
Portuguese II
...and the essential analysis
English3rd(none) 0%
German1st - 4th(none)40%
French I1st, 4th, 10th(none)40%
French II1st, 4th, 5th2nd, 3rd20%
Spanish I2nd(none)80%
Spanish II2nd8th50%
Portuguese I1st(none)70%
Portuguese II1st(none)80%
Installation view
In Sarnen (CH) at Galerie Hofmatt I got the possibility to exhibit alongside my uncle Rüdiger Schöll. In response to his infinitely layered paintings - but also the very special historic vaulted cellar of the gallery - I adapted the previous work into a spacial setting.

Two projectors fill the room with real-time and continuously updating images, taken from webcams all over the world. In the center there are two fragmented screens, taking on the stripes employed by Rüdiger Schöll, compositing uncanny scenes which at the same time create a strong sense of meaning as well as being pure technical artifacts without intention.
Pixels bend on the curved shapes of the vault, blending technical infrastructure with a historic monument.
Read more: Luzerner Zeitung
Directional speakers allow local hearing of a single interview while inviting to wander through the tangle of sound
I've asked 35 very diverse people the following three questions:

Why do you write code?

How does it affect you, that you write code?

How does it affect others, that you write code?

The installation tries to find a way to make their answers accessible, as well as questioning itself and the meaning/relevance of the questions.
rdf:RDF<cc:Work rdf:about="">dc:formatimage/svg+xml</dc:format><dc:type rdf:resource=""/>dc:title/</cc:Work></rdf:RDF>
The floor is spacially labeled to allow navigating through the directional audio tangle.
It is also one of many measures to show that there was an opinionated curatorial process determing which fragments have been selected or how they were grouped.

Labels on the floor below the directional speakers
Front: A list of questions on infinite paper / Back: the research office as part of the installation

A very long (although not infinite) list of questions I've posed myself during the process of preparing, conducting, and editing the interviews, as well as the installation itself - printed on continous form paper.


Ist die Frage "Warum schreibst du Code?" zu oberflächlich?

Sind die Fragen zu generisch um Menschen in einen wirklichen Reflexionsprozess zu lenken? Also sind am Ende vielleicht die Art und Formulierung mehr für die (mangelnden) Antworten verantwortlich als die (mangelnde) Reflektion der Antwortenden?

Wie beinflusst es die Interviewees in ihren Antworten je nach dem ob sie mich eher als Informatik-Student oder als Kunst-Student wahrnehmen?

Wie stark beeinflusst der persönliche Vertrautheitsgrad die Antworten?

Wie viel geht durch die Verwendung des convenience samples an möglichen Antworten / Bandbreite / Aussagen verloren?


Hyperscreenshot of the audio editing program

The installation tries to deconstruct it's own methodology as far as possible. By showing how the material was organized, labeled, and what terminology was employed the viewers are empowered to question whether they agree with the structure and what its limitations are.

Further this allows observing clusters and tendencies of which topics are talked about most and in what combination without reverting to a classical quantitative analysis.
As far as available, transcripts of the interviews were available to be read and studied. They present an unfiltered, uncurated, alternative (original) naration - which is more "authentic" but also very protractedand and thus harder to digest.
Full interview transcripts were available for viewers to engage further and do their own research

Blender cheat sheet

A very personal collection of shortcuts and utilities I keep forgetting. No intent of completeness.

3D View


AAll/none selection
BBox select
Ctrl+IInvert selection
Shift+RMBSet active object
Shift+SCursor to selected (and others)


ZWireframe ↔ Rendered
TabObject ↔ Edit
Ctrl+TabSelect Vertex/Edge/Face mode


Ctrl+PSet Parent
Alt+PClear Parent
Ctrl+Alt+GRemove from group


S X XScale local X
PSelection to separate
W⇒ Subdivide
Ctrl+AApply transformation
Ctrl+Shift+ Alt+COrigin to center of mass/surface/volume

Hierarchy View


Ctrl+LMBPerform action with all children (select, toggle visibility, ...)
. (NumPad)Reveal selection
This will be a new series highlighting the absurd diversity of "things" one can stumble upon within a short time-frame when leasurely floating through the web.

Freizeit & Internet 1

Who said unicorns are horse-based?
Things that happen in Silicon Valley and also the Soviet Union:
- waiting years to receive a car you ordered, to find that it's of poor workmanship and quality
- promises of colonizing the solar system while you toil in drudgery day in, day out
- living five adults to a two room apartment
- being told you are constructing utopia while the system crumbles around you
- 'totally not illegal taxi' taxis by private citizens moonlighting to make ends meet
- everything slaved to the needs of the military-industrial complex
- mandatory workplace political education
- productivity largely falsified to satisfy appearance of sponsoring elites
- deviation from mainstream narrative carries heavy social and political consequences
- networked computers exist but they're really bad
- Henry Kissinger visits sometimes for some reason
- elite power struggles result in massive collateral damage, sometimes purges
- failures are bizarrely upheld as triumphs
- otherwise extremely intelligent people just turning the crank because it's the only way to get ahead
- the plight of the working class is discussed mainly by people who do no work
- the United States as a whole is depicted as evil by default
- the currency most people are talking about is fake and worthless (Thread)
»Very few people have the opportunity to have a real, oil painting portrait of Ronald Regan before The Ronald Reagan Collection.«
»A photo is a point time but a painting is history. Each painting we make is an individual piece of art that memorializes President Reagan.«

Wahlvorurteile, Teil I

CDU AfD Linke SPD FDP Grüne (+) (++)
0.00% 0.00% 35.71% 10.71% 7.14% 39.29% 0.00% 7.14%
0.00% 0.00% 31.25% 0.00% 6.25% 15.63% 31.25% 15.63%
0.95% 2.86% 28.57% 9.52% 0.00% 47.62% 9.52% 0.95%
5.26% 0.00% 26.32% 21.05% 0.00% 26.32% 21.05% 0.00%
0.00% 0.00% 35.00% 0.00% 5.00% 10.00% 40.00% 10.00%
5.00% 0.00% 40.00% 15.00% 5.00% 35.00% 0.00% 0.00%
5.26% 5.26% 26.32% 10.53% 10.53% 26.32% 15.79% 0.00%
1.00% 0.00% 32.00% 12.00% 5.00% 15.00% 30.00% 5.00%
0.00% 16.67% 50.00% 0.00% 0.00% 0.00% 33.33% 0.00%
22.22% 11.11% 33.33% 22.22% 5.56% 5.56% 0.00% 0.00%
4.00% 0.00% 40.00% 16.00% 0.00% 30.00% 10.00% 0.00%
0.00% 6.67% 26.67% 13.33% 20.00% 33.33% 0.00% 0.00%
0.00% 0.00% 52.63% 7.89% 2.63% 26.32% 5.26% 5.26%
5.00% 0.00% 27.50% 17.50% 5.00% 22.50% 20.00% 2.50%
0.00% 0.00% 82.00% 8.00% 0.00% 5.00% 5.00% 0.00%
5.00% 0.00% 60.00% 5.00% 0.00% 30.00% 0.00% 0.00%
0.00% 0.00% 60.00% 20.00% 2.00% 10.00% 3.00% 5.00%
0.00% 0.00% 35.29% 26.47% 2.94% 11.76% 8.82% 14.71%
0.00% 0.00% 50.00% 10.00% 5.00% 30.00% 5.00% 0.00%
0.00% 0.00% 30.77% 10.26% 2.56% 25.64% 30.77% 0.00%
20.00% 0.00% 30.00% 30.00% 0.00% 20.00% 0.00% 0.00%

(+) Didn't vote (++) Not entitled to vote

I am still following up on the work Gera (politisch). At the HGB Leipzig there is a seminar called Person of no consquences, concerned with origin, gender, whiteness, shame, social injustice/precarity and the (de)construction of all the above.

Thus, I repeated the poll: I asked 38 of the seminar's students which party they had voted in Germany's 2017 election (Zweitstimme).
A month later, framed as a prize draw, I asked them to guess what their peers had declared to have voted in the poll (because who knows if they lied?).

Here are the unfiltered results.
"Zebras camouflage as Putin in order to avoid Tsetse flies." — Wikipedia
github, paper
Tablet-based response entry, with privacy-enhancing blinds
»Welcher Partei haben Sie bei der Bundestagswahl 2017 Ihre Zweitstimme gegeben?«
A visitor responding to the performer

A visitor responding to the performer

A visitor responding to the performer
Raum 2.41

Donnerstag 18:00 Uhr - 24:00 Uhr
Freitag 11:00 Uhr - 22:00 Uhr
Samstag 11:00 Uhr - 22:00 Uhr
Sonntag 11:00 Uhr - 20:00 Uhr

Filmprogramm HGB Rundgang 2018, Teil 1
Filmprogramm HGB Rundgang 2018, Teil 2
Structure Android Screenshot

Mom, look, I'm a real developer now! I've built my first Android app...

How to Structure

This is a rough user manual for Structure. Read the announcement for v0.15.2 (Abstractionism) here. The most recent version of Structure is version badge — get it here!


  1. Download the latest version appropriate for your plattform. (Installing it on macOS is weird, because Apple doesn't like independent non-macOS developer's software).
  2. If you don't have one, create a GitHub account. For now this is unfortunately the only available log-in mechanism for Structure.
  3. Start Structure, log in and bookmark things.

Keyboard shortcuts

Key combinations are not customizable, yet (#7)
Key combination Action
[CTRL/CMD] + [n] Create new entry
[CTRL/CMD] + [t] Add tag (only available when viewing a single entry)
[CTRL/CMD] + [.] or [Esc] Back to default view (list of links/notes)
[CTRL/CMD] + [f] Search links/notes

How do I...

...create a text note? - go to Add new (or [CTRL/CMD] + [n]) and click on the Need just text? below the URL field
...untag? - right click on the tag
...see all links/notes with a tag? - simply (left) click on the tag
...change the color of a tag? - as above (left) click on the tag, then click inside the big color square and change the value (either a hex-code like #00FF00 or a CSS color name like red or navy)
...see all my tags? - o to your user-page (click your username in the top right corner) and then My tags
...navigate the tag-autocomplete with the keyboard? - down/right for the next tag, up/right for the previous
...use the bookmarklet? - go to your user-page (click your username in the top right corner), generate a bookmarklet token, and copy the bookmarklet-code into a browser bookmark (make sure the javascript: bit gets pasted)
...create an RSS-feed? - just like the bookmarklet, generate a token on your user-page. Caution: someone with access to your RSS-feed can see all your saved links (but currently not text-notes) and comments!
Structure v0.15.2 (Abstractionism)
The most recent version of Structure is version badge — get it here!
I describe Structure as "A performance-at-interaction oriented and reasonably stylish bookmarking tool for (eventually) everything."

It does a few of the things I was lacking in other bookmarking tools:
- fuzzy organization (multi-tagging instead of hierarchy, title and comment field, everything fully searchable)
- scalable (it should handle 5+ years of bookmarks... so 10k+)
- keyboard-interaction focused (although some details are currently not keyboard-accessible)
- not ugly
- targets everything (URLs/websites, text notes, local files1)
- privacy
- self-determination (export1 your data and leave)

What it doesn't do:
- perfect privacy (it does HTTPS but no client-side encryption - either you trust me or you run your own instance. also it relies on GitHub OAuth2 for authentication due to laziness about rolling an own authentication system)
- tons of apps and integrations (there is a proof-of-concept Android app though)

And it will do a few things I was asked for:
- screenshots1 (for the visual among us)
- snapshots1 (of source code - disappearing and changing websites anybody?)

1 Coming soon, as of Jan 2018. Have a look at the issues on GitHub.
Structure screenshot
Get Structure!
You will need a GitHub account for authentication.
You're data will be stored on neopostmodern servers.



- QualityLand Marc-Uwe Kling
- Humans as software extensions (Will you be my plugin?)
Kind of recommended

- Ecstasy 10x yellow Twitter 120mg Mdma (Shipped from Germany for 0.1412554 Bitcoins)
  !Mediengruppe Bitnik   Highly recommended if you don't know their work yet, otherwise just what you expected
- Die göttliche Informatik Rainer Rehak
- Pointing Fingers at 'The Media' (The Bundestagswahl 2017 and Rise of the AfD)
- Social Cooling - big data’s unintended side effect
  Tijmen Schep
- Robot Music (The Robots Play Our Music and What Do We Do?)
  Jacob Remin & goto80 Don't expect any art-conceptual insights though
rdf:RDF <cc:Work rdf:about=""> dc:formatimage/svg+xml</dc:format> <dc:type rdf:resource=""/> </cc:Work> </rdf:RDF>

Performance, 2017

In this perfomance I put myself in the exhibition space for the opening wearing a custom-built eye tracker which showed in real-time where my gaze was directed, observable on screens attached to my augmented body.
During the opening speech by the president Thomas Locher, view from behind [credit: Micha Dykta]
»Wichtig ist auch, daß die Mimikry nicht unbedingt eine aufbegehrende oder auch nur bewußte Intentionalität voraussetzt. Im Gegenteil, sie kann Zeichen für eine völlig unbewußte Anpassung an die Bilder sein, über die das Subjekt üblicherweise von der Kamera bzw. dem Blickregime wahrgenommen wird.
Die Pose muß viel allgemeiner als fotografische Prägung des Körpers verstanden werden, derer sich das Subjekt nicht unbedingt bewußt ist: Sie kann das Resultat eines Bildes sein, das so oft auf den Körper projiziert worden ist, daß das Subjekt beginnt, sich sowohl psychisch wie auch körperlich mit ihm zu identifizieren. Dieses Bild ist im übrigen durchaus nicht immer schmeichelhaft oder lustvoll besetzt.«
— Silverman, Kaja, Dem Blickregime begegnen, in: Kravagna (Hg.), Privileg Blick. Kritik der visuellen Kultur, Berlin 1997, p. 50
Minujín's "MINUCODEs" (1968)
Minujín's "MINUCODEs" (1968)
Installation view with VR laboratory c/o KUNSTPUNKT BERLIN
credit: institut für alles mögliche

Installation view at HGB Galerie
Generative Online Photography, 2017
Nominated for HGB Studienpreis 2017

When viewing the website, the viewer is prompted to choose a moment. It is stored on the device and is retained indefinitely. All future actions start from this moment, it "belongs" to the viewer.

At this very moment, one of the servers performing this work retrieves images from 24 randomly selected webcams. The webcams are located in the 24 time zones of the earth, one per time zone. The database contains between 60 and 100 active webcams.

The results are presented as a triptych (responsively, so on small devices they are stacked vertically). For each image, 3 to 7 layers are superimposed. The actual composition changes with every call of the page and can be forced with the "reload" button.

Thus, every moment that is fixed in its temporal dimension encompasses an immeasurably large number of combinations of its visual archiving. Several forms of time are negotiated: local (time zones, refresh and transfer rates), technical (webcam aesthetics) and historical (the moment in general — but especially internet — development, where it is [still] possible to access a large number of single-frame based webcams worldwide).
The work is presented as a URL plot applied to the wall
View from outside into the exhibition hall

Exhibitions 2017

FEB 9—12
HGB Leipzig (DE)
group project, media art class of 2016
SEP 9—17
Schacht Dölitz, Leipzig (DE)
group show with THIS IS FAKE
HGB Galerie, Leipzig (DE)
award exhibition
NOV 10—DEC 1
group show, participating as part of THIS IS FAKE
DEC 2—JAN 21
New Budapest Gallery, Budapest (HU)
<19 Freestyle Computing Competition award exhibition, as a non-competing guest
DEC 13—JAN 20
HGB Galerie, Leipzig (DE)
group show curated by Clemens von Wedemeyer / Alba d'Urbano / Peggy Buth

rdf:RDF <cc:Work rdf:about=""> dc:formatimage/svg+xml</dc:format> <dc:type rdf:resource=""/> </cc:Work> </rdf:RDF> rdf:RDF <cc:Work rdf:about=""> dc:formatimage/svg+xml</dc:format> <dc:type rdf:resource=""/> </cc:Work> </rdf:RDF>

Site-specific VR-lecture, 2017

Framed as an on-site VR-lecture reflecting its own technology, this work was specific to the "Bautechnisches Denkmal Schacht Dölitz", a now defunct lignite mine shaft in southern Leipzig. The site was 3D-scanned and 3D-modelled. In VR we see a reproduction of what immediately surrounds us: the old installations, initially constructed in the 1890s, the modifications done in the 1920s, 1960s, the demolitions of the 1970s.

First lignite mine shaft, then conversion in the GDR, then dilapidation. What historical authenticity can such virtual experiences develop in the auratic context of a real system? Is the logic of representation limited by the medium? How do different representations — rough 3D scans, clean 3D models, a talk, poetry — as different kinds of prosthetic knowledge alter our acceptance of its history, as a heritage, and its existence as a "memory"? A polemic, drawing on Jorge Luis Borges' 1947 short story El Inmortal (The Immortal).

2D documentary video (10:18, German audio - Spanish subtitles available)

Camera and 3D scan boom: Julie Hart
Sound: Leon Naffin
3D model template: Bernd Mörsberger
3D scan software: BundleFusion
Thanks to: Leon Naffin, Ortrun Bargholz

Short documentary video (1:37, no audio)
Participants experiment games within the installation

Same view, but as seen in VR
Exhibition flyer

The Artist's Guide to BundleFusion with a Kinect

Let's assume happen to have the right hardware (see below) and you'd like to work with BundleFusion. It sure looks cool.
Except, it's not so easy to get to work as it maybe promised. Here is my somewhat-more-in-depth (as compared to the README) setup process:



  • Kinect360 with the slightly overpriced USB 2.0 adapter or KinectOne (aka. v2) with the overpriced USB 3.0 adapter (not)
  • Reasonable PC with a reasonable Nvidia GPU (don't ask me what that means)
  • MSFT Windows 10 :(


  • Nvidia drivers (figure this out yourself, for my VR things I needed the most up-to-date available)
  • CUDA 7.0 (do a custom install to preserve your shiny new drivers)
  • MSFT Visual Studio 2013 (you can get that at their website after registration for free)
  • for Kinect360
    • Kinect SDK 1.8
  • for KinectOne

Don't bother thinking about using a recent CUDA or Visual Studio version. Just don't.

Downloading and setting up the code

If you use git it might be more straight-forward, but since I never properly set up my MSFT Windows install, I downloaded the ZIPs directly from GitHub.

  1. Grab a ZIP of the master of the repo. Unpack it to BundleFusion-master.
  2. Grab a ZIP of the mLib submodule at the correct revision. Confirm this by navigating to /external/. Unpack this and replace BundleFusion-master/external/mLib.
  3. Grab the mLib external libraries from this Dropbox link they provide. This seems to be a bunch of dependencies or builds -- but no idea, really. Unpack and place next to BundleFusion-master.

This should leave you with the following folder structure. Double check this, it'll screw you up.

    mLib/ # this is the submodule you replaced
mLibExternal/ # you downloaded this from Dropbox


Adjusting the code for your needs

Open BundleFusion-master/FriedLiver/FriedLiver.sln with Visual Studio 2013 (make sure it's really the 2013 version, Help > About Microsoft Visual Studio). Open the file GlobalAppState.h and change line 3 to 10 to the following to enable your Kinect(s):

#define KINECT
#define KINECT_ONE
//#define OPEN_NI
//#define INTEL_SENSOR
//#define REAL_SENSE


Now switch to a production (Release) build. The Debug builds don't work for me, missing FreeImage.dll. Check that your code and build config look somewhat like this:

VS screenshot


Go to Build > Build Solution of CTRL + SHIFT + B and hope for the best. If you get any errors, you're on your own now. Otherwise: Congratulations! You have now compiled BundleFusion, which is about 80% of the hastle to get to an actual 3D scan.


Copy the two files zParametersBundlingDefault.txt and zParametersDefault.txt from to BundleFusion-master/FriedLiver to BundleFusion-master/FriedLiver/x64/Release. Open them with a reasonable editor (e.g. Notepad++, not the regular Notepad, it doesn't understand line-endings).

As you can see, there is a lot of things to configure. Trial and error FTW. Run it after every change to see if it helped. First of all, in zParametersDefault.txt in line 2 specify the sensor you're going to use. I only got the Kinect360 to work, so that means

s_sensorIdx = 0;

Another thing that was crucial for getting it to work for me was changing line 49 in zParametersDefault.txt to

s_hashNumSDFBlocks = 100000;    //smaller voxels require more space

because 100000 is suggested in a comment in the original file.

Try to run it

Start BundleFusion-master/FriedLiver/x64/Release/FriedLiver.exe. If that crashes with

bundlefusion-master\friedliver\source\depthsensing\VoxelUtilHashSDF.h(135) : cudaSafeCall() Runtime API error 2: out of memory.

You'll want to go back to configuration and randomly change some numbers.

Shortcuts for interaction

Once you got the little preview window up and running, you'll quickly wonder how the hell you're supposed to interact with this software: Where's the colored view? And how do you export anything at all?

This bug hints at reading the source code (obvious place to look for shortcuts), specifically Source/DepthSensing/DepthSensing.cpp, where starting at line 205 we find this:

    g_pTxtHelper->DrawTextLine(L"Controls ");
    g_pTxtHelper->DrawTextLine(L"  \tF1:\t Hide help");
    g_pTxtHelper->DrawTextLine(L"  \tF2:\t Screenshot");
    g_pTxtHelper->DrawTextLine(L"  \t'R':\t Reset scan");
    g_pTxtHelper->DrawTextLine(L"  \t'9':\t Extract geometry (Marching Cubes)");
    g_pTxtHelper->DrawTextLine(L"  \t'8':\t Save recorded input data to sensor file (if enabled)");
    g_pTxtHelper->DrawTextLine(L"  \t'7':\t Stop scanning");
    g_pTxtHelper->DrawTextLine(L"  \t'6':\t Print Timings");
    g_pTxtHelper->DrawTextLine(L"  \t'<tab>':\t Switch to free-view mode");
    g_pTxtHelper->DrawTextLine(L"  \t");
    g_pTxtHelper->DrawTextLine(L"  \t'1':\t Visualize reconstruction (default)");
    g_pTxtHelper->DrawTextLine(L"  \t'2':\t Visualize input depth");
    g_pTxtHelper->DrawTextLine(L"  \t'3':\t Visualize input color");
    g_pTxtHelper->DrawTextLine(L"  \t'4':\t Visualize input normals");
    g_pTxtHelper->DrawTextLine(L"  \t'5':\t Visualize phong shaded");
    g_pTxtHelper->DrawTextLine(L"  \t'H':\t GPU hash statistics");
    g_pTxtHelper->DrawTextLine(L"  \t'T':\t Print detailed timings");
    g_pTxtHelper->DrawTextLine(L"  \t'M':\t Debug hash");
    g_pTxtHelper->DrawTextLine(L"  \t'N':\t Save hash to file");
    g_pTxtHelper->DrawTextLine(L"  \t'N':\t Load hash from file");

The most important keys are 9 (export) and 2 (color).

Look at the results

The exported .ply files are stored in BundleFusion-master\FriedLiver\x64\Release\scans and named scan.ply, scan1.ply et cetera. Work out a system for yourself.


Have a look at this two part tutorial by Intel to get your model simplified, textured and (optionally) into Unity.

To be continued

Okay, I lied. Things aren't working super well and most likely you couldn't follow the instructions. But I hope you're a little further now.

meta-cat 1, screenshot
meta-cat 2, screenshot
meta-cat 3, screenshot
meta-cat 4, screenshot
A fascinated participant of Project David
Who has ever used PGP to encrypt an e-mail? PGP was the only real end-to-end encryption mechanism available (untilt the emergence of the Signal protocol, such as also used by WhatsApp) in 2013 when Snowden made his revelations. And since PGP was and is so rarely used: isn't it more dangerous to use it, since it raises the surveillors’ attention? Project David fills this gap by engaging viewers in a playful, dadaist, yet superficial manner to generate more encrypted communication. In a fake terminal an excerpt of the Snowden leaks is presented, which no one ever really read either. The participant is reduced to play with speed and color of the predetermined output. The text is then encrypted and sent to one's personal e-mail address over the Tor network, another privacy tool. This generates encrypted traffic and spreads the colorful artwork, an undecipherable block of numbers and letters. Still this is Big Dada: no art installation will ever build a cover for vulnerable real-world users. It's a mere symbolic act against the seemingly overpowering Goliath of surveillance agencies.
Installation view at New Budapest Gallery (HU)
2016 demo video (2:37, no audio)
Exhibition view at New Budapest Gallery (HU)
128.9 MB Sunrise
(work in progress)

Quora questions

It's not always about answers. Art is all about questions.

What do machine learning experts do? Don't they just train the neural network and leave it till it 'mature'?

What are some industries where Machine Learning could be implemented but hasn't been yet?

Is it possible to get involved in machine learning and neural networks without a background in neuroscience?

What do we know about real neural networks that hasn't yet been applied in Machine Learning?

How "neural" are neural networks?

How can a neural network learn itself?

How do I learn neural networks?
Page 1
Page 2
© IEEE - View the PDF
SCREENTEST #8 - Speed Exhibitions
Ich dachte es muss "Krieg oder Frieden" heißen
Max Ratay, Fabian Lehmann, Clemens Schöll
Installation view

      ______ __  __ ______   ____   ____   ____   __  __ __     ____ _____ ______   ______ __    ____   __  __ ____ 
     /_  __// / / // ____/  / __ \ / __ \ / __ \ / / / // /    /  _// ___//_  __/  / ____// /   / __ \ / / / // __ \
      / /  / /_/ // __/    / /_/ // / / // /_/ // / / // /     / /  \__ \  / /    / /    / /   / / / // / / // / / /
     / /  / __  // /___   / ____// /_/ // ____// /_/ // /___ _/ /  ___/ / / /    / /___ / /___/ /_/ // /_/ // /_/ / 
    /_/  /_/ /_//_____/  /_/     \____//_/     \____//_____//___/ /____/ /_/     \____//_____/\____/ \____//_____/

There won't be a revolution through technology – but there won't be a revolution without technology either.
The revolution's technology needs infrastructure. But all current infrastructure represents powerstructures opposite to our goals.

What is more, all previous attempts to reappropriate this infrastructure – and it has to be stressed that it is crucial infrastructure – have failed. A proposal targeted at the code-literate, tech-savvy, ideology-driven leftist user can't possibly replace an all-encompassing structure; it will remain a utopia drifting ever further from the mainstream capitalist reality in terms of performance. We can't run the revolution on imperformant infrastructure.

A powerfull, people-owned, distributed infrastructure is needed. An infrastructure based on consensus, transparency, open source and open governance, that is: anarchist planning theory. And when governance is taken from us in open source areas we have to for and starve the tyranns of our ideas.
We need an inclusive, open to the public, to the not technically savvy – we need A POPULIST CLOUD.
with Maria Francisca de Abreu-Afonso
Near-Fi short film, 2017
13:06, color (HD), stereo sound (PT/DE)
Written and shot in Portugal and Germany in 2015 / 2016 with a broken Nikon P5100 and a regular D7100

A young German's video camera breaks. He sees it as a sign of the disintegrating media scene and lost of trust in the news. After the right wing gains power in the 2017 elections, he flees to Portugal but remains unsure whether this was an adequate reaction. As he looks back, he asks himself if anything happened at all.
Film still
Film still
Film still
Film still
Film still
Film still
Three film stills of Ponte 25 de Abril
Shot winter 2015/2016. Curated winter 2016/2017.

Film still of Ponte 25 de Abril

Film still of Ponte 25 de Abril

Film still of Ponte 25 de Abril

200-MAR.wav 200-MAR-A.wav
Untitled (Holzfahrrad)
Bike frame, wood, leather
Created circa 2011, destroyed circa 2016
Photographed 2016-08-31 prior to destruction
10 Signs You're Overwhelmed by the Twenty-first Century

A sudden gain of perspective.
Issued by: sitting on the side walk, starring into the wet streets, the yellow light reflected on the darkness of the night, on your birthday. 00:49AM all alone, between one group of friends and the other, ultimately alone, as always.

As a kid, I used to lick the handrails leaving the subway stations because I assumed it strengthened my immune system.
As a teenager, I had only shitty boyfriends, because I heard I'd eventually build up character.
As an adult – so far – I've been living in awful places, pursuing degrading jobs, because I hoped it would train my aesthetic and prepare me for pleasure, even happiness maybe.

At least, I tell you so now, to excuse the lousy choices I've made all my life; including you. And to explain why I am such an asshole now,
I guess I just over-adapted to this world.

There is a groundbreaking sadness in you.
It slowly walks out of the back door of your thoughts and assaults your projections of happiness, that threatens me every day we wake up. I just can’t look into the assumed perfectness of your life without crying, I am attracted to you because I admire it - but I can’t actually deal with it, or with you.
But when you saw him die and the sadness broke out of you, I finally became a person in our relationship. No, actually, that was the relationship’s beginning. Everything before that was me drooling over what you tossed at me, because it was your left overs.
Your emotional leftovers mainly.

I can’t deal with your sadness. It breaks me.
I wonder through the yellow-lit, black-shadow, gray-water streets to the place I used to live. I still pay rent for it, but I never make it there, everyday I want to wake up there, but in the evenings my miserableness pushes me towards you, trying to feel something in the fire I make of your emotional leftovers.

Now that you are depressed, I can’t burn anything. I step into a pond, a mixture of piss, rain and drugs, right in front of my door. I’d been gone for so long, I had forgotten about how terrible the area was, the house, the people in there, my minimalist room, that was supposed to air confidence and conscious living, but the mattress on the broken tiles in front of the dirty wall with nothing on it but dirt and dead spiders just emphasized my mediocre self-pity. There wasn’t anything heroic about being unable to fashion a room.
I turn the key, which to my surprise I found in my pocket and happens to still work and stand in the hallway, a guy I’d been living with for 8 months comes out of the shower and talks to me for the first time: “Man, could you move out, like no bad vibes, but some friends are coming into town and the don’t have a place and we want to record together, so you know.” “Yeah, I’m not much of a musician.” I reply and walk by him. He probably starred after me, but I manage to reach my room without talking to anybody else.

Light floods in through the door. I hadn’t noticed the sun rise. When had it come back to life?
I hadn’t noticed, that the sun ever shines into my window, apparently I had never been at home, awake and conscious just after sunrise. Six years of lamenting about living in a dark alley and the sun just pours into my room on a January morning.

A strong urge to call her passes me. “I just wanted to let you know that we won’t see again. I found my old life and it’s okay. It’s actually shit but still better than with you. I hope we can stay friends.”
I put my 3 shirts, the spare trouser and the little underwear into the half-molded suitcase which I brought with me when first entering the city; put the mattress over my head and walked out.
The guy was still standing in the same spot with the towel around his waist. “Can you fake my signatures for moving out? There’s half a tomato left in the fridge, you can eat that.” And I walked past him. “Is she beautiful?” he asks, how the hell did he know what I was doing? “No, but the world is ugly” “Thanks” he said and I left.

Back on the streets crowds poured in and out of metro-stations, I walked the known path back to her apartment. She stood in the kitchen, making coffee, wearing nothing but a veil.
“I was sad and I have learned enough from it. The book I started writing after you left will be published in June.” I put the mattress in the middle of the kitchen, sat cross-legged and admired her.

Literally every time I spent a couple of days in nature I have an epiphany about how happy I could be living in the country side. Usually I get back to the city and its speed before my insane fantasies of idyll could trick me into trying and seeing how horrible it would be in reality.

I just found myself looking forward to the day when I take a tour through the NSA facilities, guided by a survivor witness.

“And then, when I get home and can just undress and lay on my bed, still completely high, and maybe masturbate – you know, that's like actually the best part of the party. Like, not always, but quite often I find myself lying there saying to myself “Yeah, this is what I actually wanted”, you know?” “So yeah, great, you have found a way to present solitariness as a pleasure, that's quite advanced when everybody is optimizing themselves in fearing to miss out. But then, why did you even come here?”
Why was I talking to this guy again? He seemed to also have forgotten his reasons to talk to me, so he just bend over and snorted whatever he had been arranging during our four-hour long conversation while I took my coat to leave. I wanted to say something like “Because I need to feel shitty at the party. Because I have talked to people like you.” but even he would figure that it was a lie. After all, yes, I felt great at home because I had felt like shit at the party before. But not because it was a bad party – my carefully created artistic network of friends wouldn't –; but I never managed to cover the bitterness of my social anxiety, the over-thought conversations with unconscious guys I kept crushing on and general disappointment of never getting “the feeling” at its maximum. To cover the bitterness of that cocktail with drugs.
It was raining outside as I walked home. My shoes soaked through. I was slowly calming down. What a nice night.

All the people I admire do more drugs than me. I sometimes feel ashamed for consuming less elicit substances than socially acceptable, like, how am I ever supposed to make a career with these habits?

A girl looking absent within a group of friends in a club. I'd like to hit on her, but she gets out her phone and sends someone a happy smiley.

This article is called “10 signs you ...” but I only talk about myself.

I know I should be optimistic about the future, as my ancestors and maybe my parents were. When I walk out of the door, I should be amazed by the technology, astonished by the wealth, breath taken of the beauty of everything.
But I always end up reading about illegal mines and child labor on my phone, sometimes I check it for blood stains.
Maybe the world will be a better place once all crime is organized by robots, committed against robots, enslaved by robots; and we remain as the phony country that doesn't speak up in foreign politics because of economical interest.
Three impressions of Ponte 25 de Abril

Digital photography (no post-production)
Ponte 25 de Abril
Ponte 25 de Abril
Ponte 25 de Abril
Reflektion / Reflexion: Iteration 1 [Northern Quito / West Berlin]

Audio: Julius Windisch

Original description (German):
Reflektion / Reflexion ist ein mehrteiliger, audio-visueller Dialog zwischen Julius Windisch und Clemens Schöll. Hierbei wird abwechselnd Ton und Bild beibehalten, während das Gegenstück passend aber sich entwickelnd ersetzt wird.
Dies ist die erste Iteration, der Ton wird also in der zweiten derselbe sein mit anderem Bild.

Travel Log

This content is exclusive to registered and identified users.

Travel Log




Offenburg — Basel — Lisboa



Lisboa — Montijo — Montemor-o-novo

Montemor-o-novo — Portalegre

Portalegre — Valencia de Alcántara

Valencia de Alcántara — Cáceres

Cáceres — A-5 close to Jaraicejo

A-5 close to Jaraicejo — Navalmoral de la Mata — Pozuelo de Alarcón

Pozuelo de Alarcón — Madrid



Madrid — Barcelona — ███████



███████ — Barcelona




Barcelona — Vic

Vic — Fornells de la Selva

Fornells de la Selva — Girona — Llançà

Llançà — Massis de l'Albera

Massis de l'Albera — Port Leucate

Port Leucate — Vias

Vias — Castries

Castries — Uzès

Uzès — Donzère — Valence

Valence — Lyon — Drumettaz-Clarafond

Drummetaz-Clarafond — Chêne-Bourg

Chêne-Bourg — Yverdon-les-Bains

Yverdon-les-Bains — Bern

Bern — Ötlingen

Ötlingen — Offenburg