Documentation
curlyCue is a macOS desktop helper for QLab operators. It helps you synchronize cue data between QLab and a “source of truth” that you choose:
- a local CSV file, or
- a Google Sheet.
curlyCue is primarily a local desktop application. Most processing happens on your Mac.
Quick start
- Launch curlyCue.
- Choose a mode (CSV or Google Sheets) on the relevant tab.
- If using Google Sheets:
- Open Settings → Google Sheets Settings.
- Click “Choose Google Sheet”.
- Authorize curlyCue and select one spreadsheet through Google Picker in your default browser.
- Use Push / Pull / Update workflows to sync changes.
Licensing
curlyCue offers monthly and yearly subscriptions. Both subscription options provide access to the same licensed features for one user seat; they differ only in billing frequency and price. Current pricing and purchase options are available at:
- https://curlycue.app/pricing/
Subscriptions renew automatically unless canceled. Cancellation stops future renewals, and licensed access continues through the end of the current paid billing period. License activation, refresh, and deactivation are managed from the Licensing window in curlyCue.
Google Sheets integration (what it does)
When Google Sheets mode is enabled, curlyCue can:
- Open Google Picker in your default browser so you can select one Google Sheet.
- Display the selected spreadsheet’s title and available tabs.
- Read cue-related values from the selected spreadsheet.
- Write updated cue data back to the selected spreadsheet when you run Push/Update workflows.
Access is limited to files explicitly selected through Google Picker or previously granted to curlyCue. curlyCue does not list metadata for the rest of your Drive, create, delete, or move Drive files, or change Drive sharing permissions.
Where data is stored
On your Mac
- OAuth access and refresh tokens: stored locally in the macOS Keychain, with no file-based fallback.
- Project settings: normally stored under ~/Documents/curlyCue/{Project Name}/. These settings may include the selected spreadsheet ID and tab name, mappings, local paths, and QLab connection settings.
- Backups and CSV snapshots: stored locally in the applicable project folder when backups are enabled.
- Spreadsheet caches: rows and headers are cached only in memory for approximately 10 seconds, and tab metadata for up to approximately five minutes. These caches are discarded when the app exits.
- Bundled-app logs: stored under ~/Library/Logs/curlyCue/ and rotated locally. Development runs may instead write logs in the launch directory.
- Licensing data: the license key, install identifier, and cached license status use the macOS Keychain when available. If Keychain storage of licensing status is unavailable, curlyCue may use a local license_state.json fallback where the application data location is writable.
If a legacy ~/Documents/CueBaby/ folder exists and ~/Documents/curlyCue/ does not, curlyCue may continue using the legacy project folder. Uninstalling the app does not necessarily remove project files, logs, or Keychain items.
On our servers (licensing only, if you purchase a license). The licensing server does not receive or store Google OAuth tokens, Google Sheets contents, Google Drive metadata, or other Google API response data. It processes licensing information separately, including customer contact details, license records, activation hashes, billing identifiers, webhook records, and transactional email jobs.
Licensing data is separate from Google data. The licensing server may retain encrypted raw Paddle webhook payloads for event processing and troubleshooting. Administrative audit records may contain administrator identity, target email address, action details, and source IP address.
See the Privacy Policy for details:
- https://curlycue.app/privacypolicy/
For Google verification reviewers
This section is intended to make Google OAuth verification straightforward.
Summary of requested scopes
curlyCue requests one OAuth scope:
- https://www.googleapis.com/auth/drive.file
curlyCue does not request the Google Sheets account-wide scope, Drive metadata scope, or separate Google identity, email, or profile scopes.
Why each scope is needed
https://www.googleapis.com/auth/drive.file
Required to let the user choose one Google Sheet through Google Picker and synchronize cue data with that explicitly selected file.
curlyCue uses this scope to:
- Receive the file ID of the Google Sheet selected through Picker.
- Retrieve the selected spreadsheet’s title and tab metadata.
- Read cell values from the selected spreadsheet to populate cue data in the app.
- Write updated cue data back to that spreadsheet when the user runs Push/Update workflows.
- Insert or update rows and cell values as needed to perform synchronization, depending on the workflow and user choices.
Google Picker displays the Google account being used in the default browser. curlyCue does not receive the account email through its requested scope or list metadata for unrelated Drive files.
The Google Sheets and Google Drive integration is implemented in the curlyCue desktop application, not in the licensing server. The licensing backend has no Google OAuth or Google API endpoints and does not receive Google Sheets contents, Drive metadata, OAuth tokens, or Google API responses. The server is used separately for license activation and licensing-related email delivery.
Step-by-step reviewer test flow
- Launch curlyCue.
- Open Settings → Google Sheets Settings.
- Click “Choose Google Sheet”.
- Confirm the default browser opens the Google authorization and Picker flow and requests only per-file access.
- Select one controlled Google Sheet in Picker.
- Confirm the selected spreadsheet title appears in curlyCue and its tabs are available for selection.
- Run a basic “read” action (Pull) to confirm the app reads values from the selected spreadsheet.
- Run a basic “write” action (Update/Push) on a small controlled range to confirm the app writes back to the selected spreadsheet.
- Click “Disconnect Google” and confirm reading or writing requires authorization and spreadsheet selection again.
Data handling notes
- Local logs may contain operational identifiers and limited cue identifiers when diagnostics are enabled. Logs are not sent automatically; review them before sharing with support.
- OAuth tokens are stored locally in the macOS Keychain.
- curlyCue does not upload Google Sheets contents to our servers as part of normal operation.
- Licensing data (if applicable) is separate from Google data.
Need help?
- https://curlycue.app/support/