feat: draw site images from data, host them

scripts/sitediagrams.py writes the explainer, install flow, verification modes, MinUI card, pipeline and data layer diagrams as inline SVG from the registry, the platform files, the install manifests and the pipeline step list. A page asks for one with an image comment, which the decoration pass resolves. The two mermaid diagrams of the architecture page are replaced, so no page loads mermaid from unpkg.

Platform logos and system icons are copied once by fetch_site_images.py with their source and owner recorded, and the build rewrites the remote links to the copies. validate_site refuses an image from another host. Three registry logos named a personal avatar instead of the project's (RomM, ROCKNIX, MiSTer FPGA) and MyMinUI's was a GitHub identicon, now dropped.

One 1200x630 sharing card per section, a 404 page with search and the two entry pages, and a list of screenshots that need a real device.
This commit is contained in:
Abdessamad Derraz committed 2026-10-22 11:45:47 +02:00
1 parent f1c58820d1
commit 1b9ea86e1b
120 files changed
+1963 -176

No files matched your search

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="0 0 960 960"><g style="display:inline"><g style="stroke:none;stroke-width:4;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"><g style="font-size:64px;line-height:1.05;font-family:Urba;-inkscape-font-specification:Urba;text-align:center;letter-spacing:0;word-spacing:0;white-space:pre;shape-inside:url(#path1055-2);stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers" transform="rotate(11.82 -1558.927 865.97)"><path d="M186.08 290.316q0 1.664.576 3.072.64 1.408 1.664 2.496 1.088 1.024 2.496 1.664 1.472.576 3.072.576t3.008-.576q1.472-.64 2.56-1.664 1.088-1.088 1.664-2.496.64-1.472.64-3.072t-.64-3.008q-.576-1.472-1.664-2.496-1.088-1.088-2.56-1.664-1.408-.64-3.008-.64t-3.072.64q-1.408.576-2.496 1.664-1.024 1.024-1.664 2.496-.576 1.408-.576 3.008m17.472 22.08 4.352 4.352q-.896.896-2.048 1.344t-2.368.448q-1.152 0-2.304-.448-1.088-.448-1.984-1.344l-13.12-13.12v8.768q0 2.56-1.792 4.352t-4.352 1.792v-28.224q0-2.88 1.088-5.376 1.088-2.56 3.008-4.48t4.416-3.008q2.56-1.088 5.44-1.088t5.44 1.088 4.48 3.008 3.008 4.48q1.088 2.496 1.088 5.376 0 2.688-.96 5.12t-2.688 4.288q-1.664 1.856-3.968 3.072-2.24 1.152-4.864 1.408zm28.48 0q2.56 0 4.352 1.792t1.792 4.352H219.68q-2.56 0-4.352-1.792t-1.792-4.352v-28.864q0-2.624 1.792-4.416t4.352-1.792h18.496q0 2.624-1.792 4.416t-4.352 1.792H219.68v9.792h6.208q2.56 0 4.352 1.792t1.792 4.416H219.68v12.864zm37.568-13.952q0-3.2-.896-6.08-.832-2.88-2.368-4.992-1.472-2.176-3.456-3.456t-4.224-1.28-4.224 1.28-3.52 3.456q-1.472 2.112-2.368 4.992t-.896 6.08zm1.536-15.296q2.304 3.072 3.52 7.04 1.28 3.904 1.28 8.256l-.064 13.824q0 2.624-1.856 4.48-1.792 1.792-4.416 1.792v-13.824h-21.952v13.824q-2.624 0-4.48-1.792-1.792-1.856-1.792-4.48v-13.824q0-4.352 1.216-8.256 1.216-3.968 3.52-7.04 2.496-3.328 5.696-5.056t6.848-1.728 6.848 1.728 5.632 5.056M292 312.46q3.008 0 5.632-1.152t4.608-3.072q1.984-1.984 3.072-4.608 1.152-2.688 1.152-5.696t-1.152-5.632q-1.088-2.624-3.072-4.608t-4.608-3.072q-2.624-1.152-5.632-1.152h-4.032v28.992zm0-35.2q4.288 0 8 1.664 3.776 1.6 6.592 4.416t4.416 6.592q1.664 3.712 1.664 8t-1.664 8.064q-1.6 3.712-4.416 6.528t-6.592 4.48q-3.712 1.6-8 1.6h-4.032q-2.56 0-4.352-1.792t-1.792-4.352v-28.992q0-2.624 1.792-4.416t4.352-1.792zm55.296 12.992q0 2.56-.96 4.864-.896 2.24-2.56 4.096-1.664 1.792-3.968 3.072-2.24 1.216-4.928 1.664v8.448q0 2.56-1.792 4.352t-4.352 1.792v-14.656q-2.624-.512-4.864-1.728-2.176-1.28-3.84-3.072-1.6-1.792-2.56-4.032-.896-2.304-.896-4.8v-12.864q2.56 0 4.352 1.792t1.792 4.352v6.72q0 1.6.704 3.072.704 1.408 1.92 2.496 1.28 1.024 2.944 1.664 1.728.576 3.648.576t3.584-.576q1.728-.64 2.944-1.664 1.28-1.088 1.984-2.496.704-1.472.704-3.072v-6.72q0-2.56 1.792-4.352t4.352-1.792v6.144zm47.552-12.928q0 2.624-1.792 4.416t-4.416 1.792h-6.144v28.864q0 2.56-1.792 4.352t-4.352 1.792v-35.008h-6.208q-2.56 0-4.352-1.792T364 277.324h24.64zm18.623 42.304q-4.48 0-8.448-1.664-3.968-1.728-6.912-4.672t-4.672-6.912q-1.664-3.968-1.664-8.448t1.664-8.384q1.728-3.968 4.672-6.912t6.912-4.608q3.968-1.728 8.448-1.728t8.448 1.728q3.968 1.664 6.912 4.608t4.608 6.912q1.728 3.904 1.728 8.384t-1.728 8.448q-1.664 3.968-4.608 6.912t-6.912 4.672q-3.968 1.664-8.448 1.664m0-37.184q-3.2 0-6.016 1.216t-4.928 3.328-3.328 4.928-1.216 6.016 1.216 6.08q1.216 2.816 3.328 4.928t4.928 3.328 6.016 1.216 6.016-1.216 4.928-3.328 3.328-4.928q1.216-2.88 1.216-6.08t-1.216-6.016-3.328-4.928-4.928-3.328-6.016-1.216m47.104 7.872q0 1.664.576 3.072.64 1.408 1.664 2.496 1.088 1.024 2.496 1.664 1.472.576 3.072.576t3.008-.576q1.472-.64 2.56-1.664 1.088-1.088 1.664-2.496.64-1.472.64-3.072t-.64-3.008q-.576-1.472-1.664-2.496-1.088-1.088-2.56-1.664-1.408-.64-3.008-.64t-3.072.64q-1.408.576-2.496 1.664-1.024 1.024-1.664 2.496-.576 1.408-.576 3.008m17.472 22.08 4.352 4.352q-.896.896-2.048 1.344t-2.368.448q-1.152 0-2.304-.448-1.088-.448-1.984-1.344l-13.12-13.12v8.768q0 2.56-1.792 4.352t-4.352 1.792v-28.224q0-2.88 1.088-5.376 1.088-2.56 3.008-4.48t4.416-3.008q2.56-1.088 5.44-1.088t5.44 1.088 4.48 3.008 3.008 4.48q1.088 2.496 1.088 5.376 0 2.688-.96 5.12t-2.688 4.288q-1.664 1.856-3.968 3.072-2.24 1.152-4.864 1.408zm28.48 0q2.56 0 4.352 1.792t1.792 4.352h-18.496q-2.56 0-4.352-1.792t-1.792-4.352v-28.864q0-2.624 1.792-4.416t4.352-1.792h18.496q0 2.624-1.792 4.416t-4.352 1.792h-12.352v9.792h6.208q2.56 0 4.352 1.792t1.792 4.416h-12.352v12.864zm39.168-35.072q0 2.624-1.792 4.416t-4.416 1.792h-6.144v28.864q0 2.56-1.792 4.352t-4.352 1.792v-35.008h-6.208q-2.56 0-4.352-1.792t-1.792-4.416h24.64zm7.04 12.992q0 1.664.576 3.072.64 1.408 1.664 2.496 1.088 1.024 2.496 1.664 1.472.576 3.072.576t3.008-.576q1.472-.64 2.56-1.664 1.088-1.088 1.664-2.496.64-1.472.64-3.072t-.64-3.008q-.576-1.472-1.664-2.496-1.088-1.088-2.56-1.664-1.408-.64-3.008-.64t-3.072.64q-1.408.576-2.496 1.664-1.024 1.024-1.664 2.496-.576 1.408-.576 3.008m17.472 22.08 4.352 4.352q-.896.896-2.048 1.344t-2.368.4Line truncated

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

+36
View File
@@ -0,0 +1,36 @@
<?xml version="1.0"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="256" height="256">
<desc iVinci="yes" version="4.6" gridStep="20" showGrid="no" snapToGrid="no" codePlatform="0"/>
<g id="Layer1" name="Layer 1" opacity="1">
<g id="Shape1">
<desc shapeID="1" type="0" basicInfo-basicType="0" basicInfo-roundedRectRadius="12" basicInfo-polygonSides="6" basicInfo-starPoints="5" bounding="rect(-100,-68.4834,200,136.967)" text="" font-familyName="" font-pixelSize="20" font-bold="0" font-underline="0" font-alignment="1" strokeStyle="0" markerStart="0" markerEnd="0" shadowEnabled="0" shadowOffsetX="0" shadowOffsetY="2" shadowBlur="4" shadowOpacity="160" blurEnabled="0" blurRadius="4" transform="matrix(0.97865,0.000512411,-0.000512419,0.978665,127.968,189.029)" pers-center="0,0" pers-size="0,0" pers-start="0,0" pers-end="0,0" locked="0" mesh="" flag=""/>
<path id="shapePath1" d="M42.4218,126.285 C31.8374,138.147 30.1561,145.569 30.1211,180.592 L30.0933,207.544 L57.0444,207.544 C92.0585,207.546 99.4913,205.871 111.351,195.312 L115.663,191.473 L115.875,219.601 C116.075,246.152 116.172,247.872 117.614,250.268 C122.501,258.388 134.847,257.846 138.714,249.344 C140.016,246.481 140.14,243.872 140.169,218.818 L140.2,191.423 L144.543,195.298 C156.43,205.904 163.834,207.583 198.872,207.618 L225.823,207.646 L225.824,180.695 C225.825,145.671 224.152,138.248 213.58,126.374 L209.729,122.05 L205.287,125.079 C197.219,130.58 186.766,134.179 178.77,134.208 L175.641,134.22 L173.613,139.379 C157.212,181.089 98.7321,181.059 82.3753,139.332 L80.3521,134.17 L77.2234,134.155 C69.2279,134.117 58.7787,130.507 50.7166,124.998 L46.277,121.964 L42.4218,126.285 Z" style="stroke:none;fill-rule:evenodd;fill:#2ecc71;fill-opacity:1;"/>
</g>
<g id="Shape2">
<desc shapeID="2" type="0" basicInfo-basicType="1" basicInfo-roundedRectRadius="12" basicInfo-polygonSides="6" basicInfo-starPoints="5" bounding="rect(-83.0229,-25.7162,166.046,51.4324)" text="" font-familyName="Helvetica" font-pixelSize="20" font-bold="0" font-underline="0" font-alignment="1" strokeStyle="0" markerStart="0" markerEnd="0" shadowEnabled="0" shadowOffsetX="0" shadowOffsetY="2" shadowBlur="4" shadowOpacity="160" blurEnabled="0" blurRadius="4" transform="matrix(0.984273,0.000515356,-0.000585224,1.11771,127.988,150.75)" pers-center="0,0" pers-size="0,0" pers-start="0,0" pers-end="0,0" locked="0" mesh="" flag=""/>
<path id="shapePath2" d="M46.2859,121.964 L209.72,122.049 L209.69,179.536 L46.2558,179.451 L46.2859,121.964 Z" style="stroke:none;fill-rule:evenodd;fill:#2ecc71;fill-opacity:1;"/>
</g>
</g>
<g id="Layer2" name="Layer 4" opacity="1">
<g id="Shape3">
<desc shapeID="3" type="0" basicInfo-basicType="4" basicInfo-roundedRectRadius="12" basicInfo-polygonSides="6" basicInfo-starPoints="5" bounding="rect(-50.2318,-49.7682,100.464,99.5363)" text="" font-familyName="Helvetica" font-pixelSize="20" font-bold="0" font-underline="0" font-alignment="1" strokeStyle="0" markerStart="0" markerEnd="0" shadowEnabled="0" shadowOffsetX="0" shadowOffsetY="2" shadowBlur="4" shadowOpacity="160" blurEnabled="0" blurRadius="4" transform="matrix(0.974133,0.000510046,-0.000514806,0.983224,79.09,84.9615)" pers-center="0,0" pers-size="0,0" pers-start="0,0" pers-end="0,0" locked="0" mesh="" flag=""/>
<path id="shapePath3" d="M30.1575,84.9359 C30.1717,57.9108 52.091,36.0141 79.1156,36.0283 C106.14,36.0424 128.037,57.962 128.023,84.9871 C128.008,112.012 106.089,133.909 79.0644,133.895 C52.0397,133.881 30.1434,111.961 30.1575,84.9359 Z" style="stroke:none;fill-rule:evenodd;fill:#d35400;fill-opacity:1;"/>
</g>
</g>
<g id="Layer3" name="Layer 2" opacity="1">
<g id="Shape4">
<desc shapeID="4" type="0" basicInfo-basicType="4" basicInfo-roundedRectRadius="12" basicInfo-polygonSides="6" basicInfo-starPoints="5" bounding="rect(-48.9954,-49.7682,97.9908,99.5364)" text="" font-familyName="Helvetica" font-pixelSize="20" font-bold="0" font-underline="0" font-alignment="1" strokeStyle="0" markerStart="0" markerEnd="0" shadowEnabled="0" shadowOffsetX="0" shadowOffsetY="2" shadowBlur="4" shadowOpacity="160" blurEnabled="0" blurRadius="4" transform="matrix(0.998716,0.000522918,-0.000514806,0.983223,176.955,85.6138)" pers-center="0,0" pers-size="0,0" pers-start="0,0" pers-end="0,0" locked="0" mesh="" flag=""/>
<path id="shapePath4" d="M128.022,85.5882 C128.036,58.5631 149.956,36.6664 176.98,36.6806 C204.005,36.6947 225.901,58.6144 225.887,85.6394 C225.873,112.665 203.954,134.561 176.929,134.547 C149.904,134.533 128.008,112.613 128.022,85.5882 Z" style="stroke:none;fill-rule:evenodd;fill:#e67e22;fill-opacity:1;"/>
</g>
<g id="Shape5">
<desc shapeID="5" type="0" basicInfo-basicType="4" basicInfo-roundedRectRadius="12" basicInfo-polygonSides="6" basicInfo-starPoints="5" bounding="rect(-48.9954,-49.7682,97.9908,99.5364)" text="" font-familyName="Helvetica" font-pixelSize="20" font-bold="0" font-underline="0" font-alignment="1" strokeStyle="0" markerStart="0" markerEnd="0" shadowEnabled="0" shadowOffsetX="0" shadowOffsetY="2" shadowBlur="4" shadowOpacity="160" blurEnabled="0" blurRadius="4" transform="matrix(0.998716,0.000522918,-0.000514806,0.983223,128.003,121.592)" pers-center="0,0" pers-size="0,0" pers-start="0,0" pers-end="0,0" locked="0" mesh="" flag=""/>
<path id="shapePath5" d="M79.0707,121.567 C79.0849,94.5417 101.004,72.645 128.029,72.6592 C155.054,72.6733 176.95,94.593 176.936,121.618 C176.922,148.643 155.002,170.54 127.978,170.526 C100.953,170.512 79.0566,148.592 79.0707,121.567 Z" style="stroke:none;fill-rule:evenodd;fill:#e67e22;fill-opacity:1;"/>
</g>
</g>
<g id="Layer4" name="Layer 3" opacity="1">
<g id="Shape6">
<desc shapeID="6" type="0" basicInfo-basicType="4" basicInfo-roundedRectRadius="12" basicInfo-polygonSides="6" basicInfo-starPoints="5" bounding="rect(-50.2318,-49.7682,100.464,99.5363)" text="" font-familyName="Helvetica" font-pixelSize="20" font-bold="0" font-underline="0" font-alignment="1" strokeStyle="0" markerStart="0" markerEnd="0" shadowEnabled="0" shadowOffsetX="0" shadowOffsetY="2" shadowBlur="4" shadowOpacity="160" blurEnabled="0" blurRadius="4" transform="matrix(0.974133,0.000510046,-0.000514806,0.983224,128.041,48.9845)" pers-center="0,0" pers-size="0,0" pers-start="0,0" pers-end="0,0" locked="0" mesh="" flag=""/>
<path id="shapePath6" d="M79.1089,48.9588 C79.123,21.9338 101.042,0.0370636 128.067,0.0512276 C155.092,0.0653763 176.988,21.985 176.974,49.0101 C176.96,76.0352 155.04,97.9319 128.016,97.9177 C100.991,97.9036 79.0947,75.9839 79.1089,48.9588 Z" style="stroke:none;fill-rule:evenodd;fill:#f1c40f;fill-opacity:1;"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="0 0 451 543.11"><style>.st2{fill:#027fe1}.st4{fill:gray}</style><g id="Calque_1"><path d="M184.92 132.54c-16.32 0-29.76-13.26-29.76-29.76 0-16.44 13.32-29.7 29.76-29.7 16.32 0 29.7 13.26 29.7 29.7 0 16.5-13.26 29.76-29.7 29.76m0-47.22c-9.66 0-17.52 7.86-17.52 17.46 0 9.66 7.86 17.52 17.52 17.52 9.6 0 17.46-7.86 17.46-17.52 0-9.6-7.86-17.46-17.46-17.46" style="fill:red"/><path d="M284.28 134.4h-.84l-45.06-5.88c-1.68-.24-3.06-1.02-4.02-2.34-.96-1.26-1.38-2.94-1.2-4.44l5.88-45.12c.48-3.3 3.54-5.64 6.84-5.28L291 77.22c1.62.24 3.06 1.02 3.96 2.34.96 1.26 1.44 2.94 1.2 4.44l-5.88 45.12c-.36 3.06-2.94 5.28-6 5.28m-38.16-17.28L279 121.5l4.32-32.88-32.88-4.38z" style="fill:#ff5ddc"/><path d="M185.7 58.26c-.42 0-.78 0-1.26-.12-3.3-.66-5.4-3.84-4.68-7.14l9.6-46.14c.72-3.3 3.9-5.4 7.2-4.74 3.24.72 5.4 3.9 4.68 7.2l-9.66 46.14c-.42 2.82-3.06 4.8-5.88 4.8" class="st2"/><path d="M185.7 58.26c-.42 0-.78 0-1.26-.12-3.3-.66-5.4-3.84-4.68-7.14l9.6-46.14c.72-3.3 3.9-5.4 7.2-4.74 3.24.72 5.4 3.9 4.68 7.2l-9.66 46.14c-.42 2.82-3.06 4.8-5.88 4.8" class="st2"/><path d="M213.66 39.96c-.42 0-.78 0-1.26-.12l-46.2-9.66c-3.24-.66-5.4-3.84-4.68-7.14s3.9-5.4 7.2-4.68l46.14 9.6c3.3.72 5.4 3.9 4.68 7.2-.54 2.82-3.06 4.8-5.88 4.8" class="st2"/><path d="M245.4 55.02c-1.5 0-2.94-.6-4.02-1.56-1.62-1.38-2.34-3.66-1.86-5.76l8.34-39.72c.48-2.1 1.98-3.84 4.02-4.44 1.98-.72 4.32-.24 6 1.2L288.3 31.5a5.96 5.96 0 0 1 1.86 5.76c-.48 2.1-1.98 3.9-4.02 4.56l-38.76 12.84c-.78.24-1.38.36-1.98.36m12.12-34.32-4.02 19.14 18.66-6.24z" style="fill:#8aee49"/><path d="M97 442.11h12v6H97zm110 13h13v6h-13zm80-13h12v19h-12zm55 0h12v19h-12z" class="st4"/><path d="m447.86 361.62-38.08-131.46c-1.74-6.24-8.5-11.04-14.98-11.04h-22.56c.9 3 1.75 6.01 2.52 9.25 1.04 4.38 1.71 7.75 2.19 13.75h.27c6.42 0 13.26 5.1 15 11.27l24.6 84.6c1.74 6.24-2.16 11.28-8.58 11.28l-364.98-.48c-6.48 0-10.38-5.04-8.46-11.28l24.18-84.11c1.74-6.18 8.58-11.28 15.06-11.28h.25c.41-4 1.07-7.32 2.09-11.95.84-3.82 1.81-8.05 2.89-11.05H56.28c-6.48 0-13.14 4.8-15.06 11.04L3.42 361.02C1.62 367.26 0 377.46 0 383.94v147.78c0 6.42 5.52 11.39 12 11.39h427.56c6.48 0 11.44-4.97 11.44-11.39V384.6c0-6.42-1.34-16.8-3.14-22.98M73 442.11H42v25H24v-31h49zm55 12H97v7h31v6H79v-31h49zm55-12h-31v19h31v6h-49v-31h49zm55 25h-49v-18h31v-7h-31v-6h49zm24 0h-18v-55h18zm56 0h-49v-55h18v24h31zm55 0h-49v-31h49zm55-25h-6v6h-7v7h7v6h6v6h-19v-6h-12v6h-18v-6h6v-6h6v-7h-6v-6h-6v-6h18v6h12v-6h19z" class="st4"/><path d="M373.32 266.58c-.48-21.96-1.02-28.92-3.06-37.38-6.9-28.92-18.54-51.12-36.06-68.46-23.34-23.28-51.18-25.38-84.54-6.36l-9.3 5.28s-30.66-.36-33.24-2.22c-1.8-1.2-6.84-4.02-11.28-6.24-22.68-11.28-43.02-12.54-60.96-3.78-24.24 11.88-45.48 44.64-54.3 83.52-2.46 11.16-2.7 14.7-2.58 43.26.12 32.04.72 37.44 5.4 46.74 4.26 8.58 10.68 14.22 20.22 18 15.36 6 41.22-10.5 62.46-39.96l7.2-9.84h104.64l7.2 9.84c16.8 23.28 40.5 41.46 54 41.46 11.16 0 23.04-8.22 28.8-20.22 5.04-10.32 6.24-21.48 5.4-53.64M186.9 224.52h-15.84v15.84c0 4.92-4.14 9.06-9.06 9.06s-9.06-4.14-9.06-9.06v-15.84H137.1c-4.92 0-9.06-4.14-9.06-9.06s4.14-9.06 9.06-9.06h15.84v-15.84c0-4.92 4.14-9.06 9.06-9.06s9.06 4.14 9.06 9.06v15.84h15.84c4.92 0 9.06 4.14 9.06 9.06-.12 5.04-4.14 9.06-9.06 9.06m116.76-49.56c7.62 0 13.86 6.18 13.86 13.86 0 7.62-6.24 13.86-13.86 13.86s-13.86-6.24-13.86-13.86c.12-7.68 6.24-13.86 13.86-13.86m-45 26.76c0-7.62 6.24-13.86 13.86-13.86 7.68 0 13.86 6.24 13.86 13.86s-6.18 13.86-13.86 13.86c-7.62 0-13.86-6.24-13.86-13.86m28.8 46.86c-7.62 0-13.86-6.24-13.86-13.86s6.24-13.86 13.86-13.86 13.86 6.24 13.86 13.86-6.24 13.86-13.86 13.86m29.16-13.86c-7.68 0-13.92-6.24-13.92-13.86S308.94 207 316.62 207c7.62 0 13.86 6.24 13.86 13.86 0 7.74-6.24 13.86-13.86 13.86" class="st4"/></g></svg>

After

Width:  |  Height:  |  Size: 3.7 KiB

+12
View File
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 48 48">
<!-- Generator: Adobe Illustrator 29.0.1, SVG Export Plug-In . SVG Version: 2.1.0 Build 192) -->
<defs>
<style>
.st0 {
fill: #2f2f2f;
}
</style>
</defs>
<path id="Invader" class="st0" d="M15.2214499,30.6589508l1.8361292-2.0981903-2.6117897-.00597c-1.4364796-.0032806-2.6114798-.0085793-2.6111097-.0117493.0002804-.00317.1577702-.6325893.3497696-1.3986893l.3491001-1.3929195h-5.60711l.9638901-3.8554993.9638901-3.8554993h2.0806599l-.5253801,2.0981903c-.2889605,1.1540108-.5256901,2.1008396-.5260696,2.1040707-.0002804.0032196.7925396.0058899,1.7620497.0058899h1.7627401l.0164003-.0646496c.0090303-.0355606.2452698-.9797401.5249901-2.0981903l.5085897-2.0335407,5.0112696-.0235004-1.0804691-1.32827c-.5942593-.7305498-1.1016502-1.3573599-1.1275406-1.3929195l-.0470695-.0646496h2.0714703l1.22439,1.3987999,1.22439,1.3987999h4.5306797l1.22439-1.3987999,1.22439-1.3987999h2.0714703l-.0470695.0646496c-.0258808.0355597-.5332794.6623697-1.1275406,1.3929195l-1.0804691,1.32827,5.0112686.0235004.5085907,2.0335407c.2797203,1.1184502.5159683,2.0626392.5249901,2.0981903l.0163994.0646496h1.7627411c.9695091,0,1.7624283-.0025196,1.7620506-.0058899-.0002785-.0032196-.2371101-.9500599-.5260696-2.1040707l-.5253792-2.0981903h2.0806618l.9638901,3.8554993.9638901,3.8554993h-5.6071091l.3490982,1.3929195c.1920013.7660999.3493996,1.3955193.3497696,1.3986893.0002785.00317-1.1746292.0084705-2.6111107.0117493l-2.6117802.00597,1.8361301,2.0981903,1.8361397,2.0981903-3.185791-.0028-1.7044106-2.1022892-1.7044201-2.1022892h-8.0401287l-1.7044201,2.1022892-1.7044106,2.1022892-3.1857901.0028,1.8361588-2.0981903ZM19.9799404,21.8959103v-1.7514305h-3.5263691l-.0060806,1.7279205c-.0033398.9503593-.0011196,1.7412205.0051899,1.7574596.0089397.0234108.37533.0282898,1.7692699.0235004l1.7579899-.0060291v-1.751421ZM31.5464401,20.1444798l-3.5146198-.0120602v3.5269699l3.5146198-.0120602v-3.5028496Z"/>
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

+53
View File
@@ -0,0 +1,53 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="100%"
height="100%"
viewBox="0 0 1067 1067"
version="1.1"
xml:space="preserve"
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"
id="svg2"
sodipodi:docname="rd-stable-icon.svg"
inkscape:version="1.4.4 (dcaf3e7d9e, 2026-05-05)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
id="namedview2"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:zoom="1.7469541"
inkscape:cx="533.78621"
inkscape:cy="533.5"
inkscape:window-width="3840"
inkscape:window-height="2082"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg2" /><g
id="g1"><path
d="M1066.66,266.666c-0,-147.176 -119.49,-266.666 -266.666,-266.666l-533.333,-0c-147.176,-0 -266.666,119.49 -266.666,266.666l-0,533.333c-0,147.176 119.49,266.666 266.666,266.666l533.333,-0c147.176,-0 266.666,-119.49 266.666,-266.666l-0,-533.333Z"
style="fill:#000000"
id="path1" /></g><g
id="g2"><g
id="D"><path
d="M847.457,876.335c-18.448,18.448 -38.862,32.56 -61.237,42.335c-22.369,9.775 -46.705,14.662 -73.001,14.662l-430.192,0l-0,-110.487l430.192,-0c9.775,-0 18.965,-1.825 27.569,-5.473c8.605,-3.649 16.107,-8.673 22.512,-15.078c6.399,-6.399 11.429,-13.907 15.077,-22.511c3.649,-8.605 5.473,-17.794 5.473,-27.57l0,-437.756c0,-9.088 -2,-17.863 -5.99,-26.331c-3.995,-8.468 -9.263,-15.97 -15.799,-22.511c-6.542,-6.541 -14.043,-11.81 -22.512,-15.799c-8.468,-3.996 -17.248,-5.991 -26.33,-5.991l-430.192,0l-0,-110.487l430.192,-0c13.077,-0 25.779,1.375 38.1,4.126c12.322,2.756 24.166,6.643 35.521,11.673c11.36,5.024 22.136,11.048 32.326,18.067c10.184,7.024 19.618,14.731 28.291,23.131c18.039,17.487 32.048,37.623 42.028,60.407c9.979,22.79 14.975,47.398 14.975,73.836l-0,417.514c-0,26.438 -4.888,50.808 -14.663,73.109c-9.781,22.306 -23.892,42.681 -42.34,61.134Z"
style="fill:#fff;fill-rule:nonzero;"
id="path2" /></g><use
xlink:href="#_Image1"
x="159.95"
y="366.372"
width="441px"
height="334px"
id="use2" /></g><defs
id="defs2"><image
id="_Image1"
width="441px"
height="334px"
xlink:href="data:image/png;base64,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 truncated

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

+124
View File
@@ -0,0 +1,124 @@
{
"note": "Each platform's own logo, owned by its project and shown only to name that platform. Copied once by scripts/fetch_site_images.py.",
"images": [
{
"file": "amberelec.png",
"platform": "amberelec",
"source": "https://avatars.githubusercontent.com/u/102820909",
"owner": "AmberELEC",
"licence": "GitHub organisation avatar of AmberELEC"
},
{
"file": "batocera.svg",
"platform": "batocera",
"source": "https://raw.githubusercontent.com/batocera-linux/batocera-emulationstation/master/resources/splash_batocera.svg",
"owner": "Batocera",
"licence": "repository licence MIT"
},
{
"file": "bizhawk.png",
"platform": "bizhawk",
"source": "https://avatars.githubusercontent.com/u/11743303",
"owner": "TASVideos",
"licence": "GitHub organisation avatar of TASEmulators"
},
{
"file": "emudeck.png",
"platform": "emudeck",
"source": "https://raw.githubusercontent.com/dragoonDorise/EmuDeck/main/icons/EmuDeck.png",
"owner": "EmuDeck",
"licence": "repository licence GPL-3.0"
},
{
"file": "emuelec.png",
"platform": "emuelec",
"source": "https://avatars.githubusercontent.com/u/57574835",
"owner": "EmuELEC",
"licence": "GitHub organisation avatar of EmuELEC"
},
{
"file": "knulli.png",
"platform": "knulli",
"source": "https://avatars.githubusercontent.com/u/166268572",
"owner": "KNULLI",
"licence": "GitHub organisation avatar of knulli-cfw"
},
{
"file": "lakka.svg",
"platform": "lakka",
"source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/src/xmb/flatui/lakka.svg",
"owner": "Lakka (libretro)",
"licence": "file from libretro/retroarch-assets, CC-BY-4.0"
},
{
"file": "minui.png",
"platform": "minui",
"source": "https://avatars.githubusercontent.com/u/225589",
"owner": "Shaun Inman",
"licence": "GitHub avatar of shauninman, the author of MinUI"
},
{
"file": "misterfpga.png",
"platform": "misterfpga",
"source": "https://avatars.githubusercontent.com/u/29345272",
"owner": "MiSTer FPGA",
"licence": "GitHub organisation avatar of MiSTer-devel"
},
{
"file": "nextui.png",
"platform": "nextui",
"source": "https://avatars.githubusercontent.com/u/202386615",
"owner": "LoveRetro",
"licence": "GitHub organisation avatar of LoveRetro"
},
{
"file": "recalbox.svg",
"platform": "recalbox",
"source": "https://raw.githubusercontent.com/homarr-labs/dashboard-icons/main/svg/recalbox.svg",
"owner": "Recalbox",
"licence": "file from homarr-labs/dashboard-icons, Apache-2.0"
},
{
"file": "retroarch.svg",
"platform": "retroarch",
"source": "https://raw.githubusercontent.com/libretro/RetroArch/master/media/retroarch-vector_invader-only.svg",
"owner": "libretro",
"licence": "repository licence GPL-3.0"
},
{
"file": "retrobat.png",
"platform": "retrobat",
"source": "https://raw.githubusercontent.com/RetroBat-Official/retrobat/main/system/resources/retrobat_logo_notext.png",
"owner": "RetroBat",
"licence": "repository states no licence"
},
{
"file": "retrodeck.svg",
"platform": "retrodeck",
"source": "https://raw.githubusercontent.com/RetroDECK/RetroDECK/main/res/icon.svg",
"owner": "RetroDECK",
"licence": "repository licence GPL-3.0"
},
{
"file": "retropie.png",
"platform": "retropie",
"source": "https://avatars.githubusercontent.com/u/11378204",
"owner": "RetroPie",
"licence": "GitHub organisation avatar of RetroPie"
},
{
"file": "rocknix.png",
"platform": "rocknix",
"source": "https://avatars.githubusercontent.com/u/163176886",
"owner": "ROCKNIX",
"licence": "GitHub organisation avatar of ROCKNIX"
},
{
"file": "romm.png",
"platform": "romm",
"source": "https://avatars.githubusercontent.com/u/164058018",
"owner": "RomM",
"licence": "GitHub organisation avatar of rommapp"
}
]
}