Virtual exhibition on Oncyber

This is a virtual presentation of some of my minted works on the platform of Oncyber. Please allow some time for the 3d models to load.

Das Louvre

This virtual gallery shows a selection of art works in my NFT collection.

Tools [v002]

Tools [v002]Seamless loop, 1920x1920px, colour/silent, 00’12”, 2021View on IPFS | NFT on objkt.com

Bits & Pieces: Glitch art | Ina Vare

HART art magazine column, Published September 14, 2022.

Bits & Pieces: trash art | ROBNESS

HART magazine column. Published May 6, 2022.

Bits & Pieces: .gif art | Cofveve by Lorna Mills

HART magazine column, published March 2022.

WAGMI: an awkward dance of art and crypto

WAGMI is a concise article for Belgian art magazine HART about collecting digital art in the NFT space. Published March 2022, in HART magazine #222.

Grief

Grief Seamless loop, portrait, 3840 x 2160px (4K), colour/silent, 01’36”, 2021Photogrammetric 3d model (.obj, .c4d, .gbl), 2021 ‘Grief’ is the top of a decaying tree, left on a clear-cut. In September 2019, … Lees Meer

The Garden of The Forking Paths

(We are in) The Garden of The Forking Paths 4K (3840 × 2160px) seamless loop, colour/sound, 00’14”, 2021 A stand-alone reworked version of a ‘waiting room’ chapter from Mistakes. The artist talk. (HD, colour/sound, … Lees Meer

Fundamental Mechanics

Fundamentall Mechanics / collection token 72 chapters, .gif, 360 × 639 pixels, variable frames, 2019-2020 The series was made on a mediocre iPhone 5 using the Instagram stories feature while researching 16th century visual … Lees Meer

// script.js document.addEventListener("DOMContentLoaded", function() { // Check if the body has the specific page class if (document.body.classList.contains('page-id-400605')) { const container = document.getElementById("container"); // Function to create and position images function createImage(src) { const img = document.createElement("img"); img.src = src; img.classList.add("image"); // Set random width and rotation const randomWidth = Math.random() * (150 - 50) + 50; // Random width between 50px and 150px const randomRotation = Math.random() * 30 - 15; // Random rotation between -15deg and 15deg img.style.width = `${randomWidth}px`; img.style.transform = `rotate(${randomRotation}deg)`; // Random position within the container img.style.top = Math.random() * (container.clientHeight - randomWidth) + 'px'; img.style.left = Math.random() * (container.clientWidth - randomWidth) + 'px'; img.draggable = true; // Event listeners for dragging img.addEventListener("dragstart", function(e) { e.dataTransfer.setData("text/plain", null); // For Firefox compatibility img.style.transition = 'none'; // Disable transition during drag }); img.addEventListener("dragend", function() { img.style.transition = 'transform 0.1s'; // Re-enable transition after drag }); img.addEventListener("drag", function(e) { const x = e.clientX - container.getBoundingClientRect().left - randomWidth / 2; // Adjust for image width const y = e.clientY - container.getBoundingClientRect().top - randomWidth / 2; // Adjust for image height img.style.transform = `translate(${x}px, ${y}px) rotate(${randomRotation}deg)`; // Keep rotation }); container.appendChild(img); } // Load images from a specified folder const imageFolder = 'https://yourwebsite.com/path/to/your/images/'; // Update with your image folder path let i = 1; // Initialize the counter while (true) { // Infinite loop to keep trying to load images const imageUrl = `${imageFolder}image${i}.jpg`; // Adjust this to match your image naming convention const img = new Image(); img.src = imageUrl; // Check if the image exists before creating it img.onload = function() { createImage(imageUrl); }; img.onerror = function() { console.log(`Image ${imageUrl} does not exist. Stopping further attempts.`); break; // Stop loading more images if one doesn't exist }; i++; // Increment the counter } } });