Proyecto App Linux

This commit is contained in:
2026-05-03 23:43:09 +02:00
commit 7482733843
1248 changed files with 189750 additions and 0 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 365 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 536 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

@@ -0,0 +1,95 @@
<svg xmlns="http://www.w3.org/2000/svg" width="600" height="600" viewBox="0 0 600 600" role="img" aria-label="Blog corner playlist signal mark">
<defs>
<linearGradient id="tealStroke" x1="360" y1="120" x2="600" y2="420" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#20a8a8" stop-opacity="0.78"/>
<stop offset="1" stop-color="#20a8a8" stop-opacity="0.16"/>
</linearGradient>
<linearGradient id="neutralStroke" x1="340" y1="140" x2="600" y2="460" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#c7ced2" stop-opacity="0.14"/>
<stop offset="1" stop-color="#3c474a" stop-opacity="0.18"/>
</linearGradient>
<filter id="microGlow" x="-40%" y="-40%" width="180%" height="180%" color-interpolation-filters="sRGB">
<feGaussianBlur in="SourceGraphic" stdDeviation="1.25" result="b"/>
<feMerge>
<feMergeNode in="b"/>
<feMergeNode in="SourceGraphic"/>
</feMerge>
</filter>
</defs>
<!-- Weighted to top-right; airy; rotates well -->
<g id="layer-motif" filter="url(#microGlow)" fill="none" stroke-linecap="round" stroke-linejoin="round">
<!-- Hint of a "player/playlist card" (no UI text, just geometry) -->
<g id="playlist-card">
<path d="M410 128
C402 128, 396 134, 396 142
L396 242
C396 250, 402 256, 410 256
L544 256
C552 256, 558 250, 558 242
L558 142
C558 134, 552 128, 544 128
Z"
stroke="url(#neutralStroke)" stroke-width="2.2" stroke-opacity="0.7"/>
<!-- Minimal "list rows" (very low contrast) -->
<path d="M422 166 H534" stroke="#c7ced2" stroke-opacity="0.10" stroke-width="2"/>
<path d="M422 192 H514" stroke="#c7ced2" stroke-opacity="0.08" stroke-width="2"/>
<path d="M422 218 H528" stroke="#c7ced2" stroke-opacity="0.09" stroke-width="2"/>
<!-- A small play-indicator wedge, abstract -->
<path d="M416 156 L416 176 L432 166 Z"
stroke="#20a8a8" stroke-opacity="0.00" fill="#20a8a8" fill-opacity="0.12"/>
</g>
<!-- "Antenna pin" (more like a signal marker than a tower) -->
<g id="signal-pin">
<path d="M520 270 L520 318" stroke="url(#tealStroke)" stroke-width="3" stroke-opacity="0.45"/>
<circle cx="520" cy="258" r="6" fill="#20a8a8" fill-opacity="0.26"/>
<path d="M505 328 L520 318 L535 328" stroke="#3c474a" stroke-opacity="0.30" stroke-width="5"/>
<path d="M505 328 L520 318 L535 328" stroke="#20a8a8" stroke-opacity="0.12" stroke-width="2"/>
</g>
<!-- Signal sweep arcs (corner-friendly) -->
<g id="signal-sweep">
<path d="M470 86
C545 120, 590 190, 598 278"
stroke="url(#tealStroke)" stroke-width="2.6" stroke-opacity="0.34"/>
<path d="M492 112
C548 140, 580 196, 586 266"
stroke="#c7ced2" stroke-width="2" stroke-opacity="0.10"/>
<path d="M448 64
C545 106, 600 196, 608 312"
stroke="#20a8a8" stroke-width="2" stroke-opacity="0.16"/>
</g>
<!-- One thin connector line (ties card → pin) -->
<g id="connector">
<path d="M468 252 C480 270, 495 288, 520 318"
stroke="#3c474a" stroke-opacity="0.28" stroke-width="2"/>
<path d="M468 252 C480 270, 495 288, 520 318"
stroke="#20a8a8" stroke-opacity="0.09" stroke-width="1"/>
</g>
<!-- Sparse “stars” / points -->
<g id="points" fill="none">
<circle cx="576" cy="110" r="2.1" fill="#20a8a8" fill-opacity="0.18"/>
<circle cx="548" cy="70" r="1.6" fill="#c7ced2" fill-opacity="0.10"/>
<circle cx="592" cy="170" r="1.7" fill="#c7ced2" fill-opacity="0.09"/>
<circle cx="560" cy="236" r="1.8" fill="#20a8a8" fill-opacity="0.13"/>
<circle cx="430" cy="286" r="1.6" fill="#c7ced2" fill-opacity="0.08"/>
<!-- Tiny diamond point -->
<path d="M548 312 l6 6 l-6 6 l-6-6 Z" fill="#20a8a8" fill-opacity="0.08"/>
</g>
<!-- Subtle corner framing stroke (very airy, helps “corner” feel) -->
<g id="corner-frame">
<path d="M600 88 C560 92, 540 104, 520 132" stroke="#3c474a" stroke-opacity="0.16" stroke-width="2"/>
<path d="M600 120 C566 124, 546 136, 532 156" stroke="#20a8a8" stroke-opacity="0.08" stroke-width="2"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.3 KiB

@@ -0,0 +1,50 @@
<svg xmlns="http://www.w3.org/2000/svg" width="400" height="120" viewBox="0 0 400 120" role="img" aria-label="Footer broadcast pattern strip light (tileable)">
<defs>
<filter id="microGlow" x="-40%" y="-40%" width="180%" height="180%" color-interpolation-filters="sRGB">
<feGaussianBlur in="SourceGraphic" stdDeviation="0.8" result="b"/>
<feMerge>
<feMergeNode in="b"/>
<feMergeNode in="SourceGraphic"/>
</feMerge>
</filter>
</defs>
<!-- Very minimal rails -->
<g id="layer-rails" fill="none" stroke-linecap="round">
<path d="M0 24 H400" stroke="#3c474a" stroke-opacity="0.14" stroke-width="1"/>
<path d="M0 96 H400" stroke="#3c474a" stroke-opacity="0.12" stroke-width="1"/>
</g>
<!-- Few ticks -->
<g id="layer-ticks" fill="none" stroke-linecap="round">
<g stroke="#c7ced2" stroke-opacity="0.07" stroke-width="1">
<path d="M0 24 V32"/><path d="M80 24 V32"/><path d="M160 24 V32"/><path d="M240 24 V32"/><path d="M320 24 V32"/><path d="M400 24 V32"/>
<path d="M40 96 V88"/><path d="M200 96 V88"/><path d="M360 96 V88"/>
</g>
<!-- Single tiny wave notch -->
<path d="M170 62 c8 -6 16 -6 24 0 c8 6 16 6 24 0"
stroke="#20a8a8" stroke-opacity="0.07" stroke-width="1.5" fill="none" filter="url(#microGlow)"/>
</g>
<!-- One small dial hint -->
<g id="layer-dial" fill="none" stroke-linecap="round" stroke-linejoin="round" filter="url(#microGlow)">
<g transform="translate(340 60)">
<circle cx="0" cy="0" r="9" stroke="#3c474a" stroke-opacity="0.16" stroke-width="1.2"/>
<path d="M0 -9 V-12" stroke="#c7ced2" stroke-opacity="0.07" stroke-width="1"/>
<circle cx="0" cy="0" r="2" fill="#20a8a8" fill-opacity="0.07"/>
</g>
</g>
<!-- Short dashed connector -->
<g id="layer-connector" fill="none" stroke-linecap="round">
<path d="M70 60 H130" stroke="#c7ced2" stroke-opacity="0.06" stroke-width="1" stroke-dasharray="3 7"/>
</g>
<!-- Sparse dots -->
<g id="layer-dots">
<circle cx="220" cy="24" r="1.0" fill="#20a8a8" fill-opacity="0.06"/>
<circle cx="120" cy="96" r="1.0" fill="#c7ced2" fill-opacity="0.05"/>
<circle cx="280" cy="78" r="0.9" fill="#3c474a" fill-opacity="0.12"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

@@ -0,0 +1,158 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1920" height="800" viewBox="0 0 1920 800" role="img" aria-label="Ambient broadcast waves background motif">
<defs>
<!-- Core palette -->
<linearGradient id="tealFade" x1="1400" y1="80" x2="780" y2="720" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#20a8a8" stop-opacity="0.22"/>
<stop offset="0.55" stop-color="#20a8a8" stop-opacity="0.07"/>
<stop offset="1" stop-color="#20a8a8" stop-opacity="0"/>
</linearGradient>
<radialGradient id="ringFade" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse"
gradientTransform="translate(1535 400) rotate(90) scale(420 740)">
<stop offset="0" stop-color="#20a8a8" stop-opacity="0.10"/>
<stop offset="0.6" stop-color="#20a8a8" stop-opacity="0.04"/>
<stop offset="1" stop-color="#20a8a8" stop-opacity="0"/>
</radialGradient>
<linearGradient id="scanFade" x1="0" y1="0" x2="0" y2="800" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#c7ced2" stop-opacity="0.00"/>
<stop offset="0.45" stop-color="#c7ced2" stop-opacity="0.06"/>
<stop offset="1" stop-color="#c7ced2" stop-opacity="0.00"/>
</linearGradient>
<!-- Subtle glow (kept restrained for 5–20% overall opacity usage) -->
<filter id="softGlow" x="-30%" y="-30%" width="160%" height="160%" color-interpolation-filters="sRGB">
<feGaussianBlur in="SourceGraphic" stdDeviation="2.2" result="blur"/>
<feColorMatrix in="blur" type="matrix"
values="1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 0.55 0" result="glow"/>
<feMerge>
<feMergeNode in="glow"/>
<feMergeNode in="SourceGraphic"/>
</feMerge>
</filter>
<filter id="microGlow" x="-40%" y="-40%" width="180%" height="180%" color-interpolation-filters="sRGB">
<feGaussianBlur in="SourceGraphic" stdDeviation="1.1" result="b"/>
<feMerge>
<feMergeNode in="b"/>
<feMergeNode in="SourceGraphic"/>
</feMerge>
</filter>
</defs>
<!-- Transparent background: no rect fill -->
<!-- Layer: scanline bands (subtle, keeps text readability) -->
<g id="layer-scanlines" opacity="0.55">
<!-- Wide soft bands -->
<path d="M0 158H1920v38H0z" fill="url(#scanFade)" opacity="0.22"/>
<path d="M0 298H1920v26H0z" fill="url(#scanFade)" opacity="0.16"/>
<path d="M0 460H1920v30H0z" fill="url(#scanFade)" opacity="0.14"/>
<path d="M0 610H1920v42H0z" fill="url(#scanFade)" opacity="0.18"/>
<!-- Thin scanline-inspired hairlines -->
<g opacity="0.16" fill="#c7ced2">
<rect x="0" y="214" width="1920" height="1"/>
<rect x="0" y="238" width="1920" height="1"/>
<rect x="0" y="512" width="1920" height="1"/>
<rect x="0" y="536" width="1920" height="1"/>
<rect x="0" y="684" width="1920" height="1"/>
</g>
</g>
<!-- Layer: broadcast wave arcs (asymmetric weight on right) -->
<g id="layer-waves" filter="url(#softGlow)">
<g fill="none" stroke="url(#tealFade)" stroke-linecap="round" stroke-linejoin="round">
<!-- Primary sweeping arcs -->
<path d="M1040 120
C1320 90, 1560 150, 1750 280
C1900 382, 1940 520, 1815 640
C1690 760, 1450 780, 1240 710"
stroke-width="2.2" opacity="0.62"/>
<path d="M980 170
C1250 130, 1500 190, 1700 318
C1860 420, 1895 540, 1782 642
C1668 745, 1450 760, 1260 704"
stroke-width="1.6" opacity="0.48"/>
<path d="M1140 70
C1440 35, 1720 120, 1890 290
C2020 420, 1990 585, 1840 690
C1690 796, 1405 805, 1185 710"
stroke-width="1.2" opacity="0.34"/>
<!-- Secondary inner arcs for layered depth -->
<path d="M1245 235
C1440 205, 1605 255, 1730 350
C1830 426, 1850 520, 1770 595
C1690 670, 1520 682, 1375 630"
stroke-width="1.4" opacity="0.42"/>
<path d="M1315 300
C1490 280, 1625 330, 1715 402
C1795 466, 1800 532, 1735 585
C1670 638, 1535 640, 1425 604"
stroke-width="1.1" opacity="0.30"/>
</g>
<!-- Low-contrast charcoal support curve (adds CRT geometry without stealing focus) -->
<path id="support-curve"
d="M720 690
C980 610, 1180 560, 1400 520
C1560 492, 1730 480, 1920 490"
fill="none" stroke="#0c1114" stroke-opacity="0.35" stroke-width="2" stroke-linecap="round"/>
</g>
<!-- Layer: radial rings (right side, very restrained) -->
<g id="layer-rings" opacity="0.9">
<g fill="none" stroke="url(#ringFade)" stroke-width="1.2" filter="url(#microGlow)">
<circle cx="1535" cy="400" r="118" opacity="0.36"/>
<circle cx="1535" cy="400" r="178" opacity="0.26"/>
<circle cx="1535" cy="400" r="248" opacity="0.18"/>
<circle cx="1535" cy="400" r="320" opacity="0.12"/>
</g>
<!-- Offset subtle ring cluster for asymmetry -->
<g fill="none" stroke="#20a8a8" stroke-opacity="0.10" stroke-width="1" filter="url(#microGlow)">
<ellipse cx="1705" cy="290" rx="92" ry="62" opacity="0.35"/>
<ellipse cx="1705" cy="290" rx="140" ry="96" opacity="0.22"/>
</g>
</g>
<!-- Layer: nodes & dots (kept sparse) -->
<g id="layer-nodes" filter="url(#microGlow)">
<!-- Main node cluster -->
<g>
<circle cx="1688" cy="402" r="3.2" fill="#20a8a8" fill-opacity="0.38"/>
<circle cx="1622" cy="520" r="2.6" fill="#20a8a8" fill-opacity="0.28"/>
<circle cx="1748" cy="312" r="2.4" fill="#20a8a8" fill-opacity="0.24"/>
<circle cx="1586" cy="350" r="1.9" fill="#c7ced2" fill-opacity="0.18"/>
<circle cx="1765" cy="520" r="1.8" fill="#c7ced2" fill-opacity="0.14"/>
</g>
<!-- A few distant dots to balance without clutter -->
<g opacity="0.55">
<circle cx="1140" cy="250" r="1.6" fill="#20a8a8" fill-opacity="0.16"/>
<circle cx="980" cy="560" r="1.5" fill="#c7ced2" fill-opacity="0.10"/>
<circle cx="860" cy="340" r="1.4" fill="#20a8a8" fill-opacity="0.12"/>
</g>
<!-- Thin connector hints (barely there) -->
<g fill="none" stroke="#20a8a8" stroke-opacity="0.10" stroke-width="1" stroke-linecap="round">
<path d="M1688 402 L1622 520" opacity="0.35"/>
<path d="M1688 402 L1748 312" opacity="0.25"/>
<path d="M1622 520 L1765 520" opacity="0.18"/>
</g>
</g>
<!-- Layer: left-side negative-space soft vignette (improves text readability) -->
<g id="layer-negative-space">
<linearGradient id="leftVignette" x1="0" y1="0" x2="700" y2="0" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#0b0f12" stop-opacity="0.26"/>
<stop offset="0.75" stop-color="#0b0f12" stop-opacity="0.10"/>
<stop offset="1" stop-color="#0b0f12" stop-opacity="0"/>
</linearGradient>
<rect x="0" y="0" width="760" height="800" fill="url(#leftVignette)"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.9 KiB

@@ -0,0 +1,56 @@
<svg width="800" height="800" viewBox="0 0 800 800" fill="none" xmlns="http://www.w3.org/2000/svg">
<title>support-open-source-signal-isometric</title>
<desc>Isometric architectural core representing the structural support of open-source software.</desc>
<!-- Central Isometric Core (The Engine) -->
<g id="isometric-core" transform="translate(400, 420)">
<!-- Bottom Plate -->
<path d="M-120 0 L0 60 L120 0 L0 -60 Z" fill="#1a1f21" stroke="#3c474a" stroke-width="2" />
<!-- Vertical Pillars (Structure) -->
<g stroke="#3c474a" stroke-width="2" stroke-linecap="round">
<path d="M-80 -20 V-100" />
<path d="M80 -20 V-100" />
<path d="M0 20 V-60" />
</g>
<!-- The Floating Heart-Core (The Pulse) -->
<g id="core-pulse" transform="translate(0, -90)">
<!-- Isometric Cube/Diamond Representation -->
<path d="M-40 0 L0 20 L40 0 L0 -20 Z" fill="#20a8a8" fill-opacity="0.2" stroke="#20a8a8" stroke-width="3">
<animate attributeName="fill-opacity" values="0.2;0.5;0.2" dur="3s" repeatCount="indefinite" />
</path>
<path d="M-40 0 V30 L0 50 V20 Z" fill="#20a8a8" fill-opacity="0.1" stroke="#20a8a8" stroke-width="2" />
<path d="M40 0 V30 L0 50 V20 Z" fill="#20a8a8" fill-opacity="0.05" stroke="#20a8a8" stroke-width="2" />
<!-- Internal Heart Motif (Simplified for Isometric) -->
<path d="M-10 -5 Q0 -15 10 -5 L0 10 Z" fill="#4fd1d1" opacity="0.8">
<animate attributeName="opacity" values="0.8;0.3;0.8" dur="1.5s" repeatCount="indefinite" />
</path>
</g>
<!-- Converging "Support" Streams -->
<g id="data-streams" stroke="#20a8a8" stroke-width="1.5" opacity="0.4">
<path d="M-200 -100 L-100 -50" stroke-dasharray="4 8" />
<path d="M200 -100 L100 -50" stroke-dasharray="4 8" />
<path d="M-150 100 L-80 50" />
<path d="M150 100 L80 50" />
<!-- Stream End Nodes -->
<circle cx="-100" cy="-50" r="3" fill="#20a8a8" />
<circle cx="100" cy="-50" r="3" fill="#20a8a8" />
</g>
</g>
<!-- Framing Elements -->
<g id="frames" stroke="#3c474a" stroke-width="1" opacity="0.2">
<circle cx="400" cy="400" r="280" />
<path d="M200 200 L150 150 M600 200 L650 150 M200 600 L150 650 M600 600 L650 650" />
</g>
<!-- Accent Highlights -->
<circle cx="400" cy="330" r="4" fill="#4fd1d1" opacity="0.6">
<animate attributeName="r" values="4;6;4" dur="3s" repeatCount="indefinite" />
</circle>
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 35 KiB

+26
View File
@@ -0,0 +1,26 @@
# IPTVnator
> IPTVnator is an open-source cross-platform IPTV player (desktop + web) that supports M3U/M3U8 playlists, Xtream Codes API, Stalker portals, and XMLTV EPG.
## Canonical URLs
- Website: https://4gray.github.io/iptvnator/
- Blog: https://4gray.github.io/iptvnator/blog/
- Latest Release: https://github.com/4gray/iptvnator/releases/latest
- Release Notes (v0.18): https://4gray.github.io/iptvnator/blog/v0-18-release-notes/
- Troubleshooting (macOS app damaged fix): https://4gray.github.io/iptvnator/blog/macos-arm-app-damaged-fix/
- Source Code: https://github.com/4gray/iptvnator
- Telegram: https://t.me/iptvnator
- GitHub Sponsors: https://github.com/sponsors/4gray
- Ko-fi: https://ko-fi.com/4gray
## Product Scope
- IPTVnator is a media player application.
- It does not provide, host, or sell playlists, channels, or media content.
- Any channel names or metadata shown in screenshots/posts are demo examples only.
## Machine-readable Discovery
- Sitemap: https://4gray.github.io/iptvnator/sitemap-index.xml
- Robots: https://4gray.github.io/iptvnator/robots.txt
Binary file not shown.

After

Width:  |  Height:  |  Size: 743 KiB

+4
View File
@@ -0,0 +1,4 @@
User-agent: *
Allow: /
Sitemap: https://4gray.github.io/iptvnator/sitemap-index.xml