Skip to the content.

Full List of Action Commands

Capture Triggers (Classic, invent your own below.)

examples:

Storing metadata (Permanent, survives power off)

Old style (before March, ‘24)

Example for display the owner’s name *OWNR="Joe Bloggs"

Note: All strings must use " (ASCII 34) and not the (148) character.

All tags between OWNA and OWNZ will be displayed and stored in GoPro-owner.txt.

All tags between OWNa and OWNz will be only stored in the GoPro-owner.txt

Any four character code can be used for store other information. You can also store numeric data examples:

Storing metadata (Temporarily, until power off)

Old style (before March, ‘24)

Reset Actions

Scripting

The geek factor is highest in this section. This is not a Turing-complete language, but it can get many interesting capture control jobs done. There are save and load commands, additive metadata and clock time conditionals

Conditionals Based on Time

< , > and == characters are used to indicate a conditional: less than, greater than equal, and equal (== Since March 2024 firmware)

<08:45!S is equivalent to

if(current_time < 8:45)
    Start

>18:30!R is equivalent to

if(current_time >= 18:30)
    Repeat

==10:10!R is equivalent to

if(current_time == 10:10)
    Repeat

The if condition defaults to effecting only the one command after the condition

<08:45!S"Hello World" is equivalent to:

if(current_time < 8:45)
    Start
print "Hello World"

The start will happen if the condition is true, but the print message occurs whether true or false. To make the print also part of the true state you can use + between the joined commands.

<08:45!S+"Hello World" is equivalent to

if(current_time < 8:45)
{
    Start
    print "Hello World"
}

These can be stacked too, e.g. <08:45!S+"Hello World"+!60E is equivalent to

if(current_time < 8:45)
{
    Start
    print "Hello World"
    After 60 seconds End the capture
}

Conditions support else statements using the ~ character after the last ‘true’ command

<08:45!S+"Hello World"+!60E~!08:44N!R is equivalent to

if(current_time < 8:45)
{
    Start
    print "Hello World"
    After 60 seconds End the capture
}
else
{
    Sleep until 8:44 the next day
}
Repeat

Conditionals themselves can be stacked like >09:15<10:00!S is equivalent to

if(current_time >= 9:15)
    if(current_time <= 10:00)
       Start

However the else can only be applied to the last condition. >09:15<10:00!S+"Hello World"+!60E~!09:30N!R is equivalent to

if(current_time >= 9:15)
{
    if(current_time <= 10:00)
    {
       Start
       print "Hello World"
       After 60 seconds End the capture
    }
    else
    {
       Sleep until 9:30 the next day
    }
}
Repeat

The command language is kept simple, so it doesn’t maintain a stack on the conditional nesting.

Conditionals Based on Camera Status (HERO11 & 12)

New conditional commands for 2023. Now >xValue and/or <xValue and/or ==xValue can be used to test camera states, where ‘x’ is the camera state to test, and Value the amount to test against:

Assignments, Variables and Math

HERO11 v2.10.70, QR Command scripts can include variables and operation on them. Why? Fun maybe? More power, for sure! A complete program in a QR Code.

As ‘a’ to ‘z’ and system system fields, ‘A’ to ‘Z’ are the variable can contain any floating point number. This new variables are all initialized to zero, and can be tested with the ‘<’ and ‘>’ conditionals. To make them non-zero, they can be assign with and ‘=’ command. Just like with conditions and action, the ‘=’ character is the command delimiter and comes first.

=A5 is the command variable A = 5.

=P3.14159265 assigns Pi to variable P.

Now math can be used to modify your variables.

There should be a prize if some can come up with a practical use for all of these ;)

So if thought the above is crazy, it gets weirder.

Why Add Math to QR codes

You the user can have very particular shooting needs, this improves the robustness of Labs to cover a wider range of automatic captures. And is it cool. ;)

Say you want use a GoPro as a crude light meter, and report the output as an exposure value, then make capture decision based on that EV value.

EV = logbase2 (f-number^2/(time x gain_above_base_iso)) is the formula for EV

As a QR command: =E6.25=Gi=G*0.01=E/G=E*s=E#2"Exposure value $E"!R

Command steps explained:

E=6.25
G=ISO value
G=G*0.01
E=E/G
E=E*shutter value (1/s)
E=log(E)/log(2)
print E
repeat

Experiment Here

Typing-in Your Custom Action:


GoProQR:

Custom Mode:

updated: March 14, 2024

BACK