Skip to content

Commit 9d94203

Browse files
authored
Merge pull request #830 from dreamteamprod/dev
Simplify docker compose file and update documentation
2 parents 0678e89 + f66cfc7 commit 9d94203

File tree

10 files changed

+132
-23715
lines changed

10 files changed

+132
-23715
lines changed

README.md

Lines changed: 90 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,119 @@
11
# DigiScript
22

3-
A digital script project for cueing theatrical shows
3+
**Real-time digital script management for theatrical productions**
44

5-
**Main Status:**
65
[![ESLint](https://github.com/dreamteamprod/DigiScript/actions/workflows/nodelint.yml/badge.svg?branch=main)](https://github.com/dreamteamprod/DigiScript/actions/workflows/nodelint.yml)
6+
77
[![Pylint](https://github.com/dreamteamprod/DigiScript/actions/workflows/pylint.yml/badge.svg?branch=main)](https://github.com/dreamteamprod/DigiScript/actions/workflows/pylint.yml)
88

9-
**Dev Status:**
10-
[![ESLint](https://github.com/dreamteamprod/DigiScript/actions/workflows/nodelint.yml/badge.svg?branch=dev)](https://github.com/dreamteamprod/DigiScript/actions/workflows/nodelint.yml)
11-
[![Pylint](https://github.com/dreamteamprod/DigiScript/actions/workflows/pylint.yml/badge.svg?branch=dev)](https://github.com/dreamteamprod/DigiScript/actions/workflows/pylint.yml)
9+
## Overview
10+
11+
DigiScript is a full-stack web application designed to modernize theatrical show management. Built for stage managers, technical directors, and production teams, it provides real-time script display, intelligent cue management, and collaborative show control in a browser-based interface.
12+
13+
DigiScript eliminates the need for paper scripts and manual cue sheets, while keeping your entire show and team synchronized in real-time.
14+
15+
## Who Should Use DigiScript
16+
17+
**Stage Managers** looking to eliminate paper scripts and manual cue tracking during live performances
18+
19+
**Technical Directors** managing complex shows with multiple cue types and microphone assignments
20+
21+
**Production Teams** needing real-time collaboration across multiple devices during rehearsals and performances
22+
23+
**Theater Companies** running shows over extended periods who need to track session history and maintain multiple script versions
24+
25+
## Key Features
26+
27+
### Real-Time Multi-Client Synchronization
28+
29+
DigiScript's WebSocket-based architecture enables seamless collaboration during live performances. One user acts as the "leader," controlling the script position, while all other connected clients—whether logged in or not—automatically follow along in real-time. If the leader disconnects, the system automatically elects a new leader, ensuring uninterrupted show operations.
30+
31+
![Live show interface with cues](docs/images/live_show/live_show_full_mode_with_cues.png)
32+
*Live show view with color-coded cues synchronized across all connected clients*
33+
34+
### Intelligent Cue Management
35+
36+
Create custom cue types (lighting, sound, special effects, etc.) with visual color coding for instant recognition. Cues can be attached to dialogue lines, stage directions, or dedicated cue lines. The system tracks cues across script revisions, making it easy to manage different versions of your show.
37+
38+
![Cue configuration interface](docs/images/config_show/cue_configuration_with_cues.png)
39+
*Cue configuration showing color-coded technical cues attached to script lines*
40+
41+
### Script Revisions
42+
43+
DigiScript's revision system functions like version control for your script. Create new revisions from any previous version, not just the latest, enabling parallel development paths. The visual revision graph shows branching history, making it easy to track changes and roll back if needed. All cues and configurations are tied to specific revisions, preserving the complete history of your production.
44+
45+
![Script revision graph](docs/images/config_show/script_revision_graph_branched.png)
46+
*Interactive revision graph showing branching script history with visual node representation*
47+
48+
### Advanced Microphone Management
49+
50+
DigiScript's microphone management system provides graphical allocation matrices for assigning microphones to characters across scenes. The system automatically detects conflicts when the same microphone needs to be reassigned between characters, color-coding them based on urgency (orange for tight changeovers within an act, blue for changeovers across act boundaries with interval time). Multiple visualization modes—by microphone, by character, or by cast member help plan mic usage and identify potential issues before they happen.
1251

13-
## Getting started
52+
![Microphone allocation timeline](docs/images/config_show/mics_timeline.png)
53+
*Timeline view showing microphone allocations across scenes with conflict detection*
54+
55+
### Flexible Script Modes
56+
57+
Choose between two show modes tailored to your production style:
58+
59+
- **FULL Mode:** Multi-column layout supporting up to 4 simultaneous speakers per line—ideal for ensemble shows, musicals, and scenes with overlapping dialogue
60+
- **COMPACT Mode:** Single-column streamlined layout—ideal for dialogue-heavy dramas and simpler productions
61+
62+
### Role-Based Access Control (RBAC)
63+
64+
Configure fine-grained permissions for team members. Grant specific users access to edit scripts, manage cues, or start show sessions, while restricting others to view-only access. The permission system operates at the resource level, allowing precise control over who can modify specific show elements.
65+
66+
### Session Tracking & History
67+
68+
Every live show session is recorded with start/end times and can be tagged for organization (e.g., "Dress Rehearsal," "Opening Night"). DigiScript tracks session duration, interval timing, and script position, providing a complete audit trail for your production's run.
69+
70+
## Getting Started
1471

1572
### Requirements
1673

1774
* Node v24.x (npm 11.x)
1875
* Python 3.13.x
1976

20-
### Client
77+
### Quick Start with Docker Compose (Recommended)
2178

22-
This installs and builds the client side files ([nvm](https://github.com/nvm-sh/nvm) recommended)
79+
The easiest way to run DigiScript is through Docker compose (there is a `docker-compose.yml` file [included](./docker-compose.yaml)).:
80+
81+
```shell
82+
docker-compose up -d
83+
```
84+
85+
DigiScript will be available at `http://localhost:8080`
86+
87+
### Manual Installation
88+
89+
#### Client
90+
91+
Build the frontend (output goes to `../server/static/`):
2392

2493
```shell
2594
cd client
2695
npm ci
2796
npm run build
2897
```
2998

30-
### Server
99+
#### Server
31100

32-
This installs the Python requirements needed to run the server ([pyenv](https://github.com/pyenv/pyenv) recommended)
101+
Install Python dependencies and run the server:
33102

34103
```shell
35104
cd server
36105
pip install -r requirements.txt
106+
python3 main.py
37107
```
38108

39-
## Other Documentation
109+
The server will be available at `http://localhost:8080`
110+
111+
### First Launch Setup
112+
113+
On first launch, DigiScript will prompt you to create an administrator user. From there, you can create shows, configure users, and begin building your production.
114+
115+
For detailed setup instructions and usage guides, see the [full documentation](https://github.com/dreamteamprod/DigiScript/tree/main/docs).
116+
117+
## License
40118

41-
* **[Development Guide](./documentation/development.md)**
42-
* **[Deployment Guide](./documentation/deployment.md)**
119+
See the [LICENSE](./LICENSE) file for licensing information.

docker-compose.yaml

Lines changed: 1 addition & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -7,85 +7,10 @@ services:
77
context: .
88
dockerfile: Dockerfile
99
restart: always
10-
container_name: DS-Server
11-
environment:
12-
DOCKER_DEPLOYMENT: "true"
10+
container_name: DigiScript
1311
ports:
1412
- 8080:8080
1513
volumes:
1614
- dssrv:/server/conf
17-
18-
prometheus:
19-
image: prom/prometheus
20-
restart: always
21-
volumes:
22-
- ./reporting/prometheus:/etc/prometheus/
23-
- prometheus_data:/prometheus
24-
command:
25-
- '--config.file=/etc/prometheus/prometheus.yml'
26-
- '--storage.tsdb.path=/prometheus'
27-
- '--web.console.libraries=/usr/share/prometheus/console_libraries'
28-
- '--web.console.templates=/usr/share/prometheus/consoles'
29-
ports:
30-
- 9090:9090
31-
extra_hosts:
32-
- "host.docker.internal:host-gateway"
33-
links:
34-
- cadvisor:cadvisor
35-
depends_on:
36-
- cadvisor
37-
- node-exporter
38-
- server
39-
40-
node-exporter:
41-
image: prom/node-exporter
42-
volumes:
43-
- /proc:/host/proc:ro
44-
- /sys:/host/sys:ro
45-
- /:/rootfs:ro
46-
command:
47-
- '--path.procfs=/host/proc'
48-
- '--path.sysfs=/host/sys'
49-
- --collector.filesystem.ignored-mount-points
50-
- '^/(sys|proc|dev|host|etc|rootfs/var/lib/docker/containers|rootfs/var/lib/docker/overlay2|rootfs/run/docker/netns|rootfs/var/lib/docker/aufs)($$|/)'
51-
- '--collector.systemd'
52-
- '--collector.processes'
53-
ports:
54-
- 9100:9100
55-
restart: always
56-
deploy:
57-
mode: global
58-
59-
cadvisor:
60-
image: gcr.io/cadvisor/cadvisor:latest
61-
volumes:
62-
- /:/rootfs:ro
63-
- /var/run:/var/run:rw
64-
- /sys:/sys:ro
65-
- /var/lib/docker/:/var/lib/docker:ro
66-
ports:
67-
- 8090:8080
68-
restart: always
69-
deploy:
70-
mode: global
71-
72-
grafana:
73-
image: grafana/grafana
74-
user: '472'
75-
restart: always
76-
environment:
77-
GF_INSTALL_PLUGINS: 'grafana-clock-panel,grafana-simple-json-datasource'
78-
volumes:
79-
- grafana_data:/var/lib/grafana
80-
- ./reporting/grafana/provisioning:/etc/grafana/provisioning/
81-
env_file:
82-
- ./reporting/grafana/config.env
83-
ports:
84-
- 3000:3000
85-
depends_on:
86-
- prometheus
87-
8815
volumes:
8916
dssrv:
90-
prometheus_data:
91-
grafana_data:

documentation/deployment.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ cd server
99
./main.py
1010
```
1111

12-
## Running using docker
12+
## Running using Docker
1313

1414
This will start DigiScript running, and map port 8080 locally to 8080 on the container
1515

documentation/development.md

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,45 @@
11
# Development Guide
22

3+
**Main Status:**
4+
5+
[![ESLint](https://github.com/dreamteamprod/DigiScript/actions/workflows/nodelint.yml/badge.svg?branch=main)](https://github.com/dreamteamprod/DigiScript/actions/workflows/nodelint.yml)
6+
7+
[![Pylint](https://github.com/dreamteamprod/DigiScript/actions/workflows/pylint.yml/badge.svg?branch=main)](https://github.com/dreamteamprod/DigiScript/actions/workflows/pylint.yml)
8+
9+
**Dev Status:**
10+
11+
[![ESLint](https://github.com/dreamteamprod/DigiScript/actions/workflows/nodelint.yml/badge.svg?branch=dev)](https://github.com/dreamteamprod/DigiScript/actions/workflows/nodelint.yml)
12+
13+
[![Pylint](https://github.com/dreamteamprod/DigiScript/actions/workflows/pylint.yml/badge.svg?branch=dev)](https://github.com/dreamteamprod/DigiScript/actions/workflows/pylint.yml)
14+
15+
## Architecture Highlights
16+
17+
DigiScript uses split front-end and back-end architecture with the following key technologies:
18+
19+
- **Real-time WebSocket protocol** with leader-follower architecture for synchronized multi-client operation
20+
- **SQLAlchemy 2.0 ORM** with sophisticated revision-scoped associations for managing complex script relationships
21+
- **Vuex state management** with modular structure and localStorage persistence for reactive UIs
22+
- **JWT authentication** with role-based access control using bitmask permissions
23+
- **Compiled script caching** with gzip compression for fast live show performance
24+
- **Automatic database migrations** via Alembic, checked on server startup
25+
26+
## Contributing
27+
28+
Contributions are welcome! Please ensure all client and server code passes linting checks before submitting pull requests:
29+
30+
```shell
31+
# Client linting
32+
cd client
33+
npm run lint
34+
35+
# Server linting
36+
cd server
37+
ruff check server/
38+
ruff format server/
39+
```
40+
41+
When creating pull requests for new features, target the `dev` branch.
42+
343
## Websocket messaging
444

545
Websockets are used to communicate between the clients and the server.

reporting/grafana/config.env

Lines changed: 0 additions & 3 deletions
This file was deleted.

reporting/grafana/provisioning/dashboards/dashboard.yml

Lines changed: 0 additions & 12 deletions
This file was deleted.

0 commit comments

Comments
 (0)