mirror of
https://github.com/screentinker/screentinker.git
synced 2026-08-16 23:33:10 -06:00
Merge branch 'swiftdisplay1' of https://github.com/xadyz1/screentinker into swiftdisplay1
This commit is contained in:
commit
c3bebc06b7
|
|
@ -6,36 +6,36 @@
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
<!-- Primary SEO -->
|
<!-- Primary SEO -->
|
||||||
<title>Open-Source Digital Signage CMS — Self-Hosted & Free | ScreenTinker</title>
|
<title>Open-Source Digital Signage CMS — Self-Hosted & Free | SwiftDisplay</title>
|
||||||
<meta name="description"
|
<meta name="description"
|
||||||
content="Open-source, self-hostable digital signage CMS. Manage TVs, video walls, kiosks & schedules on Android, Raspberry Pi, Windows & any browser. Free plan — start today.">
|
content="Open-source, self-hostable digital signage CMS. Manage TVs, video walls, kiosks & schedules on Android, Raspberry Pi, Windows & any browser. Free plan — start today.">
|
||||||
<meta name="keywords"
|
<meta name="keywords"
|
||||||
content="digital signage, open source digital signage, self hosted signage, digital signage cms, free digital signage software, digital signage raspberry pi, digital signage android tv, video wall software, kiosk software, screen management">
|
content="digital signage, open source digital signage, self hosted signage, digital signage cms, free digital signage software, digital signage raspberry pi, digital signage android tv, video wall software, kiosk software, screen management">
|
||||||
<meta name="author" content="ScreenTinker">
|
<meta name="author" content="SwiftDisplay">
|
||||||
<meta name="robots" content="index, follow">
|
<meta name="robots" content="index, follow">
|
||||||
<link rel="canonical" href="https://screentinker.com/">
|
<link rel="canonical" href="https://swiftdisplay.com/">
|
||||||
|
|
||||||
<!-- Open Graph / Facebook -->
|
<!-- Open Graph / Facebook -->
|
||||||
<meta property="og:type" content="website">
|
<meta property="og:type" content="website">
|
||||||
<meta property="og:url" content="https://screentinker.com/">
|
<meta property="og:url" content="https://swiftdisplay.com/">
|
||||||
<meta property="og:title" content="ScreenTinker - Open-Source Digital Signage CMS">
|
<meta property="og:title" content="SwiftDisplay - Open-Source Digital Signage CMS">
|
||||||
<meta property="og:description"
|
<meta property="og:description"
|
||||||
content="Open-source digital signage CMS. Free plan, self-host or cloud. Manage TVs, video walls, kiosks, and schedules across 9 platforms.">
|
content="Open-source digital signage CMS. Free plan, self-host or cloud. Manage TVs, video walls, kiosks, and schedules across 9 platforms.">
|
||||||
<meta property="og:image" content="https://screentinker.com/assets/dashboard-preview.png">
|
<meta property="og:image" content="https://swiftdisplay.com/assets/dashboard-preview.png">
|
||||||
<meta property="og:image:width" content="2500">
|
<meta property="og:image:width" content="2500">
|
||||||
<meta property="og:image:height" content="1314">
|
<meta property="og:image:height" content="1314">
|
||||||
<meta property="og:image:alt"
|
<meta property="og:image:alt"
|
||||||
content="ScreenTinker open-source digital signage dashboard showing four online displays with playlist assignments">
|
content="SwiftDisplay open-source digital signage dashboard showing four online displays with playlist assignments">
|
||||||
<meta property="og:site_name" content="ScreenTinker">
|
<meta property="og:site_name" content="SwiftDisplay">
|
||||||
|
|
||||||
<!-- Twitter -->
|
<!-- Twitter -->
|
||||||
<meta name="twitter:card" content="summary_large_image">
|
<meta name="twitter:card" content="summary_large_image">
|
||||||
<meta name="twitter:title" content="ScreenTinker - Open-Source Digital Signage CMS">
|
<meta name="twitter:title" content="SwiftDisplay - Open-Source Digital Signage CMS">
|
||||||
<meta name="twitter:description"
|
<meta name="twitter:description"
|
||||||
content="Open-source digital signage CMS. Free plan, self-host or cloud. Video walls, kiosks, scheduling, and live remote control across 9 platforms.">
|
content="Open-source digital signage CMS. Free plan, self-host or cloud. Video walls, kiosks, scheduling, and live remote control across 9 platforms.">
|
||||||
<meta name="twitter:image" content="https://screentinker.com/assets/dashboard-preview.png">
|
<meta name="twitter:image" content="https://swiftdisplay.com/assets/dashboard-preview.png">
|
||||||
<meta name="twitter:image:alt"
|
<meta name="twitter:image:alt"
|
||||||
content="ScreenTinker open-source digital signage dashboard showing four online displays with playlist assignments">
|
content="SwiftDisplay open-source digital signage dashboard showing four online displays with playlist assignments">
|
||||||
|
|
||||||
<!-- Theme -->
|
<!-- Theme -->
|
||||||
<meta name="theme-color" content="#111827">
|
<meta name="theme-color" content="#111827">
|
||||||
|
|
@ -527,7 +527,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.price-card li::before {
|
.price-card li::before {
|
||||||
content: '✓ ';
|
content: ' ';
|
||||||
color: var(--accent);
|
color: var(--accent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -768,78 +768,21 @@
|
||||||
<a href="#pricing">Pricing</a>
|
<a href="#pricing">Pricing</a>
|
||||||
<a href="#compare">Compare</a>
|
<a href="#compare">Compare</a>
|
||||||
<a href="/integrations/">Integrations</a>
|
<a href="/integrations/">Integrations</a>
|
||||||
<a href="https://github.com/screentinker/screentinker" target="_blank" rel="noopener"
|
|
||||||
aria-label="ScreenTinker on GitHub" class="nav-github"
|
|
||||||
style="margin-left:16px;display:inline-flex;align-items:center;color:var(--muted)">
|
|
||||||
<svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
|
|
||||||
<path
|
|
||||||
d="M12 .3a12 12 0 0 0-3.8 23.4c.6.1.8-.3.8-.6v-2c-3.3.7-4-1.6-4-1.6-.6-1.4-1.4-1.8-1.4-1.8-1.1-.7.1-.7.1-.7 1.2.1 1.9 1.3 1.9 1.3 1.1 1.9 2.9 1.4 3.6 1 .1-.8.4-1.4.8-1.7-2.7-.3-5.5-1.3-5.5-6 0-1.3.5-2.4 1.2-3.2-.1-.3-.5-1.5.1-3.2 0 0 1-.3 3.3 1.2a11 11 0 0 1 6 0c2.3-1.5 3.3-1.2 3.3-1.2.7 1.7.3 2.9.1 3.2.8.8 1.2 1.9 1.2 3.2 0 4.6-2.8 5.6-5.5 5.9.4.4.8 1.1.8 2.2v3.3c0 .3.2.7.8.6A12 12 0 0 0 12 .3" />
|
|
||||||
</svg>
|
|
||||||
</a>
|
|
||||||
<a href="/app#/login" class="btn btn-outline" style="margin-left:16px">Sign In</a>
|
|
||||||
<a href="/app#/login" class="btn btn-primary" style="margin-left:8px"><span class="btn-full">Start Free
|
|
||||||
Trial</span><span class="btn-short">Try Free</span></a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
<main>
|
|
||||||
<!-- Hero -->
|
|
||||||
<section class="hero">
|
|
||||||
<div class="hero-badge">⚡ Open source · Free plan · 14-day Pro trial, no credit card</div>
|
|
||||||
<h1>Open-Source Digital Signage<br>for <span>Any Screen</span></h1>
|
|
||||||
<p>Free, open-source <strong>digital signage software</strong> to manage TVs, video walls, and kiosks from
|
|
||||||
anywhere. A complete <strong>digital signage CMS</strong> with remote control, scheduling, playlists, and
|
|
||||||
analytics — <strong>self-host it</strong> on your own server or use our managed cloud.</p>
|
|
||||||
<div class="hero-btns">
|
|
||||||
<a href="/app#/login" class="btn btn-primary" style="padding:14px 28px;font-size:16px">Start Free Trial</a>
|
|
||||||
<a href="https://github.com/screentinker/screentinker" target="_blank" rel="noopener" class="btn btn-outline"
|
|
||||||
style="padding:14px 28px;font-size:16px">
|
|
||||||
<svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"
|
|
||||||
style="margin-right:2px">
|
|
||||||
<path
|
|
||||||
d="M12 .3a12 12 0 0 0-3.8 23.4c.6.1.8-.3.8-.6v-2c-3.3.7-4-1.6-4-1.6-.6-1.4-1.4-1.8-1.4-1.8-1.1-.7.1-.7.1-.7 1.2.1 1.9 1.3 1.9 1.3 1.1 1.9 2.9 1.4 3.6 1 .1-.8.4-1.4.8-1.7-2.7-.3-5.5-1.3-5.5-6 0-1.3.5-2.4 1.2-3.2-.1-.3-.5-1.5.1-3.2 0 0 1-.3 3.3 1.2a11 11 0 0 1 6 0c2.3-1.5 3.3-1.2 3.3-1.2.7 1.7.3 2.9.1 3.2.8.8 1.2 1.9 1.2 3.2 0 4.6-2.8 5.6-5.5 5.9.4.4.8 1.1.8 2.2v3.3c0 .3.2.7.8.6A12 12 0 0 0 12 .3" />
|
|
||||||
</svg>
|
|
||||||
View on GitHub
|
|
||||||
</a>
|
|
||||||
<a href="#compare" class="btn btn-outline" style="padding:14px 28px;font-size:16px">See How We Compare</a>
|
<a href="#compare" class="btn btn-outline" style="padding:14px 28px;font-size:16px">See How We Compare</a>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<!-- Intro video -->
|
|
||||||
<div style="max-width:800px;margin:32px auto;border-radius:12px;overflow:hidden;border:1px solid var(--border)">
|
|
||||||
<div style="position:relative;padding-bottom:56.25%;height:0">
|
|
||||||
<iframe src="https://www.youtube-nocookie.com/embed/Sq3RbnuDgKw?rel=0"
|
|
||||||
title="ScreenTinker - Open Source Digital Signage for Any Screen" loading="lazy" width="800" height="450"
|
|
||||||
frameborder="0"
|
|
||||||
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
|
|
||||||
referrerpolicy="strict-origin-when-cross-origin" allowfullscreen
|
|
||||||
style="position:absolute;top:0;left:0;width:100%;height:100%"></iframe>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Dashboard preview -->
|
<!-- Dashboard preview -->
|
||||||
<div class="screenshot">
|
<div class="screenshot">
|
||||||
<img src="/assets/dashboard-preview.png"
|
<img src="/assets/dashboard-preview.png"
|
||||||
alt="ScreenTinker open-source digital signage dashboard showing 4 online displays with playlist assignments"
|
alt="SwiftDisplay open-source digital signage dashboard showing 4 online displays with playlist assignments"
|
||||||
loading="lazy" width="2500" height="1314">
|
loading="lazy" width="2500" height="1314">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Open Source callout -->
|
|
||||||
<section class="opensource" id="opensource"
|
|
||||||
style="max-width:900px;margin:0 auto;padding:40px 24px;text-align:center">
|
|
||||||
<h2 style="font-size:28px;margin-bottom:12px">Fully Open Source</h2>
|
|
||||||
<p style="color:var(--muted);font-size:16px;margin-bottom:20px">MIT licensed. Self-host on your own infrastructure
|
|
||||||
or use our managed cloud. Your data, your rules.</p>
|
|
||||||
<a href="https://github.com/screentinker/screentinker" target="_blank" rel="noopener" class="btn btn-outline"
|
|
||||||
style="display:inline-flex;align-items:center;gap:8px">
|
|
||||||
<svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
|
|
||||||
<path
|
|
||||||
d="M12 .3a12 12 0 0 0-3.8 23.4c.6.1.8-.3.8-.6v-2c-3.3.7-4-1.6-4-1.6-.6-1.4-1.4-1.8-1.4-1.8-1.1-.7.1-.7.1-.7 1.2.1 1.9 1.3 1.9 1.3 1.1 1.9 2.9 1.4 3.6 1 .1-.8.4-1.4.8-1.7-2.7-.3-5.5-1.3-5.5-6 0-1.3.5-2.4 1.2-3.2-.1-.3-.5-1.5.1-3.2 0 0 1-.3 3.3 1.2a11 11 0 0 1 6 0c2.3-1.5 3.3-1.2 3.3-1.2.7 1.7.3 2.9.1 3.2.8.8 1.2 1.9 1.2 3.2 0 4.6-2.8 5.6-5.5 5.9.4.4.8 1.1.8 2.2v3.3c0 .3.2.7.8.6A12 12 0 0 0 12 .3" />
|
|
||||||
</svg>
|
|
||||||
github.com/screentinker/screentinker
|
|
||||||
</a>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<!-- How it works -->
|
<!-- How it works -->
|
||||||
<section class="features" id="how-it-works">
|
<section class="features" id="how-it-works">
|
||||||
|
|
@ -847,19 +790,19 @@
|
||||||
<p class="subtitle">No proprietary hardware, no complicated setup.</p>
|
<p class="subtitle">No proprietary hardware, no complicated setup.</p>
|
||||||
<div class="feature-grid" style="grid-template-columns:repeat(auto-fill,minmax(280px,1fr))">
|
<div class="feature-grid" style="grid-template-columns:repeat(auto-fill,minmax(280px,1fr))">
|
||||||
<div class="feature-card">
|
<div class="feature-card">
|
||||||
<div class="feature-icon">1️⃣</div>
|
<div class="feature-icon">1.</div>
|
||||||
<h3>Connect a screen</h3>
|
<h3>Connect a screen</h3>
|
||||||
<p>Install the free player on an Android TV, Fire TV, Raspberry Pi, Windows PC, or open a browser tab — then
|
<p>Install the free player on an Android TV, Fire TV, Raspberry Pi, Windows PC, or open a browser tab — then
|
||||||
pair it with a code.</p>
|
pair it with a code.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="feature-card">
|
<div class="feature-card">
|
||||||
<div class="feature-icon">2️⃣</div>
|
<div class="feature-icon">2.</div>
|
||||||
<h3>Add your content</h3>
|
<h3>Add your content</h3>
|
||||||
<p>Upload images and video, build playlists and multi-zone layouts, or design screens with built-in widgets.
|
<p>Upload images and video, build playlists and multi-zone layouts, or design screens with built-in widgets.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="feature-card">
|
<div class="feature-card">
|
||||||
<div class="feature-icon">3️⃣</div>
|
<div class="feature-icon">3.</div>
|
||||||
<h3>Schedule and publish</h3>
|
<h3>Schedule and publish</h3>
|
||||||
<p>Assign content to displays or groups, set day/time schedules, and push live. Change it any time from your
|
<p>Assign content to displays or groups, set day/time schedules, and push live. Change it any time from your
|
||||||
phone.</p>
|
phone.</p>
|
||||||
|
|
@ -1066,7 +1009,7 @@
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th></th>
|
<th></th>
|
||||||
<th style="color:var(--accent);font-weight:700">ScreenTinker</th>
|
<th style="color:var(--accent);font-weight:700">SwiftDisplay</th>
|
||||||
<th>Yodeck</th>
|
<th>Yodeck</th>
|
||||||
<th>ScreenCloud</th>
|
<th>ScreenCloud</th>
|
||||||
<th>OptiSigns</th>
|
<th>OptiSigns</th>
|
||||||
|
|
@ -1144,7 +1087,7 @@
|
||||||
* Live screen view + remote key presses is Android only and requires granting the on-device accessibility
|
* Live screen view + remote key presses is Android only and requires granting the on-device accessibility
|
||||||
permission.<br>
|
permission.<br>
|
||||||
Comparison as of June 2026, based on each vendor's publicly listed pricing and documentation. Spot an error? <a
|
Comparison as of June 2026, based on each vendor's publicly listed pricing and documentation. Spot an error? <a
|
||||||
href="https://github.com/screentinker/screentinker/issues" target="_blank" rel="noopener"
|
href="https://github.com/swiftdisplay/swiftdisplay/issues" target="_blank" rel="noopener"
|
||||||
style="color:var(--accent)">Open an issue on GitHub</a> and we'll fix it.
|
style="color:var(--accent)">Open an issue on GitHub</a> and we'll fix it.
|
||||||
</p>
|
</p>
|
||||||
</section>
|
</section>
|
||||||
|
|
@ -1183,7 +1126,7 @@
|
||||||
<div
|
<div
|
||||||
style="font-size:12px;color:var(--accent);text-transform:uppercase;letter-spacing:0.5px;margin-bottom:6px">
|
style="font-size:12px;color:var(--accent);text-transform:uppercase;letter-spacing:0.5px;margin-bottom:6px">
|
||||||
Compare</div>
|
Compare</div>
|
||||||
<div style="font-weight:600;margin-bottom:4px">ScreenTinker vs Yodeck</div>
|
<div style="font-weight:600;margin-bottom:4px">SwiftDisplay vs Yodeck</div>
|
||||||
<div style="font-size:13px;color:var(--muted)">Features, pricing, platform support.</div>
|
<div style="font-size:13px;color:var(--muted)">Features, pricing, platform support.</div>
|
||||||
</a>
|
</a>
|
||||||
<a href="/compare/screencloud-alternative.html"
|
<a href="/compare/screencloud-alternative.html"
|
||||||
|
|
@ -1191,7 +1134,7 @@
|
||||||
<div
|
<div
|
||||||
style="font-size:12px;color:var(--accent);text-transform:uppercase;letter-spacing:0.5px;margin-bottom:6px">
|
style="font-size:12px;color:var(--accent);text-transform:uppercase;letter-spacing:0.5px;margin-bottom:6px">
|
||||||
Compare</div>
|
Compare</div>
|
||||||
<div style="font-weight:600;margin-bottom:4px">ScreenTinker vs ScreenCloud</div>
|
<div style="font-weight:600;margin-bottom:4px">SwiftDisplay vs ScreenCloud</div>
|
||||||
<div style="font-size:13px;color:var(--muted)">Pricing breakdown at scale.</div>
|
<div style="font-size:13px;color:var(--muted)">Pricing breakdown at scale.</div>
|
||||||
</a>
|
</a>
|
||||||
<a href="/compare/optisigns-alternative.html"
|
<a href="/compare/optisigns-alternative.html"
|
||||||
|
|
@ -1199,7 +1142,7 @@
|
||||||
<div
|
<div
|
||||||
style="font-size:12px;color:var(--accent);text-transform:uppercase;letter-spacing:0.5px;margin-bottom:6px">
|
style="font-size:12px;color:var(--accent);text-transform:uppercase;letter-spacing:0.5px;margin-bottom:6px">
|
||||||
Compare</div>
|
Compare</div>
|
||||||
<div style="font-weight:600;margin-bottom:4px">ScreenTinker vs OptiSigns</div>
|
<div style="font-weight:600;margin-bottom:4px">SwiftDisplay vs OptiSigns</div>
|
||||||
<div style="font-size:13px;color:var(--muted)">Side by side feature and price comparison.</div>
|
<div style="font-size:13px;color:var(--muted)">Side by side feature and price comparison.</div>
|
||||||
</a>
|
</a>
|
||||||
<a href="/guides/open-source-digital-signage.html"
|
<a href="/guides/open-source-digital-signage.html"
|
||||||
|
|
@ -1208,7 +1151,7 @@
|
||||||
style="font-size:12px;color:var(--accent);text-transform:uppercase;letter-spacing:0.5px;margin-bottom:6px">
|
style="font-size:12px;color:var(--accent);text-transform:uppercase;letter-spacing:0.5px;margin-bottom:6px">
|
||||||
Guide</div>
|
Guide</div>
|
||||||
<div style="font-weight:600;margin-bottom:4px">Open-source digital signage explained</div>
|
<div style="font-weight:600;margin-bottom:4px">Open-source digital signage explained</div>
|
||||||
<div style="font-size:13px;color:var(--muted)">Why open source, and how ScreenTinker fits.</div>
|
<div style="font-size:13px;color:var(--muted)">Why open source, and how SwiftDisplay fits.</div>
|
||||||
</a>
|
</a>
|
||||||
<a href="/guides/what-is-digital-signage.html"
|
<a href="/guides/what-is-digital-signage.html"
|
||||||
style="display:block;background:var(--card);border:1px solid var(--border);border-radius:10px;padding:20px;color:var(--text);transition:border-color 0.2s">
|
style="display:block;background:var(--card);border:1px solid var(--border);border-radius:10px;padding:20px;color:var(--text);transition:border-color 0.2s">
|
||||||
|
|
@ -1223,7 +1166,7 @@
|
||||||
<div
|
<div
|
||||||
style="font-size:12px;color:var(--accent);text-transform:uppercase;letter-spacing:0.5px;margin-bottom:6px">
|
style="font-size:12px;color:var(--accent);text-transform:uppercase;letter-spacing:0.5px;margin-bottom:6px">
|
||||||
Compare</div>
|
Compare</div>
|
||||||
<div style="font-weight:600;margin-bottom:4px">ScreenTinker vs Xibo</div>
|
<div style="font-weight:600;margin-bottom:4px">SwiftDisplay vs Xibo</div>
|
||||||
<div style="font-size:13px;color:var(--muted)">Open source vs open source — and the paid players.</div>
|
<div style="font-size:13px;color:var(--muted)">Open source vs open source — and the paid players.</div>
|
||||||
</a>
|
</a>
|
||||||
<a href="/compare/anthias-alternative.html"
|
<a href="/compare/anthias-alternative.html"
|
||||||
|
|
@ -1231,7 +1174,7 @@
|
||||||
<div
|
<div
|
||||||
style="font-size:12px;color:var(--accent);text-transform:uppercase;letter-spacing:0.5px;margin-bottom:6px">
|
style="font-size:12px;color:var(--accent);text-transform:uppercase;letter-spacing:0.5px;margin-bottom:6px">
|
||||||
Compare</div>
|
Compare</div>
|
||||||
<div style="font-weight:600;margin-bottom:4px">ScreenTinker vs Anthias</div>
|
<div style="font-weight:600;margin-bottom:4px">SwiftDisplay vs Anthias</div>
|
||||||
<div style="font-size:13px;color:var(--muted)">Beyond one Pi, one screen.</div>
|
<div style="font-size:13px;color:var(--muted)">Beyond one Pi, one screen.</div>
|
||||||
</a>
|
</a>
|
||||||
<a href="/integrations/"
|
<a href="/integrations/"
|
||||||
|
|
@ -1252,7 +1195,7 @@
|
||||||
<div style="display:flex;flex-direction:column;gap:20px">
|
<div style="display:flex;flex-direction:column;gap:20px">
|
||||||
<div>
|
<div>
|
||||||
<h3 style="font-size:18px;margin-bottom:6px">Is there free digital signage software?</h3>
|
<h3 style="font-size:18px;margin-bottom:6px">Is there free digital signage software?</h3>
|
||||||
<p style="color:var(--muted);font-size:15px">Yes. ScreenTinker is free and open source (MIT licensed). The
|
<p style="color:var(--muted);font-size:15px">Yes. SwiftDisplay is free and open source (MIT licensed). The
|
||||||
free cloud plan runs 1 display with 500 MB of storage, and if you self-host there's no per-screen fee at all
|
free cloud plan runs 1 display with 500 MB of storage, and if you self-host there's no per-screen fee at all
|
||||||
— run as many displays as your own server can handle. New accounts also get a 14-day Pro trial (15 displays)
|
— run as many displays as your own server can handle. New accounts also get a 14-day Pro trial (15 displays)
|
||||||
with no credit card required.</p>
|
with no credit card required.</p>
|
||||||
|
|
@ -1265,26 +1208,26 @@
|
||||||
guide</a>.</p>
|
guide</a>.</p>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<h3 style="font-size:18px;margin-bottom:6px">Does ScreenTinker work on Android TV and Fire TV?</h3>
|
<h3 style="font-size:18px;margin-bottom:6px">Does SwiftDisplay work on Android TV and Fire TV?</h3>
|
||||||
<p style="color:var(--muted);font-size:15px">Yes. Install the free APK on any Android TV box or Amazon Fire TV
|
<p style="color:var(--muted);font-size:15px">Yes. Install the free APK on any Android TV box or Amazon Fire TV
|
||||||
Stick to turn it into a managed signage display, complete with kiosk mode and live remote control.
|
Stick to turn it into a managed signage display, complete with kiosk mode and live remote control.
|
||||||
Step-by-step instructions are in our <a href="/guides/digital-signage-android-tv.html">Android TV & Fire
|
Step-by-step instructions are in our <a href="/guides/digital-signage-android-tv.html">Android TV & Fire
|
||||||
TV guide</a>. ScreenTinker also runs on Windows, ChromeOS, LG webOS, Samsung Tizen, and any web browser.
|
TV guide</a>. SwiftDisplay also runs on Windows, ChromeOS, LG webOS, Samsung Tizen, and any web browser.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<h3 style="font-size:18px;margin-bottom:6px">What's the difference between self-hosted and cloud digital
|
<h3 style="font-size:18px;margin-bottom:6px">What's the difference between self-hosted and cloud digital
|
||||||
signage?</h3>
|
signage?</h3>
|
||||||
<p style="color:var(--muted);font-size:15px">With cloud, we host everything and you just sign in — the fastest
|
<p style="color:var(--muted);font-size:15px">With cloud, we host everything and you just sign in — the fastest
|
||||||
way to start. With self-hosting, you deploy ScreenTinker on your own server or VPS so your content and
|
way to start. With self-hosting, you deploy SwiftDisplay on your own server or VPS so your content and
|
||||||
device data never leave your network, with no recurring SaaS fees. You can switch later. Our <a
|
device data never leave your network, with no recurring SaaS fees. You can switch later. Our <a
|
||||||
href="/guides/self-hosted-digital-signage.html">self-hosted digital signage guide</a> covers sizing,
|
href="/guides/self-hosted-digital-signage.html">self-hosted digital signage guide</a> covers sizing,
|
||||||
deployment, TLS, and backups.</p>
|
deployment, TLS, and backups.</p>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<h3 style="font-size:18px;margin-bottom:6px">Is ScreenTinker really open source?</h3>
|
<h3 style="font-size:18px;margin-bottom:6px">Is SwiftDisplay really open source?</h3>
|
||||||
<p style="color:var(--muted);font-size:15px">Yes. The full platform is released under the permissive MIT
|
<p style="color:var(--muted);font-size:15px">Yes. The full platform is released under the permissive MIT
|
||||||
license on <a href="https://github.com/screentinker/screentinker" target="_blank" rel="noopener">GitHub</a>.
|
license on <a href="https://github.com/swiftdisplay/swiftdisplay" target="_blank" rel="noopener">GitHub</a>.
|
||||||
You can read the code, self-host it, modify it, and even white-label it — no vendor lock-in and no
|
You can read the code, self-host it, modify it, and even white-label it — no vendor lock-in and no
|
||||||
proprietary black box.</p>
|
proprietary black box.</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -1296,7 +1239,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<h3 style="font-size:18px;margin-bottom:6px">Do my displays keep playing if the internet goes down?</h3>
|
<h3 style="font-size:18px;margin-bottom:6px">Do my displays keep playing if the internet goes down?</h3>
|
||||||
<p style="color:var(--muted);font-size:15px">Yes. ScreenTinker players cache their content locally and keep
|
<p style="color:var(--muted);font-size:15px">Yes. SwiftDisplay players cache their content locally and keep
|
||||||
playing during an internet or server outage, then sync automatically once the connection returns. No blank
|
playing during an internet or server outage, then sync automatically once the connection returns. No blank
|
||||||
screens.</p>
|
screens.</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -1313,9 +1256,9 @@
|
||||||
only by your own hardware.</p>
|
only by your own hardware.</p>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<h3 style="font-size:18px;margin-bottom:6px">How does ScreenTinker compare to Yodeck, ScreenCloud, and
|
<h3 style="font-size:18px;margin-bottom:6px">How does SwiftDisplay compare to Yodeck, ScreenCloud, and
|
||||||
OptiSigns?</h3>
|
OptiSigns?</h3>
|
||||||
<p style="color:var(--muted);font-size:15px">ScreenTinker is typically a fraction of the price at scale and is
|
<p style="color:var(--muted);font-size:15px">SwiftDisplay is typically a fraction of the price at scale and is
|
||||||
the only one of the four you can self-host. See the detailed breakdowns: <a
|
the only one of the four you can self-host. See the detailed breakdowns: <a
|
||||||
href="/compare/yodeck-alternative.html">vs Yodeck</a>, <a href="/compare/screencloud-alternative.html">vs
|
href="/compare/yodeck-alternative.html">vs Yodeck</a>, <a href="/compare/screencloud-alternative.html">vs
|
||||||
ScreenCloud</a>, and <a href="/compare/optisigns-alternative.html">vs OptiSigns</a>.</p>
|
ScreenCloud</a>, and <a href="/compare/optisigns-alternative.html">vs OptiSigns</a>.</p>
|
||||||
|
|
@ -1336,7 +1279,7 @@
|
||||||
<div
|
<div
|
||||||
style="max-width:1200px;margin:0 auto;padding:48px 24px 24px;display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:32px">
|
style="max-width:1200px;margin:0 auto;padding:48px 24px 24px;display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:32px">
|
||||||
<div>
|
<div>
|
||||||
<div style="font-weight:700;color:var(--accent);margin-bottom:12px">ScreenTinker</div>
|
<img src="/assets/logowhiteswift.png" alt="SwiftDisplay" style="width:160px;margin-bottom:16px">
|
||||||
<div style="font-size:13px;color:var(--muted);line-height:1.6">Open-source digital signage. Free plan, self-host
|
<div style="font-size:13px;color:var(--muted);line-height:1.6">Open-source digital signage. Free plan, self-host
|
||||||
or cloud. MIT licensed.</div>
|
or cloud. MIT licensed.</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -1365,10 +1308,10 @@
|
||||||
style="font-size:13px;font-weight:600;color:var(--text);margin-bottom:10px;text-transform:uppercase;letter-spacing:0.5px">
|
style="font-size:13px;font-weight:600;color:var(--text);margin-bottom:10px;text-transform:uppercase;letter-spacing:0.5px">
|
||||||
Project</div>
|
Project</div>
|
||||||
<div style="display:flex;flex-direction:column;gap:6px;font-size:13px">
|
<div style="display:flex;flex-direction:column;gap:6px;font-size:13px">
|
||||||
<a href="https://github.com/screentinker/screentinker" target="_blank" rel="noopener"
|
<a href="https://github.com/swiftdisplay/swiftdisplay" target="_blank" rel="noopener"
|
||||||
style="color:var(--muted)">GitHub</a>
|
style="color:var(--muted)">GitHub</a>
|
||||||
<a href="https://discord.gg/utTdsrqq4Z" target="_blank" rel="noopener" style="color:var(--muted)">Discord</a>
|
<a href="https://discord.gg/utTdsrqq4Z" target="_blank" rel="noopener" style="color:var(--muted)">Discord</a>
|
||||||
<a href="https://www.youtube.com/@ScreenTinker" target="_blank" rel="noopener"
|
<a href="https://www.youtube.com/@SwiftDisplay" target="_blank" rel="noopener"
|
||||||
style="color:var(--muted)">YouTube</a>
|
style="color:var(--muted)">YouTube</a>
|
||||||
<a href="/app#/login" style="color:var(--muted)">Sign in</a>
|
<a href="/app#/login" style="color:var(--muted)">Sign in</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -1386,7 +1329,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
style="max-width:1200px;margin:0 auto;padding:16px 24px 32px;border-top:1px solid var(--border);color:var(--dim);font-size:13px;text-align:center">
|
style="max-width:1200px;margin:0 auto;padding:16px 24px 32px;border-top:1px solid var(--border);color:var(--dim);font-size:13px;text-align:center">
|
||||||
© 2026 ScreenTinker. All rights reserved.
|
© 2026 A project by goldencreative.pt. All rights reserved.
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
|
|
@ -1447,33 +1390,32 @@
|
||||||
{
|
{
|
||||||
"@context": "https://schema.org",
|
"@context": "https://schema.org",
|
||||||
"@type": "SoftwareApplication",
|
"@type": "SoftwareApplication",
|
||||||
"name": "ScreenTinker",
|
"name": "SwiftDisplay",
|
||||||
"applicationCategory": "BusinessApplication",
|
"applicationCategory": "BusinessApplication",
|
||||||
"applicationSubCategory": "Digital Signage",
|
"applicationSubCategory": "Digital Signage",
|
||||||
"operatingSystem": "Android, Web browser, Windows, Linux, ChromeOS, LG webOS, Samsung Tizen, Fire TV",
|
"operatingSystem": "Android, Web browser, Windows, Linux, ChromeOS, LG webOS, Samsung Tizen, Fire TV",
|
||||||
"description": "Self-hosted, open-source digital signage CMS. MIT licensed. Manage TVs, video walls, kiosks, and content schedules across Android, Raspberry Pi, Windows, ChromeOS, and any browser.",
|
"description": "Self-hosted, open-source digital signage CMS. MIT licensed. Manage TVs, video walls, kiosks, and content schedules across Android, Raspberry Pi, Windows, ChromeOS, and any browser.",
|
||||||
"url": "https://screentinker.com/",
|
"url": "https://swiftdisplay.com/",
|
||||||
"image": "https://screentinker.com/assets/dashboard-preview.png",
|
"image": "https://swiftdisplay.com/assets/dashboard-preview.png",
|
||||||
"screenshot": "https://screentinker.com/assets/dashboard-preview.png",
|
"screenshot": "https://swiftdisplay.com/assets/dashboard-preview.png",
|
||||||
"license": "https://opensource.org/license/mit",
|
"license": "https://opensource.org/license/mit",
|
||||||
"isAccessibleForFree": true,
|
"isAccessibleForFree": true,
|
||||||
"softwareHelp": "https://screentinker.com/guides/self-hosted-digital-signage.html",
|
"softwareHelp": "https://swiftdisplay.com/guides/self-hosted-digital-signage.html",
|
||||||
"publisher": {
|
"publisher": {
|
||||||
"@type": "Organization",
|
"@type": "Organization",
|
||||||
"name": "ScreenTinker",
|
"name": "SwiftDisplay",
|
||||||
"url": "https://screentinker.com/",
|
"url": "https://swiftdisplay.com/",
|
||||||
"logo": "https://screentinker.com/assets/icon-512.png"
|
"logo": "https://swiftdisplay.com/assets/icon-512.png"
|
||||||
},
|
},
|
||||||
"offers": {
|
"offers": {
|
||||||
"@type": "AggregateOffer",
|
"@type": "AggregateOffer",
|
||||||
"priceCurrency": "USD",
|
"priceCurrency": "EUR",
|
||||||
"lowPrice": "0",
|
"lowPrice": "0",
|
||||||
"highPrice": "99",
|
"highPrice": "99",
|
||||||
"offerCount": "3",
|
"offerCount": "3",
|
||||||
"offers": [
|
"offers": [
|
||||||
{ "@type": "Offer", "name": "Free", "price": "0", "priceCurrency": "USD", "description": "1 device, 500MB storage", "url": "https://screentinker.com/#pricing" },
|
{ "@type": "Offer", "name": "Starter", "price": "39", "priceCurrency": "EUR", "priceValidUntil": "2027-12-31", "description": "5 devices, 5GB storage, remote URL streaming", "url": "https://swiftdisplay.com/#pricing" },
|
||||||
{ "@type": "Offer", "name": "Starter", "price": "39", "priceCurrency": "USD", "priceValidUntil": "2027-12-31", "description": "5 devices, 5GB storage, remote URL streaming", "url": "https://screentinker.com/#pricing" },
|
{ "@type": "Offer", "name": "Pro", "price": "99", "priceCurrency": "EUR", "priceValidUntil": "2027-12-31", "description": "15 devices, 20GB storage, all features", "url": "https://swiftdisplay.com/#pricing" }
|
||||||
{ "@type": "Offer", "name": "Pro", "price": "99", "priceCurrency": "USD", "priceValidUntil": "2027-12-31", "description": "15 devices, 20GB storage, all features", "url": "https://screentinker.com/#pricing" }
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"featureList": [
|
"featureList": [
|
||||||
|
|
@ -1500,14 +1442,14 @@
|
||||||
{
|
{
|
||||||
"@context": "https://schema.org",
|
"@context": "https://schema.org",
|
||||||
"@type": "Organization",
|
"@type": "Organization",
|
||||||
"name": "ScreenTinker",
|
"name": "SwiftDisplay",
|
||||||
"url": "https://screentinker.com/",
|
"url": "https://swiftdisplay.com/",
|
||||||
"logo": "https://screentinker.com/assets/icon-512.png",
|
"logo": "https://swiftdisplay.com/assets/icon-512.png",
|
||||||
"description": "Open-source, self-hostable digital signage CMS. Free plan, self-host or managed cloud. MIT licensed.",
|
"description": "Open-source, self-hostable digital signage CMS. Free plan, self-host or managed cloud. MIT licensed.",
|
||||||
"sameAs": [
|
"sameAs": [
|
||||||
"https://github.com/screentinker/screentinker",
|
"https://github.com/swiftdisplay/swiftdisplay",
|
||||||
"https://discord.gg/utTdsrqq4Z",
|
"https://discord.gg/utTdsrqq4Z",
|
||||||
"https://www.youtube.com/@ScreenTinker"
|
"https://www.youtube.com/@SwiftDisplay"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
@ -1516,12 +1458,12 @@
|
||||||
{
|
{
|
||||||
"@context": "https://schema.org",
|
"@context": "https://schema.org",
|
||||||
"@type": "WebSite",
|
"@type": "WebSite",
|
||||||
"name": "ScreenTinker",
|
"name": "SwiftDisplay",
|
||||||
"url": "https://screentinker.com/",
|
"url": "https://swiftdisplay.com/",
|
||||||
"publisher": {
|
"publisher": {
|
||||||
"@type": "Organization",
|
"@type": "Organization",
|
||||||
"name": "ScreenTinker",
|
"name": "SwiftDisplay",
|
||||||
"url": "https://screentinker.com/"
|
"url": "https://swiftdisplay.com/"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
@ -1531,16 +1473,16 @@
|
||||||
"@context": "https://schema.org",
|
"@context": "https://schema.org",
|
||||||
"@type": "FAQPage",
|
"@type": "FAQPage",
|
||||||
"mainEntity": [
|
"mainEntity": [
|
||||||
{ "@type": "Question", "name": "Is there free digital signage software?", "acceptedAnswer": { "@type": "Answer", "text": "Yes. ScreenTinker is free and open source (MIT licensed). The free cloud plan runs 1 display with 500 MB of storage, and if you self-host there's no per-screen fee at all — run as many displays as your own server can handle. New accounts also get a 14-day Pro trial (15 displays) with no credit card required." } },
|
{ "@type": "Question", "name": "Is there free digital signage software?", "acceptedAnswer": { "@type": "Answer", "text": "Yes. SwiftDisplay is free and open source (MIT licensed). The free cloud plan runs 1 display with 500 MB of storage, and if you self-host there's no per-screen fee at all — run as many displays as your own server can handle. New accounts also get a 14-day Pro trial (15 displays) with no credit card required." } },
|
||||||
{ "@type": "Question", "name": "Can I run digital signage on a Raspberry Pi?", "acceptedAnswer": { "@type": "Answer", "text": "Yes. A Raspberry Pi 4 or newer makes an excellent low-cost signage player. Our one-line installer sets up kiosk mode, auto-start, and pairing for you." } },
|
{ "@type": "Question", "name": "Can I run digital signage on a Raspberry Pi?", "acceptedAnswer": { "@type": "Answer", "text": "Yes. A Raspberry Pi 4 or newer makes an excellent low-cost signage player. Our one-line installer sets up kiosk mode, auto-start, and pairing for you." } },
|
||||||
{ "@type": "Question", "name": "Does ScreenTinker work on Android TV and Fire TV?", "acceptedAnswer": { "@type": "Answer", "text": "Yes. Install the free APK on any Android TV box or Amazon Fire TV Stick to turn it into a managed signage display, complete with kiosk mode and live remote control. ScreenTinker also runs on Windows, ChromeOS, LG webOS, Samsung Tizen, and any web browser." } },
|
{ "@type": "Question", "name": "Does SwiftDisplay work on Android TV and Fire TV?", "acceptedAnswer": { "@type": "Answer", "text": "Yes. Install the free APK on any Android TV box or Amazon Fire TV Stick to turn it into a managed signage display, complete with kiosk mode and live remote control. SwiftDisplay also runs on Windows, ChromeOS, LG webOS, Samsung Tizen, and any web browser." } },
|
||||||
{ "@type": "Question", "name": "What's the difference between self-hosted and cloud digital signage?", "acceptedAnswer": { "@type": "Answer", "text": "With cloud, we host everything and you just sign in — the fastest way to start. With self-hosting, you deploy ScreenTinker on your own server or VPS so your content and device data never leave your network, with no recurring SaaS fees. You can switch later." } },
|
{ "@type": "Question", "name": "What's the difference between self-hosted and cloud digital signage?", "acceptedAnswer": { "@type": "Answer", "text": "With cloud, we host everything and you just sign in — the fastest way to start. With self-hosting, you deploy SwiftDisplay on your own server or VPS so your content and device data never leave your network, with no recurring SaaS fees. You can switch later." } },
|
||||||
{ "@type": "Question", "name": "Is ScreenTinker really open source?", "acceptedAnswer": { "@type": "Answer", "text": "Yes. The full platform is released under the permissive MIT license on GitHub. You can read the code, self-host it, modify it, and even white-label it — no vendor lock-in and no proprietary black box." } },
|
{ "@type": "Question", "name": "Is SwiftDisplay really open source?", "acceptedAnswer": { "@type": "Answer", "text": "Yes. The full platform is released under the permissive MIT license on GitHub. You can read the code, self-host it, modify it, and even white-label it — no vendor lock-in and no proprietary black box." } },
|
||||||
{ "@type": "Question", "name": "What can I put on my screens?", "acceptedAnswer": { "@type": "Answer", "text": "Images, video, playlists, multi-zone layouts, and live widgets — clocks, weather, RSS tickers, countdowns, QR codes, web pages, and scrolling lobby/staff directories. You can schedule different content by day and time, per display or per group." } },
|
{ "@type": "Question", "name": "What can I put on my screens?", "acceptedAnswer": { "@type": "Answer", "text": "Images, video, playlists, multi-zone layouts, and live widgets — clocks, weather, RSS tickers, countdowns, QR codes, web pages, and scrolling lobby/staff directories. You can schedule different content by day and time, per display or per group." } },
|
||||||
{ "@type": "Question", "name": "Do my displays keep playing if the internet goes down?", "acceptedAnswer": { "@type": "Answer", "text": "Yes. ScreenTinker players cache their content locally and keep playing during an internet or server outage, then sync automatically once the connection returns. No blank screens." } },
|
{ "@type": "Question", "name": "Do my displays keep playing if the internet goes down?", "acceptedAnswer": { "@type": "Answer", "text": "Yes. SwiftDisplay players cache their content locally and keep playing during an internet or server outage, then sync automatically once the connection returns. No blank screens." } },
|
||||||
{ "@type": "Question", "name": "Can I control my screens remotely?", "acceptedAnswer": { "@type": "Answer", "text": "Yes, on every plan. See a live view of what's on each screen, push content instantly, and send remote key presses or power commands. Live view and key presses on Android require the on-device accessibility permission." } },
|
{ "@type": "Question", "name": "Can I control my screens remotely?", "acceptedAnswer": { "@type": "Answer", "text": "Yes, on every plan. See a live view of what's on each screen, push content instantly, and send remote key presses or power commands. Live view and key presses on Android require the on-device accessibility permission." } },
|
||||||
{ "@type": "Question", "name": "Is there a limit on how many screens I can manage?", "acceptedAnswer": { "@type": "Answer", "text": "On cloud plans, your display count is set by your tier (1 free, up to 15 on Pro, more on Enterprise). If you self-host, there is no built-in device cap — you're limited only by your own hardware." } },
|
{ "@type": "Question", "name": "Is there a limit on how many screens I can manage?", "acceptedAnswer": { "@type": "Answer", "text": "On cloud plans, your display count is set by your tier (1 free, up to 15 on Pro, more on Enterprise). If you self-host, there is no built-in device cap — you're limited only by your own hardware." } },
|
||||||
{ "@type": "Question", "name": "How does ScreenTinker compare to Yodeck, ScreenCloud, and OptiSigns?", "acceptedAnswer": { "@type": "Answer", "text": "ScreenTinker is typically a fraction of the price at scale and is the only one of the four you can self-host. Detailed side-by-side breakdowns are available for Yodeck, ScreenCloud, and OptiSigns." } }
|
{ "@type": "Question", "name": "How does SwiftDisplay compare to Yodeck, ScreenCloud, and OptiSigns?", "acceptedAnswer": { "@type": "Answer", "text": "SwiftDisplay is typically a fraction of the price at scale and is the only one of the four you can self-host. Detailed side-by-side breakdowns are available for Yodeck, ScreenCloud, and OptiSigns." } }
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
@ -1556,7 +1498,7 @@
|
||||||
// settings.js, admin.js) get the full list as before.
|
// settings.js, admin.js) get the full list as before.
|
||||||
fetch('/api/subscription/plans').then(r => r.json()).then(plans => {
|
fetch('/api/subscription/plans').then(r => r.json()).then(plans => {
|
||||||
const grid = document.getElementById('pricingGrid');
|
const grid = document.getElementById('pricingGrid');
|
||||||
const publicPlans = plans.filter(p => p.active && p.name !== 'enterprise');
|
const publicPlans = plans.filter(p => p.active && p.name !== "enterprise" && p.name !== "free");
|
||||||
const planCardsHtml = publicPlans.map((p, i) => `
|
const planCardsHtml = publicPlans.map((p, i) => `
|
||||||
<div class="price-card ${i === 2 ? 'featured' : ''}">
|
<div class="price-card ${i === 2 ? 'featured' : ''}">
|
||||||
<h3>${p.display_name}</h3>
|
<h3>${p.display_name}</h3>
|
||||||
|
|
|
||||||
1673
frontend/landing.html.tmp
Normal file
1673
frontend/landing.html.tmp
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue