When running darktable and attempting to connect to Nikon D300s camera, I get a message indicating no attached camera. I ran gphoto2 and captured logs as described in troubleshooting part of user manual. I don’t see any place where any other app has the USB port locked, but there does seem to be an issue here. Any ideas? Log file attached. |
0.000005 main (2): ALWAYS INCLUDE THE FOLLOWING LINES WHEN SENDING DEBUG MESSAGES TO THE MAILING LIST: 0.000066 main (2): gphoto2 2.5.28 0.000076 main (2): gphoto2 has been compiled with the following options: 0.000083 main (2): + clang (C compiler used) 0.000089 main (2): + popt (mandatory, for handling command-line parameters) 0.000094 main (2): + exif (for displaying EXIF information) 0.000099 main (2): + no cdk (for accessing configuration options) 0.000104 main (2): + no aa (for displaying live previews) 0.000110 main (2): + jpeg (for displaying live previews in JPEG format) 0.000114 main (2): + readline (for easy navigation in the shell) 0.000120 main (2): libgphoto2 2.5.31 0.000126 main (2): libgphoto2 has been compiled with the following options: 0.000131 main (2): + standard camlib set (ax203 canon digigr8 dimagev directory docupen jl2005a jl2005c kodak_dc240 lumix mars pentax ptp2 ricoh_g3 sierra sonix sq905 st2205 topfield tp6801) 0.000136 main (2): + clang (C compiler used) 0.000141 main (2): + no ltdl (for portable loading of camlibs) 0.000146 main (2): + EXIF (for special handling of EXIF files) 0.000151 main (2): libgphoto2_port 0.12.2 0.000157 main (2): libgphoto2_port has been compiled with the following options: 0.000162 main (2): + iolibs: disk ptpip serial usb1 0.000167 main (2): + clang (C compiler used) 0.000172 main (2): + no ltdl (for portable loading of iolibs) 0.000177 main (2): + EXIF (for vusb) 0.000182 main (2): + USB (libusb1, for USB cameras) 0.000186 main (2): + serial (for serial cameras) 0.000191 main (2): + no resmgr (serial port access and locking) 0.000196 main (2): + no ttylock (serial port locking) 0.000201 main (2): + no lockdev (serial port locking) 0.000206 main (2): CAMLIBS env var not set, using compile-time default instead 0.000211 main (2): IOLIBS env var not set, using compile-time default instead 0.000215 main (2): invoked with following arguments: 0.000220 main (2): --debug 0.000225 main (2): --debug-logfile=my-logfile.txt 0.000230 main (2): --port 0.000234 main (2): usb: 0.000239 main (2): --capture-image-and-download 0.000254 main (2): Processing 'port' option ('usb:')... 0.000263 gp_port_init_localedir (2): localedir has been set to /usr/local/Homebrew/Cellar/libgphoto2/2.5.31/share/locale (compile-time default) 0.000269 gp_port_info_list_load (2): Using ltdl to load io-drivers from '/usr/local/Homebrew/Cellar/libgphoto2/2.5.31/lib/libgphoto2_port/0.12.2'... 0.000355 foreach_func (2): Called for filename '/usr/local/Homebrew/Cellar/libgphoto2/2.5.31/lib/libgphoto2_port/0.12.2/disk'. 0.000870 foreach_func (2): Loaded '' ('^disk:') from '/usr/local/Homebrew/Cellar/libgphoto2/2.5.31/lib/libgphoto2_port/0.12.2/disk'. 0.000881 foreach_func (2): Called for filename '/usr/local/Homebrew/Cellar/libgphoto2/2.5.31/lib/libgphoto2_port/0.12.2/ptpip'. 0.001337 foreach_func (2): Loaded 'PTP/IP Connection' ('ptpip:') from '/usr/local/Homebrew/Cellar/libgphoto2/2.5.31/lib/libgphoto2_port/0.12.2/ptpip'. 0.001346 foreach_func (2): Loaded '' ('^ptpip:') from '/usr/local/Homebrew/Cellar/libgphoto2/2.5.31/lib/libgphoto2_port/0.12.2/ptpip'. 0.001351 foreach_func (2): Loaded 'IP Connection' ('ip:') from '/usr/local/Homebrew/Cellar/libgphoto2/2.5.31/lib/libgphoto2_port/0.12.2/ptpip'. 0.001376 foreach_func (2): Loaded '' ('^ip:') from '/usr/local/Homebrew/Cellar/libgphoto2/2.5.31/lib/libgphoto2_port/0.12.2/ptpip'. 0.001380 foreach_func (2): Called for filename '/usr/local/Homebrew/Cellar/libgphoto2/2.5.31/lib/libgphoto2_port/0.12.2/serial'. 0.004962 foreach_func (2): Loaded 'Serial Port Device' ('serial:') from '/usr/local/Homebrew/Cellar/libgphoto2/2.5.31/lib/libgphoto2_port/0.12.2/serial'. 0.004971 foreach_func (2): Loaded '' ('^serial:') from '/usr/local/Homebrew/Cellar/libgphoto2/2.5.31/lib/libgphoto2_port/0.12.2/serial'. 0.004975 foreach_func (2): Called for filename '/usr/local/Homebrew/Cellar/libgphoto2/2.5.31/lib/libgphoto2_port/0.12.2/usb1'. 0.010143 foreach_func (2): Loaded '' ('^usb:') from '/usr/local/Homebrew/Cellar/libgphoto2/2.5.31/lib/libgphoto2_port/0.12.2/usb1'. 0.010156 foreach_func (2): Loaded 'Universal Serial Bus' ('usb:002,003') from '/usr/local/Homebrew/Cellar/libgphoto2/2.5.31/lib/libgphoto2_port/0.12.2/usb1'. 0.010161 foreach_func (2): Loaded 'Universal Serial Bus' ('usb:000,001') from '/usr/local/Homebrew/Cellar/libgphoto2/2.5.31/lib/libgphoto2_port/0.12.2/usb1'. 0.010165 foreach_func (2): Loaded 'Universal Serial Bus' ('usb:000,005') from '/usr/local/Homebrew/Cellar/libgphoto2/2.5.31/lib/libgphoto2_port/0.12.2/usb1'. 0.010168 foreach_func (2): Loaded 'Universal Serial Bus' ('usb:000,004') from '/usr/local/Homebrew/Cellar/libgphoto2/2.5.31/lib/libgphoto2_port/0.12.2/usb1'. 0.010174 gp_port_info_list_count (2): Counting entries (12 available)... 0.010177 gp_port_info_list_count (2): 7 regular entries available. 0.010181 gp_port_info_list_lookup_path(2): Looking for path 'usb:' (12 entries available)... 0.010184 gp_port_info_list_lookup_path(2): Starting regex search for 'usb:'... 0.010188 gp_port_info_list_lookup_path(2): Trying '^disk:'... 0.010211 gp_port_info_list_lookup_path(2): regexec failed 0.010215 gp_port_info_list_lookup_path(2): Trying '^ptpip:'... 0.010227 gp_port_info_list_lookup_path(2): regexec failed 0.010231 gp_port_info_list_lookup_path(2): Trying '^ip:'... 0.010239 gp_port_info_list_lookup_path(2): regexec failed 0.010243 gp_port_info_list_lookup_path(2): Trying '^serial:'... 0.010258 gp_port_info_list_lookup_path(2): regexec failed 0.010263 gp_port_info_list_lookup_path(2): Trying '^usb:'... 0.010275 gp_port_info_list_get_info (2): Getting info of entry 7 (13 available)... 0.010281 gp_camera_set_port_info (2): Setting port info for port 'Generic Port' at 'usb:'... 0.012065 gp_port_set_timeout (2): Setting port timeout to 5000 milliseconds. 0.012076 gp_port_set_settings (2): Setting settings... 0.012082 gp_libusb1_update (2): (old int=0, conf=-1, alt=-1) port usb:, (new int=0, conf=-1, alt=-1) port usb: 0.012086 gp_libusb1_update (2): lowlevel libusb1 port not yet opened, no need for libusb changes 0.012091 load_settings (2): Creating gphoto config directory ('/Users/davidmaclennan/.gphoto') 0.012141 load_settings (2): Loading settings from file '/Users/davidmaclennan/.gphoto/settings'. 0.012165 gp_setting_set (2): Setting key 'port' to value 'usb:' (gphoto2) 0.012171 save_settings (2): Saving 2 setting(s) to file "/Users/davidmaclennan/.gphoto/settings" 0.012357 main (2): The user has not specified both a model and a port. Try to figure them out. 0.012363 gp_port_init_localedir (2): ignoring late call (localedir value NULL) 0.012368 gp_init_localedir (2): localedir has been set to /usr/local/Homebrew/Cellar/libgphoto2/2.5.31/share/locale (compile-time default) 0.012372 unlocked_gp_abilities_list_load_dir(2): Using ltdl to load camera libraries from '/usr/local/Homebrew/Cellar/libgphoto2/2.5.31/lib/libgphoto2/2.5.31'... 0.012446 foreach_func (2): Found '/usr/local/Homebrew/Cellar/libgphoto2/2.5.31/lib/libgphoto2/2.5.31/ax203'. 0.012457 foreach_func (2): Found '/usr/local/Homebrew/Cellar/libgphoto2/2.5.31/lib/libgphoto2/2.5.31/canon'. 0.012460 foreach_func (2): Found '/usr/local/Homebrew/Cellar/libgphoto2/2.5.31/lib/libgphoto2/2.5.31/digigr8'. 0.012463 foreach_func (2): Found '/usr/local/Homebrew/Cellar/libgphoto2/2.5.31/lib/libgphoto2/2.5.31/dimagev'. 0.012466 foreach_func (2): Found '/usr/local/Homebrew/Cellar/libgphoto2/2.5.31/lib/libgphoto2/2.5.31/directory'. 0.012469 foreach_func (2): Found '/usr/local/Homebrew/Cellar/libgphoto2/2.5.31/lib/libgphoto2/2.5.31/docupen'. 0.012473 foreach_func (2): Found '/usr/local/Homebrew/Cellar/libgphoto2/2.5.31/lib/libgphoto2/2.5.31/jl2005a'. 0.012475 foreach_func (2): Found '/usr/local/Homebrew/Cellar/libgphoto2/2.5.31/lib/libgphoto2/2.5.31/jl2005c'. 0.012478 foreach_func (2): Found '/usr/local/Homebrew/Cellar/libgphoto2/2.5.31/lib/libgphoto2/2.5.31/kodak_dc240'. 0.012481 foreach_func (2): Found '/usr/local/Homebrew/Cellar/libgphoto2/2.5.31/lib/libgphoto2/2.5.31/lumix'. 0.012484 foreach_func (2): Found '/usr/local/Homebrew/Cellar/libgphoto2/2.5.31/lib/libgphoto2/2.5.31/mars'. 0.012486 foreach_func (2): Found '/usr/local/Homebrew/Cellar/libgphoto2/2.5.31/lib/libgphoto2/2.5.31/pentax'. 0.012489 foreach_func (2): Found '/usr/local/Homebrew/Cellar/libgphoto2/2.5.31/lib/libgphoto2/2.5.31/ptp2'. 0.012492 foreach_func (2): Found '/usr/local/Homebrew/Cellar/libgphoto2/2.5.31/lib/libgphoto2/2.5.31/ricoh_g3'. 0.012495 foreach_func (2): Found '/usr/local/Homebrew/Cellar/libgphoto2/2.5.31/lib/libgphoto2/2.5.31/sierra'. 0.012498 foreach_func (2): Found '/usr/local/Homebrew/Cellar/libgphoto2/2.5.31/lib/libgphoto2/2.5.31/sonix'. 0.012500 foreach_func (2): Found '/usr/local/Homebrew/Cellar/libgphoto2/2.5.31/lib/libgphoto2/2.5.31/sq905'. 0.012503 foreach_func (2): Found '/usr/local/Homebrew/Cellar/libgphoto2/2.5.31/lib/libgphoto2/2.5.31/st2205'. 0.012506 foreach_func (2): Found '/usr/local/Homebrew/Cellar/libgphoto2/2.5.31/lib/libgphoto2/2.5.31/topfield'. 0.012508 foreach_func (2): Found '/usr/local/Homebrew/Cellar/libgphoto2/2.5.31/lib/libgphoto2/2.5.31/tp6801'. 0.012512 unlocked_gp_abilities_list_load_dir(2): Found 20 camera drivers. 0.039947 gp_port_info_list_count (2): Counting entries (13 available)... 0.039956 gp_port_info_list_count (2): 8 regular entries available. 0.039959 gp_port_new (2): Creating new device... 0.039962 gp_port_info_list_get_info (2): Getting info of entry 0 (13 available)... 0.040167 gp_port_set_settings (2): Setting settings... 0.040172 gp_port_info_list_get_info (2): Getting info of entry 1 (13 available)... 0.040414 gp_port_set_settings (2): Setting settings... 0.040418 gp_port_info_list_get_info (2): Getting info of entry 2 (13 available)... 0.040748 gp_port_set_timeout (2): Setting port timeout to 500 milliseconds. 0.040751 gp_port_set_settings (2): Setting settings... 0.040753 gp_port_info_list_get_info (2): Getting info of entry 3 (13 available)... 0.041128 gp_port_set_timeout (2): Setting port timeout to 5000 milliseconds. 0.041132 gp_port_set_settings (2): Setting settings... 0.041135 gp_libusb1_update (2): (old int=0, conf=-1, alt=-1) port usb:002,003, (new int=0, conf=-1, alt=-1) port usb:002,003 0.041138 gp_libusb1_update (2): lowlevel libusb1 port not yet opened, no need for libusb changes 0.041140 gp_abilities_list_detect_usb(2): Auto-detecting USB cameras... 0.041322 gp_libusb1_find_device_by_class_lib(2): Looking for USB device (class 0x29a, subclass, 0xffffffff, protocol 0xffffffff)... 0.041341 gp_libusb1_find_device_lib (2): Looking for USB device (vendor 0x4b0, product 0x425)... found. 0.041348 gp_libusb1_find_device_lib (2): Detected defaults: config 1, interface 0, altsetting 0, inep 81, outep 02, intep 83, class 06, subclass 01 0.041360 gp_abilities_list_detect_usb(2): Found 'Nikon DSC D300s (PTP mode)' (0x4b0,0x425) 0.041363 gp_port_info_list_get_info (2): Getting info of entry 4 (13 available)... 0.041618 gp_port_set_timeout (2): Setting port timeout to 5000 milliseconds. 0.041621 gp_port_set_settings (2): Setting settings... 0.041624 gp_libusb1_update (2): (old int=0, conf=-1, alt=-1) port usb:000,001, (new int=0, conf=-1, alt=-1) port usb:000,001 0.041626 gp_libusb1_update (2): lowlevel libusb1 port not yet opened, no need for libusb changes 0.041628 gp_abilities_list_detect_usb(2): Auto-detecting USB cameras... 0.041795 gp_libusb1_find_device_by_class_lib(2): Looking for USB device (class 0x29a, subclass, 0xffffffff, protocol 0xffffffff)... 0.041798 gp_libusb1_find_device_by_class_lib(2): Looking for USB device (class 0x29a, subclass, 0xffffffff, protocol 0xffffffff)... 0.041945 gp_libusb1_find_device_by_class_lib(2): Looking for USB device (class 0x6, subclass, 0x1, protocol 0x1)... 0.041948 gp_libusb1_find_device_by_class_lib(2): Looking for USB device (class 0x6, subclass, 0x1, protocol 0x1)... 0.041959 gp_port_info_list_get_info (2): Getting info of entry 5 (13 available)... 0.042218 gp_port_set_timeout (2): Setting port timeout to 5000 milliseconds. 0.042221 gp_port_set_settings (2): Setting settings... 0.042223 gp_libusb1_update (2): (old int=0, conf=-1, alt=-1) port usb:000,005, (new int=0, conf=-1, alt=-1) port usb:000,005 0.042225 gp_libusb1_update (2): lowlevel libusb1 port not yet opened, no need for libusb changes 0.042227 gp_abilities_list_detect_usb(2): Auto-detecting USB cameras... 0.042393 gp_libusb1_find_device_by_class_lib(2): Looking for USB device (class 0x29a, subclass, 0xffffffff, protocol 0xffffffff)... 0.042520 gp_libusb1_find_device_by_class_lib(2): Looking for USB device (class 0x6, subclass, 0x1, protocol 0x1)... 0.042532 gp_port_info_list_get_info (2): Getting info of entry 6 (13 available)... 0.042777 gp_port_set_timeout (2): Setting port timeout to 5000 milliseconds. 0.042780 gp_port_set_settings (2): Setting settings... 0.042783 gp_libusb1_update (2): (old int=0, conf=-1, alt=-1) port usb:000,004, (new int=0, conf=-1, alt=-1) port usb:000,004 0.042785 gp_libusb1_update (2): lowlevel libusb1 port not yet opened, no need for libusb changes 0.042787 gp_abilities_list_detect_usb(2): Auto-detecting USB cameras... 0.042951 gp_libusb1_find_device_by_class_lib(2): Looking for USB device (class 0x29a, subclass, 0xffffffff, protocol 0xffffffff)... 0.043076 gp_libusb1_find_device_by_class_lib(2): Looking for USB device (class 0x6, subclass, 0x1, protocol 0x1)... 0.043085 gp_port_info_list_get_info (2): Getting info of entry 7 (13 available)... 0.043337 gp_port_set_timeout (2): Setting port timeout to 5000 milliseconds. 0.043340 gp_port_set_settings (2): Setting settings... 0.043343 gp_libusb1_update (2): (old int=0, conf=-1, alt=-1) port usb:, (new int=0, conf=-1, alt=-1) port usb: 0.043345 gp_libusb1_update (2): lowlevel libusb1 port not yet opened, no need for libusb changes 0.043346 gp_abilities_list_detect_usb(2): Auto-detecting USB cameras... 0.043424 gp_libusb1_find_device_by_class_lib(2): Looking for USB device (class 0x29a, subclass, 0xffffffff, protocol 0xffffffff)... 0.043426 gp_libusb1_find_device_by_class_lib(2): Looking for USB device (class 0x29a, subclass, 0xffffffff, protocol 0xffffffff)... 0.043428 gp_libusb1_find_device_by_class_lib(2): Looking for USB device (class 0x29a, subclass, 0xffffffff, protocol 0xffffffff)... 0.043430 gp_libusb1_find_device_by_class_lib(2): Looking for USB device (class 0x29a, subclass, 0xffffffff, protocol 0xffffffff)... 0.043432 gp_libusb1_find_device_by_class_lib(2): Looking for USB device (class 0x29a, subclass, 0xffffffff, protocol 0xffffffff)... 0.043434 gp_libusb1_find_device_by_class_lib(2): Looking for USB device (class 0x29a, subclass, 0xffffffff, protocol 0xffffffff)... 0.043443 gp_libusb1_find_device_by_class_lib(2): Looking for USB device (class 0x29a, subclass, 0xffffffff, protocol 0xffffffff)... 0.043452 gp_libusb1_find_device_lib (2): Looking for USB device (vendor 0x4b0, product 0x425)... found. 0.043456 gp_libusb1_find_device_lib (2): Detected defaults: config 1, interface 0, altsetting 0, inep 81, outep 02, intep 83, class 06, subclass 01 0.043459 gp_abilities_list_detect_usb(2): Found 'Nikon DSC D300s (PTP mode)' (0x4b0,0x425) 0.043461 gp_port_free (2): Freeing port... 0.043463 gp_port_close (2): Closing port... 0.043467 gphoto2 (2): Looking for port ...
0.043470 gphoto2 (2): info.type = 4 0.043472 gphoto2 (2): info.name = Generic Port 0.043474 gphoto2 (2): info.path = usb: 0.043487 gp_camera_set_abilities (2): Setting abilities ('Nikon DSC D300s (PTP mode)')... 0.043490 gp_setting_set (2): Setting key 'model' to value 'Nikon DSC D300s (PTP mode)' (gphoto2) 0.043493 save_settings (2): Saving 2 setting(s) to file "/Users/davidmaclennan/.gphoto/settings" 0.043579 gp_port_info_list_lookup_path(2): Looking for path 'usb:' (13 entries available)... 0.043586 gp_port_info_list_get_info (2): Getting info of entry 7 (13 available)... 0.043588 gp_camera_set_port_info (2): Setting port info for port 'Generic Port' at 'usb:'... 0.045145 gp_port_set_timeout (2): Setting port timeout to 5000 milliseconds. 0.045151 gp_port_set_settings (2): Setting settings... 0.045155 gp_libusb1_update (2): (old int=0, conf=-1, alt=-1) port usb:, (new int=0, conf=-1, alt=-1) port usb: 0.045157 gp_libusb1_update (2): lowlevel libusb1 port not yet opened, no need for libusb changes 0.045160 gp_setting_set (2): Setting key 'port' to value 'usb:' (gphoto2) 0.045163 save_settings (2): Saving 2 setting(s) to file "/Users/davidmaclennan/.gphoto/settings" 0.045243 gphoto2 (2): found port, was entry 1 0.045264 gp_camera_init (2): Initializing camera... 0.045276 gp_libusb1_find_device_lib (2): Looking for USB device (vendor 0x4b0, product 0x425)... found. 0.045282 gp_libusb1_find_device_lib (2): Detected defaults: config 1, interface 0, altsetting 0, inep 81, outep 02, intep 83, class 06, subclass 01 0.045284 gp_camera_init (2): Loading '/usr/local/Homebrew/Cellar/libgphoto2/2.5.31/lib/libgphoto2/2.5.31/ptp2'... 0.045785 gp_port_open (2): Opening USB port... 0.045789 gp_libusb1_open (2): () 0.045850 gp_libusb1_open (2): Device has a kernel driver attached (1), detaching it now. 0.045869 gp_port_set_error [gphoto2-port.c:1190](0): Could not detach kernel driver of camera device. 0.045872 gp_libusb1_open (2): claiming interface 0 0.046003 gp_libusb1_open [libusb1.c:415](0): 'libusb_claim_interface (port->pl->dh, port->settings.usb.interface)' failed: Access denied (insufficient permissions) (-3) 0.046009 gp_port_set_error [gphoto2-port.c:1190](0): Could not claim interface 0 (No such file or directory). Make sure no other program (MacOS PTPCamera service) or kernel module (such as sdc2xx, stv680, spca50x) is using the device and you have read/write access to the device. 0.046081 gp_context_error (0): An error occurred in the io-library ('Could not claim the USB device'): Could not claim interface 0 (No such file or directory). Make sure no other program (MacOS PTPCamera service) or kernel module (such as sdc2xx, stv680, spca50x) is using the device and you have read/write access to the device. 0.046154 gp_camera_free (2): Freeing camera... 0.046157 gp_port_free (2): Freeing port... 0.046159 gp_port_close (2): Closing port... 0.047350 gp_port_set_error [gphoto2-port.c:1190](0): Could not release interface 0 (No such file or directory). 0.047762 gp_filesystem_reset (2): resetting filesystem 0.047772 gp_filesystem_lru_clear (2): Clearing fscache LRU list... 0.047775 gp_filesystem_lru_clear (2): fscache LRU list already empty 0.047777 delete_all_folders (2): Internally deleting all folders from '/'... 0.047781 lookup_folder (2): Lookup folder '/'... 0.047783 lookup_folder (2): Found! / is 0x600003be87b0 0.047786 recurse_delete_folder (2): Recurse delete folder 0x600003be87b0// 0.047788 delete_all_files (2): Delete all files in folder 0x600003be87b0//
davidmaclennan@Davids-2023-Mac-mini ~ % env LANG=C gphoto2 --port usb: --abilities Abilities for camera : Nikon DSC D300s (PTP mode) Serial port support : no USB support : yes Capture choices : : Image : Preview : Trigger Capture Configuration support : yes Delete selected files on camera : yes Delete all files on camera : no File preview (thumbnail) support : yes File upload support : no davidmaclennan@Davids-2023-Mac-mini ~ % env LANG=C gphoto2 --port usb: --capture-image-and-download
*** Error *** An error occurred in the io-library ('Could not claim the USB device'): Could not claim interface 0 (No such file or directory). Make sure no other program (MacOS PTPCamera service) or kernel module (such as sdc2xx, stv680, spca50x) is using the device and you have read/write access to the device. ERROR: Could not capture image. ERROR: Could not capture. *** Error (-53: 'Could not claim the USB device') *** For debugging messages, please use the --debug option. Debugging messages may help finding a solution to your problem. If you intend to send any error or debug messages to the gphoto developer mailing list <gphoto-devel@lists.sourceforge.net>, please run gphoto2 as follows: env LANG=C gphoto2 --debug --debug-logfile=my-logfile.txt --port usb: --capture-image-and-download Please make sure there is sufficient quoting around the arguments. davidmaclennan@Davids-2023-Mac-mini ~ % |
_______________________________________________ Gphoto-devel mailing list Gphoto-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gphoto-devel