====== Prevue Guide Channel ======
A “Prevue Guide Channel” style companion site for **AmigaZ Cablevision** — meant to run as a fun background TV feed.
It follows the same pattern as [[projects:community_bulletin_tv|Community Bulletin TV]]:
* **Player page**: displays the guide + a video box that plays bumpers/trailers/ads
* **Editor page**: uploads videos and edits the JSON config
* **JSON driven**: channels + programming template + player behavior
**Location / URL**
* Folder: /var/www/html/amigaz/prevue
* Player: https://www.amigaz.org/prevue/player/
* Editor: https://www.amigaz.org/prevue/editor/
**Related Pages**
* [[projects:prevue:start:css|Prevue - CSS Notes]]
* [[projects:prevue:start:editor|Prevue - Editor Roadmap]]
----
===== Features =====
==== Player ====
* Top-left: video playback slot
* Between clips: optional **WeatherStar 4K+ cut-in** (iframe)
* Top-right: “Now Playing” info + controls (mute/unmute/next)
* Bottom: channel grid (currently placeholder blocks; will be made real from schedule template)
==== Editor ====
* Loads and saves guide.json
* Uploads bumper/trailer/ad clips into the video folder
* Lists available videos found on disk
----
===== Weather Integration (WS4K+) =====
Weather cut-ins use the WS4K+ permalink approach.
Because the WS4K+ URL can be very long, we created a **short redirect** on the weather site:
* Short link: https://weather.amigaz.org/p/prevue
* Redirects to the long WS4K+ permalink (includes &kiosk=true)
**Nginx snippet (weather.amigaz.org)**
# Short link for Prevue (WS4K+ permalink redirect)
location = /p/prevue {
return 302 "https://weather.amigaz.org/?(LONG_PERMALINK_HERE)&kiosk=true";
}
Use 302 while tweaking, then optionally switch to 301 later.
----
===== Video Playback / Rotation =====
* Videos can be uploaded via the editor OR dropped in manually.
* Manual drop folder:
/var/www/html/amigaz/prevue/videos/bumpers/
The player pulls the video list from:
* /prevue/api/list_videos.php
Supported extensions currently include:
* mp4, webm, ogg, mov, m4v
(Recommendation: MP4 H.264 + AAC for maximum browser compatibility.)
----
===== JSON Config =====
Main config:
* /var/www/html/amigaz/prevue/data/guide.json
It contains:
* Settings: timezone, grid window, grid step
* Player behavior: fallback message, weather cut-in settings
* Channels list
* Template schedule blocks (recurring programming)
Example settings:
"weatherCutIn": {
"enabled": true,
"url": "https://weather.amigaz.org/p/prevue",
"durationSeconds": 15,
"mode": "betweenVideos",
"everyNClips": 5
}
This allows **more space between weather** (example: show weather every 5 clips).
----
===== Nginx Notes (www.amigaz.org) =====
Key lesson learned: do NOT use ^~ on the /prevue/ location if you want regex PHP blocks to work.
Working pattern:
# PHP for /prevue/api/*.php
location ~ ^/prevue/api/.*\.php$ {
client_max_body_size 250m;
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
# Prevue static
location /prevue/ {
client_max_body_size 250m;
index index.html;
try_files $uri $uri/ =404;
}
Upload sizing:
* If you see 413 Request Entity Too Large, increase:
* nginx: client_max_body_size
* PHP: upload_max_filesize and post_max_size in /etc/php/8.3/fpm/php.ini
----
===== TODO / Next Steps =====
* Make the programming grid real (render actual blocks from templateSchedule)
* Add editor UI for programming blocks (instead of editing raw JSON)
* Add multi-folder rotation (trailers/ads/bumpers) and/or “recipe” based rotation
* Optionally add XMLTV import later as an adapter
----
===== Files / Structure =====
/var/www/html/amigaz/prevue/
├─ player/
│ ├─ index.html
│ ├─ player.js
│ └─ player.css
├─ editor/
│ ├─ index.html
│ ├─ editor.js
│ └─ editor.css
├─ api/
│ ├─ guide_get.php
│ ├─ guide_save.php
│ ├─ list_videos.php
│ └─ upload_video.php
├─ data/
│ └─ guide.json
└─ videos/
└─ bumpers/