A couple of Multicam doubts and general help - General Help and Assistance on using CHDK stable releases - CHDK Forum supplierdeeply

A couple of Multicam doubts and general help

  • 159 Replies
  • 70940 Views
A couple of Multicam doubts and general help
« on: 24 / October / 2019, 12:52:06 »
Advertisements

Hi guys,


I'm finally ready to undertake my new iteration of a multicam 3D scanner project. Got the space, got the hardware and I'm ready to start building it (for the third time). However (as it was pointed before in my other threads) I have no coding skills at all. I'm trying really hard, but I'm desperate for some help.


In my previous attempts, with as many as 15 cameras, a "hardware" based approach was used thanks to the help from waterwingz and his usbptp.lua script. Cameras were manually turned on, autoloaded the script, and were shot powering up and down the usb hubs that connected them, once finished shots were dowloaded manually to PC. Pros: simple Cons: unreliable, time consuming, a PITA...


So, after a long research I'm finally coming to terms with the use of CHDKPTP and multicam.lua in order to make it more reliable. I've managed to wire 3 cameras (SX150IS) for testing (the rig will have 30, mostly SX150IS and a few smaller P&S Powershot A2300, A2400, A2600...) and initial tests have been succesful.


I have these simple commands under control
There is an examples in the top of the multicam.lua source file
Code: [Select]
experimental code for shooting with multiple cameras
not optimized for best sync, lots of loose ends
usage:
!mc=require('multicam')
!mc:connect()
!mc:start()
!return mc:cmdwait('rec')
!return mc:cmdwait('preshoot')
!return mc:cmdwait('shoot')
!return mc:cmdwait('play')
!mc:cmd('exit')


Even managed to shoot using mc:init_sync() and mc:testshots, like this:
!mc:testshots{tv=96,sv=411,nshots=2}
would take 2 shots with a 1/2 second exposure at about ISO 100.


And downloaded using this, even though I don't undertand a thing from that line... I just managed to modify the path to my hard drive
If you want to the CLI mdownload command instead of figuring out the API parameters, you could do it like this
Code: [Select]
!for i,lcon in ipairs(mc.cams) do con=lcon cli:print_status(cli:execute('mdl A/DCIM /some/path -fmatch=%.JPG$')) end
Some day I'd like to integrate shoot and download into multicam, but I haven't got to it yet.


So, all in all, I've learned a lot so far. I'm starting to understand CLI, CHDKPTP, camera based scripts and the likes. Been around the forum digging for info, but it's tricky (i have more than 30 tabs open right now with different bits and pieces of info that I cannot still understand), some of it is outdated (i know i should better be using mc:download_images() instead, but despite having the syntax https://chdk.setepontos.com/index.php?topic=11667.msg114920#msg114920 i am unable to figure out how to write a single line)


So here are a few areas where i'd like to ask for help:


- The use of mc:download_images() to retrieve the images and have them separated to different folders with the camera name (or serial), to keep them organized
- Naming the cameras, in order to make it easier to debug possible errors or send individual commands. And somehow, make these names persistent from session to session. Optional (making groups of cameras)
- Setting a few basic parameters on cameras (or groups of cameras), like exposure or focus. I've used testshots for this, but couldn't figure out how APEX96 units work.
- And last creating a set of BAT executables to perform the basic functions, instead of writing code line by line (I'm a newbie and make lots of mistakes). I think cmdwait will need to be used extensively isn't it? But what would be the general shape of such BAT file?


If anyone could provide a bit of guidance I'll be more than grateful. I'm doing the effort to learn, but my coding skills are simply awful... I think I've set some manageable goals for now, haven't I?


Thanks guys!
« Last Edit: 24 / October / 2019, 12:56:31 by ikercito »

*

Offline reyalp

  • ******
  • 14079
Re: A couple of Multicam doubts and general help
« Reply #1 on: 25 / October / 2019, 01:28:17 »
- The use of mc:download_images() to retrieve the images and have them separated to different folders with the camera name (or serial), to keep them organized
options for download_images are a lua array, like
Code: [Select]
!mc:download_images({dst='${id}/${subdir}/${name}',pretend=true})
The pretend=true above makes it print out what it would do, instead of doing it.
The dst tells it how to name the files. The example above is the default you would get if you didn't pass any options.
${id} is the number of the camera. Each one will be unique in a multicam session. See below about naming.
${subdir} is the canon image directory, like 111___10 or whatever your canon settings give.
${name} is the canon image name, like IMG_0123.JPG
you can use
Code: [Select]
help imdl
in the chdkptp prompt to see substitution strings like this. You can also include normal text in dst, like dst='c:/myfiles/camera-${id}/${name}'

Quote
- Naming the cameras, in order to make it easier to debug possible errors or send individual commands. And somehow, make these names persistent from session to session. Optional (making groups of cameras)
multicam doesn't let you name cameras, but they have a number, which can be saved across sessions if the cameras report a serial number (very old cameras don't).

The multicam list / sel functions let you select groups of cameras, see here https://chdk.setepontos.com/index.php?topic=12748.msg126644#msg126644

You can see see all connected cameras mc:list_all(), or the current selected ones with mc:list_sel(). You can toggle display of camera ids on the cameras using mc:cmd('id')

Quote
- Setting a few basic parameters on cameras (or groups of cameras), like exposure or focus. I've used testshots for this, but couldn't figure out how APEX96 units work.
First, I'd suggest using mc:shoot() rather than mc:testshots(). It provides more controls and doesn't spam the screen with test output.

You can use the use the chdkptp exp module to convert from standard units to APEX96. For example, for 1/100th shutter speed, you could use
Code: [Select]
mc:shoot({tv=exp.shutter_to_tv96(1/100)})
For ISO, use iso_to_sv96, and for aperture use f_to_av96

If you want to set something that is not an option for mc:shoot(), you can use
Code: [Select]
!mc:cmdwait('call <some CHDK lua code>')
with the script functions listed at https://chdk.fandom.com/wiki/CHDK_Scripting_Cross_Reference_Page
Don't forget what the H stands for.

Re: A couple of Multicam doubts and general help
« Reply #2 on: 25 / October / 2019, 13:29:08 »
Thanks a lot for your prompt help Reyalp!


A couple of things:
-I was aware I should be using mc:download_images(), but couldn't figure out how to set the destination folder (despite having the syntax code in front of me, that's how bad I am with code). Now it's much clearer, tried it and it's working.


- mc:cmd('id') turned out to be really handy, I saw a similar thing by waterwingz (number and status in the display) and wanted to ask for a similar thing. This does it, but... First time I used it, the list numbered 3 cameras as 1, 2 &3, but in the display the cameras were offset by one number (2,3,&4). I unplugged my mouse (only usb thing I had connected to the laptop aside from cameras) tried again and numbers showed up correctly. Now tried again, with mouse plugged and it's working fine too...?? Are these numbers persistent? I suppose not, any way to make them persistent from session to session?


-I'd like to dig deeper into the variables for mc:shoot, where can I check them? I've tried !mc:cmdwait('call <get_focus_ok>') but nothing happened, why do mc:shoot variables syntax differ from the cross reference page you linked? I think I'm not using this correctly :(


-And finally, once i get the code properly set up, I'd like to create BAT executables with groups of orders sent to camera (one to initialize, one to set focus and lock it, one to set exposure, one to shoot in sync, and last one to download and delete images) instead of sending lines of code one by one. It's something I saw here (https://chdk.setepontos.com/index.php?topic=11478.msg120521#msg120521). I've already set one with following code and it works:

chdkptp  -e"exec mc=require('multicam') mc:connect() mc:start() return mc:cmdwait('rec')

Things are starting to take shape, once I polish a few rough edges. Thanks for all your help!

*

Offline reyalp

  • ******
  • 14079
Re: A couple of Multicam doubts and general help
« Reply #3 on: 25 / October / 2019, 14:25:14 »
- mc:cmd('id') turned out to be really handy, I saw a similar thing by waterwingz (number and status in the display) and wanted to ask for a similar thing. This does it, but... First time I used it, the list numbered 3 cameras as 1, 2 &3, but in the display the cameras were offset by one number (2,3,&4). I unplugged my mouse (only usb thing I had connected to the laptop aside from cameras) tried again and numbers showed up correctly. Now tried again, with mouse plugged and it's working fine too...?? Are these numbers persistent? I suppose not, any way to make them persistent from session to session?
You can make them persistent using the camera list function I mentioned in the previous post.

Specifically, after you have all the cameras connected, you can do something like
Code: [Select]
!mc:save_list('cams.txt')
If you want to make a list of only some of the cameras, you can use mc:sel() to select them first.
Code: [Select]
-- select all available cameras
mc:sel('all')
-- select camera ID 1
mc:sel(1)
-- select cameras 1,3 ,5
mc:sel({1,3,5})
-- select cameras 3 through 9
mc:sel({min=3,max=9})
mc functions like mc:shoot and mc:cmdwait operate on all the selected cameras.

Once you have a list saved, you can connect to those cameras with the same IDs later, using the list option, like:
Code: [Select]
mc:connect({list='cams.txt'})

Quote
-I'd like to dig deeper into the variables for mc:shoot, where can I check them?
The major multicam functions are usually documented in multicam.lua. Find "function mc:shoot" and then look at the part above between --[[ and  --]]

Quote
I've tried !mc:cmdwait('call <get_focus_ok>') but nothing happened, why do mc:shoot variables syntax differ from the cross reference page you linked? I think I'm not using this correctly :(
Because they're different things ;)
mc:shoot() takes options, that are defined within mc:shoot. It interprets those options and builds a sequence of multicam commands to send with mc:cmd

mc:cmd / mc:cmdwait take "commands" which are defined within the camera side part of the multicam script, found at the bottom of the multicam.lua file, in chdku.rlibs:register

call in mc:cmdwait('call ...') is a command as described above, where the part following call is treated as camera side Lua, which is described on the wiki page.

Your example is almost right, but if you want to get a value back, you need to use return, and you need to display the result, like
Code: [Select]
!mc:print_cmd_status(mc:cmdwait('call return get_focus_ok()'))
That outputs a verbose structure like
Code: [Select]
1: {
 done=true,
 failed=false,
 status={
  status={
   [1]=false,
  },
  cmd="call",
 },
}
2: {
...
The outer 1 means the stuff in the following { } is for camera ID 1
The innermost status is what the lua code returned, in this case, it returned one value which was false (focus not OK)

If you want less verbose output, you can process the returned values with your own code instead of mc:print_cmd_status, like
Code: [Select]
!status,r=mc:cmdwait('call return get_focus_ok()') if status then for id,v in ipairs(r) do if v.failed then printf('%d: failed\n',id) else printf('%d %s\n',id,tostring(v.status.status[1])) end end end
(note above is all one line)

Quote
And finally, once i get the code properly set up, I'd like to create BAT executables with groups of orders sent to camera (one to initialize, one to set focus and lock it, one to set exposure, one to shoot in sync, and last one to download and delete images) instead of sending lines of code one by one.
I'd suggest using Lua files you can run from the chdkptp prompt rather than bat files for most of this, because if you quit chdkptp in between you'd need to re-connect and re-initialize between each one.

You can do this by creating a text file myinit.lua with with
Code: [Select]
mc=require'multicam'
mc:connect()
mc:start()
mc:rec()
And then in the chdkptp prompt, use
Code: [Select]
!dofile('myinit.lua')
Note that inside the myinit.lua file, the mc: commands do NOT have an ! in front of them.  The ! in chdkptp is what tell chdkptp that the thing following it should be treated as chdkptp Lua code.

If you just give a file name like above, the file is expected to be in the same directory you started chdkptp from. You can use a full path like dofile('c:/whatever/files/myfile.lua'). Use forward slashes / to avoid confusion with \ being treated as an escape character.

You could create more files for shooting, download etc.

You can start the whole thing with myinit from a batch file like
Code: [Select]
chdkptp  -e"exec dofile('myinit.lua')"
Don't forget what the H stands for.


Re: A couple of Multicam doubts and general help
« Reply #4 on: 25 / October / 2019, 14:43:59 »
Wow!! Thanks a lot! Monday I'm moving into the new studio, where the project will be built. I'll be doing some further testing with all the info provided during the week and report back. Can't believe so much progress in such a short time! Thanks a million :D

Re: A couple of Multicam doubts and general help
« Reply #5 on: 26 / October / 2019, 13:24:08 »
Ok, been doing a bit of testing. Seems like it's starting to work. A couple of doubts...

Can I specify multiple shooting variables? F=4, shutter 1/100, iso 80 all at the same time? I've tried different combinations, this is one of them, there must be an obvious syntax error :(

Code: [Select]
!mc:shoot({tv=exp.shutter_to_tv96(1/100).iso_to_sv96(100})
ERROR: compile failed:[string "mc:shoot({tv=exp.shutter_to_tv96(1/100).iso_t..."]:1: ')' expected near '}'

And, is there a command to reboot all the cameras? I see it useful when the whole bunch of them needs to be rebooted... Tried this, but to no avail :(

Code: [Select]
!mc:cmdwait('call <reboot>')
I'm trying different stuff, but syntax... oh, syntax's not my friend.
« Last Edit: 26 / October / 2019, 13:46:42 by ikercito »

*

Offline reyalp

  • ******
  • 14079
Re: A couple of Multicam doubts and general help
« Reply #6 on: 26 / October / 2019, 14:25:19 »
Ok, been doing a bit of testing. Seems like it's starting to work. A couple of doubts...

Can I specify multiple shooting variables? F=4, shutter 1/100, iso 80 all at the same time? I've tried different combinations, this is one of them, there must be an obvious syntax error :(
Yes. Each thing you want to set is like tv=..., separated by commas. like
Code: [Select]
!mc:shoot({tv=exp.shutter_to_tv96(1/100), sv=exp.iso_to_sv96(100),av=exp.f_to_av96(4)})
One thing to note on ISO, if you use the above, the value that gets set won't be exactly what you'd get setting ISO 100 in the Canon UI. The firmware uses two kinds of ISO values, which we refer to as "market" and "real". The difference is depends on the model.

If you want to set the value by "market" ISO (as you would see in the Canon UI), you'd need a separate command, before shooting. To set one of the regular values available in the menu, you could use:
Code: [Select]
!mc:cmdwait('call set_iso_mode(100)')

Quote
And, is there a command to reboot all the cameras? I see it useful when the whole bunch of them needs to be rebooted... Tried this, but to no avail :(

Code: [Select]
!mc:cmdwait('call <reboot>')
First, the <> in my example were just to say something goes there, it should not be part of the actual code.
Secondly, reboot is a function, so you'd need to use reboot(), like
Code: [Select]
!mc:cmd('call reboot()')
Note you do not want to use cmdwait with reboot: cmdwait means chdkptp sits around asking the cameras for a response, but reboot will break the connection so you'll get a bunch of errors. In fact, you probably want a delay like
Code: [Select]
!mc:cmd('call sleep(1000) reboot()') mc:disconnect()
which tells the camera side code to wait one second, while the chdkptp side code disconnects immediately.
Reboot in CHDK is pretty hacky in other ways. I'd suggest avoiding it unless you find you actually need it. If you do, be sure to switch to playback first. Also note that image numbering may not be saved when reboot is used, so for example if you shot IMG_0010, IMG_0011, and then reboot, the next image you shoot after rebooting might be IMG_0010 again. This is generally only an issue if you are deleting the images, the counter will be set after the highest numbered image on the card. You can use dummy images to set the counter.
Don't forget what the H stands for.

Re: A couple of Multicam doubts and general help
« Reply #7 on: 31 / October / 2019, 12:42:32 »
Thanks for your invaluable help reyalp! Been doing some more testing (still can't move into the new studio, so the big rig will have to wait one more week), there's a couple of things I have probably missed:
1 - In order to have the same filename for each shot across all cameras, you suggested using a dummy file. I suppose this is a "read-only" jpg inside DCIM?
2 - I have to install CHDK in the remaining 27 cameras, and would like them to have the same CHDK startup configuration. Which is the file that holds this info? Can't seem to find it.
3 - As suggested I've started creating few different lua files with batches of commands. My goal is to create a single .bat executable that invokes these different lua files as in a menu using
Code: [Select]
chdkptp  -e"exec dofile('start.lua')"
And the matching LUA:

Code: [Select]
mc=require'multicam'
mc:connect({list='cams.txt'})
mc:start()
mc:cmd('id')
mc:cmdwait('rec')
Something like: Press 1 to start, 2 to intialize sync, 3 to set focus, 4 to set exposure, 5 to shoot, 6 to download images and 7 to shutdown and exit. Is this the correct/advisable way to do it? (I'm having a friend write that .bat, that's why i'd like to know in advance)
4 - I'm not understanding well the procedure for the cameras to focus, and then lock focus. I've tried
Code: [Select]
!mc:cmd('call get_focus_ok()')--- or less verbose
Code: [Select]
!status,r=mc:cmdwait('call return get_focus_ok()') if status then for id,v in ipairs(r) do if v.failed then printf('%d: failed\n',id) else printf('%d %s\n',id,tostring(v.status.status[1])) end end end
---and
Code: [Select]
!mc:cmd('call get_focus_state()')
First two are always false, third one does nothing. I see get_focus() needs and input value to set focus on a given distance, so... Which one is the command to tell the camera just to autofocus? Suppose I'll have to use it with cmdwait and then issue a set_aflock(1). I can´t seem to get this to work. :(
5- Ideally in the future (completely optional), once the cameras are on their final placement, I think it'd be great to have each camera's focus point saved in an external file, and recall it at the start of every session. But this is just dreamland material for me right now. Better focus on the other stuff :)
(reminder) Need to: install drivers for every camera with Zadig, number every camera and matching card, then install CHDK in everyone of them and copy config file.
Thanks again for your support! :)
« Last Edit: 31 / October / 2019, 14:01:26 by ikercito »


*

Offline reyalp

  • ******
  • 14079
Re: A couple of Multicam doubts and general help
« Reply #8 on: 01 / November / 2019, 02:13:09 »
1 - In order to have the same filename for each shot across all cameras, you suggested using a dummy file. I suppose this is a "read-only" jpg inside DCIM?
On startup, the camera will set the image number based on the highest numbered image that matches the camera naming convention. So if you create a file called IMG_0001.JPG in the current image directory, the first shot after reboot should be IMG_0002.JPG and so on.

You could create a file like this in current image directory using something like
Code: [Select]
mc:cmdwait('call local fh=io.open(get_image_dir().."/IMG_0001.JPG","wb") fh:close()')
(edit: the above assumes you've deleted all other images, the camera looks at the highest numbered image)

Alternatively, you don't need to keep the camera file names in sync at all, you can use the ${....} substitution strings in mc:download_images dst to name them, for example with ${shotseq} the various date/time ones.

Quote
2 - I have to install CHDK in the remaining 27 cameras, and would like them to have the same CHDK startup configuration. Which is the file that holds this info? Can't seem to find it.
You can copy all the .CFG files from the CHDK directory.
See https://chdk.setepontos.com/index.php?topic=12325.0 for an example of uploading the same file to all cameras.
Note that CHDK might overwrite your uploaded CFG files if you enter/exit alt mode or change CHDK settings after uploading, so I'd suggest shutting down or rebooting the cameras after uploading the files.

edit:
An alternate way to set CHDK settings is to use set_config_value https://chdk.fandom.com/wiki/Script_commands#set_config_value which could be done using the multicam 'call' command.

Quote
3 - As suggested I've started to create a few different lua files with batches of commands. My goal is to create a single .bat executable that invokes these different lua files as in a menu using
Code: [Select]
chdkptp  -e"exec dofile('start.lua')"
Something like: Press 1 to start, 2 to intialize sync, 3 to set focus, 4 to set exposure, 5 to shoot, 6 to download images and 7 to shutdown and exit. Is this the correct/advisable way to do it? (I'm having a friend write that .bat, that's why i'd like to know in advance)
As I mentioned in the earlier post, if you quit chdkptp between actions (as would be required if your UI is in the batch file), you will need to re-initialize and reconnect  for each of these options. So you'd be better off prompting for the option 1, 2 etc inside chdkptp. If you are using chdkptp in CLI mode, you could do something like

start.lua
Code: [Select]
repeat
 print('1) start, 2) intialize sync, 3) set focus, 4) set exposure, 5) shoot, 6) download images 7) shutdown and exit')
 local option = cli.readline('mc> ')
 if option == '1' then
  mc:connect({list='cams.txt'})
  mc:connect()
  mc:start()
  mc:cmd('id')
  mc:cmdwait('rec')
 elseif option == '2' then
  mc:init_sync()
 elseif ... other options go here ...
 elseif option == '7' then
  mc:cmdwait('play')
  mc:cmd('call sleep(2000) shut_down()')
  mc:disconnect()
 end
until option=='7'
If you use the GUI, these could be done with IUP buttons instead. However, using the GUI introduces a lot of additional complexity and room for possible issues with multicam.

Quote
4 - I'm not understanding well the procedure for the cameras to focus, and then lock focus. I've tried
First, get_focus_ok() just reports whether the camera thinks auto focus was successful, meaning it found *something* to focus on. It is only updated when the shutter is half pressed and get_shooting becomes true.

You can use the 'preshoot' command to make all the cameras go into half press and wait there.

Controlling focus is unfortunately a complicated subject in CHDK. Different cameras need different methods. I'll try to deal with that in another post.

Quote
Which one is the command to tell the camera just to autofocus? Suppose I'll have to use it with cmdwait and then issue a set_aflock(1). I can´t seem to get this to work. :(
You could do it after preshoot. Whether set_aflock works and does what you want in half shoot may depend on the camera. If it doesn't, you could try using key presses to enable AF lock instead of set_aflock(). This should work in preshoot, like
Code: [Select]
!mc:cmdwait('preshoot')
!mc:cmdwait('call click"left" sleep(100) release"shoot_half"')
The key(s) to enable canon AF lock may vary depending on your camera. On cameras with native MF, it may just put you in MF mode, with SET required to dismiss the focus UI.

Another option would be get the focus distance in preshoot, and then enable MF and set the focus distance outside:
Code: [Select]
!mc:cmdwait('preshoot')
!mc:cmdwait('call local sd=get_focus() release"shoot_half" sleep(500) set_mf(true) set_focus(sd)')
This will only work on models that support set_mf and have working focus override in MF. The sleep may be needed to prevent crashes that happen when set_mf is called before the camera is fully done leaving half shoot.

Quote
5- Ideally in the future (completely optional), once the cameras are on their final placement, I think it'd be great to have each camera's focus point saved in an external file, and recall it at the start of every session. But this is just dreamland material for me right now. Better focus on the other stuff :)
This would definitely be a good feature, I may be able to add support for it in multicam at some point.

The latest version of multicam in svn allows you to set focus distance in mc:shoot(), but the same value would be applied to all cameras, which is probably not useful in many real world scenarios.
« Last Edit: 01 / November / 2019, 02:35:02 by reyalp »
Don't forget what the H stands for.

Re: A couple of Multicam doubts and general help
« Reply #9 on: 06 / November / 2019, 11:58:36 »
Hi!

Did my first test with the menu, and seems like there's something wrong. Until I find out the correct way to set focus and exposure (for now they're optional) I've made options 3,4 and 5 to Shoot. First issued a
Code: [Select]
!dofile('MENU.lua')This is MENU.lua
Code: [Select]
repeat
 print('1) start, 2) intialize sync, 3) set focus, 4) set exposure, 5) shoot, 6) download images 7) shutdown and exit')
 local option = cli.readline('mc> ')
 if option == '1' then
  mc:connect({list='cams.txt'})
  mc:connect()
  mc:start()
  mc:cmd('id')
  mc:cmdwait('rec')
 elseif option == '2' then
  mc:init_sync()
 elseif == '3' then
  mc:shoot()
 elseif == '4' then
  mc:shoot()
 elseif == '5' then
  mc:shoot()
 elseif == '6' then
  mc:download_images({dst='c:/download/TEST01/Camera${id}/${name}',delete=true})
 elseif option == '7' then
  mc:cmdwait('play')
  mc:cmd('call sleep(2000) shut_down()')
  mc:disconnect()
 end
until option=='7'
This is what I get in CLI

Code: [Select]
ERROR: call failed:MENU.lua:12: unexpected symbol near '=='
stack traceback:
   [string "dofile('MENU.lua')"]:1: in main chunk
   [C]: in function 'xpcall'
   C:\CHDKPTP\lua\cli.lua:733: in function <C:\CHDKPTP\lua\cli.lua:724>
   (...tail calls...)
   [C]: in function 'xpcall'
   C:\CHDKPTP\lua\cli.lua:285: in function 'execute'
   C:\CHDKPTP\lua\gui.lua:683: in function 'action'
   C:\CHDKPTP\lua\gui.lua:642: in function <C:\CHDKPTP\lua\gui.lua:640>
   (...tail calls...)
   [C]: in function 'MainLoop'
   C:\CHDKPTP\lua\gui.lua:758: in function <C:\CHDKPTP\lua\gui.lua:731>
   (...tail calls...)
   C:\CHDKPTP\lua\main.lua:286: in main chunk
   [C]: in function 'require'
   [string "require('main')"]:1: in main chunk
Any help? There seems to be something either missing or wrong :(

 

Related Topics