Skip to content

Latest commit

 

History

History

bones

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

GoPro Bones QR Code Creator

<script src="../jquery.min.js"></script> <script src="../qrcodeborder.js"></script> <script src="../html2canvas.min.js"></script> <style> #qrcode{ width: 100%; } div{ width: 100%; display: inline-block; } </style>

Create a custom camera mode, and even start a capture all through QR Codes. This is the fastest way to access many of the new GoPro Labs' firmware features that are pre-installed on Bones. Many features of this page are also available as a mobile app.
Install from: google play apple app store

Scanning Your Code

  <img src="https://gopro.github.io/labs/bones/scanning.jpg" alt="scanning">

  </td>
  <td border="0" padding="0">
  
  Whether you scan a QR Code from a laptop screen, a mobile phone, or a piece of paper, the code should be a minimum 1.5"/4cm in size with the camera about 6"/15cm away. The larger the QR Code, the easier it is to scan. Point the camera at the center of the code, hold it still for about a second. With each successful scan the LED will flash twice. The camera will now be in the mode you have selected.
  
  </td>
</tr>

Camera Settings

Mode: Video   Standard  Activity
      Cinematic  SloMo   Basic
      TimeWarp  Timelapse  Nightlapse
      Photo  Burst  Night   not set
Resolution:   1080p  2.7k  4k  5.3k
      2.7k4:3  4k4:3  5k4:3  not set
Resolution:   1080p   2.7k   4k
      2.7k4:3  4k4:3  not set
Frame Rate:   24   25   30   50   60
      100   120   200   240   not set
Lens FOV:   Wide   Narrow   Linear
      Superview   Linear+HL
or Max Lens Mod:   Wide   Superview
      Linear(1080)   Horizon Lock   not set
Lens:   Wide    Linear    Narrow
or Max Lens Mod:   Wide    Superview
     Horizon Lock   not set
Lens: Wide    Linear    Narrow    not set
Lens: Wide   Linear   Linear+HL
      Narrow
or Max Lens Mod:   Wide   Superview
      Linear   Horizon Lock   not set
Zoom:   
Burst Style:   Auto   3/1   5/1   10/1
     25/1   10/3   30/3   30/6
     30/10   not set
TimeWarp Speed:   2X   5X   10X   15X
      30X   Auto    not set
TLV Interval:   0.5s   1s   2s   5s   10s
      30s   60s   2min   5min
      30min   60min   not set
NLV Interval:   Auto   4s   5s   10s
      15s   20s   30s   60s   2min
      5min   30min   60min   not set
Shutter:   auto   2s   5s   10s
      15s   20s   30s   not set
Hypersmooth:   Off   Standard   High
      Boost   not set
Hindsight:   Off   15s   30s   not set
Duration:   Off  15s  30s  1min  5min
      15min  30min  1hr  2hr  3hr
      not set
Photo Properties:
Standard    Raw + JPEG    Superphoto    HDR
      not set
Wind Reduction:   Auto    Off    On   not set
Spot Metering
  Your Virtual Touch Screen
                                       
                                       
                                       
                                       
                                       
   Disable
   Exposure Lock 3s after scan (to avoid locking on the QR Code)
Protune Controls
  Color:   Vibrant   Natural   Flat   not set
  Bit rate:   Standard   High   not set
  White Balance:   Auto    2300K    2800K    3200K    4000K    4500K    5000K
   5500K    6000K    6500K    Native    not set
  ISO Min:   100 (def)    200    400    800    1600    3200    6400    not set
  ISO Max:   100    200    400    800    1600 (def)    3200    6400    not set
  Lock Shutter:   360°    180°    90°    45°    22°    10°    5°    2°    Auto not set
  EV Compensation:   -2    -1.5    -1    -0.5    0    +0.5    +1    +1.5    +2 not set
  Sharpness:   Low    Medium    High   not set
  Protune Reset:  
Camera Preferences
  Voice Control:   off    on    not set
  Quick Capture:   off    on    not set
  Default Mode:   Last Used   Video   Photo   Timelapse   not set
  Orientation Lock:   Landscape ↑    ↓       Portrait ←    →       Unlocked    not set
  Camera Auto Off:   5 mins    15 mins    30 mins    Never    not set
  WiFi Connections:   Off    On    On 2.4GHz   On 5GHz   not set
  Voice Language:   English US    English UK    English AUS    English IND    Spanish EU    Spanish NA    German    Italian    Chinese    Japanese    Korean    French    Portuguese    Russian    Swedish    not set
Set date and time
       add 1/100th of a second
Camera Actions
  Pairing:   Quik App    Remote    Cancel
  Reset:   Factory    Presets    WiFi    Labs
  Auto Wake on Power:   Enable    Disable
  Use 12GB Chapters:   Enable    Disable
  Overclock Bitrate:   Take On Risk  More Info
    
 <b>Warning:</b> The only risk is SD card encoding reliability, as this capture is thoroughly tested at the default bitrates, up to 100Mb/s. Some SD cards can support higher bit-rates when fairly new, but then may fail when extensively used. As the bit-rate is increased, the probability of capture failures increase. Lower frame rate maybe more reliable than higher framerates as some extreme overclocks. Experiment extensively before using this feature on critical projects. You can also disable LRVs and audio capture to help push the video bitrate to the maximum. See more on these <a href="../control/extensions">Labs extensions</a>. Changes can be reversed with a Labs reset. This will not damage your GoPro.  
 
 </small>
    

  Auto Capture Trigger:
     Sound Pressure Level (range 30-120dB)
     Camera Motion - Gyro+Accel (range 1-9)
     Scene Motion (range 1-6)

        Sensitivity: (value from range ).   Help
SPL (dB) at 1m/3ft Activity
30 calm room
40-60 conversation
60-80 passenger car
80-90 busy roadway
100 jack hammer
110 chain saw
120 air horn
Sensitivity Activity
1 Throwing the camera
2 Jumps
5 any hand-held movement
8 tiny movement
9 small tremor
SensitivityActivity
1 Everything moving
2 Large nearby movement
3 Medium object movement
4 small movement
5 tiny movement
6 any change

        Delay start: seconds.
        Hold time: capture seconds after motion stops.
       Repeat Command
       Make Boot Command on SD Card -- Automatic Action on boot
   not set

Additional Commands:


GoProQR:

Copy Image to Clipboard

Share this QR Code as a URL:
Copy URL to Clipboard

Reset page

More features for Labs enabled cameras

version 1.08

updated: May 3, 2022

<script> var clipcopy = ""; var lastcmd = ""; var lasttimecmd = "xxxxxxxxx"; var changed = false; var ms = 0; var lastms = 0; var timechecked = false; var once = true; var even = 0; var qrcode; var i; function makeQR() { if(once === true) { qrcode = new QRCode(document.getElementById("qrcode"), { text : "QR Control\nReady", width : 400, height : 400, correctLevel : QRCode.CorrectLevel.M }); } once = false; } function startTime() { var today; var yy; var mm; var dd; var h; var m; var s; var timecodefps = 30; var cmd = ""; var timenotchecked; dset("settingsRES", false); dset("settingsFPS", false); dset("settingsFOV", false); dset("settingsPFOV", false); dset("settingsTLVFOV", false); dset("settingsTWFOV", false); dset("settingsZoom", false); dset("settingsRESTLV", false); dset("settingsVideo", false); dset("settingsHindsight", false); dset("settingsDuration", false); dset("settingsPhotoRAW", false); dset("settingsPT", false); dset("settingsPTR", false); dset("spotMeterCheck", false); dset("spotMeter", false); dset("settingsBurst", false); dset("settingsTimewarp", false); dset("settingsTimelapse", false); dset("settingsNightlapse", false); dset("settingsNightexposure", false); dset("settingsAUDT",false); dset("ptCOLOR", false); dset("ptBITRATE", false); dset("ptWBAL", false); dset("ptISO",false); dset("ptIMIN",false); dset("ptSHUT",false); dset("ptIMIN",false); dset("ptEV",false); dset("ptSHARP",false); //dset("ptAUD",false); dset("opVC", false); dset("opQC", false); dset("opDM", false); //dset("opBV", false); //dset("opLO", false); dset("opOR", false); dset("opAO", false); dset("opWC", false); dset("opLN", false); dset("NakedTools", false); //dset("aS", false); //dset("aSM", false); //dset("aIT", false); dset("aR", false); dset("splHelp", false); dset("imuHelp", false); dset("motionHelp", false); dset("bitrHelp", false); dset("bitrSlider", false); dset("motionParams", false); dset("opDTS", false); var checkedmode = 0; var actionmode = 0; var x; for (i = 1; i < 14; i++) { var mode = "m"+i; x = document.getElementById(mode).checked; if( x === true) checkedmode = i; } for (i = 1; i < 16; i++) { var amode = "sap"+i; if(document.getElementById(amode) !== null) { x = document.getElementById(amode).checked; if( x === true) actionmode = i; } } //m1 mV //m2 mV0 //m3 mV1 //m4 mV2 //m5 mV3 //m6 mV4 //m7 mTW //m8 mT //m9 mNL //m10 mP //m11 mPB //m12 mPN switch(checkedmode) { default: case 1: //Video case 2: //mV0 case 3: //mV1 case 4: //mV2 case 5: //mV3 case 6: //mV4 dset("settingsRES", true); dset("settingsFPS", true); dset("settingsFOV", true); dset("settingsVideo", true); dset("settingsHindsight", true); dset("settingsDuration", true); dset("settingsPT", true); //dset("settingsAUDT",true); break; case 7: //TimeWarp Video dset("settingsTimewarp", true); dset("settingsDuration", true); dset("settingsRESTLV", true); dset("settingsTWFOV", true); dset("settingsPT", true); break; case 8: //Timelapse Video dset("settingsTimelapse", true); dset("settingsDuration", true); dset("settingsRESTLV", true); dset("settingsTLVFOV", true); dset("settingsPT", true); break; case 9: //NL Video dset("settingsNightlapse", true); dset("settingsNightexposure", true); dset("settingsDuration", true); dset("settingsRESTLV", true); dset("settingsPT", true); dset("settingsTLVFOV", true); break; case 10: //Photo dset("settingsPT", true); dset("settingsPFOV", true); dset("settingsPhotoRAW", true); break; case 11: //Burst dset("settingsBurst", true); dset("settingsPT", true); dset("settingsTLVFOV", true); dset("settingsPhotoRAW", true); break; case 12: //Night dset("settingsNightexposure", true); dset("settingsPT", true); dset("settingsTLVFOV", true); dset("settingsPhotoRAW", true); break; } if(document.getElementById("sm") !== null) { if( (document.getElementById("raw3").checked === true) || //Superphoto (document.getElementById("raw4").checked === true)) //HDR { document.getElementById("sm").checked = false; } else { dset("spotMeterCheck", true); } dset("spotMeter", document.getElementById("sm").checked); } if(document.getElementById("pt") !== null) { if(document.getElementById("pt").checked === true) dset("settingsPTR", true); if(document.getElementById("pt").checked === true && document.getElementById("ptr").checked === false) { dset("ptCOLOR", true); dset("ptWBAL", true); dset("ptISO",true); dset("ptIMIN",true); dset("ptSHUT",true); if(document.getElementById('iso8').checked === true) { //dset("ptSHUT",false); dset("ptEV",true); } else { //dset("ptSHUT",true); if(document.getElementById('shut9').checked === true || document.getElementById('shut10').checked === true) { // not shutter lock dset("ptEV",true); } } //if(checkedmode >= 1 && checkedmode <= 6) //Video + Audio modes //{ // dset("ptAUD",true); //} if(checkedmode >= 1 && checkedmode <= 9) //Video modes { dset("ptBITRATE", true); } dset("ptSHARP",true); } } if(document.getElementById("options") !== null) { if(document.getElementById("options").checked === true) { dset("opVC", true); dset("opQC", true); dset("opDM", true); //dset("opBV", true); //dset("opLO", true); dset("opOR", true); dset("opAO", true); dset("opWC", true); dset("opLN", true); } } if(document.getElementById("actions") !== null) { if(document.getElementById("actions").checked === true) { dset("NakedTools", true); //dset("aS", true); //dset("aSM", true); //dset("aIT", true); if(actionmode > 12) { dset("motionParams", true); dset("aR", true); } if(document.getElementById("helpRange") !== null) { if(document.getElementById("helpRange").checked === true) { if(actionmode == 13) dset("splHelp", true); if(actionmode == 14) dset("imuHelp", true); if(actionmode == 15) dset("motionHelp", true); } } } else actionmode = 0; } if(document.getElementById("helpBitr") !== null) { if(document.getElementById("helpBitr").checked === true) { dset("bitrHelp", true); } } if(actionmode == 12) { dset("bitrSlider", true); } cmd = dcmd(cmd,"m"); // set mode switch(checkedmode) { case 7: //TWarp cmd = dcmd(cmd,"fpswarp"); break; case 8: //TLV cmd = dcmd(cmd,"fpslapse"); break; case 9: //NLV cmd = dcmd(cmd,"fpsnight"); cmd = dcmd(cmd,"nightexp"); break; case 11: //Burst cmd = dcmd(cmd,"b"); break; case 12: //Night cmd = dcmd(cmd,"nightexp"); break; } if(checkedmode <= 9) { if(checkedmode == 7 || checkedmode == 8 || checkedmode == 9) // TLV/TWarp Res/NLV { cmd = dcmd(cmd, "rt"); } else { cmd = dcmd(cmd,"r"); //RES } } if(checkedmode <= 6) // video mode { cmd = dcmd(cmd,"p"); //fps } var zoom; if(checkedmode > 6) // not video { if(checkedmode == 7) //TWarp { cmd = dcmd(cmd,"twf"); //fov if( (document.getElementById("twf1").checked === true) || //Wide (document.getElementById("twf2").checked === true) || //Linear (document.getElementById("twf3").checked === true) ) //Linear+HL { dset("settingsZoom", true); zoom = parseInt(document.getElementById("zoom").value); zoom *= 10; document.getElementById("zoomtext").innerHTML = zoom+"%"; if(zoom == 100) zoom = 99; cmd = cmd + zoom; //fov } else if((document.getElementById("twf5").checked === true) || //MLM Wide (document.getElementById("twf6").checked === true) || //MLM Superview (document.getElementById("twf7").checked === true) ) //MLM Linear { if(document.getElementById("twmlmhl").checked === true) { cmd = cmd + "L"; //level MLM modes } } } else if(checkedmode == 10) //Photo { cmd = dcmd(cmd,"pf"); //fov if( (document.getElementById("pf1").checked === true) || //Wide (document.getElementById("pf2").checked === true) ) //Linear { dset("settingsZoom", true); zoom = parseInt(document.getElementById("zoom").value); zoom *= 10; document.getElementById("zoomtext").innerHTML = zoom+"%"; if(zoom == 100) zoom = 99; cmd = cmd + zoom; //fov } else if((document.getElementById("pf4").checked === true) || //MLM Wide (document.getElementById("pf5").checked === true)) //MLM Superview { if(document.getElementById("pmlmhl").checked === true) { cmd = cmd + "L"; //level MLM modes } } } else //Everything else { cmd = dcmd(cmd,"tlvf"); //fov if( (document.getElementById("tlvf1").checked === true) || //Wide (document.getElementById("tlvf2").checked === true) ) //Linear { dset("settingsZoom", true); zoom = parseInt(document.getElementById("zoom").value); zoom *= 10; document.getElementById("zoomtext").innerHTML = zoom+"%"; if(zoom == 100) zoom = 99; cmd = cmd + zoom; //fov } } } else { cmd = dcmd(cmd,"f"); //fov if( (document.getElementById("f1").checked === true) || //Wide (document.getElementById("f3").checked === true) || //Linear (document.getElementById("f5").checked === true) ) //Linear+HL { dset("settingsZoom", true); zoom = parseInt(document.getElementById("zoom").value); zoom *= 10; document.getElementById("zoomtext").innerHTML = zoom+"%"; if(zoom == 100) zoom = 99; cmd = cmd + zoom; //fov } else if((document.getElementById("f6").checked === true) || //MLM Wide (document.getElementById("f7").checked === true) || //MLM Superview (document.getElementById("f8").checked === true) ) //MLM Linear { if(document.getElementById("mlmhl").checked === true) { cmd = cmd + "L"; //level MLM modes } dset("settingsZoom", false); } else { dset("settingsZoom", false); } } if(checkedmode >= 10 && checkedmode <= 13) //RAW Photo modes cmd = dcmd(cmd,"raw"); //raw photo control if(document.getElementById("sm") !== null) { if(document.getElementById("sm").checked === true) { var pos = dcmd("","sp"); if(document.getElementById("sl").checked === true) { cmd = dcmd(cmd,"sl") + pos; //spot Lock } else { cmd = dcmd(cmd,"sm") + pos; //spotMeter } } } if(document.getElementById("pt").checked === true) { if(document.getElementById("ptr").checked === true) { cmd = cmd + "t0"; //protune reset } else { cmd = cmd + "t"; //protune } } cmd = dcmd(cmd,"eis"); //eis cmd = dcmd(cmd,"hind"); //hindsight cmd = dcmd(cmd,"dur"); //duration cmd = dcmd(cmd,"all"); //auto low light cmd = dcmd(cmd,"audt"); //audio control if(document.getElementById("p1") !== null) { x = document.getElementById("p1").checked; if( x === true) timecodefps = 24; } if(document.getElementById("p2") !== null) { x = document.getElementById("p2").checked; if( x === true) timecodefps = 30; } if(document.getElementById("p3") !== null) { x = document.getElementById("p3").checked; if( x === true) timecodefps = 60; } if(document.getElementById("p6") !== null) { x = document.getElementById("p6").checked; if( x === true) timecodefps = 25; } if(document.getElementById("p7") !== null) { x = document.getElementById("p7").checked; if( x === true) timecodefps = 50; } if(document.getElementById("pt") !== null) { if(document.getElementById("pt").checked === true && document.getElementById("ptr").checked === false) { cmd = dcmd(cmd,"ptc"); //color cmd = dcmd(cmd,"br"); //bitrate cmd = dcmd(cmd,"wb"); //wb if(document.getElementById('iso8').checked === false) { cmd = dcmd(cmd,"iso"); //iso max if(document.getElementById('isomin8').checked === false) { let isomin = dcmd("","isomin"); //min let isomax = dcmd("","iso"); //max var min = parseInt(isomin.substring(1)); var max = parseInt(isomax.substring(1)); if(max < min) { if(max == 1) document.getElementById('isomin1').checked = true; if(max == 2) document.getElementById('isomin2').checked = true; if(max == 4) document.getElementById('isomin3').checked = true; if(max == 8) document.getElementById('isomin4').checked = true; if(max == 16) document.getElementById('isomin5').checked = true; if(max == 32) document.getElementById('isomin6').checked = true; cmd = cmd + "M" + max; //set the min to match the max iso } else cmd = dcmd(cmd,"isomin"); //add iso min if(document.getElementById('shut10').checked === false) { //cmd = dcmd(cmd,"iso"); //iso max cmd = dcmd(cmd,"shut"); //shutter angle } } else if(document.getElementById('shut10').checked === false) { cmd = dcmd(cmd,"shut"); //shutter angle } } else if(document.getElementById('isomin8').checked === false) { cmd = cmd + "i64"; //ADD fake ISO max cmd = dcmd(cmd,"isomin");//iso min if(document.getElementById('shut10').checked === false) { //cmd = cmd + "i64"; //ADD fake max cmd = dcmd(cmd,"shut"); //shutter angle } } else if(document.getElementById('shut10').checked === false) { cmd = cmd + "i64"; //ADD fake ISO max cmd = dcmd(cmd,"shut"); //shutter angle } cmd = dcmd(cmd,"ev"); //ev cmd = dcmd(cmd,"sharp"); //sharp //cmd = dcmd(cmd,"aud"); //audio control cmd = dcmd(cmd,"bit"); //bitrate control } } if(document.getElementById("options") !== null) { if(document.getElementById("options").checked === true) { var opt = ""; var addO = "o"; cmd = dcmd(cmd,"gps"); cmd = dcmd(cmd,"vc"); cmd = dcmd(cmd,"qc"); cmd = dcmd(cmd,"dm"); opt = dcmd(addO, "bv"); if(opt != "o") { cmd = cmd + opt; addO = ""; } opt = dcmd(addO, "db"); if(opt != "o") { cmd = cmd + opt; addO = ""; } opt = dcmd(addO, "lo"); if(opt != "o") { cmd = cmd + opt; addO = ""; } opt = dcmd(addO, "or"); if(opt != "o") { cmd = cmd + opt; addO = ""; } opt = dcmd(addO, "ao"); if(opt != "o") { cmd = cmd + opt; addO = ""; } opt = dcmd(addO, "so"); if(opt != "o") { cmd = cmd + opt; addO = ""; } opt = dcmd(addO, "wc"); if(opt != "o") { cmd = cmd + opt; addO = ""; } opt = dcmd(addO, "ln"); if(opt != "o") { cmd = cmd + opt; addO = ""; } } } if(document.getElementById("actions") !== null) { if(document.getElementById("actions").checked === true) { } else { dset("opDT", true); } } var dt = document.getElementById("dt").checked; today = new Date(); if(cmd != lastcmd) { ms = today.getTime(); changed = true; lastcmd = cmd; } if((dt === true && actionmode<13) || (dt === true && actionmode>=13 && document.getElementById("repeat").checked === false && document.getElementById("boot").checked === false)) { //dset("opDTS", true); dset("copyshow", false); // don't what user printing or sharing code with wrong date and time var frms; var secs = true;//document.getElementById("dtsec").checked; var timecode = document.getElementById("dttimecode").checked; yy = today.getFullYear() - 2000; mm = today.getMonth() + 1; dd = today.getDate(); h = today.getHours(); m = today.getMinutes(); s = today.getSeconds(); ms = today.getMilliseconds(); frms = (h * 3600 + m * 60 + s) * timecodefps + Math.floor((timecodefps * ms) / 1000); yy = checkTime(yy); mm = checkTime(mm); dd = checkTime(dd); h = checkTime(h); m = checkTime(m); s = checkTime(s); ms = Math.floor(ms / 10); // hundredths ms = checkTime(ms); //var curr = today.getTime(); cmd = cmd + "oT" + yy + mm + dd + h + m; if(secs || timecode) { cmd = cmd + s; if(timecode) { cmd = cmd + "." + ms; } } timechecked = true; } else { dset("opDTS", false); dset("copyshow", true); if(timechecked === true) { ms = today.getTime(); changed = true; } timenotchecked = false; } var actions = document.getElementById("actions").checked; if(actions === true) { //var S_added = 0; //var SM_added = 0; cmd = dcmd(cmd,"sap"); //naked action if(actionmode >= 13) { if(document.getElementById("mstart") !== null) { var mstart = document.getElementById("mstart").value; if(mstart <= 0) mstart = 6; if(actionmode == 13 ) //audio trigger { while(mstart <= 30) mstart*=10; if(mstart > 120) mstart = 120; } else if(mstart > 9) mstart = 9; cmd = cmd + mstart; /*if(document.getElementById("mend") !== null) { var mend = document.getElementById("mend").value; if(mend > 0 && SM_added) { cmd = cmd + "-" + mend; } }*/ if(document.getElementById("dhold") !== null) { var dhold = document.getElementById("dhold").value; if(dhold > 0) { cmd = cmd + "D" + dhold; } } if(document.getElementById("mhold") !== null) { var mhold = document.getElementById("mhold").value; if(mhold > 0) { cmd = cmd + "H" + mhold; } } } } if(actionmode>=13 && document.getElementById("repeat").checked === true) { cmd = cmd + "!" + "R"; document.getElementById("dt").checked = false; } } if(document.getElementById("bitr") !== null) { var bitrate = parseInt(document.getElementById("bitr").value); document.getElementById("bitrtext").innerHTML = bitrate + "Mb/s"; if(actionmode == 12) { cmd = cmd + bitrate; } } if(document.getElementById("addcmd") !== null) { cmd = cmd + document.getElementById("addcmd").value; } if(actionmode>=13 && document.getElementById("boot").checked === true) { cmd = "!MQRDR=1!MBOOT=\"!Lboot\"!SAVEboot=" + cmd; } if(cmd != lasttimecmd) { changed = true; } var delay = 200; if(changed === true) { if(cmd === "") cmd = "\"QR Control\nReady\""; makeQR(); even ++; { qrcode.clear(); qrcode.makeCode(cmd); } if(cmd != lasttimecmd) { document.getElementById("qrtext").innerHTML = cmd; clipcopy = "https://gopro.github.io/labs/control/set/?cmd=" + cmd; document.getElementById("urltext").innerHTML = clipcopy; lasttimecmd = cmd; } lastms = today.getTime(); changed = false; delay = 10; //console.log(cmd); } var t = setTimeout(startTime, delay); } function checkTime(i) { if (i < 10) {i = "0" + i;} // add zero in front of numbers < 10 return i; } function dset(label, on) { var settings = document.getElementById(label); if(on === true) { if (settings.style.display === 'none') settings.style.display = 'block'; } else { settings.style.display = 'none'; } } function dcmd(cmd, id) { var x; if(document.getElementById(id) !== null) { x = document.getElementById(id).checked; if( x === true) cmd = cmd + document.getElementById(id).value; } else { for (i = 1; i < 30; i++) { var newid = id+i; if(document.getElementById(newid) !== null) { x = document.getElementById(newid).checked; if( x === true) cmd = cmd + document.getElementById(newid).value; } } } return cmd; } function myReloadFunction() { location.reload(); } async function copyImageToClipboard() { html2canvas(document.querySelector("#qrcode_txt")).then(canvas => canvas.toBlob(blob => navigator.clipboard.write([new ClipboardItem({'image/png': blob})]))); } async function copyTextToClipboard(text) { try { await navigator.clipboard.writeText(text); } catch(err) { alert('Error in copying text: ', err); } } function setupButtons() { document.getElementById("copyBtn").onclick = function() { copyTextToClipboard(clipcopy); }; document.getElementById("copyImg").onclick = function() { copyImageToClipboard(); }; } makeQR(); setupButtons(); startTime(); </script>