assets: original KB-RPCS3 branding and release artwork

Add the KB-RPCS3 visual identity built on the original stylised numeral-3
mark: a transparent logo, a square app icon, a wide README banner, a 2:1
GitHub social-preview image and release artwork. The SVGs are the editable
source of truth; render.py reproduces every PNG.

None of the artwork derives from Sony, PlayStation or upstream RPCS3
branding.
This commit is contained in:
KB committed 2026-10-09 13:34:15 +01:00
1 parent 639e9b1c24
commit a94aa824de
12 files changed
+299

No files matched your search

+51
View File
@@ -0,0 +1,51 @@
# KB-RPCS3 visual identity
Original artwork for KB-RPCS3. None of it is derived from Sony or PlayStation
branding, and none of it is upstream RPCS3 artwork.
The mark is an original stylised numeral **3**: two right-facing bowls joined by a
short middle stroke, drawn from primitives in `kb-rpcs3-mark.svg` and
`port/make-kb-icon.py` (the console title icon).
## Files
| File | Use | Size |
|---|---|---|
| `kb-rpcs3-mark.svg` / `.png` | the numeral-3 mark on its own, transparent | 1024×1024 |
| `kb-rpcs3-app-icon.svg` / `.png` | square app/tile icon with wordmark and version | 1024×1024 |
| `kb-rpcs3-banner.svg` / `.png` | wide README banner | 1600×500 |
| `kb-rpcs3-social-preview.svg` / `.png` | GitHub social-preview image (2:1) | 1280×640 |
| `kb-rpcs3-release.svg` / `.png` | release artwork | 1280×640 |
The `.svg` files are the editable source of truth. Regenerate every PNG with:
```sh
python3 -m venv .venv
.venv/bin/pip install cairosvg Pillow
.venv/bin/python assets/branding/render.py
```
## Palette
| Role | Hex |
|---|---|
| Ink (background gradient) | `#0B111C` → `#18284C` |
| Cyan (mark, accents) | `#00D6E8` / `#00A8CF` |
| Border cyan | `#00BED6` |
| Foreground | `#E8F6FF` |
| Muted text | `#96CDDC` / `#9DBECE` / `#6E93A3` |
## Type
Bold sans for the wordmark and headings, regular sans for support text. The SVGs
name `Arial, Helvetica, sans-serif` so they render consistently anywhere a
Helvetica-metric font is available.
## Usage
- Keep the mark cyan-on-dark or cyan-on-transparent; do not place it on a light
background without a dark plate.
- Do not add a Sony, PlayStation or RPCS3 logo to the artwork, and do not imply
endorsement by either.
- Keep the wordmark "KB-RPCS3" as one word with hyphens; the product name is never
spelled "KB RPCS3" or "KBRPCS3".
Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

+25
View File
@@ -0,0 +1,25 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1024" height="1024" viewBox="0 0 1024 1024" role="img" aria-label="KB-RPCS3 app icon">
<!-- KB-RPCS3 original app icon: dark gradient tile, cyan border, stylised 3, wordmark. -->
<defs>
<linearGradient id="tileBg" x1="0" y1="0" x2="0.35" y2="1">
<stop offset="0" stop-color="#0E1620"/>
<stop offset="1" stop-color="#18284C"/>
</linearGradient>
<linearGradient id="tileMark" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#5BEDF7"/>
<stop offset="1" stop-color="#00A8CF"/>
</linearGradient>
</defs>
<rect width="1024" height="1024" fill="url(#tileBg)"/>
<rect x="56.32" y="56.32" width="911.36" height="911.36" rx="174.08"
fill="none" stroke="#00BED6" stroke-width="18.43"/>
<g fill="none" stroke="url(#tileMark)" stroke-width="56.32" transform="translate(0 -122.88)">
<path d="M469.76 266.24 A153.6 122.88 0 0 1 469.76 512"/>
<path d="M469.76 512 A153.6 122.88 0 0 1 469.76 757.76"/>
<path d="M400.64 512 H623.36"/>
</g>
<text x="512" y="820" text-anchor="middle" font-family="Arial, Helvetica, sans-serif"
font-weight="bold" font-size="112" letter-spacing="1" fill="#E8F6FF">KB-RPCS3</text>
<text x="512" y="906" text-anchor="middle" font-family="Arial, Helvetica, sans-serif"
font-size="52" letter-spacing="6" fill="#96CDDC">ALPHA 0.1.0</text>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

+50
View File
@@ -0,0 +1,50 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1600" height="500" viewBox="0 0 1600 500" role="img" aria-label="KB-RPCS3 banner">
<!-- KB-RPCS3 wide README banner. Original artwork. -->
<defs>
<linearGradient id="banBg" x1="0" y1="0" x2="1" y2="1">
<stop offset="0" stop-color="#0B111C"/>
<stop offset="0.55" stop-color="#101B30"/>
<stop offset="1" stop-color="#16284A"/>
</linearGradient>
<radialGradient id="banGlow" gradientUnits="userSpaceOnUse" cx="270" cy="250" r="320">
<stop offset="0" stop-color="#00D6E8" stop-opacity="0.30"/>
<stop offset="1" stop-color="#00D6E8" stop-opacity="0"/>
</radialGradient>
<linearGradient id="banMark" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#5BEDF7"/>
<stop offset="1" stop-color="#00A8CF"/>
</linearGradient>
<linearGradient id="banRule" x1="0" y1="0" x2="1" y2="0">
<stop offset="0" stop-color="#00D6E8" stop-opacity="0"/>
<stop offset="0.5" stop-color="#00D6E8" stop-opacity="0.9"/>
<stop offset="1" stop-color="#00D6E8" stop-opacity="0"/>
</linearGradient>
</defs>
<rect width="1600" height="500" fill="url(#banBg)"/>
<rect width="1600" height="500" fill="url(#banGlow)"/>
<rect x="0" y="0" width="1600" height="4" fill="url(#banRule)"/>
<rect x="0" y="496" width="1600" height="4" fill="url(#banRule)"/>
<rect x="140" y="120" width="260" height="260" rx="60" fill="#0D1727" fill-opacity="0.72"
stroke="#00BED6" stroke-opacity="0.45" stroke-width="3"/>
<g fill="none" stroke="url(#banMark)" stroke-width="56.32"
transform="translate(270 250) scale(0.34) translate(-497.92 -389.12)">
<path d="M469.76 266.24 A153.6 122.88 0 0 1 469.76 512"/>
<path d="M469.76 512 A153.6 122.88 0 0 1 469.76 757.76"/>
<path d="M400.64 512 H623.36"/>
</g>
<text x="478" y="228" font-family="Arial, Helvetica, sans-serif" font-weight="bold"
font-size="118" letter-spacing="1.5" fill="#E8F6FF">KB-RPCS3</text>
<text x="482" y="292" font-family="Arial, Helvetica, sans-serif" font-size="40"
fill="#9DBECE">Unofficial RPCS3 Port for PlayStation 5</text>
<rect x="482" y="330" width="510" height="62" rx="31" fill="#00D6E8" fill-opacity="0.10"
stroke="#00D6E8" stroke-opacity="0.55" stroke-width="2"/>
<text x="737" y="370" text-anchor="middle" font-family="Arial, Helvetica, sans-serif"
font-weight="bold" font-size="26" letter-spacing="2.5" fill="#7FE6F2">ALPHA 0.1.0 &#183; SOURCE RELEASE</text>
<text x="482" y="446" font-family="Arial, Helvetica, sans-serif" font-size="26"
letter-spacing="1" fill="#6E93A3">PPSA99303 &#183; Vulkan / RADV &#183; PS5 homebrew</text>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

+15
View File
@@ -0,0 +1,15 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1024" height="1024" viewBox="0 0 1024 1024" role="img" aria-label="KB-RPCS3 mark">
<!-- KB-RPCS3 original stylised numeral 3. Drawn from primitives; not derived from any
Sony or PlayStation logo, nor from the upstream RPCS3 artwork. -->
<defs>
<linearGradient id="markGrave" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#5BEDF7"/>
<stop offset="1" stop-color="#00A8CF"/>
</linearGradient>
</defs>
<g fill="none" stroke="url(#markGrave)" stroke-width="56.32">
<path d="M469.76 266.24 A153.6 122.88 0 0 1 469.76 512"/>
<path d="M469.76 512 A153.6 122.88 0 0 1 469.76 757.76"/>
<path d="M400.64 512 H623.36"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 728 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 KiB

+49
View File
@@ -0,0 +1,49 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1280" height="640" viewBox="0 0 1280 640" role="img" aria-label="KB-RPCS3 Alpha 0.1.0 release artwork">
<!-- KB-RPCS3 release artwork (1280x640). Original artwork. -->
<defs>
<linearGradient id="relBg" x1="0" y1="0" x2="1" y2="1">
<stop offset="0" stop-color="#0A0F1A"/>
<stop offset="0.55" stop-color="#101B30"/>
<stop offset="1" stop-color="#182B50"/>
</linearGradient>
<radialGradient id="relGlow" gradientUnits="userSpaceOnUse" cx="980" cy="200" r="620">
<stop offset="0" stop-color="#00D6E8" stop-opacity="0.24"/>
<stop offset="1" stop-color="#00D6E8" stop-opacity="0"/>
</radialGradient>
<linearGradient id="relMark" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#5BEDF7"/>
<stop offset="1" stop-color="#00A8CF"/>
</linearGradient>
<linearGradient id="relRule" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#00D6E8" stop-opacity="0.9"/>
<stop offset="1" stop-color="#00D6E8" stop-opacity="0"/>
</linearGradient>
</defs>
<rect width="1280" height="640" fill="url(#relBg)"/>
<rect width="1280" height="640" fill="url(#relGlow)"/>
<rect x="96" y="140" width="5" height="360" rx="2.5" fill="url(#relRule)"/>
<text x="140" y="210" font-family="Arial, Helvetica, sans-serif" font-weight="bold"
font-size="30" letter-spacing="6" fill="#6E93A3">KB-RPCS3</text>
<text x="140" y="360" font-family="Arial, Helvetica, sans-serif" font-weight="bold"
font-size="120" letter-spacing="1" fill="#E8F6FF">Alpha 0.1.0</text>
<text x="143" y="420" font-family="Arial, Helvetica, sans-serif" font-size="40"
fill="#9DBECE">First public source release</text>
<rect x="142" y="462" width="470" height="60" rx="30" fill="#00D6E8" fill-opacity="0.10"
stroke="#00D6E8" stroke-opacity="0.55" stroke-width="2"/>
<text x="377" y="501" text-anchor="middle" font-family="Arial, Helvetica, sans-serif"
font-weight="bold" font-size="26" letter-spacing="2.5" fill="#7FE6F2">TAG v0.1.0-alpha &#183; SOURCE</text>
<text x="143" y="576" font-family="Arial, Helvetica, sans-serif" font-size="26"
letter-spacing="1" fill="#6E93A3">Unofficial PS5 port of the RPCS3 PlayStation 3 emulator</text>
<g fill="none" stroke="url(#relMark)" stroke-width="56.32"
transform="translate(1000 300) scale(0.34) translate(-497.92 -389.12)">
<path d="M469.76 266.24 A153.6 122.88 0 0 1 469.76 512"/>
<path d="M469.76 512 A153.6 122.88 0 0 1 469.76 757.76"/>
<path d="M400.64 512 H623.36"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 KiB

@@ -0,0 +1,48 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1280" height="640" viewBox="0 0 1280 640" role="img" aria-label="KB-RPCS3">
<!-- KB-RPCS3 GitHub social preview (1280x640). Original artwork. -->
<defs>
<linearGradient id="spBg" x1="0" y1="0" x2="0.6" y2="1">
<stop offset="0" stop-color="#0A0F1A"/>
<stop offset="0.6" stop-color="#101B30"/>
<stop offset="1" stop-color="#17284A"/>
</linearGradient>
<radialGradient id="spGlow" gradientUnits="userSpaceOnUse" cx="640" cy="150" r="520">
<stop offset="0" stop-color="#00D6E8" stop-opacity="0.22"/>
<stop offset="1" stop-color="#00D6E8" stop-opacity="0"/>
</radialGradient>
<linearGradient id="spMark" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#5BEDF7"/>
<stop offset="1" stop-color="#00A8CF"/>
</linearGradient>
<linearGradient id="spRule" x1="0" y1="0" x2="1" y2="0">
<stop offset="0" stop-color="#00D6E8" stop-opacity="0"/>
<stop offset="0.5" stop-color="#00D6E8" stop-opacity="0.85"/>
<stop offset="1" stop-color="#00D6E8" stop-opacity="0"/>
</linearGradient>
</defs>
<rect width="1280" height="640" fill="url(#spBg)"/>
<rect width="1280" height="640" fill="url(#spGlow)"/>
<rect x="0" y="0" width="1280" height="5" fill="url(#spRule)"/>
<rect x="0" y="635" width="1280" height="5" fill="url(#spRule)"/>
<g fill="none" stroke="url(#spMark)" stroke-width="56.32"
transform="translate(640 196) scale(0.30) translate(-497.92 -389.12)">
<path d="M469.76 266.24 A153.6 122.88 0 0 1 469.76 512"/>
<path d="M469.76 512 A153.6 122.88 0 0 1 469.76 757.76"/>
<path d="M400.64 512 H623.36"/>
</g>
<text x="640" y="412" text-anchor="middle" font-family="Arial, Helvetica, sans-serif"
font-weight="bold" font-size="128" letter-spacing="2" fill="#E8F6FF">KB-RPCS3</text>
<text x="640" y="474" text-anchor="middle" font-family="Arial, Helvetica, sans-serif"
font-size="40" fill="#9DBECE">Unofficial RPCS3 Port for PlayStation 5</text>
<rect x="400" y="500" width="480" height="58" rx="29" fill="#00D6E8" fill-opacity="0.10"
stroke="#00D6E8" stroke-opacity="0.55" stroke-width="2"/>
<text x="640" y="538" text-anchor="middle" font-family="Arial, Helvetica, sans-serif"
font-weight="bold" font-size="25" letter-spacing="2.5" fill="#7FE6F2">ALPHA 0.1.0 &#183; SOURCE RELEASE</text>
<text x="640" y="602" text-anchor="middle" font-family="Arial, Helvetica, sans-serif"
font-size="26" letter-spacing="1" fill="#6E93A3">github.com/kamb205/KB-RPCS3</text>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

+61
View File
@@ -0,0 +1,61 @@
#!/usr/bin/env python3
# SPDX-License-Identifier: GPL-3.0-or-later
"""Render the KB-RPCS3 branding SVGs to PNG.
The SVG files in this folder are the editable source of truth. This script only
rasterises them, so a change to a source file plus a re-run reproduces every PNG
deterministically.
python3 -m venv .venv && .venv/bin/pip install cairosvg Pillow
.venv/bin/python assets/branding/render.py
Requires cairosvg (and, for PNG optimisation, Pillow).
"""
from __future__ import annotations
import sys
from pathlib import Path
try:
import cairosvg
except ImportError: # pragma: no cover
sys.exit("cairosvg is required: pip install cairosvg")
HERE = Path(__file__).resolve().parent
# source SVG -> (output PNG, width, height)
TARGETS = {
"kb-rpcs3-mark.svg": ("kb-rpcs3-mark.png", 1024, 1024),
"kb-rpcs3-app-icon.svg": ("kb-rpcs3-app-icon.png", 1024, 1024),
"kb-rpcs3-banner.svg": ("kb-rpcs3-banner.png", 1600, 500),
"kb-rpcs3-social-preview.svg": ("kb-rpcs3-social-preview.png", 1280, 640),
"kb-rpcs3-release.svg": ("kb-rpcs3-release.png", 1280, 640),
}
def optimise(path: Path) -> None:
"""Re-save as an optimised, flattened PNG (branding art has no transparency)."""
try:
from PIL import Image
except ImportError:
return
with Image.open(path) as im:
im.convert("RGB").save(path, format="PNG", optimize=True)
def main() -> int:
for svg_name, (png_name, width, height) in TARGETS.items():
src = HERE / svg_name
if not src.exists():
sys.exit(f"missing source: {src}")
dst = HERE / png_name
cairosvg.svg2png(
url=str(src), write_to=str(dst), output_width=width, output_height=height
)
optimise(dst)
print(f"{svg_name} -> {png_name} ({width}x{height}, {dst.stat().st_size:,} bytes)")
return 0
if __name__ == "__main__":
raise SystemExit(main())