Compare commits

...

10 Commits

Author SHA1 Message Date
fzechert 37e0fb6508 added icon-only svg 2026-06-14 17:15:07 +02:00
fzechert 2cc83d412e fix whitespaces in ascii art 2026-05-16 17:02:37 +02:00
fzechert 593c49065a update ascii art 2026-05-16 02:12:09 +02:00
Zechert, Frank (EXTERN: Capgemini) 4234d78975 added ascii art 2026-05-13 13:52:37 +02:00
fzechert 7d72d2540a Make background-exporter work with multiple <image> instances 2026-05-10 02:22:17 +02:00
fzechert 2abd6c529c Add background images / desktop wallpapers 2026-05-10 02:04:07 +02:00
fzechert 8dbfa41da8 add icon to README.md 2026-05-03 23:13:36 +02:00
fzechert 2945f07bd1 add fz-stack logo 2026-05-03 23:12:30 +02:00
fzechert 446d899121 added LICENSE 2026-05-03 17:02:52 +02:00
fzechert 6640fe7ce6 Update README.md 2026-05-03 17:02:37 +02:00
18 changed files with 487 additions and 2 deletions
+4
View File
@@ -0,0 +1,4 @@
CC BY-NC-SA 4.0
This work is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International.
To view a copy of this license, visit https://creativecommons.org/licenses/by-nc-sa/4.0/
+4 -2
View File
@@ -1,3 +1,5 @@
# assets
# Assets
Media Assets for fz-stack
Media Assets for fz-stack.
![fz-stack Logo](https://git.zechert.net/fz-stack/assets/raw/branch/master/icons/fz-stack-transparent.svg)
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 MiB

+98
View File
@@ -0,0 +1,98 @@
<!DOCTYPE html>
<html>
<body style="margin:0; background:#000;">
<script>
async function inlineAndExport() {
const parser = new DOMParser();
// Load background
const bgText = await (await fetch("background.svg")).text();
const bgDoc = parser.parseFromString(bgText, "image/svg+xml");
const svg = bgDoc.documentElement;
// Find ALL <image> elements
const imageEls = svg.querySelectorAll("image[href], image[xlink\\:href]");
for (const imgEl of imageEls) {
const href = imgEl.getAttribute("href") || imgEl.getAttribute("xlink:href");
// Only inline SVG images (skip PNG/JPG/etc.)
if (!href.endsWith(".svg")) continue;
// Load the referenced SVG
const logoText = await (await fetch(href)).text();
const logoDoc = parser.parseFromString(logoText, "image/svg+xml");
const logoSvg = logoDoc.documentElement;
// Extract inner content
const logoInner = Array.from(logoSvg.childNodes)
.filter(n => n.nodeType === 1)
.map(n => n.outerHTML)
.join("");
// Read viewBox
const vb = logoSvg.getAttribute("viewBox").split(" ").map(Number);
const vbWidth = vb[2];
const vbHeight = vb[3];
// Read <image> geometry
const x = parseFloat(imgEl.getAttribute("x") || 0);
const y = parseFloat(imgEl.getAttribute("y") || 0);
const w = parseFloat(imgEl.getAttribute("width"));
const h = parseFloat(imgEl.getAttribute("height"));
// Compute scale
const scaleX = w / vbWidth;
const scaleY = h / vbHeight;
// Create <g> wrapper
const g = bgDoc.createElementNS("http://www.w3.org/2000/svg", "g");
g.setAttribute("transform", `translate(${x},${y}) scale(${scaleX},${scaleY})`);
// Preserve width/height
g.setAttribute("width", imgEl.getAttribute("width"));
g.setAttribute("height", imgEl.getAttribute("height"));
g.innerHTML = logoInner;
// Replace <image> with <g>
imgEl.replaceWith(g);
}
// Serialize final SVG
const finalSVG = new XMLSerializer().serializeToString(svg);
const svg64 = btoa(unescape(encodeURIComponent(finalSVG)));
// Render to <img>
const img = new Image();
img.src = "data:image/svg+xml;base64," + svg64;
await img.decode();
// Export helper
function exportPNG(width, height, filename) {
const canvas = document.createElement("canvas");
canvas.width = width;
canvas.height = height;
const ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0, width, height);
const a = document.createElement("a");
a.download = filename;
a.href = canvas.toDataURL("image/png");
a.click();
}
// Export all sizes
exportPNG(1920, 1080, "background-fhd.png");
exportPNG(2560, 1440, "background-wqhd.png");
exportPNG(3440, 1440, "background-uwqhd.png");
exportPNG(3840, 2160, "background-4kuhd.png");
}
inlineAndExport();
</script>
</body>
</html>
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 16 KiB

+26
View File
@@ -0,0 +1,26 @@
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣴⣾⣷⣦⣄⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣴⣾⣿⣿⣿⣿⣿⣿⣿⣿⣷⣦⣄⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣴⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣦⣄⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠚⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠗⢀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⣄⡉⠓⠦⣌⡙⠻⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠟⢋⣡⠴⠚⢉⣠⣤⣀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣤⣶⣿⣿⣿⣿⣿⣷⣦⣄⡉⠓⠦⣌⡙⠻⢿⣿⣿⣿⣿⣿⣿⡿⠟⢋⣡⠴⠚⢉⣠⣴⣾⣿⣿⣿⣿⣿⣶⣤
⠀⠀⠀⠀⠀⠀⠀⠀⠐⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣿⣿⣷⣦⣄⡉⠓⠦⣌⡙⠻⠟⢋⣡⠴⠚⢉⣠⣴⣾⣿⣿⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⠂
⠀⠀⠀⠀⢀⣠⣴⣆⡈⠻⢿⣿⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣿⣿⣷⣦⣄⡉⠃⠘⢉⣠⣴⣾⣿⣿⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⣿⡿⠟⢁⣰⣦⣄⡀
⠀⠀⠐⠾⣿⣿⣿⣿⣿⣷⣦⣌⡙⠻⢿⣿⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣿⣿⣷⣾⣿⣿⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⣿⡿⠟⢋⣡⣴⣾⣿⣿⣿⣿⣿⠷⠂
⠀⢸⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣌⡙⠻⢿⣿⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⣿⡿⠟⢋⣡⣴⣾⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⡇
⠀⢸⣿⣿⣿⣿⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣌⡙⠻⢿⣿⣷⣦⣄⡉⠛⠿⠿⠛⢉⣠⣴⣾⣿⡿⠟⢋⣡⣴⣾⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⣿⣿⣿⣿⡇
⠀⠀⠉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣌⡙⠻⢿⣿⣷⡆⢰⣾⣿⡿⠟⢋⣡⣴⣾⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⣿⣿⣿⣿⣿⠿⠛⠉
⠀⠀⠀⠀⠀⠀⠉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣌⡙⠃⠘⢋⣡⣴⣾⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⣿⣿⣿⣿⣿⠿⠛⠉
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣷⣾⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⣿⣿⣿⣿⣿⠿⠛⠉
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⣿⣿⣿⣿⣿⠿⠛⠉
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣄⡉⢉⣠⣴⣾⣿⣿⣿⣿⣿⠿⠛⠉
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠿⣿⣿⣿⣿⡇⢸⣿⣿⣿⣿⠿⠛⠉
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠿⡇⢸⠿⠛⠉
__ _ _
/ _|___ ___| |_ __ _ ___| | __
| ||_ /____/ __| __/ _` |/ __| |/ /
| _/ /_____\__ \ || (_| | (__| <
|_|/___| |___/\__\__,_|\___|_|\_\
File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

+24
View File
@@ -0,0 +1,24 @@
<svg
width="512"
height="512"
viewBox="0 20 220 180"
role="img"
aria-labelledby="title desc"
xmlns="http://www.w3.org/2000/svg"
id="icon">
<title id="title">fz-stack logo outline</title>
<desc id="desc">
Logo for fz-stack showing three flat, stacked geometric layers
in Catppuccin Macchiato colors above the text “fz-stack”.
Black and white high contrast outline only.
</desc>
<g id="stack-bottom">
<path d="M110,140 L30,100 L30,85 L110,45 L190,85 L190,100 Z L110,125 L30,85 L110,125 L190,85 L110,125" fill="#ffffff" stroke="#000000" stroke-width="2" stroke-linejoin="round" stroke-linecap="round" />
</g>
<g id="stack-middle">
<path d="M110,110 L50,80 L50,70 L110,40 L170,70 170,80 Z L110,100 L50,70 L110,100 L170,70 L110,100" fill="#ffffff" stroke="#000000" stroke-width="2" stroke-linejoin="round" stroke-linecap="round" />
</g>
<g id="stack-top">
<path d="M110,82 L70,62 L70,57 L110,37 L150,57 L150,62 Z L110,77 L70,57 L110,77 L150,57 L110,77" fill="#ffffff" stroke="#000000" stroke-width="2" stroke-linejoin="round" stroke-linecap="round" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 14 KiB

+2
View File
@@ -0,0 +1,2 @@
*.woff2
*.woff2.b64
+12
View File
@@ -0,0 +1,12 @@
#!/bin/bash
set -x
pyftsubset /usr/share/fonts/inter/InterVariable.ttf \
--output-file="InterVariableLogo.woff2" \
--flavor=woff2 \
--layout-features='*' \
--unicodes='U+0066,U+007A,U+002D,U+0073,U+0074,U+0061,U+0063,U+006B'
base64 -w 0 InterVariableLogo.woff2 > InterVariableLogo.woff2.b64