Campaign Settings Technical Guide¶
This guide complements the UI workflow in docs/guides/campaign-page-navigation-guide.md. It describes the underlying setting schema returned by Lucit for a campaign, with emphasis on the data an LLM or AI assistant must understand when reading or reasoning about a campaign's configuration.
This is a reference for interpretation, not a save/update procedure. It explains:
- the overall structure of the settings payload
- the purpose of each setting group
- what each key means and what type of value it expects
- which settings are dependent on one another
- where to look for deeper schema details, especially filters and slot behavior
1. Shape of the data¶
Campaign settings are stored under the top-level export_settings object. Each category contains an array of setting definitions. A setting is not just a value; it is a metadata object that tells the UI what it is and how it should behave. The format of each setting follows Lucit Form Fields Spec
{
"success": true,
"export_settings": {
"loader": [
{
"key": "account_ids",
"name": "Accounts",
"type": "array",
"required": true,
"enum": true,
"enum_multiple": true,
"default_value": [{ "value": 101, "label": "Example Account" }],
"value": [{ "value": 101, "label": "Example Account" }]
}
],
"general": [],
"transformer": [],
"puller": []
}
}
Common fields on each setting object¶
Each setting usually includes the following:
key: stable internal identifier used by code and the UIname: human-readable label shown in the settings dialogtype: primitive type such asbool,int,array,text,datetimedescription: plain-language explanation of behaviorrequired: whether the setting is required in practicedefault_value: baseline value used when unsetvalue: current effective value for the campaigngrid_size: layout width for the settings formcomponent: optional custom UI control, such asItemFilterorAccountUserRolesenum: iftrue, the field uses a fixed option listenum_options: the allowed option listdepends_on: conditional visibility or enablement rules
Important interpretation rule¶
The AI assistant should treat default_value and value as the canonical baseline and current state, respectively. A setting may be present even when its effective value is null, empty array, or false.
2. Setting groups¶
The settings are organized into four main groups:
| Group | Purpose |
|---|---|
loader |
Which inventory items are loaded into the campaign and from which accounts |
general |
Core operational settings, analytics, and reporting behavior |
transformer |
Creative generation, delivery fallback, and default creative logic |
puller |
How the campaign behaves when delivering content to a player or scheduler |
loader¶
The loader group controls what gets pulled into a campaign before creative selection happens.
Typical keys:
loader_filter: filter expression used to decide which inventory items are allowed into the campaignauto_add_new_items_to_export: if enabled, new matching items are automatically addedinclude_child_accounts: if enabled, include descendants of selected accountsaccount_ids: collection of accounts to source inventory from
This category is used to enable the campaign to Automatically select the items that will run in the campaign based on the criteria that you specify. This can be useful for campaigns that pull creatives from multiple accounts, or campaigns that pull creatives based on conditions such as geo data (item locations based on geo polygons or radiuses) or other conditions like item tags, classes, titles etc.
Example use cases might be : - Only show real estate ads for houses within a 10 mile radius of some fixed point - Only show items tagged with "Christmas" - etc.
When these settings are NOT set (or left at their defaults) - Then, a user can manuall add/remove items from their campaign without these restrictions. This is the default behavior of most campaigns.
general¶
The general group defines operational behavior and campaign-level reporting rules.
Typical keys:
analytics_notifications: sends periodic analytics emails/notificationsanalytics_notifications_user_roles: which roles receive analytics notificationsanalytics_notifications_sold: notifies on removed/sold inventory itemsanalytics_notifications_sold_user_roles: roles that receive sold-item notificationsestimate_play_stats_from_daily_average_plays: use estimate-based analytics for legacy systemsestimated_total_plays_per_day: daily estimate for those calculationsestimated_plays_start_date_time/estimated_plays_stop_date_time: optional estimate windowsminimum_campaign_stopped_seconds_to_be_stopped: stop threshold for inactivity detectionverbose_logging: writes additional logs and converter cachesbreak_all_export_builds_up_by_board: break export work into board-sized jobsbreak_all_export_builds_up_by_board_batch_size: size of those batchesplays_are_not_billable: campaign-level billing override for non-billable plays
Estimated Play Stats See Estimated Play Stats
Inactivity Detection
Campaigns are moved into stats like Running, Paused, etc. The timeouts for these are based on this setting - minimum_campaign_stopped_seconds_to_be_stopped If a campaign is SUPPOSED to stop and start at various times through the day, increasing this number will stop that oscillation of states.
Break Up Buids Use these settings to improve performance and reduce timeouts for campaigns with large numbers of screens. Most programmatic campaigns have this enabled by default. It is also recommended for video campaigns (Campaigns that generate dynamic video)
transformer¶
The transformer group controls how creatives are generated, assigned, and delivered when no valid creative exists.
Typical keys:
attempt_to_auto_attach_missing_board_ids: auto-attach screens that request this campaign but are not attachedauto_generate_fallback_creatives: deliver fallback creative when nothing else matchessupports_puller_filtering: enable filter-aware requests from the playerpuller_filtering_allowed_fields: allowed fields for player-side filteringadd_export_id_to_hash: include the export ID in generated creative hash identitiesgenerate_video: generate video output for supported creativesduration_seconds,fps,slow_zoom,zoom_percent: video generation parametersdefault_creative_item_id: fallback creative when no eligible creative existsdisable_object_moderation_and_approve_all_creatives: broad override to bypass moderation checks
Puller Filtering See Configuring Dynamic Puller Filtering for infformation on puller filtering use cases and settings.
puller¶
The puller group controls request-level behavior between the player and campaign content delivery.
Typical keys:
enable_slot_dependency: turns on slot-aware selection logicassume_no_slot_is_slot_one: if true, missing slot numbers default to slot 1slot_dependency_settings: slot-aware repeat / no-repeat / advance ruleshtml_source: how HTML is delivered to the player (snapshot,drive_template, oron_demand)
This category is especially relevant for external player loops and multi-slot scheduling.
Slot Dependency See Configuring Slot Dependency
HTML Source By default this is set to snapshot for player systems that expect JPG assets returned to them.
For player systems that use a chromium based player, the recommended settings are drive_template or on_demand
To improve performance, Use on_demand for programmatic campaigns with constantaly updating data (e.g. weather temp, etc.)
3. Representative concrete example¶
To keep the data manageable for an LLM, the following condensed example shows the actual structure without every real-world account value.
{
"success": true,
"export_settings": {
"loader": [
{
"key": "loader_filter",
"name": "Item Filter",
"type": "array",
"description": "Filter the items that are fetched before they are added to the campaign",
"component": "ItemFilter",
"value": {
"filter_fields": [
{
"field_name": "__logical_group",
"operator": "and",
"value": [
{
"type": "filter_field",
"field_name": "inventory_item.category",
"operator": "equals",
"value": "automotive",
"objectClass": "App\\InventoryItem"
}
],
"isDirty": true,
"isGroup": true
}
],
"filter_functions": []
}
},
{
"key": "auto_add_new_items_to_export",
"name": "Auto Add New Items to Campaign",
"type": "bool",
"value": true
},
{
"key": "include_child_accounts",
"name": "Include Child Accounts",
"type": "bool",
"value": false
},
{
"key": "account_ids",
"name": "Accounts",
"type": "array",
"enum": true,
"enum_multiple": true,
"default_value": [{ "value": 101, "label": "Northwind Auto" }],
"value": [{ "value": 101, "label": "Northwind Auto" }]
}
],
"general": [
{
"key": "analytics_notifications",
"name": "Analytics Notifications",
"type": "bool",
"value": true
},
{
"key": "estimated_total_plays_per_day",
"name": "Estimated Total Plays Per Day",
"type": "int",
"value": 1350
},
{
"key": "estimated_plays_start_date_time",
"name": "Estimated Plays Start Date/Time",
"type": "datetime",
"value": null
}
],
"transformer": [
{
"key": "auto_generate_fallback_creatives",
"name": "Deliver default creative if no creatives are eligible",
"type": "bool",
"value": true
},
{
"key": "default_creative_item_id",
"name": "Default Creative Item",
"type": "int",
"enum": true,
"value": null
},
{
"key": "generate_video",
"name": "Generate Video",
"type": "bool",
"value": true
}
],
"puller": [
{
"key": "enable_slot_dependency",
"name": "Enable Slot Dependency",
"type": "bool",
"value": false
},
{
"key": "html_source",
"name": "HTML Source Type",
"type": "text",
"enum": true,
"value": "snapshot"
}
]
}
}
This is intentionally fictionalized and shortened. It preserves the structure, types, and semantics of the real settings without using production account identifiers or full enum lists.
4. Key semantics and behaviors¶
4.1 loader_filter and item selection¶
loader_filter is a filter object built using the Lucit filter-builder format. It is used to restrict which inventory items are pulled into the campaign before creative assignment happens.
The important rule for an AI assistant is:
- it is not a generic free-form string
- it is structured filter JSON using
filter_fieldsandfilter_functions - it supports logical groups using the special field name
__logical_group - groups use
operatorvalues likeandandor - nested groups are allowed, but each branch must be marked correctly as a group (
isGroup: true)
For the exact filter-tree contract, see docs/developer/macros/filter-builder-reference.md.
The loader_filter is used when the UI says:
- "Auto Add New Items to Campaign"
- "Item Filter"
- the campaign imports or updates its inventory dynamically
This setting is extremely important because it affects the campaign input set, not just display.
4.2 account_ids¶
account_ids is an array of account identifiers used as sourcing accounts for campaign inventory.
It often appears with:
enum: trueenum_multiple: truedefault_valueas an array of{ "value": <id>, "label": <name> }valueas the current selected accounts
This field should be interpreted as a selection list, not a username or account slug. The actual programmatic value is the numeric identifier; the label is the display name.
4.3 Analytics and notification settings¶
Campaign-level notifications are grouped behaviorally:
analytics_notifications=> campaign performance notificationsanalytics_notifications_user_roles=> who receives themanalytics_notifications_sold=> removal/sold-item escalationanalytics_notifications_sold_user_roles=> who receives sold-item alerts
These settings are operational and often user-role sensitive. The value arrays for roles are often enumerated with values like account_admin, user, or account_exec.
4.4 Estimated play analytics¶
Settings like:
estimate_play_stats_from_daily_average_playsestimated_total_plays_per_dayestimated_plays_start_date_timeestimated_plays_stop_date_time
are used for systems that do not provide full playback reporting. In those cases, Lucit estimates play counts based on configured daily averages and timing windows.
These settings are especially relevant for older or legacy player integrations, and they should be considered campaign forecasting controls rather than actual proof-of-play data.
4.5 Fallback and default creative behavior¶
The transformer settings define what happens when a campaign cannot match a screen or item to a valid creative.
Most important ones:
auto_generate_fallback_creativescontrols whether a default creative is generated automaticallydefault_creative_item_idchooses the fallback creative to useattempt_to_auto_attach_missing_board_idsallows screens not attached to the campaign to self-attach when they request it
This is intentionally delivery-risk logic: it affects what the player receives if there is no valid campaign match.
4.6 Video generation settings¶
When generate_video is enabled:
duration_secondssets the video lengthfpssets frame rateslow_zoomcontrols whether a slow zoom is usedzoom_percentsets the amount of zoom
These settings are interdependent: they are meaningful only when the video generation workflow is active.
4.7 Slot dependency and html_source¶
The puller settings determine how campaign content is delivered to a player.
enable_slot_dependencyturns on loop-aware slot behaviorslot_dependency_settingsstores the per-slot dependency rules that define one slot as normal / advance / repeat / no-repeat relative to another slotassume_no_slot_is_slot_onetreats missing slot numbers as slot 1 when necessaryhtml_sourcecontrols how the campaign HTML is delivered (snapshot,drive_template, oron_demand)
This category is more advanced and is mostly relevant for multi-slot or external-player scheduling workflows. For deeper semantics, see docs/guides/how-tos/configuring-campaign-slot-dependency-settings.md.
5. Dependency and conditional logic¶
Many settings are not independent. The JSON often uses depends_on to hide or enable fields based on other keys.
Examples:
puller_filtering_allowed_fieldsdepends onsupports_puller_filteringduration_seconds,fps,slow_zoom, andzoom_percentdepend ongenerate_videoassume_no_slot_is_slot_onedepends onenable_slot_dependency
This means an LLM should not assume that every setting is always relevant or active. A setting may exist in the schema but be logically irrelevant unless the parent condition is true.
6. Data types and value expectations¶
The settings use a small set of common primitive types.
bool¶
Boolean toggles are used for clear on/off choices. Example:
int¶
Integer values are used for numeric thresholds and sizing values. Example:
array¶
Arrays are used for multi-select values and list-like data. Example:
{
"key": "analytics_notifications_user_roles",
"type": "array",
"value": ["account_admin", "user", "account_exec"]
}
datetime¶
Datetime fields are strings or null values that represent a date/time when a particular behavior starts or stops. They are not ordinary text fields and should be treated as timestamp-like values.
text¶
Text fields are used for string-based settings such as the HTML source mode.
7. Safe interpretation for an AI assistant¶
When reading campaign settings, an LLM should use these rules:
- Treat the setting object as schema metadata plus the current value.
- Use
valueto determine the effective state of a campaign. - Use
default_valueas the fallback baseline only whenvalueis missing or empty. - Treat
enum_optionsas UI labels, but use the underlyingvaluein programmatic logic. - Follow
depends_onbefore deciding whether a field is active or meaningful. - For filter logic, use the filter-builder contract rather than guessing based on labels.
- For slot logic, understand it as a delivery strategy for multi-slot loops, not as a generic creative filter.
8. Summary of the most important settings¶
If you were building a quick mental model for a campaign, these are the highest-value settings to understand first:
account_ids: what accounts the campaign pulls fromloader_filter: what inventory items are allowed inanalytics_notifications*: reporting and alerting behaviorestimated_total_plays_per_dayand related estimate fields: analytics forecastingauto_generate_fallback_creativesanddefault_creative_item_id: what happens when no creative matchesgenerate_video+ video parameters: how motion creatives are producedenable_slot_dependencyandhtml_source: delivery strategy for slot-aware or HTML-based players
These settings define the campaign's real operational envelope: what enters the campaign, how it is evaluated, how it is delivered, and what the user sees when a downstream system requests content.
9. Additional technical references¶
- docs/developer/macros/filter-builder-reference.md
- docs/guides/how-tos/configuring-campaign-slot-dependency-settings.md
- docs/guides/campaign-page-navigation-guide.md
- docs/developer/fields/lucit-form-fields-specification.md
This document intentionally focuses on the structure and meaning of Lucit's campaign settings object so an AI assistant can reason about it without needing to know the exact UI save flow.