<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[metal heart: generative art & interactive projects by marten silbiger]]></title><description><![CDATA[generative art & interactive projects by marten silbiger]]></description><link>https://metal-heart.org/</link><image><url>https://metal-heart.org/favicon.png</url><title>metal heart: generative art &amp; interactive projects by marten silbiger</title><link>https://metal-heart.org/</link></image><generator>Ghost 3.0</generator><lastBuildDate>Tue, 14 Apr 2026 20:17:59 GMT</lastBuildDate><atom:link href="https://metal-heart.org/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Pixelsort XTC - Effects Plugin for Resolume 7]]></title><description><![CDATA[Pixelsorting! It looks awesome! Pixelsort your art and turn it into GLITCH ART!]]></description><link>https://metal-heart.org/pixelsort-xtc-effects-plugin-for-resolume-7/</link><guid isPermaLink="false">5eee64fca01ea404c5037419</guid><category><![CDATA[vfx]]></category><dc:creator><![CDATA[marten]]></dc:creator><pubDate>Mon, 29 Dec 2025 04:28:00 GMT</pubDate><media:content url="https://metal-heart.org/content/images/2020/06/pixelsort-witchy.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://metal-heart.org/content/images/2020/06/pixelsort-witchy.jpg" alt="Pixelsort XTC - Effects Plugin for Resolume 7"><p>Pixelsorting! It looks awesome! Pixelsort your art and turn it into GLITCH ART!</p><!--kg-card-begin: html--><video style="max-width: 100%;" muted loop autoplay height="400" src="https://metal-heart.org/static/video/pixel-sorting-example.mp4"></video>
                                                                      <!--kg-card-end: html--><!--kg-card-begin: markdown--><p>After reading <a href="https://ciphered.xyz/2020/04/08/pixel-sorting-on-shader-using-well-crafted-sorting-filters-glsl/">Crespy Baptiste's excellent writeup on Pixel sorting in GLSL</a> <a href="https://www.shadertoy.com/view/wsSczw">(Shadertoy link)</a>, I wanted to build on the work he did, to implement this style of image distortion in FFGL.</p>
<p><img src="https://metal-heart.org/content/images/2020/06/pixelsort-witchy-1.jpg" alt="Pixelsort XTC - Effects Plugin for Resolume 7"></p>
<p><img src="https://metal-heart.org/content/images/2020/06/pixelsort-elevators.jpg" alt="Pixelsort XTC - Effects Plugin for Resolume 7"></p>
<p>I originally wrote this effect plugin 5 years ago, using <a href="https://metal-heart.org/writing-ffgl-plugins-for-resolume-arena-7/">Resolume FFGL</a>. However since then, Resolume Wire has made writing Video Effects way more accessible. I recently converted the ffgl code over to Wire and made some upgrades.</p>
<p>Parameters:</p>
<ul>
<li>Distance: each frame, how far can pixels move as they're being sorted?</li>
<li>Threshold: prevent pixels from sorting past each other if their difference is too large. At 0, this rule doesn't apply; at 1, no pixels will sort.</li>
<li>Freshness: how much of the new video do we mix into the pixelsorted image? at 0, thie image is essentially frozen. At low values, sorted pixels fill the output. At 1, we mix in a lot of the new video image.</li>
<li>Toggle: toggle to start/stop sorting</li>
<li>Vertical: switch from horizontal to vertical sorting</li>
<li>Reverse: swap left/right and up/down sorting</li>
</ul>
<!--kg-card-end: markdown--><!--kg-card-begin: html--><video width="100%" loop="loop" autoplay="autoplay" src="https://metal-heart.org/static/video/pixel-sorting-demo.mp4"></video><!--kg-card-end: html--><!--kg-card-begin: markdown--><p>This is designed for <strong>Resolume 7.18 and up</strong>; it probably won't work with older versions! To use with Resolume, drop these .wired files into your Plugin Directory (set under Preferences-&gt;Video) and restart Resolume.</p>
<!--kg-card-end: markdown--><!--kg-card-begin: html-->Source code <a href="https://github.com/dramamine/ffgl/blob/master/source/plugins/WildPixelSort/pixelsort.isf">here.</a><br>
<a href="https://metal-heart.org/static/vfx/vfx-ra7-pixelsort-xtc.zip">DOWNLOAD HERE.</a> This software is provided for free under the MIT License. If you find this useful, consider donating $2 to support my future VFX efforts.

<div class="donation"><a href="https://paypal.me/domegod/2?locale.x=en_US"><img src="https://metal-heart.org/static/mh-donation-button.png" alt="Pixelsort XTC - Effects Plugin for Resolume 7"></a></div>
<!--kg-card-end: html-->]]></content:encoded></item><item><title><![CDATA[Hosting Your Own Slack Archive]]></title><description><![CDATA[Recently, Slack changed their payment model such that free accounts can only see 90 days or 10,000 messages of history. However, those messages aren't deleted: they still exist and are freely accessible to you, just in a less-than-helpful format. This guide will show you how...]]></description><link>https://metal-heart.org/hosting-your-own-slack-archive/</link><guid isPermaLink="false">6514c1e9dddb5d707702af56</guid><category><![CDATA[tech]]></category><category><![CDATA[slack]]></category><dc:creator><![CDATA[marten]]></dc:creator><pubDate>Thu, 28 Sep 2023 00:15:09 GMT</pubDate><media:content url="https://metal-heart.org/content/images/2023/09/ss--2023-09-27-at-05.10.27--1.png" medium="image"/><content:encoded><![CDATA[<img src="https://metal-heart.org/content/images/2023/09/ss--2023-09-27-at-05.10.27--1.png" alt="Hosting Your Own Slack Archive"><p>Recently, Slack changed their payment model such that free accounts can only see 90 days or 10,000 messages of history. However, those messages aren't deleted: they still exist and are freely accessible to you, just in a less-than-helpful format. This guide will show you how to stand up your own Slack Archive website so that you and your fellow Slack members can use your archive as a reference when you're looking for old conversations.</p><h2 id="downloading-your-slack-archive">Downloading Your Slack Archive</h2><p>From Slack, click on the workspace menu &gt; Settings &amp; administration &gt; Workplace settings.</p><figure class="kg-card kg-image-card"><img src="https://metal-heart.org/content/images/2023/09/ss--2023-09-25-at-01.59.04-.png" class="kg-image" alt="Hosting Your Own Slack Archive"></figure><ul><li>Click Import &amp; Export Data.</li><li>Click the Export tab.</li><li>Choose "Entire history" for your Export date range, then click Start Export.</li></ul><figure class="kg-card kg-image-card"><img src="https://metal-heart.org/content/images/2023/09/ss--2023-09-25-at-01.58.15-.png" class="kg-image" alt="Hosting Your Own Slack Archive"></figure><p>Save the zip file you received during this process. I renamed this file to <code>export.zip</code>.</p><h2 id="converting-your-slack-archive-to-html">Converting Your Slack Archive to HTML</h2><p>There are two excellent projects on Github to help us with this step:</p><p><a href="https://github.com/hfaran/slack-export-viewer">https://github.com/hfaran/slack-export-viewer</a> - Hosts a website locally to display your Slack data.<br><a href="https://github.com/hfaran/slack2html">https://github.com/hfaran/slack2html</a> - Run slack-export-viewer and export your data as web assets (html, css, images etc.)</p><p>Clone the slack2html repo. You need to change a line in requirements.txt from <code>click</code> to <code>click==8.1.3</code> to deal with some incompatibility issues between Flask and Click. After that, from the <code>slack2html</code> folder, run these commands:</p><pre><code class="language-bash">mkdir out
python3 slack2html.py -z export.zip -o out
</code></pre><p>You can verify that the export worked by opening the file <code>slack2html/out/index.html</code> and confirming that your content is there.</p><p>If you're on Windows and having trouble getting this script to work, I recommend using WSL2 for your shell.</p><h2 id="setting-up-webhosting-for-a-static-site">Setting Up Webhosting for a Static Site</h2><p>If you already have web hosting for static files, you probably have your own idea about the fastest way to get your files hosted online. What I have here, is how to set up your site using DigitalOcean, Portainer, and nginx-proxy-manager. This setup allows me to expand to serve more domains and subdomains with different containers; i.e. I can run multiple services off of one DigitalOcean droplet.</p><h4 id="setting-up-a-droplet-on-digitalocean">Setting Up a Droplet on DigitalOcean</h4><p>In DigitalOcean, create a Droplet from the Docker image in the marketplace:</p><figure class="kg-card kg-image-card"><img src="https://metal-heart.org/content/images/2023/09/ss--2023-09-26-at-03.06.23-.png" class="kg-image" alt="Hosting Your Own Slack Archive"></figure><h4 id="installing-portainer">Installing Portainer</h4><p>Once your droplet is running, you can <a href="https://docs.portainer.io/start/install-ce/server/docker/linux">install Portainer</a>, which will give you a web interface to manage your Docker containers. From the console of your droplet, run this:</p><pre><code class="language-bash">docker volume create portainer_data
docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest
</code></pre><p>From there, you can navigate to {droplet-ip}:9443 and create a login for Portainer.</p><h4 id="installing-nginx-proxy-manager">Installing nginx-proxy-manager</h4><p>Once inside, choose your local environment, then navigate to Stacks and click Add Stack. You can <a href="https://nginxproxymanager.com/setup/">follow the instructions here</a> to create a docker-compose file. This page also includes the <a href="https://nginxproxymanager.com/setup/#default-administrator-user">default admin user credentials</a>. I used something like this:</p><pre><code class="language-docker">version: "3.3"
services:
  npm-app:
    image: 'jc21/nginx-proxy-manager:latest'
    container_name: npm-app
    restart: unless-stopped
    ports:
      - '80:80' # Public HTTP Port
      - '443:443' # Public HTTPS Port
      - '81:81' # Admin Web Port
      # Add any other Stream port you want to expose
      # - '21:21' # FTP
    environment:
      DB_MYSQL_HOST: "npm-db"
      DB_MYSQL_PORT: 3306
      DB_MYSQL_USER: "npm"
      DB_MYSQL_PASSWORD: ${DB_MYSQL_PASSWORD}
      DB_MYSQL_NAME: "npm"
      # Uncomment the line below if IPv6 is not enabled on your host
      # DISABLE_IPV6: 'true'
    volumes:
      - ./npm-data:/data:Z
      - ./letsencrypt:/etc/letsencrypt:Z
    depends_on:
      - npm-db
    networks:
      - npm-network
      - npm-internal

  npm-db:
    image: 'mariadb:latest'
    container_name: npm-db
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: 'npm'
      MYSQL_USER: 'npm'
      MYSQL_PASSWORD: ${DB_MYSQL_PASSWORD}
    volumes:
      - ./npm-data/mysql:/var/lib/mysql:Z
    networks:
      - npm-internal

networks:
  npm-internal:
  npm-network:
    external: true
</code></pre><p>Note that you will need to set environment variables for <code>DB_MYSQL_PASSWORD</code> and <code>MYSQL_ROOT_PASSWORD</code> which should be set to something secure. You will also need to create a network named <code>npm-network</code> to enable communication between nginx-proxy-manager and your other containers.</p><h4 id="loading-content-into-nginx">Loading Content Into nginx</h4><p>From the container npm-app, open the console. From here, you want to upload your files to the container. I ran a script like this:</p><pre><code class="language-bash">cd /data
mkdir subdomain.example.com
cd subdomain.example.com/
# here, use a tool to upload content.zip
unzip content.zip 
rm content.zip
</code></pre><h4 id="setting-up-authentication">Setting Up Authentication</h4><p>To set up Basic authentication, you'll want to do something like this to set up a single username/password combination that you'll use to authenticate to your site:</p><pre><code class="language-bash">cd /etc
openssl passwd # util for generating a password hash
echo "{username}:{hashed password}" &gt; .htpasswd
</code></pre><p>Once this is set up, you can log in to nginx-proxy-manager by navigating to {your droplet IP}:81.</p><h4 id="configuring-nginx-proxy-manager">Configuring nginx-proxy-manager</h4><p>Under Details, add your domain/subdomain with a forward host IP of 127.0.0.1 on port 80.</p><figure class="kg-card kg-image-card"><img src="https://metal-heart.org/content/images/2023/09/ss--2023-09-26-at-04.14.36-.png" class="kg-image" alt="Hosting Your Own Slack Archive"></figure><p>On the SSL tab, you can request an SSL Certificate. This will work as long as you have set up an A record with your DNS registrar.</p><figure class="kg-card kg-image-card"><img src="https://metal-heart.org/content/images/2023/09/ss--2023-09-26-at-04.15.05-.png" class="kg-image" alt="Hosting Your Own Slack Archive"></figure><p>Under Advanced Configuration, use this custom configuration:</p><pre><code>location / {
  root /data/subdomain.example.com;
  auth_basic "Authorization Required";
  auth_basic_user_file  "/etc/.htpasswd";
}
</code></pre><figure class="kg-card kg-image-card"><img src="https://metal-heart.org/content/images/2023/09/ss--2023-09-26-at-04.15.23-.png" class="kg-image" alt="Hosting Your Own Slack Archive"></figure><p>At this point, you can navigate to your host <code>subdomain.example.com</code> and you should see your Slack archive!</p><figure class="kg-card kg-image-card"><img src="https://metal-heart.org/content/images/2023/09/ss--2023-09-26-at-04.26.59-.png" class="kg-image" alt="Hosting Your Own Slack Archive"></figure>]]></content:encoded></item><item><title><![CDATA[LED Coat]]></title><description><![CDATA[<!--kg-card-begin: html--><video style="max-width: 100%;" muted loop autoplay height="480" src="https://metal-heart.org/static/video/coat-front-1.mp4"></video>
<video style="max-width: 100%;" muted loop autoplay height="480" src="https://metal-heart.org/static/video/coat-front-2.mp4"></video><!--kg-card-end: html--><!--kg-card-begin: markdown--><p>Here's an LED coat I put together in 2022, which runs over 700 individually addressable LEDs. This uses WS2812 IP65 144 leds/m style LEDs, powered off an Arduino Nano Every. Code <a href="https://github.com/dramamine/led-wearables-previewer/blob/main/coat_patterns.cpp">here</a>.</p>
<p>This coat went through a handful of iterations. Originally I was running this off a Raspberry Pico</p>]]></description><link>https://metal-heart.org/wearables-led-coat/</link><guid isPermaLink="false">636707fddddb5d707702aeb0</guid><category><![CDATA[wearables]]></category><dc:creator><![CDATA[marten]]></dc:creator><pubDate>Sun, 06 Nov 2022 01:26:01 GMT</pubDate><media:content url="https://metal-heart.org/content/images/2022/11/DSC_1515.JPG" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: html--><video style="max-width: 100%;" muted loop autoplay height="480" src="https://metal-heart.org/static/video/coat-front-1.mp4"></video>
<video style="max-width: 100%;" muted loop autoplay height="480" src="https://metal-heart.org/static/video/coat-front-2.mp4"></video><!--kg-card-end: html--><!--kg-card-begin: markdown--><img src="https://metal-heart.org/content/images/2022/11/DSC_1515.JPG" alt="LED Coat"><p>Here's an LED coat I put together in 2022, which runs over 700 individually addressable LEDs. This uses WS2812 IP65 144 leds/m style LEDs, powered off an Arduino Nano Every. Code <a href="https://github.com/dramamine/led-wearables-previewer/blob/main/coat_patterns.cpp">here</a>.</p>
<p>This coat went through a handful of iterations. Originally I was running this off a Raspberry Pico using python code - but this was running too slow and I was getting around 4 frames per second. I figured this was due to the language (and/or the hardware) so I switched the code over to C++ running on Arduino. The Nano Every is plenty powerful and is probably fancier than needed for this project - but it uses 35% of the working memory and runs at 60 fps for most of the patterns I throw at it.</p>
<p>When switching to C++ I also was able to dig into the FastLED libary code some more and found a ton of example patterns that are easy to modify and showcase some pretty cool functions for designing patterns - like easy conversion between HSV and RGB, sin wave functions, fades, mixing etc., all stuff I usually had to write myself on the python side of things.</p>
<!--kg-card-end: markdown--><!--kg-card-begin: html--><video style="max-width: 100%;" muted loop autoplay height="480" src="https://metal-heart.org/static/video/coat-back-1.mp4"></video>
<video style="max-width: 100%;" muted loop autoplay height="480" src="https://metal-heart.org/static/video/coat-back-2.mp4"></video><!--kg-card-end: html--><!--kg-card-begin: markdown--><p>I also iterated on how to best diffuse the LEDs. Originally I was using 60 leds/m strips and diffusing with white paint, painted over the waterproof cover. This ended up being a terrible idea as white paint just ends up getting everywhere, and I should've done more to seal the paint. I even tried adding scotch tape over the top of the strips, but this just looked cheap &amp; bad.</p>
<p>Next I tried using aluminum channels, like I use for Lightdream. I found some that were <a href="https://elumalight.com/products/led-flexible-aluminum-channel">flexible</a> - they do bend, but they were still extremely stiff and formed a weird shape around my body. The flexibility in the shoulers wasn't really flexible enough ex. they couldn't wrap around my shoulders.</p>
<p>Eventually I decided this wasn't the outfit where I was going to have &quot;great diffusion&quot; - but I did increase the LED density and lowered the brightness, which lets me create smoother patterns and hopefully won't hurt people's eyes when they stare at it.</p>
<!--kg-card-end: markdown--><!--kg-card-begin: html--><video style="max-width: 100%;" muted loop autoplay height="480" src="https://metal-heart.org/static/video/coat-front-3.mp4"></video><!--kg-card-end: html-->]]></content:encoded></item><item><title><![CDATA[Tile Scroller - Effects Plugin for Resolume 7]]></title><description><![CDATA[Turn your video clip into tiles. Customize the size, # of rows and # of columns of your tiles. Then start scrolling them!

I saw this effect at the 2020 MUTEK.SF virtual festival and wanted to recreate it...]]></description><link>https://metal-heart.org/tile-scroller-effects-plugin-for-resolume-7/</link><guid isPermaLink="false">5efa7c7fa01ea404c50374da</guid><category><![CDATA[vfx]]></category><dc:creator><![CDATA[marten]]></dc:creator><pubDate>Mon, 29 Jun 2020 23:56:37 GMT</pubDate><media:content url="https://metal-heart.org/content/images/2020/06/tilescroller-thumb.jpg" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: html--><video style="max-width: 100%;" muted loop autoplay height="400" src="https://metal-heart.org/static/video/tile-scroller-example.mp4"></video><!--kg-card-end: html--><!--kg-card-begin: markdown--><img src="https://metal-heart.org/content/images/2020/06/tilescroller-thumb.jpg" alt="Tile Scroller - Effects Plugin for Resolume 7"><p>Turn your video clip into tiles. Customize the size, # of rows and # of columns of your tiles. Then start scrolling them!</p>
<p>I saw this effect at the 2020 MUTEK.SF virtual festival and wanted to recreate it. I can't find the stream I saw anymore. If I've learned anything from this virtual festival season, it's that Twitch doesn't keep archived videos around for long, and Vimeo keeps their live streams locked down.</p>
<p>I think this looks best when you get a single column of frames and slowly scroll them. But, I included &quot;# of columns&quot; as a parameter in case you want to get creative with it.</p>
<!--kg-card-end: markdown--><!--kg-card-begin: html--><video width="100%" loop="loop" autoplay="autoplay" src="https://metal-heart.org/static/video/tile-scroller-demo.mp4"></video>
<!--kg-card-end: html--><!--kg-card-begin: markdown--><p>This is designed for <strong>Resolume 7 64-bit</strong>; it probably won't work with other versions! To use with Resolume, drop these .dll files into your Plugin Directory (set under Preferences-&gt;Video) and restart Resolume.</p>
<!--kg-card-end: markdown--><!--kg-card-begin: html-->Source code <a href="https://github.com/dramamine/ffgl/blob/master/source/plugins/FilmTiler/FilmTiler.cpp">here.</a><br>
<a href="https://metal-heart.org/static/vfx/vfx-ra7-tile-and-filmstrip-scroller.zip">DOWNLOAD HERE.</a> This software is provided for free under the MIT License. If you find this useful, consider donating $2 to support my future VFX efforts.

<div class="donation"><a href="https://paypal.me/domegod/2?locale.x=en_US"><img src="https://metal-heart.org/static/mh-donation-button.png" alt="Tile Scroller - Effects Plugin for Resolume 7"></a></div><!--kg-card-end: html-->]]></content:encoded></item><item><title><![CDATA[Filmstrip Scroller - Effects Plugin for Resolume 7]]></title><description><![CDATA[Turn your video clip into a filmstrip!]]></description><link>https://metal-heart.org/filmstrip-scroller-effects-plugin-for-resolume-7/</link><guid isPermaLink="false">5efa6690a01ea404c50374a9</guid><category><![CDATA[vfx]]></category><dc:creator><![CDATA[marten]]></dc:creator><pubDate>Mon, 29 Jun 2020 22:22:53 GMT</pubDate><media:content url="https://metal-heart.org/content/images/2020/06/filmscroller-thumb.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://metal-heart.org/content/images/2020/06/filmscroller-thumb.jpg" alt="Filmstrip Scroller - Effects Plugin for Resolume 7"><p>Turn your video clip into a filmstrip!</p><!--kg-card-begin: html--><video style="max-width: 100%;" muted loop autoplay height="400" src="https://metal-heart.org/static/video/filmstrip-scroller-example.mp4"></video><!--kg-card-end: html--><!--kg-card-begin: markdown--><p>I went a little crazy with the customization options for this shader. You can even control the width of the &quot;frame borders&quot; and the size of the film feeder holes. It's a little cheesy, but I wanted to make the film holes respond to audio input.</p>
<!--kg-card-end: markdown--><!--kg-card-begin: html--><video width="100%" loop="loop" autoplay="autoplay" src="https://metal-heart.org/static/video/filmstrip-scroller-demo.mp4"></video>
<!--kg-card-end: html--><!--kg-card-begin: markdown--><p>This is designed for <strong>Resolume 7 64-bit</strong>; it probably won't work with other versions! To use with Resolume, drop these .dll files into your Plugin Directory (set under Preferences-&gt;Video) and restart Resolume.</p>
<!--kg-card-end: markdown--><!--kg-card-begin: html-->Source code <a href="https://github.com/dramamine/ffgl/blob/master/source/plugins/FilmScroller/FilmScroller.cpp">here.</a><br>
<a href="https://metal-heart.org/static/vfx/vfx-ra7-tile-and-filmstrip-scroller.zip">DOWNLOAD HERE.</a> This software is provided for free under the MIT License. If you find this useful, consider donating $2 to support my future VFX efforts.

<div class="donation"><a href="https://paypal.me/domegod/2?locale.x=en_US"><img src="https://metal-heart.org/static/mh-donation-button.png" alt="Filmstrip Scroller - Effects Plugin for Resolume 7"></a></div><!--kg-card-end: html-->]]></content:encoded></item><item><title><![CDATA[Radial Mask - Effects Plugin for Resolume 7]]></title><description><![CDATA[Want to show just a wedge of your image? Want to animate your videos with Pac-man reveals? You're literally clicks away from doing it.]]></description><link>https://metal-heart.org/radial-mask-effects-plugin-for-resolume-7/</link><guid isPermaLink="false">5eed3b65a01ea404c50373e0</guid><category><![CDATA[vfx]]></category><dc:creator><![CDATA[marten]]></dc:creator><pubDate>Fri, 19 Jun 2020 23:04:21 GMT</pubDate><media:content url="https://metal-heart.org/content/images/2020/06/c8f730fa22.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://metal-heart.org/content/images/2020/06/c8f730fa22.jpg" alt="Radial Mask - Effects Plugin for Resolume 7"><p>Want to show just a wedge of your image? Want to animate your videos with Pac-man reveals? You're literally clicks away from doing it.</p><!--kg-card-begin: html--><video style="max-width: 100%;" muted loop autoplay width="400" height="400" src="https://metal-heart.org/static/video/RadialMask-example.mp4"></video><!--kg-card-end: html--><!--kg-card-begin: markdown--><p>I needed this for my Lightdream project, so I can easily apply videos/effects to specific sections of the dome we're covering with LEDs.</p>
<p>This plugin has the following parameters:</p>
<ul>
<li>Angle: the starting angle for your mask</li>
<li>Range: the % of the circle you want to show</li>
</ul>
<!--kg-card-end: markdown--><!--kg-card-begin: html--><video width="100%" loop="loop" autoplay="autoplay" src="https://metal-heart.org/static/video/RadialMask-demo.mp4"></video>
<!--kg-card-end: html--><!--kg-card-begin: markdown--><p>This is designed for <strong>Resolume 7 64-bit</strong>; it probably won't work with other versions! To use with Resolume, drop these .dll files into your Plugin Directory (set under Preferences-&gt;Video) and restart Resolume.</p>
<!--kg-card-end: markdown--><!--kg-card-begin: html-->Source code <a href="https://github.com/dramamine/ffgl/blob/master/source/plugins/RadialMask/RadialMask.cpp">here.</a><br>
<a href="https://metal-heart.org/static/vfx/vfx-ra7-radial-mask.zip">DOWNLOAD HERE.</a> This software is provided for free under the MIT License. If you find this useful, consider donating $2 to support my future VFX efforts.

<div class="donation"><a href="https://paypal.me/domegod/2?locale.x=en_US"><img src="https://metal-heart.org/static/mh-donation-button.png" alt="Radial Mask - Effects Plugin for Resolume 7"></a></div>
<!--kg-card-end: html-->]]></content:encoded></item><item><title><![CDATA[How to Write FFGL Effects Plugins for Resolume Arena 7]]></title><description><![CDATA[To get the most out of this tutorial, you'll want some familiarity with OpenGL and C++. You don't need to be an expert, but you'll want to have some basic familiarity with concepts like vertex shaders, fragment shaders, and texture mapping. ]]></description><link>https://metal-heart.org/writing-ffgl-plugins-for-resolume-arena-7/</link><guid isPermaLink="false">5ecd6a88a01ea404c50373bf</guid><category><![CDATA[tutorials]]></category><category><![CDATA[resolume]]></category><category><![CDATA[vfx]]></category><dc:creator><![CDATA[marten]]></dc:creator><pubDate>Tue, 26 May 2020 20:31:26 GMT</pubDate><media:content url="https://metal-heart.org/content/images/2020/05/e8cb84400c.jpg" medium="image"/><content:encoded><![CDATA[<figure class="kg-card kg-embed-card"><iframe width="480" height="270" src="https://www.youtube.com/embed/26uzqRbxRUk?feature=oembed" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></figure><img src="https://metal-heart.org/content/images/2020/05/e8cb84400c.jpg" alt="How to Write FFGL Effects Plugins for Resolume Arena 7"><p></p><p>Watch the video above for a walkthrough, or read below if that fits your learning style!</p><p>To get the most out of this tutorial, you'll want some familiarity with OpenGL and C++. You don't need to be an expert, but you'll want to have some basic familiarity with concepts like vertex shaders, fragment shaders, and texture mapping.</p><p>If you're looking for online resources, I recommend <a href="https://thebookofshaders.com/">The Book of Shaders</a>. However, if you really want a good foundation, I highly recommend this book, <a href="https://www.campusbooks.com/search/9781683922216">Computer Graphics Programming in OpenGL with C++</a>. This has helped me with basically everything I do with computer graphics even if I'm not directly using either OpenGL or C++.</p><p>You'll also need Git and Visual Studio installed.</p><h2 id="step-1-running-the-examples">Step 1. Running the Examples</h2><p><a href="https://github.com/resolume/ffgl">Resolume's FFGL repository</a></p><p>Check out the repo above and open up the included solution file at <code>build/windows/FFGLPlugins.sln</code></p><p>Once it's imported, you can see the folders here for the different types of plugins you can create. <code>sources</code> are also known as generators - they take no texture input and create an output just from the code you write. <code>effects</code> have one input texture, and <code>mixers</code> have two or more input textures.<br>I'm going to focus on <code>effects</code> since that should give you an idea of how to use textures and variables controlled by Resolume.</p><p>Next, let's export one of the example plugins just to make sure we can do this process from start to finish.  Let's take the effect AddSubtract and go ahead and build it (by right-clicking the project file and clicking <code>Build</code>).</p><p>Open Resolume 7. Go to <code>Preferences-&gt;Video</code> and make sure that Resolume's looking in the right folder for your FFGL plugin.</p><h2 id="step-2-duplicate-the-project-files">Step 2. Duplicate the Project Files</h2><p>You can follow the steps here: <a href="https://github.com/resolume/ffgl/wiki/2.-Create-your-first-plugin">Create your first plugin</a></p><p>If you have Git Bash installed or some other bash-like command prompt, try running this function from the FFGL repository directory (subbing "Vignette" for the name of your plugin):</p><pre><code># first parameter is the effect filename to use. CamelCase, no spaces
create_effect () {
  cp build/windows/AddSubtract.vcxproj build/windows/$1.vcxproj
  sed -i "/ProjectGuid/d" build/windows/$1.vcxproj
  sed -i "s/AddSubtract/$1/g" build/windows/$1.vcxproj

  cp -r source/plugins/AddSubtract source/plugins/$1
  cd source/plugins/$1
  mv AddSubtract.cpp $1.cpp
  mv AddSubtract.h $1.h
  sed -i "s/AddSubtract/$1/g" $1.cpp
  sed -i "s/AddSubtract/$1/g" $1.h
  cd ../../..
}

create_effect "Vignette"
</code></pre><h2 id="step-3-add-a-float-parameter">Step 3. Add a Float Parameter</h2><p>Let's go into the constructor here and we'll replace the RGB sliders with a simple float parameter. It ranges from 0 to 1, very straightforward. To do that, just add a parameter like this:<br><code>AddParam( ffglqs::Param::Create( "Sensitivity" ) );</code><br>You can namespace ffglqs if you prefer.</p><p>That is actually all you have to do to get the parameter set up. The function SendParams is going to take care of setting uniform variables and all the stuff you'd expect to do to get your shaders and your variables connected.</p><p>Make sure <code>SetMinInputs</code> and <code>SetMaxInputs</code> reflect the number of inputs you're using.</p><h2 id="step-4-developing-your-shader">Step 4. Developing Your Shader</h2><p>One way you can start writing your effects is to just come into this frag shader code and start making edits. This will work fine if you can write perfect code, but if you make mistakes, you'll find that this part is a huge headache. Say you make a typo (like, missing a semicolon) and go to build your shader. It will build just fine, and then it loads in Resolume, but nothing happens and you don't get any error messages.</p><p>For editing shaders, I like to use VS Code with a few shader plugins. First, there's glsl-snippets, which gives you autocompletion and function descriptions - SUPER helpful.<br>The other plugin I use is <code>GLSL Linter</code> - the alternate <code>GLSL Lint</code> works fine too. Make sure you read the installation instructions - basically what you do is you need to install the shader validator - so you go to this github page, go to releases and grab the appropriate package. Unzip it. In VSCode, after you have this installed, open user settings and make sure your GLSLang Validator path is filled in.</p><p>Give your file a .frag extension - this lets the validator know that you're writing a fragment shader (assuming that's what you're using).</p><h2 id="sidenote-shadertory">Sidenote: Shadertory</h2><p>If you want to use something like ShaderToy to develop your shaders, you totally can, but there are a couple differences you should know about. ShaderToy uses OpenGL 3.0 ESS, which is pretty old at this point. You'll notice we're using OpenGL 4.1 for our FFGL plugin. I could be wrong, but I don't think you're able to change the OpenGL version on ShaderToy, which is too bad.</p><p>The signatures to the functions main() in FFGL and mainImage() in ShaderToy are different. Basically, in ShaderToy you end up doing a bunch of math with the screen resolution and mouse coordinates. In this project, since uv is a vec2 with both coordinates from 0 to 1, you don't need to know the exact resolution.</p><h2 id="step-5-debugging">Step 5. Debugging</h2><p>One of the nice things about Resolume 7 is you can make changes to your plugins without having to close and restart Resolume. To do that, just make sure you clear out any instances of your plugin like this. ... Then you can make changes over in Visual Studio</p><p>Lastly, I wanted to cover how to use the debugger. This is important when your plugin "just doesn't work" and you need to see the error messages.</p><p>In Visual Studio, Make sure your build target is Debug instead of Release. In the Debug menu, and click Attach to Process, then find your Resolume process and click Attach. Now, when you load your plugin in Resolume, you'll see error messages in your output panel.</p><h2 id="questions">Questions?</h2><p>Email me or try <a href="https://resolume.com/forum/viewforum.php?f=14">Resolume Forums</a></p>]]></content:encoded></item><item><title><![CDATA[VJ Loop: Abstract Spinner]]></title><description><![CDATA[<!--kg-card-begin: html--><video style="max-width: 100%;" muted loop autoplay src="https://metal-heart.org/static/video/relaxing-abstract-final.mp4"></video><!--kg-card-end: html--><p>Followed <a href="https://www.youtube.com/watch?v=ZC3pbRzTovQ">this tutorial</a> to something trippy-lookin'. Basically, this is a wireframe with a short cone shape, inside a spherical mirror. The crossing lattices give that nice diamonds-resizing-and-morphing effect...O_O</p><p>Took some advice on color theory (from watching <a href="https://www.youtube.com/watch?v=Qj1FK8n7WgY">this video</a>) to maybe tone down the saturation and stop attacking people's</p>]]></description><link>https://metal-heart.org/relaxing-abstract-spinner/</link><guid isPermaLink="false">5eb7115ea01ea404c5037390</guid><category><![CDATA[3D Modeling]]></category><dc:creator><![CDATA[marten]]></dc:creator><pubDate>Sat, 09 May 2020 20:33:42 GMT</pubDate><media:content url="https://metal-heart.org/content/images/2020/05/27768c90df.jpg" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: html--><video style="max-width: 100%;" muted loop autoplay src="https://metal-heart.org/static/video/relaxing-abstract-final.mp4"></video><!--kg-card-end: html--><img src="https://metal-heart.org/content/images/2020/05/27768c90df.jpg" alt="VJ Loop: Abstract Spinner"><p>Followed <a href="https://www.youtube.com/watch?v=ZC3pbRzTovQ">this tutorial</a> to something trippy-lookin'. Basically, this is a wireframe with a short cone shape, inside a spherical mirror. The crossing lattices give that nice diamonds-resizing-and-morphing effect...O_O</p><p>Took some advice on color theory (from watching <a href="https://www.youtube.com/watch?v=Qj1FK8n7WgY">this video</a>) to maybe tone down the saturation and stop attacking people's eyes so hard. Don't always need to be so intense with bright &amp; clashing colors! </p><p>Made with Blender and touched up in After Effects.</p>]]></content:encoded></item><item><title><![CDATA[[Blender] Tasty Donut]]></title><description><![CDATA[Followed Blender Guru's tutorial to make this nice-lookin' donut!]]></description><link>https://metal-heart.org/blender-donut/</link><guid isPermaLink="false">5eb70fd5a01ea404c5037360</guid><category><![CDATA[3D Modeling]]></category><dc:creator><![CDATA[marten]]></dc:creator><pubDate>Sat, 09 May 2020 20:23:19 GMT</pubDate><media:content url="https://metal-heart.org/content/images/2020/05/donut-lv2-final-cycles-post-1.png" medium="image"/><content:encoded><![CDATA[<figure class="kg-card kg-image-card"><img src="https://metal-heart.org/content/images/2020/05/donut-lv2-final-cycles-post.png" class="kg-image" alt="[Blender] Tasty Donut"></figure><img src="https://metal-heart.org/content/images/2020/05/donut-lv2-final-cycles-post-1.png" alt="[Blender] Tasty Donut"><p>Followed <a href="https://www.youtube.com/playlist?list=PLjEaoINr3zgEq0u2MzVgAaHEBt--xLB6U">Blender Guru's tutorial</a> to make this nice-lookin' donut! I like the way he keeps image boards for himself to keep track of stuff like, "good looking sprinkles". I got to play with texture-painting, used particle/hair effects to get the sprinkles looking varied in shape and color, and figured out a bit of Eevee vs Cycles.</p><p>Developing in Cycles is a real pain with an old graphics card. Might be time to update - the render above took about 70 minutes. Here's what it looks like in Eevee (without post-processing):</p><figure class="kg-card kg-image-card"><img src="https://metal-heart.org/content/images/2020/05/donut-lv2-final-eevee.png" class="kg-image" alt="[Blender] Tasty Donut"></figure><p>Here are some earlier WIPs:</p><figure class="kg-card kg-image-card"><img src="https://metal-heart.org/content/images/2020/05/2020-05-02-donut-wip.png" class="kg-image" alt="[Blender] Tasty Donut"></figure><figure class="kg-card kg-image-card"><img src="https://metal-heart.org/content/images/2020/05/donut-wip1.png" class="kg-image" alt="[Blender] Tasty Donut"></figure>]]></content:encoded></item><item><title><![CDATA[[Blender] Modern Bedroom]]></title><description><![CDATA[The bed and rug are completely original. The top sheet is a plane folded on itself, with cloth simulation applied - I set up collision on the mattress below and let the cloth animate to lay flat & fold onto itself. That created the physical wrinkles...]]></description><link>https://metal-heart.org/blender-modern-bedroom/</link><guid isPermaLink="false">5eaa0d0ba01ea404c503730a</guid><category><![CDATA[3D Modeling]]></category><dc:creator><![CDATA[marten]]></dc:creator><pubDate>Wed, 29 Apr 2020 23:58:50 GMT</pubDate><media:content url="https://metal-heart.org/content/images/2020/04/modern-bedroom-render-pps-1.png" medium="image"/><content:encoded><![CDATA[<figure class="kg-card kg-image-card"><img src="https://metal-heart.org/content/images/2020/04/modern-bedroom-render-pps.png" class="kg-image" alt="[Blender] Modern Bedroom"></figure><img src="https://metal-heart.org/content/images/2020/04/modern-bedroom-render-pps-1.png" alt="[Blender] Modern Bedroom"><p>Followed an intermediate-level tutorial here: <a href="https://www.youtube.com/watch?v=eUf9VltV4Cc">Create a Modern Bedroom in Blender in 35 Minutes</a>. Reference image <a href="https://www.youtube.com/redirect?q=https%3A%2F%2Fwww.facebook.com%2Fmiysis.be%2Fphotos%2Fa.502499879852493%2F502679939834487%2F%3Ftype%3D3%26theater&amp;event=video_description&amp;v=eUf9VltV4Cc&amp;redir_token=aRPXfK7Y1sNMd-X9KJcepXnipjd8MTU4ODI4OTI1NEAxNTg4MjAyODU0">here</a>.</p><p>This tutorial felt WAY over my head - was a bit of a struggle to get through it to the end. The bed and rug are completely original. The top sheet is a plane folded on itself, with cloth simulation applied - I set up collision on the mattress below and let the cloth animate to lay flat &amp; fold onto itself. That created the physical wrinkles, but I also applied a texture to add extra wrinkles to it.</p><p>The rug uses "hair" particles which made it pretty easy to change how the strands look!</p><p>The lighting here was pretty challenging - definitely have some weird shadows here and I feel like the "seams" are showing - but that's OK! Oh you definitely can see one of my "cheating" lights in the mirror, none of the lights in the scene show up like that.</p><p>Some things here are pre-made assets like the flowers, lights, lamp, table, chair, and the outdoors scene.</p><p>Here's some in-progress pics:</p><figure class="kg-card kg-image-card"><img src="https://metal-heart.org/content/images/2020/04/2020-04-25-wip-render2.png" class="kg-image" alt="[Blender] Modern Bedroom"></figure><figure class="kg-card kg-image-card"><img src="https://metal-heart.org/content/images/2020/04/2020-04-25-wip-render.png" class="kg-image" alt="[Blender] Modern Bedroom"></figure><figure class="kg-card kg-image-card"><img src="https://metal-heart.org/content/images/2020/04/2020-04-24-wip-render.png" class="kg-image" alt="[Blender] Modern Bedroom"></figure>]]></content:encoded></item><item><title><![CDATA[[Blender] Treasure Chest]]></title><description><![CDATA[<figure class="kg-card kg-image-card"><img src="https://metal-heart.org/content/images/2020/04/treasure-chest.png" class="kg-image"></figure><p>Followed a beginner-level tutorial for making a treasure chest here: <a href="https://www.youtube.com/watch?v=ICBP-7x7Chc">MODELING for Absolute Beginners</a>. Pretty simple stuff, just a bunch of loop cuts and extruding faces along normals. </p>]]></description><link>https://metal-heart.org/blender-treasure-chest/</link><guid isPermaLink="false">5eaa0b51a01ea404c50372f5</guid><category><![CDATA[3D Modeling]]></category><dc:creator><![CDATA[marten]]></dc:creator><pubDate>Mon, 13 Apr 2020 23:22:00 GMT</pubDate><media:content url="https://metal-heart.org/content/images/2020/04/treasure-chest-1.png" medium="image"/><content:encoded><![CDATA[<figure class="kg-card kg-image-card"><img src="https://metal-heart.org/content/images/2020/04/treasure-chest.png" class="kg-image" alt="[Blender] Treasure Chest"></figure><img src="https://metal-heart.org/content/images/2020/04/treasure-chest-1.png" alt="[Blender] Treasure Chest"><p>Followed a beginner-level tutorial for making a treasure chest here: <a href="https://www.youtube.com/watch?v=ICBP-7x7Chc">MODELING for Absolute Beginners</a>. Pretty simple stuff, just a bunch of loop cuts and extruding faces along normals. </p>]]></content:encoded></item><item><title><![CDATA[EZ Radial Cloner - Effects Plugin for Resolume]]></title><description><![CDATA[Need to make some pretty kaleidoscope patterns? Maybe you need to create some weird clones? Maybe there's a specific region of your video that's so awesome, it needs to be multiplied?]]></description><link>https://metal-heart.org/vfx-ez-radial-cloner/</link><guid isPermaLink="false">5e744e522acb51089b036af5</guid><category><![CDATA[vfx]]></category><category><![CDATA[ffgl]]></category><category><![CDATA[resolume]]></category><dc:creator><![CDATA[marten]]></dc:creator><pubDate>Fri, 20 Mar 2020 05:21:28 GMT</pubDate><media:content url="https://metal-heart.org/content/images/2020/03/ez-radial-cloner.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://metal-heart.org/content/images/2020/03/ez-radial-cloner.jpg" alt="EZ Radial Cloner - Effects Plugin for Resolume"><p>Need to make some pretty kaleidoscope patterns? Maybe you need to create some weird clones? Maybe there's a specific region of your video that's so awesome, it needs to be multiplied?</p><p>EZ Radial Cloner does that.</p><!--kg-card-begin: html--><video style="max-width: 100%;" muted loop autoplay width="400" height="400" src="https://metal-heart.org/static/ez-radial-cloner.mp4"></video><!--kg-card-end: html--><!--kg-card-begin: markdown--><p>I wrote this because I wanted a flexible cloner like the Resolume's Kaleidoscope, but without having the effect also mirror each clone. I also wanted complete control over which region gets cloned.</p>
<p>It includes the following parameters</p>
<ul>
<li>Angle: The starting angle of the clone.</li>
<li>Area: Which area to clone. Incrementing this rotates the line of origin.</li>
<li>Clones: The number of clones (from 1 to 21).</li>
<li>Mirror: Set this to 1 to mirror the cloned region.</li>
</ul>
<!--kg-card-end: markdown--><!--kg-card-begin: html--><video width="100%" loop="loop" autoplay="autoplay" src="https://metal-heart.org/static/ez-radial-cloner-demo.mp4"></video>
<!--kg-card-end: html--><!--kg-card-begin: markdown--><p>These are 32-bit and 64-bit FFGL Plugins, compatible with Resolume and other video software. To use with Resolume, drop these .dll files into your Plugin Directory (set under Preferences-&gt;Video) and restart Resolume.</p>
<!--kg-card-end: markdown--><!--kg-card-begin: html-->Source code <a href="https://github.com/dramamine/ffgl/blob/master/source/plugins/EzRadialCloner/EzRadialCloner.cpp">here</a>.
<br><a href="https://metal-heart.org/static/vfx/vfx-ra6-ez-radial-cloner.zip">DOWNLOAD - RESOLUME 6 32- and 64-bit.</a> 
<br>
<a href="https://metal-heart.org/static/vfx/vfx-ra7-ez-radial-cloner.zip">DOWNLOAD - RESOLUME 7 64-bit.</a> 
<br>
This software is provided for free under the MIT License. If you find this useful, consider donating $2 to support my future VFX efforts.

<div class="donation"><a href="https://paypal.me/domegod/2?locale.x=en_US"><img src="https://metal-heart.org/static/mh-donation-button.png" alt="EZ Radial Cloner - Effects Plugin for Resolume"></a></div>
<!--kg-card-end: html-->]]></content:encoded></item><item><title><![CDATA[Hexagon Mosaic - Effects Plugin for Resolume]]></title><description><![CDATA[Resolume's got a nice pixelating effect called LoRez. The only problem? It's made of squares, not HEXAGONS.]]></description><link>https://metal-heart.org/vfx-hexagon-mosaic/</link><guid isPermaLink="false">5e717db8af89c504d9aaf4ea</guid><category><![CDATA[vfx]]></category><category><![CDATA[ffgl]]></category><category><![CDATA[resolume]]></category><dc:creator><![CDATA[marten]]></dc:creator><pubDate>Wed, 18 Mar 2020 03:48:15 GMT</pubDate><media:content url="https://metal-heart.org/content/images/2020/03/hexagon-mosaic-1.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://metal-heart.org/content/images/2020/03/hexagon-mosaic-1.jpg" alt="Hexagon Mosaic - Effects Plugin for Resolume"><p>Resolume's got a nice pixelating effect called LoRez. The only problem? It's made of squares, not HEXAGONS.</p><p>This plugin hexagonizes your video.</p><!--kg-card-begin: html--><video muted="true" loop="loop" autoplay="autoplay" width="400" height="400" src="https://metal-heart.org/static/hexagon-mosaic.mp4"></video><!--kg-card-end: html--><!--kg-card-begin: markdown--><p>It includes the following parameters:</p>
<ul>
<li>Width: The width of the mosaic tiles (from no effect to 1/10th of the screen width)</li>
<li>Blending: This controls the blend amount, i.e. how many pixels do I sample in each tile to decide which color the tile should be? Setting this to 0 usually results in more contrast.</li>
<li>X Offset: The inital X coordinate of the tiles. Shift this around with automation for a nice scrolling effect.</li>
<li>Y Offset: Same as above, but for the Y axis.</li>
</ul>
<!--kg-card-end: markdown--><!--kg-card-begin: html--><video width="100%" loop="loop" autoplay="autoplay" src="https://metal-heart.org/static/hexagon-mosaic-demo.mp4"></video>
<!--kg-card-end: html--><!--kg-card-begin: markdown--><p>These are 32-bit and 64-bit FFGL Plugins, compatible with Resolume and other video software. To use with Resolume, drop these .dll files into your Plugin Directory (set under Preferences-&gt;Video) and restart Resolume.</p>
<!--kg-card-end: markdown--><!--kg-card-begin: html-->Source code <a href="https://github.com/dramamine/ffgl/blob/master/source/plugins/HexagonMosaic/HexagonMosaic.cpp">here.</a><br>
<a href="https://metal-heart.org/static/vfx/vfx-ra6-hexagon-mosaic.zip">DOWNLOAD FOR Resolume 6 32- and 64-bit.</a>
<br>
<a href="https://metal-heart.org/static/vfx/vfx-ra7-hexagon-mosaic.zip">DOWNLOAD FOR Resolume 7 64-bit.</a>
<br>
This software is provided for free under the MIT License. If you find this useful, consider donating $2 to support my future VFX efforts.

<div class="donation"><a href="https://paypal.me/domegod/2?locale.x=en_US"><img src="https://metal-heart.org/static/mh-donation-button.png" alt="Hexagon Mosaic - Effects Plugin for Resolume"></a></div>
<!--kg-card-end: html-->]]></content:encoded></item><item><title><![CDATA[INDEX]]></title><description><![CDATA[<!--kg-card-begin: html--><video style="width: 100%;" src="https://metal-heart.org/static/dolphins-hex.mp4" autoplay loop></video><!--kg-card-end: html-->]]></description><link>https://metal-heart.org/index/</link><guid isPermaLink="false">5e1aa3aeaf89c504d9aaf4cd</guid><dc:creator><![CDATA[marten]]></dc:creator><pubDate>Sun, 12 Jan 2020 04:42:50 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: html--><video style="width: 100%;" src="https://metal-heart.org/static/dolphins-hex.mp4" autoplay loop></video><!--kg-card-end: html-->]]></content:encoded></item><item><title><![CDATA[Welcome to Ghost]]></title><description><![CDATA[Welcome, it's great to have you here.
We know that first impressions are important, so we've populated your new site with some initial getting started posts that will help you get familiar with everything in no time.]]></description><link>https://metal-heart.org/welcome/</link><guid isPermaLink="false">5dcb80f0b74b390d30f452a4</guid><category><![CDATA[Getting Started]]></category><dc:creator><![CDATA[Ghost]]></dc:creator><pubDate>Wed, 13 Nov 2019 04:05:10 GMT</pubDate><media:content url="https://static.ghost.org/v3.0.0/images/welcome-to-ghost.png" medium="image"/><content:encoded><![CDATA[<h2 id="a-few-things-you-should-know"><strong>A few things you should know</strong></h2><ol><li>Ghost is designed for ambitious, professional publishers who want to actively build a business around their content. That's who it works best for. </li><li>The entire platform can be modified and customised to suit your needs. It's very powerful, but does require some knowledge of code. Ghost is not necessarily a good platform for beginners or people who just want a simple personal blog. </li><li>It's possible to work with all your favourite tools and apps with hundreds of <a href="https://ghost.org/integrations/">integrations</a> to speed up your workflows, connect email lists, build communities and much more.</li></ol><h2 id="behind-the-scenes">Behind the scenes</h2><img src="https://static.ghost.org/v3.0.0/images/welcome-to-ghost.png" alt="Welcome to Ghost"><p>Ghost is made by an independent non-profit organisation called the Ghost Foundation. We are 100% self funded by revenue from our <a href="https://ghost.org/pricing">Ghost(Pro)</a> service, and every penny we make is re-invested into funding further development of free, open source technology for modern publishing.</p><p>The version of Ghost you are looking at right now would not have been made possible without generous contributions from the open source <a href="https://github.com/TryGhost">community</a>.</p><h2 id="next-up-the-editor">Next up, the editor</h2><p>The main thing you'll want to read about next is probably: <a href="https://metal-heart.org/the-editor/">the Ghost editor</a>. This is where the good stuff happens.</p><blockquote>By the way, once you're done reading, you can simply delete the default Ghost user from your team to remove all of these introductory posts! </blockquote>]]></content:encoded></item></channel></rss>