Up Front
- created by Lukas Steinwender.
- an add-on to add custom information useful for the presenter to an active slideshow.
-
I am a firm believer in open source software.
As such, the code is publicly available for inspection and can be found in the presentation containing the add-on.
To view the code follow the steps below:
- open the presentation in your web browser
- navigate to
Extensions > Apps Script - There you go, all the code at your disposal!
- while this documentation contains the necessary things for a user, I do encourage you to have a look at the docstrings in the add-on code (see above)
- the terms of service can be found here
- the privacy policy can be found here
Quickstart Guide
Global Configurations
Before using the Add-on you have to specify your global configurations on the first slide of your presentation. There are a few required configurations. These are added by including the following in the speaker notes of the first slide in your presentation:
<GSInfos>
author: <your name>,
title: <title of the presentation>,
duration: <expected duration of the presentation>,
</GSInfos>
All currently supported global options can be found in Global options.
Local Configurations
Next, you can add local configurations. These are achieved by including the following on the slide you want to configure:
<GSInfos>
numbering: <mode of slide number>,
footer: <[true/false]>,
</GSInfos>
All currently supported local options can be found in Local options.
Adjusting your slides
Now that all the configurations have been made, you can start creating/adding information to your slides. To do so follow these steps:
Configurations
All configurations are made via the speaker notes. That is, you include a <GSInfo></GSInfo> block containing options. The general syntax is as follows:
<GSInfos>
option1: value1,
option2: value2,
#comment (will be ignored)
option3: value3,
...
</GSInfos>
Note, that lines starting with hashtag (#), will be ignored!
Options
There are global and local options.
The former apply to the entire presentation, the latter to one specific slide.
Options are a comma/newline separated list of key: value pairs
Global Options
Global options are only specified on the first slide in your presentation.Global options are applied across all slides. They determine styling and content of blocks that appear on every slide. See the following for a list (sorted alphabetically) of supported global options:
- author
- string, required
- specifies the author of the presentation
- will be added as a footer element
- date
- string, optional
- date the presentation is held
- currently not used
- duration
- float, required
- expected duration of the presentation in minutes
- used in computing the pacing indicators
- footeraccencolor
- string, optional
- hex-representation of some color
- color to be used for accents in the footer
- the default is
Accent 5in the slide's theme - footercolor
- string, optional
- hex-representation of some color
- color to be used for the footer
- the default is
Accent 6of the slide's theme - questions
- float, optional
- amount of time allocated for questions after the presentation
- currently not used
- title
- string
- title of the presentation
- will be added as footer element
- only if
sectionis not specified - new lines in the title are denoted by newline-characters (
\n) - for example: Title \n over two lines
Local Options
Local options are specified in any slides speaker notes by adding the standard <GSInfos>...</GSInfos> block.
Local options are ONLY applied to the slide of the speaker notes they are located in.See the following for a list (sorted alphabetically) of supported global options:
- footer
- bool, optional
- whether to
- show the footer (true)
- hide the footer (false)
- a slide with hidden footer will still count towards the slide numbers
-
i.e., if you have 3 unique slides (1,2,3) and on slide 2 you specify
footer: false, the the numbers will be1/3, [hidden], 3/3 - the default is
true - footer is shown
- numbering
- literal, optional
- valid options are
- true
- slide number will be shown
- slide will be considered as a unique slide
- counter will be incremented w.r.t. the last unique slide
- nonumber
- no slide number shown
- slide will NOT count towards total number of slides
- usually used for
- title slides
- section headers
- previous
- slide number will be shown
- slide number will be set to same number as previous unique slide (counter will not be incremented w.r.t. last unique slide)
- slide will NOT be interpreted as unique slide
- usually used for
- slides with animations from one slide to the next, where the slides still show the same content (i.e. for highlighting elements)
- the default is
true - slide number counter incremented w.r.t. previous unique slide and slide number shown
- section
- string, optional
- title of the section starting at this slide
- overrides the global option
title - will be displayed in footer instead of
title - any slide following a slide with
sectionspecified will showsectionin the footer until another slide hassectionspecified - from there the new section will be used
- the default is
undefined(not provided) - will
- use the last
sectionthat was specified - use
titleif nosectionspecified
Config Examples
I provide a few examples for configurations below. If you want more, check out the speaker notes of presentation containing the Add-On
Example for global options mixed with local options (on first slide):
<GSInfos>
#global options
author: The Author,
date: 2025-12-16,
duration: 20,
footercolor: #888888,
footeraccentcolor: #a10000,
questions: 5,
title: Presentation Title\nSubtitle,
#local options
footer: false,
numbering: nonumber,
#this will be ignored,
</GSInfos>
Example for just local options (any slide in the presentation):
<GSInfos>
#local options
footer: false,
numbering: nonumber,
section: Two Line\nSection Title
#this will be ignored,
</GSInfos>
Empty or absent configuration block will just fall back to default values
<GSInfos>
</GSInfos>
Functions
Below is a list of the currently implemented functions (ordered alphabetically).
-
Add Element > Author (footer)- adds a text-box containing the author to the footer
- ignored if
footer:false
-
Add Element > Section (footer)- adds text-box containing section title to the footer
- will use
- last specified
section titleifsectionnot specified
- last specified
-
Add Element > Slide numbers (footer)- adds a text-box containing the current slide's slide-number
-
slide numbers are determined as follows
- if nothing specified in
numbering, the previous unique slide's number is incremented by 1 - if
numbering: previous, the slide number will set to the same as the previous unique slide's slide number. The slide will NOT contribute to the total number of unique slides. - if
numbering:nonumber, the slide will not contain a slide number. The slide will not contribute to the total number of unique slides.
- if nothing specified in
- if you want the slide to still contribute to the total slide numbers while not showing a slide-number, pass
footer:falseinstead ofnumbering:nonumber
-
Add Element > Separator (footer)- adds a visual separator to separate footer from the rest of the slide
- currently the separator is implemented as
___.___
-
Add Element > Pace indicators (speaker notes)- adds pace indicators to the top of the speaker notes of every slide
-
pace indicators are computed by
duration/total_slides * slide_number- this assumes constant pace per slide
- pace indicators are indicating how far into the presentation you should be, when finishing some slide
-
Add footer- adds all footer elements
- convenience function calling all
Add Element > ... (footer)functions
-
Remove Element > Author (footer)- removes the author-text-box from the footer
- works by parsing the text-box' Alt Text
-
Remove Element > Section (footer)- removes the section-text-box from the footer
- works by parsing the text-box' Alt Text
-
Remove Element > Slide numbers (footer)- removes the slide number-text-box from the footer
- works by parsing the text-box' Alt Text
-
Remove Element > Separator (footer)- removes the footer-separator from the footer
- works by parsing the shape's Alt Text
-
Remove Element > Pace indicators (speaker notes)- removes pace indicators from the speaker notes
- works by parsing for text matching the RegEx
<dt: \d+:\d+:\d+\/\d+:\d+:\d+>
-
Remove footer- removes all footer elements
- convenience function calling all
Remove Element > ... (footer)functions
-
Update pace indicators- updates pace indicators to latests state of configurations/presentation length
-
does so by calling
Remove Element > Pace indicators (speaker notes)(delete pace indicators)Add Element > Pace indicators (speaker notes)(recompute pace indicators)
- convenience function
-
Help- function pointing to resources for help
For developers
In case you want to dive deeper into google Apps-Script or need help in understanding my source code, I recommend checking out the documentation.
Naming conventions
-
element creation/removal functions
addElementName()removeElementName()
-
GSI descriptors (descriptors to query elements added by
gsinfos )- stored in
Shape.getDescription()(Alt Text) -
follow pattern
GSInfos.<ElementName>.<SubName><ElementName>is EQUIVALENT to creation function name<ElementName>is inPascalCase
- stored in