0x71da6d8d…0c28sent to0x499f4943…3001·#13,964,643·view on Etherscan
Ethereal PhaseH0x92c23775f6559d3392562c6bfd4e74c27d098f36b8584553f3716fdf1aa9b5a6# Ethereal Phase
An exploration between contrasting polarities and equilibrium inspired by electromagnetic waves.
Each 'Ethereal Phase' is unique to the transaction that generated it.
##

| Artist | [Audivit](https://audivit.xyz/) |
|:------------|:-----------|
| **Editions** | 500 |
| **Editions License** | [NIFTY](https://www.nftlicense.org/) |
| **Code License** | [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/) |
## Metadata
| Attribute | Possible Values |
|:------------|:-----------|
| Style | Ethereal, Spectral |
| Context | Frame, Marble, Turbine |
| Palette | Hero, Smart, Dupont, Funken, Spritz, Decca, Villain, Monochrome |
| Crest | 0% to 100% - Amplitude detail |
| Frequency | 0% to 100% - Wave cycles |
| Flux | 0% to 100% - Wave flow force |
| Asymmetry | 0% to 100% - Skew of shadow wave |
| Compression | 0% to 100% - Max amplitude and wave border dimension |
## Extra Features
| Input | Action |
|:------------|:-----------|
| Press key [ **s** ] | Save high resolution 5000x5000 pixels file |
## Source Code
```
let decPairs, TX, TXN, EID, DIM, inDIM, WIDTH, HEIGHT, frame, seed, palette, clr, ctx, turble, save;
let metadataObj = {};
getHashData = (transactionID) => {
let transactions = [TX];
let transactionForTokenId = transactionID - 1;
let tokenData = { hash: transactions[transactionForTokenId] };
decPairs = [];
for (let i = 0; i < 32; i++) {
decPairs.push(parseInt(tokenData.hash.substr(2 * i + 2, 2), 16));
}
}
printMetadata = () => {
if (decPairs[29] <= 170) {
metadataObj.Style = "Ethereal";
} else {
metadataObj.Style = "Spectral";
}
if (decPairs[20] >= 180 && decPairs[20] < 245 && metadataObj.Style != "Spectral") {
metadataObj.Context = "Marble";
} else if (decPairs[20] >= 245) {
metadataObj.Context = "Turbine";
} else {
metadataObj.Context = "Frame";
}
metadataObj.Palette = clr[0];
metadataObj.Crest = p.round(p.map(decPairs[9], 0, 255, 1, 100)) + "%";
metadataObj.Frequency = p.round(p.map(decPairs[15], 0, 255, 1, 100)) + "%";
metadataObj.Flux = p.round(p.map(decPairs[4], 0, 255, 1, 100)) + "%";
metadataObj.Asymmetry = p.round(p.map(decPairs[6], 0, 255, 1, 100)) + "%";
metadataObj.Compression = p.round(p.map(decPairs[7], 0, 255, 1, 100)) + "%";
metadataObj.transactionHash = TX;
console.log("metadata: ", metadataObj);
}
p.myCustomRedrawAccordingToNewPropsHandler = (props) => {
p.keyTyped = () => {
if (p.keyCode === 83 && props.square == 1) {
save.save("Ethereal Phase #" + EID + ".tif");
}
}
if (props.transactionHash && props.square) {
TX = props.transactionHash;
TXN = props.tokenId;
EID = props.editionId;
if (props.square > 1) {
WIDTH = p.windowWidth / props.square * 0.7;
HEIGHT = p.windowHeight / props.square * 0.7;
} else {
WIDTH = p.windowWidth / props.square * 0.9;
HEIGHT = p.windowHeight / props.square * 0.9;
}
DIM = Math.min(WIDTH, HEIGHT);
inDIM = 1000;
getHashData(1);
p.randomSeed(+props.transactionHash.substr(0, 10));
seed = p.random(0, 255);
p.noiseSeed(seed);
p.createCanvas(DIM, DIM);
turble = p.createGraphics(inDIM, inDIM, p.WEBGL)
turble.smooth();
turble.setAttributes("alpha", true);
turble.setAttributes("antialias", true);
render = p.createGraphics(inDIM, inDIM);
frame = p.createGraphics(inDIM, inDIM, p.WEBGL);
frame.setAttributes("alpha", false);
frame.setAttributes("antialias", true);
frame.smooth();
frame.rectMode(p.CENTER);
let crest = p.map(decPairs[9], 0, 255, 1.0, 4.0);
let frequency = p.map(decPairs[15], 0, 255, 3.0, 5.0);
let flux = p.map(decPairs[4], 0, 255, 1.3, 1.4);
let asymmetry = p.map(decPairs[6], 0, 255, 1.0, 1.1);
let compression = p.map(decPairs[7], 0, 255, 0.3, 0.6);
if (decPairs[29] <= 170) {
pal5 = ["Funken", "#4E3D53", "#FFB200", "#FAF9EF", "#FFB200"];
pal6 = ["Decca", "#7F616D", "#FF4D6E", "#FAF9EF", "#FF4D6E"];
pal2 = ["Smart", "#FAF9EF", "#00ADB5", "#FAF9EF", "#7DD3D3"];
pal1 = ["Hero", "#FF2442", "#03506F", "#FAF9EF", "#03506F"];
pal4 = ["Spritz", "#FF7869", "#FFC57E", "#FAF9EF", "#FFC57E"];
pal3 = ["Dupont", "#6D9598", "#FF2442", "#FAF9EF", "#FF2442"];
pal7 = ["Villain", "#28FFBF", "#101010", "#28FFBF", "#28FFBF"];
pal8 = ["Monochrome", "#FAF9EF", "#101010", "#FAF9EF", "#FAF9EF"];
} else {
pal2 = ["Hero", "#03506F", "#03506F", "#FAF9EF", "#FF2442"];
pal1 = ["Hero", "#03506F", "#03506F", "#FAF9EF", "#FF2442"];
pal4 = ["Dupont", "#6D9598", "#FF2442", "#FAF9EF", "#FF2442"];
pal5 = ["Funken", "#4E3D53", "#FFB200", "#FAF9EF", "#FFB200"];
pal6 = ["Decca", "#7F616D", "#FF4D6E", "#FAF9EF", "#FF4D6E"];
pal3 = ["Dupont", "#6D9598", "#FF2442", "#FAF9EF", "#FF2442"];
pal7 = ["Funken", "#4E3D53", "#FFB200", "#FAF9EF", "#FFB200"];
pal8 = ["Decca", "#7F616D", "#FF4D6E", "#FAF9EF", "#FF4D6E"];;
}
let PLT = [];
for (let clrArr = 0; clrArr <= 512; clrArr++) {
let count = "pal" + p.round(p.random(1, 8));
PLT.push(count);
}
palette = p.round(p.random(512));
clr = eval(PLT[palette]);
printMetadata();
if (props.square > 1) {
turble.pixelDensity(0.5);
render.pixelDensity(0.5);
frame.pixelDensity(0.5);
} else if (props.square == 1 && p.displayWidth < p.displayHeight) {
turble.pixelDensity(1);
render.pixelDensity(1);
frame.pixelDensity(1);
} else {
p.pixelDensity(p.displayDensity() + 1);
turble.pixelDensity(5);
render.pixelDensity(5);
frame.pixelDensity(5);
}
frame.background(clr[1]);
p.noiseDetail(crest);
frame.noFill();
frame.strokeWeight(inDIM / 70);
frame.rectMode(p.CENTER);
if (decPairs[20] < 245 && metadataObj.Context != "Marble") {
frame.rect(0, 0, inDIM, inDIM);
}
frame.translate(-inDIM * 0.35, -inDIM * 0.35, -inDIM / 2);
frame.push();
frame.translate(-inDIM * 1.5, 0, 0);
frame.beginShape(p.TRIANGLE_STRIP);
for (let x = inDIM / 5.5; x < inDIM * 3.5; x += 0.5) {
let nx = p.map(x, 100, -inDIM, frequency, 0);
let y = inDIM * 0.95 * p.noise(nx / 2);
let z = inDIM + p.noise(nx / 2);
frame.strokeWeight(inDIM * 0.06);
frame.stroke(0, 20);
frame.fill(clr[2]);
frame.vertex(x, y, 0);
if (decPairs[29] <= 170) {
if (decPairs[20] >= 245 && metadataObj.Palette == "Monochrome" || metadataObj.Palette == "Smart") {
frame.background(clr[2]);
} else {
frame.background(clr[1]);
}
frame.stroke(clr[1] + "20");
if (decPairs[20] >= 245) {
frame.strokeWeight(1);
frame.vertex(x, y * 0.03, 0);
frame.vertex(x / (asymmetry * 1.1), y * compression * 3, 0);
} else {
frame.strokeWeight(1);
frame.vertex(x, y * 0.03, 0);
frame.vertex(x / (asymmetry * 1.1), y * compression * 2, 0);
}
} else {
frame.noFill();
frame.stroke(clr[4] + "30")
frame.strokeWeight(0.5);
frame.vertex(x * flux, z / 3, 0);
if (decPairs[20] >= 245) {
frame.vertex(x, y * 1.5, 0);
} else {
frame.vertex(x, y * 0.4, 0);
}
frame.vertex(x / asymmetry, y * compression, 0);
}
}
frame.endShape();
frame.pop();
if (decPairs[20] >= 245 && metadataObj.Palette == "Villain") {
frame.fill(clr[2]);
} else {
frame.fill(clr[3]);
}
frame.noStroke();
if (decPairs[29] <= 170) {
frame.translate(0, inDIM * 0.3, -(inDIM * 0.2));
frame.rect(inDIM / 3, inDIM * 1.75, inDIM * 2, inDIM * 4);
frame.fill(clr[2]);
frame.rect(inDIM / 3, inDIM * 0.05, inDIM * 2, inDIM * 0.75);
} else {
frame.translate(0, -2, -(inDIM * 0.2));
frame.rect(inDIM / 3, inDIM * 0.833, inDIM * 2, inDIM);
frame.fill(clr[1]);
frame.rect(inDIM / 3, inDIM * 0.83, inDIM * 2, inDIM);
frame.fill(0, 80);
frame.rect(inDIM / 3, inDIM * 0.83, inDIM * 2, inDIM);
}
}
ctx = frame;
turble.ortho(-(DIM / 2), DIM / 2, DIM / 2, -(DIM / 2), -(DIM * 6), DIM * 6);
turble.camera(DIM, DIM, (DIM / 2) / p.tan(p.PI / 6.8), 0, 0, 0, 0, 1, 0);
if (decPairs[20] >= 180 && decPairs[20] < 245 && metadataObj.Style != "Spectral") {
ctx = turble;
if (metadataObj.Palette == "Hero" && metadataObj.Style == "Spectral") {
turble.background(clr[4] + "99");
} else if (metadataObj.Palette == "Smart") {
turble.background(clr[4]);
} else if (metadataObj.Palette == "Funken" || metadataObj.Palette == "Dupont" || metadataObj.Palette == "Spritz") {
turble.background(clr[1] + "99");
} else if (metadataObj.Palette == "Monochrome" || metadataObj.Palette == "Villain") {
turble.background(clr[3] + "99");
} else {
turble.background(clr[2] + "99");
}
turble.noStroke();
turble.texture(frame);
turble.rotateX(40);
turble.rotateZ(p.random(1, 3));
turble.sphere(DIM / 3, 500, 500);
} else if (decPairs[20] >= 245) {
ctx = turble;
if (metadataObj.Palette == "Smart" || metadataObj.Palette == "Monochrome") {
turble.background(clr[2]);
turble.stroke(clr[2]);
} else {
turble.background(clr[1]);
turble.stroke(clr[1]);
}
turble.strokeWeight(10 * turble.pixelDensity());
turble.texture(frame);
turble.box(DIM / 2, DIM / 2, DIM / 2);
}
render.image(ctx, 0, 0, inDIM, inDIM);
render.blendMode(p.SOFT_LIGHT);
render.background(60);
save = render;
p.redraw();
}
p.draw = () => {
p.image(render, 0, 0, DIM, DIM);
p.noLoop();
render.remove();
turble.remove();
frame.remove();
ctx.remove();
render = null;
turble = null;
frame = null;
ctx = null;
}
```