Files
two-stands-cg/README.md
T
2026-08-02 11:32:45 +03:00

148 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Two-Stands Transfers — Broadcast Graphics Template
Soccer player transfer broadcast graphics — **transparent overlay** for **1920×1080** frames.
## Specifications
| Property | State 1 (Reveal) | State 2 (Compact) |
|-------------------|------------------|------------------------|
| Frame | 1920×1080 px (transparent) | 1920×1080 px (transparent) |
| Graphics area | 1920×758 px | 641×758 px (centered) |
| Duration | 5 seconds | holds until next |
| Player photo | 641×758 PNG (1:1) | 230px crop from 641-wide source |
## Layout — State 1 (05 s)
Full-width 1920×758 bar:
```
┌─────────────────── 1920×758 ──────────────────────────────┐
│ │
│ ┌──────────┐ ПЕРЕХОД │
│ │ │ │
│ │ PLAYER │ PLAYER NAME │
│ │ PHOTO │ │
│ │ │ │
│ │ 641px │ [MLS] ЧЕЛСИ ┌──────────┐ │
│ │ (1:1) │ │ 138 млн │ │
│ │ │ └──────────┘ │
│ └──────────┘ │
└──────────────────────────────────────────────────────────┘
```
## Layout — State 2 (after 5 s)
Shrinks to centered 641×758:
```
┌──────── 641×758 ────────┐
│ │
│ ┌────────┐ ПЕРЕХОД │
│ │ PHOTO │ PLAYER NAME │
│ │ 230px │ │
│ │ │ ЧЕЛСИ │
│ │ │ ┌────────┐ │
│ └────────┘ │ 138 млн│ │
│ └────────┘ │
└─────────────────────────┘
```
## Data — `data/transfers.json`
Generated from `assets/transfers-list.csv`. Each transfer object:
```json
{
"id": 1,
"playerName": "Морган Роджерс",
"photo": "assets/players/player_01.png",
"team": {
"name": "Челси",
"logo": "assets/teams/chelsea.svg",
"color": "#034694",
"accent": "#FFFFFF"
},
"price": "138 млн",
"isFreeAgent": false
}
```
For free agents (`isFreeAgent: true`), the price badge turns green and the
label shows "Статус" instead of "Сумма".
### Data source — `assets/transfers-list.csv`
```
Player, Club, Sum
Морган Роджерс, Челси, 138 млн
Энтони Гордон, Барселона, 80 млн
Ибрагим Конате, Реал, Свободный агент
```
Edit the CSV, then re-run the generator to rebuild `transfers.json`
and regenerate placeholder PNGs + team crests.
## Usage
### 1. Run a local server (needed for fetch)
```bash
python3 -m http.server 8000
```
### 2. Open in browser
```
http://localhost:8000
```
### 3. Controls
| Key | Action |
|----------------|---------------------------|
| → / Enter | Next transfer |
| ← / Backspace | Previous transfer |
| R | Replay current |
| H | Hide / Show |
| A | Toggle autoplay (8s loop) |
### External API (CasparCG / OBS)
```javascript
window.transferGraphics.showAt(0); // show transfer #1 (starts State 1)
window.transferGraphics.next(); // next transfer
window.transferGraphics.prev(); // previous transfer
window.transferGraphics.replay(); // replay current
window.transferGraphics.hide(); // hide graphics
window.transferGraphics.show(); // show graphics
window.transferGraphics.autoplay(); // toggle autoplay
```
## Generating Placeholder Assets
```bash
python3 generate_placeholders.py
```
This reads `assets/transfers-list.csv` and generates:
- `assets/teams/*.svg` — team crest placeholders (colored shields)
- `assets/players/player_*.png` — player PNG placeholders at **641×758**
- `data/transfers.json` — the transfer data file
**Replace** the placeholder PNGs with real 641×758 player cutouts — just
drop your files into `assets/players/` with the same names (`player_01.png`,
`player_02.png`, …). No scaling needed — the source image is displayed 1:1
in State 1, and CSS `object-fit: cover` crops it for the compact State 2.
## Timing
```
0.0 s Card enters (slide + fade)
0.15s Photo scales in
0.35s "ПЕРЕХОД" label slides down
0.55s Player name slides in
1.0 s Team block appears
1.35s Price badge pops in (bounce)
5.0 s Container shrinks 1920 → 641 (0.85 s smooth transition)
5.85s+ Compact state holds
```