Version v3.0.0.22

CC Theater Help

Overview

CC Theater is a full-featured captioning tool for use with live theater. It can be used for displaying:

and it can do all of these simultaneously, if desired.

screen shot of main cctheater window

Requirements

The following are required to run CC Theater:



Quick Start

After installing CC Theater, follow these steps to get up and running quickly:

  1. Download and install NodeJS on the target computer.Download it from http://nodejs.org. Select the LTS (Long Term Support version).
  2. Download and install CC Theater on the target computer. Download it from http://getaccesstech.com/cctheater/downloads.html.
  3. Start the CC Theater application and enter the registration/license information when prompted.
  4. Develop a caption script (see Script Markup)from the play script. Break longer lines into shorter lines with hard returns. Leave a blank line between captions. Export the script file in Plain text (UTF-8 unicode) format with Linefeeds using MSWord or other suitable text editor.
  5. Open the caption file via the File/Open File... menu item or drag/drop it in the Guide Track area. The script will appear in the Guide Track area, and a Stream window will appear below the main window. Make sure that the green Connect light is lit. This indicates that CC Theater is communicating with its web server.
  6. For closed captions (watched on personal devices), on a mobile device point the browser to the URL corresponding to the TCP/IP number of the CC Theater computer(the local TCP/IP number of the machine is shown near the top left of the main window) and an optional port number (the default is port 80) as shown in the Tools/Options menu Text Server tab. (e.g. http://192.168.1.42).
    Note: If a firewall is enabled on the CC Theater computer, make sure to allow in- and outbound connections on that port.
  7. For open (projected) captions, open a browser on the CC Theater computer by clicking the Tools/Open Projector Page menu item. Position the browser window on your projector monitor and maximize the window.
  8. As the actors speak their lines, send each caption by pressing the space bar (or use Tools/MOUSE-MODE and click the mouse on the window)

The two images below show what a patron would see on a smart phone with its browser pointing to the CC Theater web server. Patron Figure 1 shows the language picker, and Patron Figure 2 shows the browser displaying the most recent caption.

patron figure 1: language picker menu on a smart phone
Patron Figure 1:
Language Picker Screen on Smart Phone
patron figure 2: caption display on smart phone
Patron Figure 2:
Caption Displayed on Smart Phone

 

Main Window

This is the main window of CC Theater. It allows you to load a script, gate out captions as lines are spoken, and start/stop pre-show looping. There are several user interface components, as described below.



screen shot of main cctheater window >

Control and Field Descriptions

Refer to the figure above:



Menu Items

There are a few menu items worth noting:

Options

The Options window allows you to set up common preferences which are saved between sessions.

Options (General)

This is the General tab of the Tools > Options window of CC Theater. .

general tab of the options window



Options (Text Server)

This is the Text Server tab of the Tools > Options window of CC Theater. .

text server tab of the options window

NOTE: If the CCTheater computer is running a firewall, or there's a firewall on the LAN, make sure that all firewalls allows access through port 80 (or the port specified above) to the CCTheater computer.



Options (Text Style)

This is the Text Style tab of the Tools > Options window of CC Theater. .

text style tab of the options window

NOTE: If you are taking advantage of Advanced scripting features such as setting a background image and using associated CSS files to alter the box geometry, these User Interface settings will be overridden by those script-based CSS style settings.

NOTE: The display (patron) side is viewed in a browser, and is controlled by HTML and CSS. Discussion of HTML and CSS is beyond the scope of this document. Feel free to experiment, and you can always click the Reset buttons to return the settings for a page to it's factory defaults.



Options (Miscellany)

This is the Miscellany tab of the Tools > Options window of CC Theater. The settings in this area are for advanced users, and should not be changed unless you really know what you're doing.

miscellany tab of the options window



Drag &Drop

CC Theater responds to drag-and-drop for loading script files:



Zoom Captioning

CC Theater can send captions into a Zoom meeting, which you might be using for social distancing and remote performances. When you check the Zoom Mode checkbox in the main window, the Zoom Captioning window is displayed (see below). To set up Zoom captioning:

  1. Copy API Token - On the Zoom meeting host's computer, obtain the "API Token" from the Zoom meeting host. (Note that the Zoom meeting will have to have captioning enabled. Consult the Zoom documentation if necessary.) The image (Zoom Figure 1) below shows the window that's displayed in Zoom when the meeting host clicks on the "Live Transcript" button in the Zoom window. Click on the "Copy the API token" button to put the token into the clipboard, and then use email or some other mechanism to send the token from the clipboard to the CC Theater computer.
  2. Turn On Zoom Mode - On the CC Theater computer, set the checkbox labeled "Zoom Mode" in the main window. CCTheater's Zoom Captioning window will display.
  3. Retrieve API Token on CC Theater Computer - On the CC Theater computer, open the email or other document that you received from the hosts computer, copy the token to the clipboard.
  4. Paste API Token into CC Theater - Paste the token from the clipboard into the Zoom Captioning window by clicking the "Paste from Clipboard" button. The image (Zoom Figure 2) below shows the CC Theater Zoom Captioning window with an API token already pasted into the field. It's a long thing, you wouldn't want to type it at the keyboard because it has to be exactly as shown in the Zoom meeting window.
  5. Send Captions - Once the token is in the window, you're ready to send captions normally. When you send a caption from CC Theater, it will automatically be sent to Zoom along with that token which tells Zoom to include it in the meeting stream.
  6. Zoom Users Show Subtitles - After a caption has been received by a Zoom user's computer, the Zoom toolbar at the bottom of their Zoom window will show the "Live Transcript" button, and they can click the "Live Transcript" button and select "Show Subtitle" as shown in the image (Zoom Figure 3) below. Zoom Figure 4 below shows a caption displayed at the bottom of the main Zoom meeting window.

Zoom Figure 1: Zoom Meeting Host API Token
Zoom Figure 1:
Zoom Meeting Host API Token

Zoom Figure 2: Zoom Captioning window in CC Theater
Zoom Figure 2:
Zoom Captioning window in CC Theater

Zoom Figure 3: Zoom User Show Subtitles
Zoom Figure 3:
Zoom User Show Subtitles

Zoom Figure 4: zoom meeting window with caption at bottom
Zoom Figure 4:
Zoom Meeting Window with Caption Displayed


 
Note that Zoom captions will scroll into view for Mac users, but for Windows users, only one line at a time will display, replaced by each successive line. This ia a bug in the Zoom client for Windows, not a bug in CC Theater.



Advanced

General

CCTheater runs a web server which serves 3 different HTML pages (/mobile, /hybrid, and /projector.) When a user points a browser to a "naked" URL corresponding the TCP/IP number of the CCTheater computer, CCTheater sends back the page corresponding to the Default Route in the Text Server tab of the Options window. You can always go directly to a page by appending the desired page to the TCP/IP number (e.g. 192.168.1.1/hybrid or .../projector)

Projector

If you wish to display open captions for all patrons to see, you can use CC Theater's projector page. This is really just a special web page which responds to additional Script Markup in the script file. To use the projector features, you could connect a digital projector to your CCTheater computer, and make sure the display settings EXTEND THE WINDOWS DESKTOP. Then open a browser window on the projector display and point the browser to:

(simplest setup): http://localhost/projector    (general case): http://[your server address:port]/projector
The general case above might be useful when the projector is connected to a computer which is not the CCTheater computer. I that case, the projector's computer acts just like a patron's device, except that it opens the projector version of the webpage, see below.

The projector page is similar to regular (mobile) page in terms of how captions are rendered subject to the Script Markup. The default projector page is completely sufficient to provide basic projected captions at the front of the theater. It defaults to white captions on a black background (or whatever color is set in CC Theater.) Some productions, however, prefer to use design elements for the background of the screen, sometimes changing the background for different scenes. To facilitate this, the projector page reacts to the background image markup command:

#background=xyz.png
If you precede a caption with the #background markup, the projector page will load the specified image file as the background of the page when the associated caption is displayed, and captions and the enclosing rectangle will be overlayed on the background. A background image will persist until a new background image is called for in the script.

Additionally, when the projector page loads the background, it also looks for a corresponding CSS file of the same basename (e.g. xyz.css) and loads that as well. Using the CSS file, you can change features that may not have explicit setters in the CCTheater interface. The following CSS example adds a red 2-pixel solid border to the caption box:

#dataDisplay .captionPane {
	border: 2px solid red;
	}
Note that certain CSS styles that correspond to existing script commands such as text color, alignment, and box geometry will no longer override styles that are set in the user interface or script commands. For example, to display a background which has a hole cut for the caption box, include a corresponding   #box=   script command in the same caption block that has the   #background=   script command.


Note: Ornate backgrounds and colors are not recommended. These may simply be a distraction from the main purpose of the captions, which is... to provide captions to patrons.



Style Considerations

CCTheater allows for setting quite a few style characteristics. These include display presentation (e.g. rollup, popon, blockRoll), font family, font size, text color, alignment, and such. While there are no right or wrong choices, it is wise to consider your likely users as well as the underlying content as you make your styling decisions.

Command-Line Parameters

If called from a terminal window, or initiated from a shortcut which contains parameters, CC Theater responds to the following switches and parameters (switches preceded by forward slash ('/'):

FILENAME - The caption file to sequence. Do not precede with a forward slash.

/w - secondary webstream script file. The next parameter should be the full path to the script file.

Example command line call - C:> cctheater  c:\directory\myEnglishFile.txt  /w c:\directory\mySpanishFile.txt



Script Preparation

Script Prep (Theory)

Caption

A caption script is a plain text file organized as a series of text blocks, with each block separated from the next by one or more blank lines. A text block consists of script commands followed by one or more lines of text. Script commands begin with "#", and define things like caption styles, background images, and such. The following is a simple example of two sequential text blocks:

;Text Block #1
;Comment lines (beginning with a semicolon) are ignored
;This comment line is part of the first text block. The next line is a script command
FRANCISCO: For this relief much thanks.
’Tis bitter cold, And I am sick at heart.

;Text Block #2
;This comment line is part of the second text block
BARNARDO: Have you had quiet guard?
The first text block above contains a two-line caption The second text block has just a single line in it.

A typical caption script would be a long list of text blocks, saparated by a blank line between each block. The caption script is simply a derivative of the play script, with extraneous pieces, like stage direction, etc., removed. A CCTheater Operator listens to the actors deliver their lines, sending out each entire block or a single line of a block (depending on the caption style, but more on that later) as the actors deliver their lines.

Here's another example:

;Text Block #1
#pop
Welcome to tonight's performance of
Hamlet
The show will be gin shortly

;Text Block #2
;ACT I
;SCENE I. Elsinore. A platform before the Castle.
;Enter Francisco and Barnardo, two sentinels.
#roll
BARNARDO: Who’s there?

;Text Block #3
FRANCISCO: Nay, answer me. Stand and unfold yourself.

;Text Block #4
BARNARDO: Long live the King!

Notice the #pop command on the first block while the second block has a #roll command. The pop/roll/blockroll commands set the captioning style, how the text is added to the display. It's probably the single biggest decision for caption script preparation, how the captions will be displayed on devices.

There are three styles: Roll-up, Pop-on, and Block-Roll.

In the second example script above, notice that the second and third blocks contain no caption style directive. The answer is that the caption style directive is sticky. That is, the style from the previous block persists until a new caption style is encountered for a text block. When CCTheater loads this script, it creates two internal events, one for each block. As it reads the blocks, it remembers the setting from the previous block unless it finds a new directive.

From the Operator's perspective, they first see a 3-line caption pending and pop-up style is declared. The caption is designed to welcome caption viewers before the show starts, so the operator gates it out before the show actually begins. The patrons see that welcome message filling the screen when they connect to CCTheater. As the show begins, Barnardo delivers his line "Who's there?" The operator gates out the subsequent (one-line) captions. Patrons see each caption scroll in from the bottom, with a blank line between the captions CCTheater inserts those blank lines between text blocks. For roll-up text blocks with multiple lines, gating out the caption sends one line each time until the entire text block has been sent.

Description (text)

The "text" flavor of a description script (#type=description.text) is basically the same as it's caption cousin. A text blocks contains the description that's to be gated out at the appropriate time. An example:

;Barnardo: The rivals of my watch, bid them make haste...
Horatio and Marcellus enter the room

;Francisco: Give you good night...
Francisco exits

You can see that a description.text script is essentially identical to a caption script, except that it has the text of a description which gets gated out. A patron who connects to that channel, and has their in-built screen reader (VoiceOver on iOS, TalkBack on Android) enabled on their device, hear's each description read aloud as it's gated out by the Operator.

Description (audio)

The "audio" flavor of a description script (#type=description.audio) is a very different from a caption or text description script. Here's a portion of aan example script:

#config #language=en #type=description.audio #adsource=$PRIVATE/hamletAD.mp3 #adpreshowtrigger=00:22:14.350, 00:32:29.470, 0, loop

;Barnardo: The rivals of my watch, bid them make haste...
#adtext=bid them make haste... Horatio and Marcellus enter the room
00:00:04.162, 00:00:14.756
Note the strange bits of the form:
hh:mm:ss.sss, hh:mm:ss.sss, ss.sss, loop
Those are called triggers. A trigger represents an index into an audio file, and it consists of a start time, a stop time, an optional delay time, and an optional loop indicator.

The #config line at the top of the example contains three important pieces of markup The #type=description.audio just tells CCTheater that this is a description script of the audio flavor.

The important part of the text block in the example contains a simple trigger consisting of just the start and end times. When the Operator gates out that trigger event, the preshow or whatever description might be playing stops playing and the specific audio sub-clip is played. Each sub-clip is short enough that it can play through to completion without butting up to a subsequent sub-clip.

Also notice the #adtext=xyz script command. The value of #adtext is displayed in the cell with the associated trigger. This can serve as a hint to the Operator about when the event should be gated out and what its sub-clip contains.



Script Prep (Practice)

The caption script file is typically prepared from the play script. This can be accomplished efficiently with a word processor like MSWord or others through the use of Find/Replace and brute force.

The two things to keep in mind during script preparation include:

If you want to make quick changes to a script file but don't want to do it through your word processor or text editor, you can do it directly in CC Theater by using the EDIT button near the top right of the main window (near the Guide Track field.) This will pop up a basic text editor offering Find functionality. Note that CC Theater inserts commented number lines which correspond to the caption numbers displayed in CC Theater, to help you locate text. Those synthetic number lines will be removed from the script when you save it and return to CC Theater. This allows you to insert/delete entire captions without worrying about the caption numbers, which will be recalculated/regenerated by CC Theater.

NOTE: Remember to work on a COPY of the original script, and to save early and often.

Script Markup

A script file must be a plain text file. Captions are separated by a blank line, with optional configuration parameters as described below. For example:
#config  #language=en #ccstyle=rollup

;the next line marks the start of the preshow loop, and sets a background image
#preshowstart #background=Seussical Trees Preshow.png
;the next line sets popup style
#popup
The show will begin shortly.

;the next line sets another full-screen image and hides the caption box
#background=OpenDoor Presents Seussical.png #boxoff
#popup
<erase>

;the next line marks the end of the preshow loop, and sets a background image
;the caption box will revert to visible since #boxoff is not asserted
#preshowend #background=Seussical Trees Preshow.png
#popup
Exits are to the rear and 
front left of the theater.

#background=Seussical NoCellPhones.png #boxoff
<erase>

#background=OpenDoor Presents Seussical.png #boxoff
<erase>

#background=Seussical Trees.png
;the next line sets rollup style
#rollup
BOY: 
Now that is a very unusual hat.
I wonder what's under a hat 
such as that?

;this caption continues in rollup mode because style is sticky
It could be a creature 
they call the Ga-Zat 
who balances things on his head, 
cause it's flat,

;the following popup caption is surrounded by musical notes
#popon
^ this is a song caption surrounded
by musical notes <note>


Frequently Asked Questions (FAQs)

Yes, you can bypass the initial stream picker page. The general URL would be something like:

  • http://myserver?channel=programName,streamType,language
    where:
    • programName is the name of the show (the value seen in the "Program" field on the main CC Theater window.)
    • streamType is either "caption" or "description" (the value seen in the "Type" dropdown field on Tools / Options / Text Server.
    • language is the two-letter ISO 639 language of the stream as declared in the #config line of the script with #language
    For example:
  • http://myserver/index.html?channel=Twilight Zone,caption,en
  • given a script with the following #config line at the top:
    • #config #program=Twilight Zone #type=caption #language=en
To avoid the patron having to type in such an unwieldy URL, you might print out a URL QR code on fliers to be distributed at the show. Users could simply scan the QR code with their smart devices and their browsers would automatically open that URL. You could also print a WiFi QR code to help them join a private house WiFi network which includes the CC Theater computer.



What's New

Download Installers

    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    '' D O C U M E N T A T I O N
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    '' RELEASE HISTORY
    ''
    '' ----------------
    ''      v.3x
    '' ----------------
    ''  - v3.0.0.22 - release
    ''      - Added: script command for font size
    ''          - Block level: script command #SIZE=ValueUnits (e.g. #SIZE=2.3vw, #SIZE=32px, etc.)
    ''      - Added: #PRE as alias for #PREFORMAT (convenience for multi-column captions)
    ''      - Added: Allows decimal values for font sizes in Tools/Options UI
    ''      - Added: "vw" to fontSize unit picklists in Tools/Options UI
    ''      - Changed: #PREFORMAT command now turns on word-wrap for the caption; previously overflow was invisible
    ''          making it easier to see sizing mistakes in multi-column caption blocks
    ''      - Changed: Current highlighted (pending) caption in guide track now positions to second row in list when possible
    ''          making it easier to see pending caption in the context of previous caption block
    ''      - Fixed: #left/center/right settings now properly "sparsified" in the guide track display; only changes displayed
    ''      - Fixed: Double-click in Guide Track now handled properly (like a single click)
    ''      - Fixed: clicking in the guide track sometimes painted duplicate rows
    ''
    ''  - v3.0.0.21 - release
    ''      - Added text alignment settings in Tools/Options/TextFormat for each of POP and ROLL/BLOCKROLL (STICKY)
    ''      - Added script command #CONTINUE to suppress blank line between caption blocks.  (NOT STICKY)
    ''      - Added script command for text alignment (STICKY)
    ''          - Block level: #TEXTALIGN=left|center|right|default (at beginning of caption block, STICKY)
    ''          - Line level: #LEFT CENTER #RIGHT (appended to individual lines) STICKY
    ''      - Added script command #COLOR=value for text color (STICKY)
    ''          - Block level: #COLOR=blue or  #COLOR=#rrggbb (at beginning of caption block, STICKY)
    ''          - Line level: #COLOR=blue or #COLOR=#rrggbb (appended to individual lines) STICKY
    ''      - Added script command #BOX=value for box geometry (e.g. #BOX=top:0px;left:50%;height:50%;width:50%  for top right quadrant) (STICKY)
    ''      - Added script command #PREFORMAT for preformatted (columnar) captions (e.g. #PREFORMAT) (NOT STICKY)
    ''      - Changed: captions that roll in are now always displayed even if they're too big for the box; they used to be erased before they were seen  
    ''      - Changed: switching between ROLL and BLOCKROLL no longer clears screen
    ''      - Fixed: Selecting Tools/Options when it's already showing/minimized doesn't crash  
    ''
    ''  - v3.0.0.20 - release
    ''      - UI Box geometry settable and working for projector page
    ''      - UI Box geometry not implemented for mobile/hybrid pages
    ''
    ''  - v3.0.0.19 - release
    ''      - Disabled (not yet implemented): Text box geometry settings now properly saved (top/left/height/width) between sessions
    ''      - Fixed: Projector mode, when using custom background image, scrolling text caused image to shift up
    ''
    ''  - v3.0.0.18 - release
    ''      - Added: Ability to set default font family and size for each page (hybrid/mobile/projector) from Tools/Options.
    ''          - Should be easier than creating/editing ...Private.css files for simple setups and usage.
    ''      - Added: Ability to set caption box geometry for each page (hybrid/mobile/projector) from Tools/Options.
    ''          - Should be easier than creating/editing ...Private.css files for simple setups and usage.
    ''      - Added: Ability to set caption box geometry for each page (hybrid/mobile/projector) from Tools/Options.
    ''      - Changed: hybrid and mobile pages now have the same (larger) button size on the channel picker page.
    ''      - Fixed: In Guide Track table, rollup mode, red highlight no longer drifts lower and lower for a many-lined caption
    ''      - Fixed: Server(v3.11) mobile/hybrid page refreshes no longer repeat last caption on projector page (singleChannelMode)
    ''      - Fixed: AD Audio comfort message (stream ID) not erased during orientation change
    ''      - Fixed: reconnected AD-Text stream voicing
    ''      - Fixed: menu (in client) made fully visible when activated (touching screen or clicking button)
    ''
    ''  - v3.0.0.17 - release
    ''      - Fixed: In the editor, Find sometimes crashed.
    ''
    ''  - v3.0.0.16 - release
    ''      - Fixed: Default caption style (in Tools/Options/Miscellany tab) now properly obeyed during script load
    ''
    ''  - v3.0.0.15 - release
    ''      - Changed: Erasures can now be embedded within a caption block. 
    ''          - For rollup mode, this works intuitively.
    ''          - For popup and blockroll, embedded erasures are ignored (when the caption block contains dialog
    ''          - As before, for popup and blockroll, create erasures as standalone caption blocks
    ''
    ''  - v3.0.0.14 - release
    ''      - Added: Rollup display now automatically scrolls to bottom of screen to help Chrome/iOS
    ''
    ''  - v3.0.0.13 - release
    ''      - Added: CTRL-SPACE sends previously displayed event, in case of mistaken early send of current event
    ''      - Changed: Orientation change on client no longer displays Back menu automatically
    ''      - Changed: CSS: channel menu buttons and text taller
    ''      - FIxed: ESC now correctly doesn't reposition after #preshowend when not already looping
    ''      - Added: hint on how to end preshow loop (ESC to stop)
    ''      - Fixed: #ccstyle=xxxx in scripts now properly supercedes UI setting in Tools/Options
    ''      - Added: New #ccstyle=blockroll / #blockroll sends full caption blocks in rollup mode (easier for operators)
    ''
    '' ----------------
    ''      v.2x
    '' ----------------
    ''  - v2.0.0.31 -Release
    ''      - <erase> | <clear> now works during rollup style
    ''      - added Open Projector Page menu item for ease of use
    ''      - fixed more vertical overlapping issues during rollup
    ''
    ''  - v2.0.0.30 -Release
    ''      - Fixed Reload function with no active script, ignored
    ''      - Fixed, Reload immediately after startup no longer lands on last caption
    ''      - Removed cruft from Pref/General tab, BGColor label was covering some On Exit options
    ''      - Enabled Test Display and Clear Display from Prefs/General tab
    ''      - Force Prefs and Log windows to first open on same screen as main window
    ''      - Dispose of stream handle after reading file to make sure it's not locked for external editors
    ''      - Improved calculation of height of wrapped rollup text, no longer overlapping surrounding lines
    ''
    ''  - v2.0.0.29 -Release
    ''      - CSS styles (from bgImages) now override UI-set styles (currently only color and backgroundColor
    ''      - Image CSS can now set font-family (as well as most other things. Font size still affected by direct element settings in UI.
    ''      - Updated documentation for CSS styles
    ''      - Dimmer (on mobile page) currently broken, to be fixed in a future rev.
    ''
    ''  - v2.0.0.28 -Release
    ''      - TextServer update, still 1.002
    ''          - added redirect for /projector to /projector.html
    ''
    ''  - v2.0.0.27 -Release
    ''      - TextServer update to v1.002
    ''          - fixed projector channel info for default projector.html redirect
    ''      - User Interface
    ''          - fixed channel list anchor when resizing window
    ''
    ''  - v2.0.0.26 -Release
    ''      - (installer) added NodeJS installation warning to installer
    ''      - check during startup for nodejs.exe
    ''      - fixed error when using malformed zoom caption API token, now gracefully warns
    ''      - updated help documentation around markup
    ''          - Markup:
    ''              - #ccstyle synonyms explained (pop/roll etc.)
    ''              - background image load side effect loading .css
    ''              - css identifiers/classes etc. for color, background, left/top/width/height, etc.
    ''          - Miscellany:
    ''              - allow outbound/inbound connections in firewalls
    ''
    ''  - v2.0.0.25 -Release
    ''      - FIXED:
    ''          - parsing script #config line for style
    ''          - Main window startup barker is now properly obfuscated on launch
    ''          - fixed regression error: Canceling a File Open dialog crashes app
    '' 			- fixed regression error: blank line between rollup captions erased screen
    ''      - ADDED:
    ''          - default text color can now be customized, in addition to background color (in Tool/Options...)
    ''              (This (currently) affects both webstreams (index.html) as well as projector mode (projector.html))
    ''          - text and background color controls added to main window
    ''
    ''  - v2.0.0.24 -SKIPPED
    ''
    ''  - v2.0.0.23 - Release
    ''      - updated help documentation around markup, imageDir, etc.
    ''
    ''  - v2.0.0.22 - Release
    ''      - fixed bug in Zoom mode, sometimes crashed on startup (fetchNextSeqNum)
    ''
    ''  - v2.0.0.21 - Release
    ''      - preshow looping now starts immediately but uses prefs settings between captions
    ''      - fixed regression error after zoom implementation, popup mode misbehaved
    ''    ''
    ''  - v2.0.0.20 - Beta Release
    ''      - added Zoom captioning mode. Requires user to paste in the API token from Zoom client
    ''      - user-settable Pre-Show timer delay between captions
    ''
    ''  - v2.0.0.19 - Release
    ''      - fixed regression error parsing  captions, preshowstart/end again correctly located
    ''
    ''  - v2.0.0.18 - Release
    ''      - PROJECTION MODE: fixed JS error, no longer checks for brightness slider on client
    ''      - PROJECTION MODE: captionPane now responds to CSS sizing for .captionPane during bgImage changes.
    ''
    ''  - v2.0.0.17 - Release
    ''      - fixed cross-thread bug when restarting server during custom logo option setup
    ''      - added text brightness slider on mobile screen
    ''
    ''  - v2.0.0.16 - Release
    ''      - added support for custom images to be displayed on main mobile page (stream selection screen)
    ''
    ''  - v2.0.0.15 - Release
    ''      - user menu bar now displays on a timer after touching screen
    ''
    ''  - v2.0.0.14 - Release
    ''      - implemented #imagedir in SCRIPTS. It sets the reference directory for subsequent #background images
    ''      - implemented #boxoff which hides the caption box, good for full-screen background images with info.
    ''
    ''  - v2.0.0.13 - Release
    ''      - all entities (named, numeric) as well as html markup now allowed within Script
    ''      - in-built editor correctly numbers all caption chunks
    ''
    ''  - v2.0.0.12 - Release
    ''      - allows long filenames for directories and files referenced in Script (background images and corresponding CSS files)
    ''      - allows sub-directories below the private directory to keep things organized
    ''      - allows use of $PRIVATE as reference to private directory in Script (instead of -priv@te-)
    ''      - now properly reads UTF-8 script into in-built editor and exports back to UTF-8
    ''
    ''  - v2.0.0.11 - Release
    ''      - correctly works with multiple displays, showing form at startup at last position if possible
    ''      - include deactivation button with CTRL key down during Registration form.
    ''      - check for license AFTER main window comes up
    ''
    ''  - v2.0.0.6 - Pre-Release
    ''      - fixed port setup, now correctly reflects Tools/Options settings for random ports and works on port 80
    ''
    ''  - v2.0.0.5 - Pre-Release
    ''
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''