├── .github └── FUNDING.yml ├── ACTIONS.md ├── CONFIGURATION.md ├── ChangeLog.md ├── EVENTS.md ├── EXAMPLES.md ├── FEEDBACKS.md ├── FILES.md ├── LICENSE ├── PRESENTATION.md ├── README.md ├── TROUBLESHOOTING.md ├── add-in.md ├── assets ├── companion-window.png ├── connection_examples │ ├── broadcast.png │ ├── connnection_examples.pptx │ ├── connnection_examples │ │ ├── Slide1.PNG │ │ ├── Slide2.PNG │ │ └── Slide3.PNG │ ├── one_machine.png │ ├── three_machines.png │ ├── two_machines.png │ └── two_machines_b.png ├── kofi_s_tag_dark_sm.png ├── notes_trigger.png ├── oscpoint-icon-64.png ├── oscpoint-icon-72-padded-whitebg.png ├── oscpoint-icon-72-padded.png ├── oscpoint-icon-72.png ├── oscpoint-icon-padded-v2.png ├── oscpoint-icon-padded-v3.png ├── oscpoint-icon-padded-v4.png ├── oscpoint-icon.png ├── oscpoint-icon.psd ├── oscpoint-icon.svg ├── oscpoint-logo-editable.svg ├── oscpoint-logo-small.png ├── oscpoint-logo-white-bg.png ├── oscpoint-logo.png ├── oscpoint-logo.svg ├── powered-by.psd ├── releases.png ├── ribbon.png ├── sticker v2.png ├── sticker.psd ├── streamdeck-flat.png ├── streamdeck.png ├── version-check.png └── zip-download.png ├── companion-module.md └── privacy.md /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: nickrobertsuk # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry 13 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 14 | -------------------------------------------------------------------------------- /ACTIONS.md: -------------------------------------------------------------------------------- 1 | # OSCPoint actions 2 | 3 | OSC actions are messages you can send to OSCPoint to control PowerPoint. These must be sent as properly formatted OSC messages and transmitted via UDP. 4 | 5 | OSC bundles are supported, but have not been extensively tested. 6 | 7 | > [!NOTE] 8 | > OSC string arguments only support ASCII characters - so as of v3.0.0 it's possible to send UTF-8 strings as encoded binary blobs. 9 | > When OSCPoint receives a message it'll detect the type of argument being sent, and any binary blob data will be assumed to be UTF-8 encoded text. 10 | > 11 | > Send either a string or a blob - not both! 12 | 13 | ## Slide control 14 | 15 | - `/oscpoint/next` 16 | Go to next slide (or next slide build) in active slide show. 17 | 18 | - `/oscpoint/previous` 19 | Go to previous slide (or back one slide build) in active slide show. 20 | 21 | - `/oscpoint/goto/slide [integer: n]` 22 | Goto to slide *n*. Will default to first or last slide in *n* is out-of-range. 23 | 24 | - `/oscpoint/goto/slide/first` 25 | Goto to first slide in active slide show. 26 | *Note: This will go to the first slide in the presentation even if it's hidden. See [this issue](https://github.com/phuvf/oscpoint/issues/1#issue-1968312581) for details.* 27 | 28 | - `/oscpoint/goto/slide/last` 29 | Goto to last slide in active slide show. 30 | *Note: This will go to the last slide in the presentation even if it's hidden. See [this issue](https://github.com/phuvf/oscpoint/issues/1#issue-1968312581) for details.* 31 | 32 | - `/oscpoint/goto/section [string: sectionName ASCII] OR [blob: sectionName UTF-8]` 33 | Goto to first slide in section *sectionName*. Will do nothing if *sectionName* is not found. 34 | *Note: sectionName is case sensitive. UTF-8 support requires v2.1.x+* 35 | 36 | - `/oscpoint/slide/hide [integer: n]` 37 | Hide slide *n*. Will do nothing if *n* is out-of-range. 38 | *Note: Hiding slides while in slide show mode seems to work fine when clicking forward, but they may still be shown if the user clicks back.* 39 | 40 | - `/oscpoint/slide/unhide [integer: n]` 41 | Unhide slide *n*. Will do nothing if *n* is out-of-range. 42 | 43 | ## Slide show control 44 | 45 | - `/oscpoint/slideshow/start` 46 | Start slideshow from top (slide 1), based on active (focused) window. 47 | 48 | > [!NOTE] 49 | > As of v2.0.0 an optional integer can be added to start from a specific slide - for example `/oscpoint/slideshow/start [Integer: 5]` to start at slide 5. 50 | 51 | - `/oscpoint/slideshow/end` 52 | End active slide show. 53 | 54 | - `/oscpoint/slideshow/start/current` 55 | Start slideshow from current slide, based on active (focused) window. 56 | 57 | - `/oscpoint/slideshow/start/section [string: sectionName ASCII] OR [blob: sectionName UTF-8]` 58 | Start slideshow from first slide in section *sectionName*. Will do nothing if *sectionName* is not found. 59 | 60 | > [!NOTE] 61 | > If you're not starting a slideshow from the top of the deck, you may see a flash of slide 1 before the correct slide is shown. 62 | > This is a limitation of the PowerPoint object model - set slide 1 to be black to hide this, if necessary. 63 | 64 | - `/oscpoint/slideshow/black [optional integer: n]` 65 | Sets black screen overlay. *n* = 1 black on, *n* = 0 black off. If no integer is provided, black screen will toggle. 66 | 67 | - `/oscpoint/slideshow/white [optional integer: n]` 68 | Sets white screen overlay. *n* = 1 white on, *n* = 0 white off. If no integer is provided, white screen will toggle. 69 | 70 | - `/oscpoint/slideshow/laserpointer [optional integer: n]` 71 | Turns on/off virtual laser pointer. *n* = 1 laser on, *n* = 0 laser off. If no integer is provided, laser will toggle. 72 | 73 | - `/oscpoint/slideshow/setwallpaper [optional integer: width px] [optional integer: height px]` ![v2.0.0+ required](https://img.shields.io/badge/v2.0.0%2B-be3412) 74 | Sets the current slide as the desktop wallpaper. 75 | - Exports current slide to temporary folder at resolution `width` x `height` px. Will default to 1920x1080 if no width and height are provided. 76 | - Sets exported image as fill-style wallpaper for all monitors on machine. 77 | 78 | - `/oscpoint/slideshow/pause` ![v2.1+ required](https://img.shields.io/badge/v2.1%2B-fe3412) 79 | Pause slide show timed auto-advance 80 | 81 | - `/oscpoint/slideshow/resume` ![v2.1+ required](https://img.shields.io/badge/v2.1%2B-fe3412) 82 | Resume slide show auto-advance 83 | 84 | ## Media control 85 | 86 | *Due to the way PowerPoint handles media, these actions will only work if you're in slideshow mode and there's a single media element on the current slide.* 87 | 88 | - `/oscpoint/media/play` 89 | - `/oscpoint/media/pause` 90 | - `/oscpoint/media/playpause` 91 | Will toggle between play and pause states. 92 | 93 | - `/oscpoint/media/stop` 94 | Stops playback and sets playhead to start of media 95 | 96 | - `/oscpoint/media/goto/position/fromstart [integer: n]` 97 | Move playhead to position *n* milliseconds from start point of clip. 98 | 99 | - `/oscpoint/media/goto/position/beforeend [integer: n]` 100 | Move playhead to position *n* milliseconds before end point of clip. 101 | 102 | - `/oscpoint/media/goto/position/forward [integer: n]` 103 | Move playhead forward *n* milliseconds from current position. 104 | 105 | - `/oscpoint/media/goto/position/back [integer: n]` 106 | Move playhead backward *n* milliseconds from current position. 107 | 108 | - `/oscpoint/media/goto/position/percent [float: f]` 109 | Move playhead to position *f* percent from start point of clip. 110 | 111 | - `/oscpoint/media/goto/bookmark/next` 112 | Move playhead to next bookmark. 113 | 114 | - `/oscpoint/media/goto/bookmark/previous` 115 | Move playhead to previous bookmark 116 | 117 | ## File control 118 | 119 | > [!NOTE] 120 | > The *Allow file system access* setting must be enabled in the OSCPoint tab on settings for these actions to work. 121 | > For security reasons, this can only be enabled locally on the PowerPoint machine. 122 | 123 | - `/oscpoint/files/setpath [string: path ASCII] OR [blob: path UTF-8]` ![v2.0.0 + required](https://img.shields.io/badge/v2.0.0%2B-be3412) 124 | Set active folder to *path*, relative to user folder. For example, setting the active folder to `Desktop\myfolder\oscpoint` will mean OSCPoint will look for PowerPoint presentations in `C:\Users\[USERNAME]\Desktop\myfolder\oscpoint`. 125 | If this folder does not exist, it will be created. 126 | *Note: UTF-8 support requires v2.1.x+* 127 | 128 | - `/oscpoint/files/list` ![v2.0.0 + required](https://img.shields.io/badge/v2.0.0%2B-be3412) 129 | Prompt OSCPoint to return a `/oscpoint/v2/files` message with details of files in active folder 130 | 131 | - `/oscpoint/files/open [string: filename ASCII] OR [blob: filename UTF-8]` ![v2.0.0 + required](https://img.shields.io/badge/v2.0.0%2B-be3412) 132 | Open file (in active folder) with name *filename*. Only files ending in `.ppt` and `.pptx` are supported. Will switch to open presentation if file is already open. 133 | *Note: UTF-8 support requires v2.1.x+* 134 | 135 | - `/oscpoint/presentations/activate [string: filename ASCII] OR [blob: filename UTF-8]` ![v2.0.0 + required](https://img.shields.io/badge/v2.0.0%2B-be3412) 136 | Switch to open presentation with name *filename*. If file is not open, will do nothing. Note that this action does not require file access permissions, unlike the `/oscpoint/files/open` action. 137 | *Note: UTF-8 support requires v2.1.x+* 138 | 139 | ### Closing a file 140 | 141 | When closing a file with unsaved changes, a decision needs to be made as to what action to take. 142 | 143 | > [!WARNING] 144 | > The `/oscpoint/files/close` group of actions can overwrite files and/or lose unsaved file edits without warning. Use with caution. 145 | 146 | - `/oscpoint/files/close [optional string: filename ASCII] OR [optional blob: filename UTF-8]` ![v2.0.1+ required](https://img.shields.io/badge/v2.0.1%2B-0e3412) 147 | Close open presentation *filename*, or the active presentation if no filename specified. 148 | Action when file has unsaved changes: **abort** - action will cancel and file will not close. It is not generally advise to use this method - see note below for more details. 149 | *Note: UTF-8 support requires v2.1.x+* 150 | 151 | - `/oscpoint/files/close/force [optional string: filename ASCII] OR [optional blob: filename UTF-8]` ![v2.0.1+ required](https://img.shields.io/badge/v2.0.1%2B-0e3412) 152 | Close open presentation *filename*, or the active presentation if no filename specified. 153 | Action when file has unsaved changes: **force close** - unsaved changes are discarded and file is closed. 154 | *Note: UTF-8 support requires v2.1.x+* 155 | 156 | - `/oscpoint/files/close/save [optional string: filename ASCII] OR [optional blob: filename UTF-8]` ![v2.0.1+ required](https://img.shields.io/badge/v2.0.1%2B-0e3412) 157 | Close open presentation *filename*, or the active presentation if no filename specified. 158 | Action when file has unsaved changes: **save and close** - unsaved changes are saved and file is closed. This will overwrite the existing file. 159 | *Note: UTF-8 support requires v2.1.x+* 160 | 161 | >[!NOTE] 162 | > Due to the way OSCPoint calculates the starting slide information, starting a slide show will cause the file to be maked as unsaved. 163 | 164 | 165 | ## System control 166 | 167 | Most of these actions adjust settings that can also be configured using the **OSCPoint** tab on the ribbon in PowerPoint. 168 | 169 | - `/oscpoint/actions/enable` 170 | Enable OSC actions. 171 | 172 | - `/oscpoint/actions/disable` 173 | Disable OSC actions. All messages (except `/oscpoint/actions/enable`) will be ignored. 174 | 175 | - `/oscpoint/feedbacks/enable` 176 | Enable OSC feedbacks. 177 | Will also trigger a refresh of all feedbacks. 178 | 179 | - `/oscpoint/feedbacks/disable` 180 | Disable OSC feedbacks. 181 | 182 | - `/oscpoint/feedbacks/refresh` 183 | Resend the most recent feedback values. 184 | -------------------------------------------------------------------------------- /CONFIGURATION.md: -------------------------------------------------------------------------------- 1 | # OSCPoint - Configuration examples 2 | 3 | > Note: These examples are based on the assumption that you are running Companion to control OSCPoint - but any tool that can receive/output OSC can be used. 4 | 5 | - For details on how to change these setting in OSCPoint, see the [add-in documentation](add-in.md). 6 | - For details on how to setup Companion, see the [Companion documentation](https://bitfocus.io/companion/). 7 | 8 | ## One machine running both Companion and PowerPoint 9 | 10 | In this configuration, the both the Companion service and OSCPoint are running on the same machine, and they talk to each other via the localhost network address of `127.0.0.1` 11 | 12 | ![One machine running both Companion and PowerPoint](./assets/connection_examples/one_machine.png) 13 | 14 | ## One Companion machine, one PowerPoint machine 15 | 16 | In this configuration, the Companion service is running on one machine, and OSCPoint is running on another. The two machines are connected via a network. 17 | 18 | ![One Companion machine, one PowerPoint machine](./assets/connection_examples/two_machines.png) 19 | 20 | ## One Companion machine, two PowerPoint machines 21 | 22 | In this configuration, the Companion service is running on one machine, and OSCPoint is running on two machines. The machines are connected via a network. 23 | 24 | Companion has two OSCPoint connections running. To get feedback from both machines, the feedback port needs to be changed on the second machine. 25 | 26 | ![One Companion machine, two PowerPoint machines](./assets/connection_examples/three_machines.png) 27 | 28 | > [!NOTE] 29 | > Using three or more machines? Just keep adding connections in Companion and make sure each machine is set to a different feedback port. 30 | 31 | ## One combined Companion & PowerPoint machine, plus one extra PowerPoint machine 32 | 33 | In this configuration, one machine is running Companion, OSCPoint and PowerPoint, and another machine is running PowerPoint & OSCPoint. The machines are connected via a network. 34 | 35 | ![One Companion machine, two PowerPoint machines](./assets/connection_examples/two_machines_b.png) 36 | 37 | ## Broadcasting feedback to multiple machines 38 | 39 | In this configuration, multiple machines on the same network are receiving feedback from OSCPoint, by sending OSC messages to the broadcast address - in this case `192.168.0.255`. 40 | 41 | Calculate the broadcast address for your network using the [broadcast address calculator](https://remotemonitoringsystems.ca/broadcast.php). 42 | 43 | ![Broadcasting feedback to multiple machines](./assets/connection_examples/broadcast.png) -------------------------------------------------------------------------------- /ChangeLog.md: -------------------------------------------------------------------------------- 1 | # OSCPoint Change log 2 | 3 | ## 2.1.0.0 4 | 5 | - Better setting persistance when upgrading 6 | - More UTF-8 support 7 | - Better section handling 8 | - Ability to pause/resume auto-advancing slide show 9 | - Support for media start/end points 10 | - Better reporting/handling of hidden slides 11 | 12 | ## 2.0.2.0 13 | 14 | - Added UTF8 support for notes 15 | 16 | ## 2.0.1.0 17 | 18 | - First beta release of OSCPoint v2 19 | 20 | ## 2.0.0.2 21 | 22 | Released 2024-06-04 23 | 24 | - Fixed small bug causing section name mis-reporting 25 | 26 | ## 2.0.0.1 27 | 28 | Released 2024-06-01 29 | 30 | ### System changes 31 | 32 | 33 | - Changed slide show start logic and internal object model calls to improve performance/avoid flash of slide 1 when starting slide show 34 | - Added file handling system so presentations can be opened/closed on remote machine - see [FILES.md](FILES.md) for details 35 | - Added file access toggle to OSCPoint tab to enable/disable file access. For security reasons, this is off by default. 36 | - OSC messages are now queued and sent as bundles every c.200ms to avoid duplicate and out-of-order messages 37 | 38 | > [!NOTE] 39 | > Notes feedback is not bundled - it is sent immediately as it can be a large amount of data that might not survive bundling. 40 | 41 | ### Actions 42 | 43 | 44 | - Added ability to start slide show from any slide number using `/oscpoint/slideshow/start [Integer: 5]` 45 | - Added `/oscpoint/slideshow/setwallpaper [optional integer: width px] [optional integer: height px]` command 46 | - Added `setpath`, `list`, `open` and `close` actions for file handling at `/oscpoint/files/[action]` 47 | - Added `activate` action to switch presentations without needing file access permissions 48 | 49 | ### Feedbacks 50 | 51 | - Added `/oscpoint/v2/event` feedback to allow direct hooking of PowerPoint events. These are not bundled and are sent immediately. 52 | - Added `/oscpoint/v2/presentations` feedback with JSON array of all open presentations 53 | - Added `/oscpoint/v2/presentation` feedback with JSON object of the active presentation 54 | 55 | > [!NOTE] 56 | > The JSON presentation object now includes detail of the presentation itself & slide counts , as well as full details of the sections within the presentation. See [PRESENTATION.md](PRESENTATION.md) for an example JSON object. 57 | 58 | ## 1.0.1.1 59 | 60 | Released 2023-11-05 61 | 62 | - Added `/oscpoint/actions/[enable | disable]` and `/oscpoint/feedbacks/[enable | disable]` actions 63 | - Reworked ribbon tab to suit 64 | - Better user input checking for port and host settings 65 | 66 | ## 1.0.1.0 67 | 68 | Released 2023-11-03 69 | 70 | > [!WARNING] 71 | > Includes breaking change to media position actions 72 | 73 | - Reworked media position actions to avoid negative integer issues 74 | - Added %age position action 75 | 76 | 77 | ## 1.0.0.7 78 | - Better data resetting on slide show end 79 | - Better media object handling 80 | 81 | ## 1.0.0.6 82 | 83 | - Better media object handling 84 | - Better feedback resetting at end of slide show 85 | 86 | ## 1.0.0.5 87 | 88 | - Fixed issue where having no named sections in show file caused feedbacks to break 89 | 90 | ## 1.0.0.2 91 | 92 | - Added logging tools 93 | - Fixed issue where current slide was not being set correctly 94 | 95 | ## 1.0.0.1 96 | 97 | - Started change log 98 | - Added `laserpointer` action 99 | - Removed internal `validActions` checking as no longer required 100 | - Capped length of returned notes string to 32,000 characters 101 | - Added argument type checking to OSC actions 102 | - Added *About* dialog to ribbon so version checking possible. 103 | 104 | 105 | ## 1.0.0.0 106 | 107 | Released 2023-10-30 108 | 109 | - Initial release 110 | -------------------------------------------------------------------------------- /EVENTS.md: -------------------------------------------------------------------------------- 1 | # OSCPoint event feedback 2 | 3 | As of OSCPoint v2.x, selected individual events in PowerPoint are sent as OSC messages. 4 | 5 | To received these, feedback needs to be enabled in the OSCPoint add-in settings. 6 | 7 | - `/oscpoint/v2/event [string: eventType] [args]` 8 | Emitted any time an internal event fires in PowerPoint. 9 | 10 | > [!NOTE] 11 | > UTF-8 strings are sent as blobs and will need to be converted back to text to be readable. 12 | 13 | 14 | Possible `eventTypes` and associated `args` are: 15 | 16 | | Event Name | Arguments | Description | 17 | |-------------------------|-----------------------------------------------------|-------------------------------------------------------------------------------------------------| 18 | | `add_in_startup` | `Add-in version` | - | 19 | | `presentation_open` | `Filename ASCII`, `Filename UTF-8` | - | 20 | | `presentation_close` | `Filename ASCII`, `Filename UTF-8` | - | 21 | | `window_activate` | `Filename ASCII`, `Filename UTF-8` | Occurs when the application window or any document window is activated. | 22 | | `slideshow_next_slide` | `Slide number`, `Click index`, `Click count` | Occurs immediately before the transition to the next slide. For the first slide, occurs immediately after the SlideShowBegin event. | 23 | | `slideshow_on_next` | `Slide number`, `Click index`, `Click count` | Occurs when the user clicks Next to move within the current slide. | 24 | | `slideshow_next_click` | `Slide number`, `Click index`, `Click count` | Occurs on the next click of the slide. | 25 | | `slideshow_next_build` | `Slide number`, `Click index`, `Click count` | Occurs upon mouse-click or timing animation, but before the animated object becomes visible. | 26 | | `slideshow_begin` | `Filename ASCII`, `Filename UTF-8`, `Slide number` | Occurs when a slide show starts. | 27 | | `slideshow_end` | `Filename ASCII`,`Filename UTF-8` | Occurs when a slide show ends. 28 | -------------------------------------------------------------------------------- /EXAMPLES.md: -------------------------------------------------------------------------------- 1 | # OSCPoint usage examples 2 | 3 | This page contains some examples of how to use the OSCPoint library. 4 | 5 | ## Using OSCPoint, Companion and vMix to display live notes 6 | 7 | > **Want to display live notes but not using vMix?** 8 | > 9 | > For live events, I recommend you look at [dNotes from IrisDown](https://www.irisdown.co.uk/), which supports auto-text sizing, countdown clocks and main-backup switching. 10 | > 11 | > For virtual events consider [OctoCue](https://octocue.com), which will share live notes to your presenter's phone. 12 | 13 | vMix can be used to display live slide notes by using a title input, and then sending notes text to that input via the vMix API. 14 | 15 | To do this you'll need 16 | 17 | - A vMix show file with a title input. This input will need least one text field - this is where we'll place the notes text to display. 18 | - A Companion instance with the vMix and the OSCPoint modules enabled 19 | - A copy of PowerPoint running the OSCPoint add-in, and a presentation with notes 20 | 21 | ### Basic workflow 22 | 23 | The basic workflow within Companion is: 24 | 25 | 1. For every slide change, the OSCPoint module will update the variable `$(OSCPoint:notes)` 26 | 2. We'll setup a trigger in Companion to watch for changes to that variable. 27 | 3. When the trigger fires, we'll need to rework the variable a bit fix the line breaks, then send the contents of the variable to vMix via the API. 28 | 29 | ### Handling line breaks 30 | 31 | The main issue we have to solve here is that OSCPoint uses carriage return line breaks (variously `CR`, `\r` or `%0d`). vMix, however, uses line feed line breaks (`LF`, `\n` or `%0a`). 32 | 33 | To convert between the two you can use a custom variable in Companion - this will store a vMix-friendly version of the notes. I've called this `vmix_notes`, but you can use an name you like. 34 | 35 | ### Handling slide changes 36 | 37 | Now we need to plumb everything together: 38 | 39 | 1. Setup a new trigger. This will need to listen to the `On variable change` event, and watch the `$(OSCPoint:notes)` variable. 40 | 2. Add your first action to the trigger - this will update the `$(internal:vmix_notes)` variable and change out the `CR` for `LF`s. The action should look like this: 41 | - Action: `internal: Custom Variable: Set with expression` 42 | - Custom variable: `A custom variable (vmix_notes)` 43 | - Expression: `replaceAll($(OSCPoint:notes), "\r","%0a")` 44 | 3. Add your second action to the trigger - this will send the contents of the `$(internal:custom_vmix_notes)` variable to vMix. The action should look like this: 45 | - Action: `vmix: Title - Adjust title text` 46 | - Input: `[title input name, number or GUID]` 47 | - Layer: `[layer order number for text box in title (0-based)]` 48 | - Adjustment: `Set` 49 | - Text: `$(internal:custom_vmix_notes)` 50 | 51 | *In the screenshot below I've also added a small delay to the second action - not sure if this is 100% needed - let me know how you get on!* 52 | 53 | ![Companion trigger setup](./assets/notes_trigger.png) 54 | _Screenshot shows the trigger setup in Companion_ 55 | 56 | ### Further actions and ideas 57 | 58 | There's currently no way (that I know of) to adjust text size via the vMix API. This means that if you have a lot of text in your notes, it may overflow the text box. You can get around this by using a second title input with a smaller, and then switching between the two inputs as needed. 59 | 60 | > richardgatarski has written with some ideas on this - check https://github.com/phuvf/oscpoint/issues/54 for details 61 | 62 | This could be automated by looking at the length of the notes text, and switching to the smaller input if it's over a certain length. 63 | 64 | Ultimately, at some point it'd be better to use IrisDown's [dNotes](https://www.irisdown.co.uk/) software to display notes as this handles font-sizing much better. 65 | -------------------------------------------------------------------------------- /FEEDBACKS.md: -------------------------------------------------------------------------------- 1 | # OSC Feedbacks 2 | 3 | Feedbacks are the messages OSCPoint sends to your OSC client to tell you about the current state of PowerPoint. They are sent out of OSCPoint as OSC messages via UDP. 4 | 5 | > [!NOTE] 6 | > 7 | > Feedbacks starting with `/oscpoint/v2/` are new in version 2.x of OSCPoint. UTF-8 support requires v2.1.x. 8 | 9 | ## Valid at any time 10 | 11 | - `/oscpoint/v2/event [string: eventType] [args]` 12 | See [EVENTS.md](EVENTS.md) for a full list of events and arguments from this message. 13 | 14 | - `/oscpoint/v2/presentations [string: JSON array of presentation objects]` 15 | List of all presentations currently open in PowerPoint. Includes the name, path, slide count, and whether the presentation is saved and in slide show mode. Also includes a full list of the individual sections that make up the presentation. 16 | For an example of the JSON structure, see [PRESENTATION.md](PRESENTATION.md). 17 | 18 | - `/oscpoint/v2/presentation [string: JSON presentation object ASCII] [blob: JSON presentation object UTF-8]` 19 | The current presentation object. Includes the name, path, slide count, and whether the presentation is saved and in slide show mode. Also includes a full list of the individual sections that make up the presentation. 20 | If no presentation is open, this message include a blank presentation object: 21 | ```json 22 | {"name":"","path":"","slideCount":0,"saved":false,"active":false,"slideshow":false,"sections":null} 23 | ``` 24 | - `/oscpoint/v2/files/enabled [boolean]` 25 | Reports whether OSCPoint has permission to access the file system of the PowerPoint machine. This can only be enabled via the OSCPoint ribbon in PowerPoint. 26 | 27 | - `/oscpoint/v2/files/activefolder [string: path ASCII] [blob: path UTF-8]` 28 | The path to the OSCPoint folder, relative to the user's home directory. For more details about this feature, see [FILES.md](FILES.md). 29 | 30 | - `/oscpoint/v2/files/activefolder/fullpath [string: path ASCII] [blob: path UTF-8]` 31 | The full path to the OSCPoint folder. For more details about this feature, see [FILES.md](FILES.md). 32 | 33 | 34 | 35 | ## Valid whenever a presentation is open 36 | 37 | *Note: These feedbacks will switch values with focus changes if multiple presentations are open.* 38 | 39 | - `/oscpoint/presentation/name [string: presentationFileName ASCII] [blob: presentationFileName UTF-8]` 40 | Current presentation filename. 41 | 42 | - `/oscpoint/presentation/slides/count [integer: n]` 43 | Total number of slides in presentation. 44 | 45 | - `/oscpoint/presentation/slides/count/visible [integer: n]` ![v2.1+ required](https://img.shields.io/badge/v2.1%2B-fe3412) 46 | Total slide count, excluding hidden slides. 47 | 48 | - `/oscpoint/slideshow/state [string stateName]` 49 | The current state of the presentation. Possible values are: `edit` or `slideshow` (as of v2.1.x: `edit`, `running`, `paused`) 50 | 51 | ## Valid only during a slide show 52 | 53 | > [!NOTE] 54 | > These feedbacks may not update correctly when a slide show is auto-advancing. This is a known issue: https://github.com/phuvf/oscpoint/issues/67 55 | 56 | - `/oscpoint/slideshow/currentslide [integer: n]` 57 | Current slide number (1-based). 58 | 59 | - `/oscpoint/slideshow/builds/position [integer: n]` 60 | The build position of the current slide. 61 | 62 | - `/oscpoint/slideshow/builds/count [integer: n]` 63 | The total number of builds on the current slide. 64 | 65 | - `/oscpoint/slideshow/builds/remaining [integer: n]` 66 | The number of builds remaining on the current slide. 67 | 68 | - `/oscpoint/slideshow/slidesremaining [integer: n]` ![v2.1+ required](https://img.shields.io/badge/v2.1%2B-fe3412) 69 | Number of slides left in slide show, excluding hidden slides. 70 | 71 | - `/oscpoint/slideshow/notes [string: notesText]` 72 | Current slide notes (ASCII encoding). Line breaks are normally sent as CR, ASCII 13 (0D in hex). 73 | 74 | - `/oscpoint/slideshow/notes-utf8 [blob: notesText UTF-8]` ![v2.0.2+ required](https://img.shields.io/badge/v2.0.2%2B-be3412) 75 | Current slide notes in UTF-8 encoding. This is sent as raw bytes and will need decoding by your OSC client. 76 | 77 | > [!NOTE] 78 | > ASCII-encoded notes might be deprecated in future versions. 79 | > Use UTF-8 encoded notes for full international character support, but you'll have to do the decoding yourself - or use the Companion Module, which does this for you. 80 | > To avoid busting UDP packet size limits, notes longer than 32,000 characters this will be truncated (that's a lot of notes). 81 | 82 | ### Section info 83 | 84 | - `/oscpoint/slideshow/section/index [integer: n]` 85 | Current section index (1-based). 86 | 87 | - `/oscpoint/slideshow/section/name [string: sectionName ASCII] [blob: sectionName UTF-8]` 88 | Current section name. 89 | 90 | - `/oscpoint/slideshow/section/slidesremaining [integer: n]` ![v2.1+ required](https://img.shields.io/badge/v2.1%2B-fe3412) 91 | Number of slides left in section, excluding hidden slides. 92 | 93 | ## Valid only during a slideshow, and when there's a media element on the current slide 94 | 95 | *Please also see the note about media in [ACTIONS.md](ACTIONS.md) - all the same caveats apply here* 96 | 97 | These OSC messages will be emitted once every 500ms while the media is in the `playing` state. 98 | 99 | - `/oscpoint/slideshow/media/state [string: stateName]` 100 | The current state of the media element. Possible values are: `playing`, `paused`, `stopped`, `notready` 101 | 102 | - `/oscpoint/slideshow/media/duration [integer: n]` 103 | The total duration of the media clip in milliseconds. 104 | 105 | - `/oscpoint/slideshow/media/durationtrimmed [integer: n]` ![v2.1+ required](https://img.shields.io/badge/v2.1%2B-fe3412) 106 | The trimmed duration of the media clip in milliseconds (from the clip's start point to the clip's end point). 107 | This will be the same as the total duration if the media clip has not been trimmed. 108 | 109 | - `/oscpoint/slideshow/media/startpoint [integer: n]` ![v2.1+ required](https://img.shields.io/badge/v2.1%2B-fe3412) 110 | The start point of the media clip in milliseconds, measured from the start of the full clip. 111 | Will be 0 if the media clip has not been trimmed. 112 | 113 | - `/oscpoint/slideshow/media/endpoint [integer: n]` ![v2.1+ required](https://img.shields.io/badge/v2.1%2B-fe3412) 114 | The end point of the media clip in milliseconds, measured from the start of the full clip. 115 | Will be the same as the total duration if the media clip has not been trimmed. 116 | 117 | - `/oscpoint/slideshow/media/position [integer: n]` 118 | The current position of the media playhead in milliseconds, measured from the start point. 119 | 120 | - `/oscpoint/slideshow/media/remaining [integer: n]` 121 | The remaining playtime (up to the end point) of the media in milliseconds. 122 | -------------------------------------------------------------------------------- /FILES.md: -------------------------------------------------------------------------------- 1 | # OSCPoint file handling 2 | 3 | > [!WARNING] 4 | > OSCPoint v2.x has the ability to read and share data from the PowerPoint machine's local file system. While this can be useful in live show environments, it's also a very powerful tool that could be used maliciously by users on the same network as your PowerPoint machine. 5 | > 6 | > Be aware of the capabilities and limitations of this feature before enabling it via the OSCPoint settings tab. 7 | 8 | ## General description 9 | 10 | OSCPoint can read and share presentation file info from a single nominated folder (called the **active folder**) on the PowerPoint machine's local file system. 11 | 12 | This allows a remote user to command OSCPoint to open and close PowerPoint presentations stored locally on the PowerPoint machine, which can be useful in live show situations. 13 | 14 | ### Capabilities 15 | 16 | - Read the filenames of all PowerPoint presentations in the active folder, and share these via OSC. 17 | - Open PowerPoint presentations contained in the active folder by filename. 18 | - Close PowerPoint presentations, while specifying what action to take if the file contains unsaved changes (*abort*, *save* or *force* close, discarding changes) 19 | - The active folder can be changed via OSC. 20 | 21 | ### Limitations 22 | 23 | - Does not support opening presentations from subfolders within the active folder. 24 | - The active folder is always relative to the user's home directory. 25 | - Only `.ppt` and `.pptx` files are supported. All other file types will be ignored. 26 | 27 | ## Enabling file handling 28 | 29 | File handling is disabled by default in OSCPoint. To enable it, go to the OSCPoint settings tab and check the box next to *Enable file system access*. 30 | 31 | For security reasons, this feature is disabled by default. 32 | 33 | ## Setting the active folder 34 | 35 | By default, the active folder is set to `Desktop\oscpoint`. This folder is created on the user's Desktop when file handling is enabled. 36 | 37 | To change the active folder, send the following OSC message: 38 | 39 | ```/oscpoint/files/setpath [string: path]``` 40 | 41 | The active folder is always relative to the user's home directory. For example, setting the active folder to `Desktop\myfolder\oscpoint` will mean OSCPoint will look for PowerPoint presentations in `C:\Users\[USERNAME]\Desktop\myfolder\oscpoint`. 42 | 43 | If this folder does not exist, it will be created. 44 | 45 | ## Getting a list of presentations in the active folder 46 | 47 | OSCPoint will send a list of all presentations in the active folder as an OSC message when the active folder is set. A list can also be requested at any time by sending the following OSC message: 48 | 49 | - ```/oscpoint/files/list``` 50 | 51 | OSCPoint will respond with a message in the following format: 52 | 53 | - ```/oscpoint/v2/files [string: JSON array of PowerPoint files]``` 54 | 55 | An example of the JSON structure is: 56 | ```JSON 57 | [ 58 | { 59 | "name": "test.pptx", 60 | "fullName": "C:\\Users\\[USERNAME]\\Desktop\\oscpoint\\test_presentation.pptx", 61 | "extension": ".pptx", 62 | "length": 265299837, 63 | "lastAccessTime": "23/04/2024 13:05:22", 64 | "lastWriteTime": "23/04/2024 09:45:52", 65 | "creationTime": "23/04/2024 09:45:51", 66 | "isReadOnly": false 67 | }, 68 | { 69 | "name": "test2.pptx", 70 | "fullName": "C:\\Users\\[USERNAME]\\Desktop\\oscpoint\\test_presentation_2.pptx", 71 | "extension": ".pptx", 72 | "length": 54547477, 73 | "lastAccessTime": "23/04/2024 12:31:57", 74 | "lastWriteTime": "23/04/2024 09:57:25", 75 | "creationTime": "23/04/2024 09:57:25", 76 | "isReadOnly": false 77 | } 78 | ] 79 | ``` 80 | 81 | ## Opening a presentation 82 | 83 | To open a presentation, send the following OSC message: 84 | 85 | - ```/oscpoint/files/open [string: filename]``` 86 | 87 | Where `filename` is the name of the presentation file to open. The filename must match exactly with one of the filenames in the active folder. 88 | 89 | ## Closing a presentation 90 | 91 | To close an open presentation, send the following OSC message: 92 | 93 | - ```/oscpoint/files/close [string: filename]``` 94 | 95 | This will close the presentation with name `filename`. If this presentation is not open, the message will be ignored. 96 | 97 | Use the information from the `/oscpoint/v2/presentations` message to get the list of currently open presentations. 98 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2025 Nick Roberts 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /PRESENTATION.md: -------------------------------------------------------------------------------- 1 | # OSCPoint sample presentation JSON 2 | 3 | OSCPoint uses JSON to represent the state of a presentation. This is a sample JSON object representing a presentation with 48 slides, 3 sections, and the slideshow running. 4 | 5 | ```JSON 6 | { 7 | "name": "test_presentation.pptx", 8 | "path": "C:\\Users\\[USERNAME]\\Desktop\\oscpoint", 9 | "slideCount": 48, 10 | "saved": true, 11 | "active": true, 12 | "slideshow": true, 13 | "sections": [ 14 | { 15 | "id": "{0FD0682D-A8FE-4955-AB04-F07552824B5D}", 16 | "name": "Default Section", 17 | "firstSlide": 1, 18 | "lastSlide": 5, 19 | "slideCount": 5 20 | }, 21 | { 22 | "id": "{ED2008A6-89BF-4DF5-B9D9-493C7E049507}", 23 | "name": "Financials", 24 | "firstSlide": 6, 25 | "lastSlide": 9, 26 | "slideCount": 4 27 | }, 28 | { 29 | "id": "{30ABD9E6-EF6B-43A1-8378-3E37CC4F1495}", 30 | "name": "Summary", 31 | "firstSlide": 10, 32 | "lastSlide": 48, 33 | "slideCount": 39 34 | } 35 | ] 36 | } 37 | ``` -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 |

OSCPoint: an OSC API for PowerPoint

3 | App icon 4 | 5 | **OSCPoint is a free PowerPoint add-in - and Companion Module - that allows Open Sound Control (OSC) control of PowerPoint on Windows.** 6 | 7 | It allows users to take remote control of PowerPoint machines, including opening/closing presentations, starting and stopping slide shows, navigating slides and controlling media playback. 8 | 9 | While the add-in is designed to be used with BitFocus Companion, it should work with any OSC client that can send and receive OSC messages over UDP. 10 |
11 | 12 | ## Quick actions 13 | 14 | - Download the [latest version of the add-in](https://oscpoint.com/donate) 15 | - Documentation links: [Actions](ACTIONS.md) | [Feedbacks](FEEDBACKS.md) | [Setup examples](EXAMPLES.md) | [Companion module](companion-module.md) 16 | - See some [configuration examples](CONFIGURATION.md) 17 | 18 | ## The add-in 19 | 20 | 21 |
22 | 23 | 24 | _Screenshot shows the OSCPoint tab on the PowerPoint ribbon_ 25 |
26 | 27 | The OSCPoint add-in is intalled on your Windows machine, and runs alongside PowerPoint. It provides an OSC API for PowerPoint. 28 | 29 | To find out more about the add-in and download the latest version, check the [add-in documentation](add-in.md). 30 | 31 | ## The Companion module 32 | 33 |
34 | 35 | 36 | _A sample Streamdeck layout using the Companion OSCPoint module_ 37 |
38 | 39 | The Companion OSCPoint module (listed as **Zinc: OSCPoint**) simplifies the process of triggering OSCPoint actions and displaying OSCPoint feedbacks. 40 | 41 | To find out more about the module, check the [Companion module documentation](companion-module.md). 42 | 43 | ## Actions and feedbacks 44 | 45 | OSCPoint allows you to control PowerPoint using **actions**, and get information about the state of PowerPoint using **feedbacks**. 46 | 47 | See the [Actions](ACTIONS.md) and [Feedbacks](FEEDBACKS.md) files for full details. 48 | 49 | ### Highlights 50 | 51 | - Start & stop slideshows, and navigate slides 52 | - Control media playback including jumping to specific times in clip 53 | - Get feedback on the current slide and current build 54 | - Get full live notes text via OSC feedback 55 | - Get feedback on media state, playback position and runtime 56 | - Open a close presentations contained in a nominated folder on the PowerPoint machine 57 | 58 | OSCPoint is Windows-only, and requires PowerPoint 2016 or later. 59 | 60 | > [!WARNING] 61 | > 62 | > OSCPoint gives you the ability to navigate your PowerPoint show without it being the active (focussed) window. 63 | > 64 | > Media elements, slide transitions and OSC feedbacks may not play correctly when PowerPoint does not have focus. 65 | > 66 | > Don't run PowerPoint in the background and expect OSCPoint to work correctly. 67 | 68 | ## Usage examples 69 | 70 | See the [examples](EXAMPLES.md) file for some example use cases, including: 71 | 72 | - [Using OSCPoint, Companion and vMix to display live notes](EXAMPLES.md#using-oscpoint-companion-and-vmix-to-display-live-notes) 73 | 74 | ## Roadmap 75 | 76 | See the [enhancements](https://github.com/phuvf/oscpoint/issues?q=is%3Aopen+is%3Aissue+label%3Aenhancement) label in issues for details of suggested features. 77 | 78 | ## Support 79 | 80 | For help and support with OSCPoint, join the [OSCPoint users](https://www.facebook.com/groups/oscpoint) group on Facebook. 81 | 82 | If you find bugs please use the [issue tracker on GitHub](https://github.com/phuvf/oscpoint/issues). 83 | 84 | For feature requests, please check the [enhancements](https://github.com/phuvf/oscpoint/issues?q=is%3Aopen+is%3Aissue+label%3Aenhancement) label in issues, and if your idea isn't there, please [raise a new issue](https://github.com/phuvf/oscpoint/issues/new?labels=enhancement&template=feature_request.md) on GitHub. 85 | 86 | 87 | 88 | OSCPoint is developed by [Nick Roberts](https://github.com/phuvf). My day job is head of development for [OctoCue](https://octocue.com), so the OSCPoint PowerPoint add-in uses OctoCue's code signing certificate, in exchange for a bit of brand exposure. 89 | 90 | 91 | If you find this project useful, consider buying me a coffee: 92 | 93 | [![ko-fi](./assets/kofi_s_tag_dark_sm.png)](https://ko-fi.com/X8X073GQ3) 94 | 95 | I'm always looking for interesting ideas to work on - check out my [GitHub profile](https://github.com/phuvf) to see if I might be a good match for your project. 96 | 97 | 98 | ## Credits 99 | 100 | This project was inspired by the following: 101 | 102 | - https://www.irisdown.co.uk/rsc.html - the OG PowerPoint API 103 | - https://github.com/benkuper/PowerPoint-OSC 104 | - https://github.com/leonreucher/powerpoint-remote-websocket 105 | 106 | I'd also like to thank the members of the [Companion User Group](https://www.facebook.com/groups/companion) on Facebook for their ideas and suggestions. 107 | 108 | ## Privacy 109 | 110 | See the [privacy policy](privacy.md) for details of how OSCPoint collects and handles your data. 111 | 112 | ## License 113 | 114 | This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. 115 | -------------------------------------------------------------------------------- /TROUBLESHOOTING.md: -------------------------------------------------------------------------------- 1 | 2 | # OSCPoint troubleshooting 3 | 4 | This page contains information on how to troubleshoot common issues with OSCPoint. 5 | 6 | ## Installation issues 7 | 8 | A couple of issues I've seen with installation: 9 | 10 | - Use the built-in unzip tool in Windows to extract the zip file. Some users have reported issues other tools like 7zip. 11 | The cause of this is unknown. 12 | 13 | 14 | ## It's installed but not working 15 | 16 | ### 1. First steps 17 | 18 | - Check you've installed the add-on correctly. Does the OSCPoint tab appear in PowerPoint? If not, investigate this first. 19 | You can view a list of active add-ins by opening PowerPoint and browsing to `File > Options > Add-ins`. 20 | Here you can also enable and disable the add-in using the `Manage COM Add-ins` option. 21 | - On the OSCPoint tab, check you've enabled `actions` and `feedbacks`. If these are disabled, OSCPoint won't send or receive any OSC messages. 22 | 23 | ### 2. Network issues 24 | 25 | OSCPoint sends and receives OSC messages as UDP packets over normal IT networking, so most of the issues you'll experience will be network related. 26 | 27 | - First, check your IP setup. Are the machines on the same network? Do you have two machines with the same IP causing issues? 28 | Check for typos and incorrect subnet masks. 29 | - Check you've configured the IP and port details in OSCPoint and the Companion module (if you're using it) correctly. See [CONFIGURATION.md](CONFIGURATION.md) for examples. 30 | - Check you can ping the machine running OSCPoint from the machine sending OSC messages. If you can't, you have a network issue - investigate this first. 31 | 32 | If your machines can ping each other, but OSCPoint still isn't working, you may have a firewall issue. The next steps I'd recommend is to disable the firewall on the machine running OSCPoint and see if that resolves the issue. If it does, you'll need to configure the firewall to allow OSCPoint to send and receive UDP packets on the port you've configured. 33 | 34 | Trying to run OSCPoint across multiple vLANs? You'll need to talk to your IT team to ensure the network is configured correctly. 35 | 36 | ### 3. Log files 37 | 38 | If none of this helps, check the log files for both OSCPoint and Companion. 39 | 40 | - Access the OSCPoint log files using the button on the OSCPoint tab in PowerPoint. 41 | - Access the Companion log files by opening the GUI and selecting the `Log` tab. 42 | 43 | A read through these log files may give you a clue as to what's going wrong. 44 | 45 | > [!NOTE] 46 | > If you're after assistance from the community, please provide the log files when asking for help - this will help others diagnose the issue you're experiencing 47 | 48 | ## Helpful tools 49 | 50 | It's often useful to have some tools to help you diagnose network issues. Here are a couple of free tools I use to debug OSC issues: 51 | 52 | - [Protokol](https://hexler.net/protokol) - a free OSC (and MIDI) monitoring tool viewer. This is a great tool to see if OSC messages are being sent and received correctly. 53 | 54 | > [!NOTE] 55 | > 56 | > Only one Windows service can bind to a port at a time. If you're trying to use Protokol to see OSC messages, quit Companion first as it'll be using the port Protokol is trying to bind to. 57 | 58 | I'd also recommend [Wireshark](https://www.wireshark.org/). This is a free powerful tool that can help you see what's happening on your network. It's not for beginners, but a great when you need to dive deep. -------------------------------------------------------------------------------- /add-in.md: -------------------------------------------------------------------------------- 1 | # OSCPoint: PowerPoint add-in 2 | 3 |
4 | 5 | 6 | _Screenshot shows the OSCPoint tab on the PowerPoint ribbon_ 7 |
8 | The OSCPoint add-in is intalled on your Windows machine, and runs alongside PowerPoint. It provides an OSC API for PowerPoint. 9 | 10 | ## Installation instructions 11 | - Download the [latest version](https://oscpoint.com/donate) 12 | - Unpack the .zip file to a temporary folder 13 | - Run setup.exe from the temporary folder 14 | - Once installation is complete, you can delete your temporary folder. 15 | 16 | This COM add-in for PowerPoint requires some supporting frameworks, including: 17 | 18 | - Microsoft .NET 4.7.2 (66MB) 19 | - Microsoft Visual Studio 2010 Tools for Office Runtime (38MB) 20 | 21 | Your computer will automatically download and install these items direct from Microsoft, if required. 22 | 23 | Finally, if PowerPoint is currently running on your machine, you'll need to close and re-open it to load up the add-in. 24 | 25 | For more details, including infomation on SmartScreen warnings, see the [installation guide for the OctoCue add-in](https://support.octocue.com/docs/add-in/add-in_installation), which follows exactly the same process - this avoids me writing it out twice. 26 | 27 | ## Configuration 28 | The add-in will add a new **OSCPoint** tab to the PowerPoint ribbon. 29 | 30 | 31 | Using the ribbon tab you can: 32 | 33 | - Enable and disable OSC actions and feedbacks. 34 | - Set the local port for incoming action messages - range is `1024` to `65535`, default `35551` 35 | - Set the remote host for outgoing feedback messages - default `127.0.0.1` 36 | - Set the remote port for outgoing feedback messages - range is `1024` to `65535`, default `35550` 37 | 38 | Configuration settings are stored on your machine per-user and will persist between sessions. 39 | 40 | For more details, see the [configuration examples](CONFIGURATION.md). 41 | -------------------------------------------------------------------------------- /assets/companion-window.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phuvf/oscpoint/6321c0f474af3f50f28d84a76d1101b5c637adde/assets/companion-window.png -------------------------------------------------------------------------------- /assets/connection_examples/broadcast.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phuvf/oscpoint/6321c0f474af3f50f28d84a76d1101b5c637adde/assets/connection_examples/broadcast.png -------------------------------------------------------------------------------- /assets/connection_examples/connnection_examples.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phuvf/oscpoint/6321c0f474af3f50f28d84a76d1101b5c637adde/assets/connection_examples/connnection_examples.pptx -------------------------------------------------------------------------------- /assets/connection_examples/connnection_examples/Slide1.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phuvf/oscpoint/6321c0f474af3f50f28d84a76d1101b5c637adde/assets/connection_examples/connnection_examples/Slide1.PNG -------------------------------------------------------------------------------- /assets/connection_examples/connnection_examples/Slide2.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phuvf/oscpoint/6321c0f474af3f50f28d84a76d1101b5c637adde/assets/connection_examples/connnection_examples/Slide2.PNG -------------------------------------------------------------------------------- /assets/connection_examples/connnection_examples/Slide3.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phuvf/oscpoint/6321c0f474af3f50f28d84a76d1101b5c637adde/assets/connection_examples/connnection_examples/Slide3.PNG -------------------------------------------------------------------------------- /assets/connection_examples/one_machine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phuvf/oscpoint/6321c0f474af3f50f28d84a76d1101b5c637adde/assets/connection_examples/one_machine.png -------------------------------------------------------------------------------- /assets/connection_examples/three_machines.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phuvf/oscpoint/6321c0f474af3f50f28d84a76d1101b5c637adde/assets/connection_examples/three_machines.png -------------------------------------------------------------------------------- /assets/connection_examples/two_machines.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phuvf/oscpoint/6321c0f474af3f50f28d84a76d1101b5c637adde/assets/connection_examples/two_machines.png -------------------------------------------------------------------------------- /assets/connection_examples/two_machines_b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phuvf/oscpoint/6321c0f474af3f50f28d84a76d1101b5c637adde/assets/connection_examples/two_machines_b.png -------------------------------------------------------------------------------- /assets/kofi_s_tag_dark_sm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phuvf/oscpoint/6321c0f474af3f50f28d84a76d1101b5c637adde/assets/kofi_s_tag_dark_sm.png -------------------------------------------------------------------------------- /assets/notes_trigger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phuvf/oscpoint/6321c0f474af3f50f28d84a76d1101b5c637adde/assets/notes_trigger.png -------------------------------------------------------------------------------- /assets/oscpoint-icon-64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phuvf/oscpoint/6321c0f474af3f50f28d84a76d1101b5c637adde/assets/oscpoint-icon-64.png -------------------------------------------------------------------------------- /assets/oscpoint-icon-72-padded-whitebg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phuvf/oscpoint/6321c0f474af3f50f28d84a76d1101b5c637adde/assets/oscpoint-icon-72-padded-whitebg.png -------------------------------------------------------------------------------- /assets/oscpoint-icon-72-padded.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phuvf/oscpoint/6321c0f474af3f50f28d84a76d1101b5c637adde/assets/oscpoint-icon-72-padded.png -------------------------------------------------------------------------------- /assets/oscpoint-icon-72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phuvf/oscpoint/6321c0f474af3f50f28d84a76d1101b5c637adde/assets/oscpoint-icon-72.png -------------------------------------------------------------------------------- /assets/oscpoint-icon-padded-v2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phuvf/oscpoint/6321c0f474af3f50f28d84a76d1101b5c637adde/assets/oscpoint-icon-padded-v2.png -------------------------------------------------------------------------------- /assets/oscpoint-icon-padded-v3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phuvf/oscpoint/6321c0f474af3f50f28d84a76d1101b5c637adde/assets/oscpoint-icon-padded-v3.png -------------------------------------------------------------------------------- /assets/oscpoint-icon-padded-v4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phuvf/oscpoint/6321c0f474af3f50f28d84a76d1101b5c637adde/assets/oscpoint-icon-padded-v4.png -------------------------------------------------------------------------------- /assets/oscpoint-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phuvf/oscpoint/6321c0f474af3f50f28d84a76d1101b5c637adde/assets/oscpoint-icon.png -------------------------------------------------------------------------------- /assets/oscpoint-icon.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phuvf/oscpoint/6321c0f474af3f50f28d84a76d1101b5c637adde/assets/oscpoint-icon.psd -------------------------------------------------------------------------------- /assets/oscpoint-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 64 | -------------------------------------------------------------------------------- /assets/oscpoint-logo-editable.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | OSCPoint 80 | -------------------------------------------------------------------------------- /assets/oscpoint-logo-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phuvf/oscpoint/6321c0f474af3f50f28d84a76d1101b5c637adde/assets/oscpoint-logo-small.png -------------------------------------------------------------------------------- /assets/oscpoint-logo-white-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phuvf/oscpoint/6321c0f474af3f50f28d84a76d1101b5c637adde/assets/oscpoint-logo-white-bg.png -------------------------------------------------------------------------------- /assets/oscpoint-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phuvf/oscpoint/6321c0f474af3f50f28d84a76d1101b5c637adde/assets/oscpoint-logo.png -------------------------------------------------------------------------------- /assets/oscpoint-logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 72 | -------------------------------------------------------------------------------- /assets/powered-by.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phuvf/oscpoint/6321c0f474af3f50f28d84a76d1101b5c637adde/assets/powered-by.psd -------------------------------------------------------------------------------- /assets/releases.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phuvf/oscpoint/6321c0f474af3f50f28d84a76d1101b5c637adde/assets/releases.png -------------------------------------------------------------------------------- /assets/ribbon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phuvf/oscpoint/6321c0f474af3f50f28d84a76d1101b5c637adde/assets/ribbon.png -------------------------------------------------------------------------------- /assets/sticker v2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phuvf/oscpoint/6321c0f474af3f50f28d84a76d1101b5c637adde/assets/sticker v2.png -------------------------------------------------------------------------------- /assets/sticker.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phuvf/oscpoint/6321c0f474af3f50f28d84a76d1101b5c637adde/assets/sticker.psd -------------------------------------------------------------------------------- /assets/streamdeck-flat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phuvf/oscpoint/6321c0f474af3f50f28d84a76d1101b5c637adde/assets/streamdeck-flat.png -------------------------------------------------------------------------------- /assets/streamdeck.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phuvf/oscpoint/6321c0f474af3f50f28d84a76d1101b5c637adde/assets/streamdeck.png -------------------------------------------------------------------------------- /assets/version-check.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phuvf/oscpoint/6321c0f474af3f50f28d84a76d1101b5c637adde/assets/version-check.png -------------------------------------------------------------------------------- /assets/zip-download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phuvf/oscpoint/6321c0f474af3f50f28d84a76d1101b5c637adde/assets/zip-download.png -------------------------------------------------------------------------------- /companion-module.md: -------------------------------------------------------------------------------- 1 | # The OSCPoint Companion module 2 | 3 |
4 | 5 | 6 | _A sample Streamdeck layout using the Companion OSCPoint module_ 7 |
8 | 9 | The Companion OSCPoint module (listed as **Zinc: OSCPoint**) simplifies the process of triggering OSCPoint actions and displaying OSCPoint feedbacks by using the popular [Bitfocus Companion software](https://bitfocus.io/companion). 10 | 11 | This module is available in builds of Companion v3.2.0+ 12 | 13 | ## Updating the Companion module 14 | 15 | New versions of the OSCPoint Companion module are automatically included in new releases of Companion. 16 | 17 | However, these only come out a few times a year, so you may wish to manually update your Companion installation to get the latest OSCPoint goodness without having to wait for the Companion update cycle. 18 | 19 | To do this, follow these steps: 20 | 21 | ### 1 - Setup the module folder 22 | 23 | - Create a folder on your machine to store the module files. 24 | This can be anywhere, but for this example we'll use `companion-modules` in my `git` directory. 25 | 26 | 27 | ### 2 - Download and unzip the latest module package 28 | 29 | - Download the latest module version from [https://oscpoint.com/companion](https://oscpoint.com/companion). This will be a `.zip` file. 30 | - Extract the contents of the `.zip` file into the folder you created in step 1. 31 | This will create a structure `companion-modules/oscpoint-module-x.x.x-pkg/`. 32 | - Inside this folder, you should have a `main.js`, a `package.json` and a subfolder `/companion/`. 33 | 34 | ### 2 - Setup Companion to use the new module 35 | 36 | 37 | - Launch Companion, select the `cog icon` in the top right to show the developer tools. 38 | - In the `Developer modules path` section, click the `Select` button and navigate to the `companion-modules` folder you created in step 1. 39 | - Companion will scan this folder for modules, find the new OSCPoint module and use this instead of the older, built-in version. 40 | ![Companion Settings](./assets/companion-window.png) 41 | 42 | ## 3 - Check the module version is correct 43 | 44 | - Check what version of the OSCPoint module you're running by launching the Companion GUI and navigating to `Connections`. 45 | - Scroll down to the `Zinc: OSCPoint` module and click the `i` icon to see the version number. 46 | ![Module version check](./assets/version-check.png) 47 | 48 | ### Further actions 49 | 50 | - [Download Companion](https://bitfocus.io/companion) 51 | - [OSCPoint Companion module source code on GitHub](https://github.com/bitfocus/companion-module-zinc-oscpoint) 52 | -------------------------------------------------------------------------------- /privacy.md: -------------------------------------------------------------------------------- 1 | # OSCPoint: Privacy 2 | 3 | ## The PowerPoint add-in 4 | 5 | **We do not collect any information about the content of your PowerPoint presentations - but some info about the add-in itself is shared.** 6 | 7 | Starting from v1.0.2.0, the OSCPoint add-in has basic usage data and automatic crash log collection. This data is handled by the third party provider [sentry.io](https://sentry.io). 8 | 9 | [Find out more about Sentry and Privacy](https://sentry.io/trust/privacy/). 10 | 11 | Usage data is limited to recording the version of OSCPoint you are using, and how often it starts up. 12 | 13 | Crash logs do not contain any personal data but might contain information about the hardware and software environment in which the add-in runs. 14 | 15 | If you'd like to see specifics on what we collect: 16 | 17 | 1. Open PowerPoint and navigate to the OSCPoint tab 18 | 2. Open the log file using the button provided, then: 19 | - Line items with the class **debug** local to your machine only, and not shared. 20 | - Line items with the class **info** are shared usage data. 21 | - Line items with the class **error** are shared crash logs. 22 | 23 | ## The Companion module 24 | 25 | The OSCPoint Companion module does not collect any data. 26 | --------------------------------------------------------------------------------