Code Monkey home page Code Monkey logo

alpha-fairy's Introduction

Alpha-Fairy

This is a tiny remote control for Sony Alpha cameras.

The hardware platform is a M5StickC-Plus, which is a DIY device with a ESP32-PICO inside, along with a colour LCD screen, rechargable battery, some buttons, and a few other features.

This remote combines the features of other simple camera remotes, plus many complex functions that automates some tasks that photographers would like to do. It communicates wirelessly with the camera via Picture Transfer Protocol, mostly reverse engineered by spying on Sony's own Imaging Edge Remote application with Wireshark. A second protocol uses HTTP and supports more cameras but has less features.

This GitHub repo contains the C++ source code (and graphics files) that can be compiled and loaded into the M5StickC-Plus, so anybody can create this remote.

Supported camera models: A1, A6600, A6000, RX100M4, RX0M2

Untested but theoretically can support over PTP protocol: A7SM3, A9M2, A7M4A, A7RM4, A7C, A7M4, ZV-E10, listed on https://support.d-imaging.sony.co.jp/app/sdk/en/index.html

Untested but theoretically can support over HTTP protocol: https://developer.sony.com/develop/cameras/api-information/supported-features-and-compatible-cameras

The fun part about this project for me is to create a usable user interface on a device with only two buttons plus an IMU.

Main Features

  • Remote Shutter (with optional timer), Movie Record, Settings View/Adjust
  • Focus Stack
    • takes consecutive photos as the focus is slowly shifted, this is a technique used in macro photography and some other camera brands offer this in-camera (but not Sony)
  • Focus 9-Point
    • takes consecutive photos as the auto-focus point moves around the scene, to obtain multiple photos focused on multiple objects, convenient for landscape photography
  • Focus Pull
    • with optional focus knob (for linear focus pull)
  • Talley Light, Virtual "Top Panel"
  • Sensor Trigger Shutter
    • trigger sources: microphone, voltage input, and/or IMU motion trigger
    • trigger action: take photo, take video (adjustable duration), start intervalometer
    • adjustable delays before arming and after trigger
    • good for security camera applications
  • Dual Shutter
    • takes two consecutive photos, with different shutter speeds, for compositing photos with both sharp subjects and blurred features
  • Intervalometer
    • supports AF-C, different from in-camera intervalometer (which forces AF-S)
  • Astrophotography Intervalometer
    • same as intervalometer but more focused on bulb mode, and uses pause time instead of fixed interval time
  • Focus Frustration
    • is your camera not focusing on the thing you want it to focus on? rapidly tapping the AF button repeatedly will automatically pull the focus back to the nearest possible point
  • Timecode reset, can be used to reset timecode on multiple cameras simultaneously

Minor Features

  • can fall-back to using infrared communication if Wi-Fi is disconnected
  • can use shutter release cable connected to GPIO
  • status bar with battery indicator and connection indicator
  • auto power save
  • configurable options
  • serial port debugging and command line interface
  • smartphone web-browser interface to manage multiple camera logins

Known Problems

The camera does not re-establish a broken connection. If the remote is turned off (or disconnected for other reasons), you need to turn off the camera and turn it back on (after the remote is turned back on).

The features that can change shutter speed are not reliable. The camera takes a long (and variable) time to register a remote command to change the shutter speed. By long, I mean sometimes up to several seconds, or never.

Battery life is a bit short. Do not use it for intervalometer purposes without an external power source. Also, using Wi-Fi for intervalometer is ill-advised (reliability and latency issues), use a real shutter release cable if possible.

Putting a full frame camera in APS-C mode will disable a ton of features from working.

Only Wi-Fi 2.4 GHz mode is supported.

Other issues will be logged in the Issues tab of GitHub.

More

Demo Videos

Focus Stacking:

focusstacking_demo_720.mp4

Shutter Speed Stepping:

shutterstep_demo_480_low.mp4

Camera Triggering:

imu_trigger_turkey_720.mp4

Focus Pull Knob:

focusknob_demo_480.mp4

alpha-fairy's People

Contributors

frank26080115 avatar jshabtai avatar tao-j avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

alpha-fairy's Issues

Some ideas for the photostacking feature

Hello Frank, thank you for allowing me to experience this wonderful project.
First of all, please understand that I am not familiar with the documentation format on GitHub.

A7R4, photo stacking The number of times the big button was pressed was the same as the number of shots.

I thought that if you press it once, it will shoot continuously even if you release your hand after that, and then press it again to stop shooting, but that didn't work.

(I don't know if the toggle hold function has already been implemented, but it doesn't work on the A7R4.)

(The same is true for the 9-focus function. While the big button is held down, the shooting proceeds by moving through the 9 zones in turn. If the button is accidentally missed in the middle, it goes back to the beginning and starts shooting from the center zone.)

I would like to suggest the toggle hold function of the Big Button and the setting of the total number of stacking shots as ideas.

(It would be nice if the shooting interval could be set as short as possible, but I think it will be difficult because there is a physical difference in the focus motor for each lens.)

[Feature Request] Recording gyro data when recording video

Is your feature request related to a problem? Please describe.
I'd like M5StickC Plus to start recording gyro data when video recording is triggered (and stop recording gyro data when video recording is stopped) so it can be used for post-process video stabilization using Gyroflow.

Describe the solution you'd like
Many newer Sony cameras such as Sony ZV-1, ZV-E10, Sony FX30, Sony Ī±7 IV etc. can record gyro data which are later on used for post-process video stabilization using Sony's proprietary software Catalyst Browse. However there's similar open source software called Gyroflow that can load data from external source and use it for video stabilization in a similar way Sony's Catalyst Browse does it. It'd be awesome to have such a small device as M5StickC Plus is, attached to older Sony cameras (such as Sony a6400 in my case) to achieve similar results.

Describe alternatives you've considered
Older Sony a6xxx series cameras (a6000, a6300, a6500) run on Android system and are tweakable (f.e. using this ) so maybe it could be possible to implement android app that would capture camera's internal gyro sensor data. However as far as I know, this is not possible for newer but not entirely new models such as Sony a6400 or a6600.

Feature Request: Add Support for IR Timecode Reset

There's one specific Sony IR remote control that includes a "timecode reset" button, which you can use in a multi-cam setup to simultaneously reset all of the Sony cameras to the same timecode, synchronizing them. Here's a video. I believe this would be a great addition to Alpha Fairy, and would also help people get this functionality long after Sony stops manufacturing RMT-845 remotes!

after install appear ERROR!! Image File Missing ---SOLVED

I followed the steps on the site to install, at the end of the installation process the message appears on the arduino display:
ERROR!!!
Image File Missing
Please use the Arduino IDE
to upload the missing file

in the "Arduino IDE" application at the bottom of the upload log a message appears to do a hard reset via pin, but I have no idea what the pins are and how to do the hard reset (I can't find manuals).

Thank you

PS
I understand that the problem is that maybe I can't use ESP32FS tools?!
I mean, I'm using Mac and I never found the menu voice "ESP32 Sketch Data Upload", I just have upload to deploy...but no the menu voice you indicate in the steps.
I tried to instal the java plug in in all places:
Inside Sketchbook dir (where I have "arduino_workspace", "libraries" and I create "tools/ESP32FS/esp32fs.jar"....nothing
I tried to create "Documents/Arduino/arduino-esp32fs-plugin-master/ESP32FS/tool/esp32fs.jar"...no way

I have no idea how to do that...

SOLVED....Arduino 2.xx is not compatible with ESP32FS tool, need to use 1.8.19

Sorry for time loosing and again thanks for your work!

[Feature Request] Setting Time Code Preset

Is your feature request related to a problem? Please describe.
I'm trying to create a cost effective timecode syncing solution for my A7IV and my gopro.

Describe the solution you'd like
Most of the sony alpha cameras offer adding timecode to video metadata. You can set the "Time Code Preset" setting and have the time code run on "Free Run" which lets you use the built in timecode functionality. GoPro offers timecode encoding as well using their qr code functionality in the gopro labs firmware. The new sony camera remote SDK does offer a way to set the timecode preset using the sdk, and they offer the sdk for ARM. Would that ARM SDK work on ESP32? Once the timecode functionality works, it's relatively trivial to port the GoPro QR generation code which is available on their GitHub. Essentially we'd generate a time code on the alpha-fairy remote, which sets the "Time Code Preset" on the sony camera, and show a QR code for the GoPro at the same time. The QR code will keep updating as the timecode runs on the alpha-fairy, and thus both cameras (or any number of sony and gopro cameras) can be synced together.

Describe alternatives you've considered
The only real alternatives are the paid $500 timecode solutions, and the limitation with them is that they don't use the sony camera's metadata functionality. Instead they store the timecode data in one of the audio tracks. I think this solution may not be perfect (might be off by a couple of frames due to latency, but it would be a really cool solution if it's possible to implement.

I started digging into the SDK compiled files, and found this function which might be relevant:

/* PTPProxy3_0::SetTimeCodePreset(sony_lajiao::LjDeviceProperty*) */

undefined4 __thiscall PTPProxy3_0::SetTimeCodePreset(PTPProxy3_0 *this,LjDeviceProperty *param_1)

{
  char cVar1;
  undefined4 uVar2;
  uint uVar3;
  long in_FS_OFFSET;
  uint local_2c;
  uint local_28;
  uint local_24;
  long local_20;
  
  uVar2 = 0x8401;
  local_20 = *(long *)(in_FS_OFFSET + 0x28);
  if (param_1 != (LjDeviceProperty *)0x0) {
    cVar1 = PTPProxy::GetPropertiesSetValues
                      ((PTPProxy *)this,*(LjDevicePropertyCode *)param_1,&local_2c,0xc);
    if (cVar1 == '\0') {
      uVar2 = 0x8402;
    }
    else {
      uVar3 = (int)*(ulong *)(param_1 + 0x10) -
              (int)((*(ulong *)(param_1 + 0x10) & 0xffffffff) % (ulong)local_24);
      if ((local_2c <= uVar3) && (uVar3 <= local_28)) {
        uVar2 = (**(code **)(*(long *)this + 0x58))(this,0xd0d3,3);
      }
    }
  }
  if (local_20 == *(long *)(in_FS_OFFSET + 0x28)) {
    return uVar2;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}

And this is a screen grab from their SDK documentation:
image

Connection issues with A7 ii

After entering the cameras password into the Alpha Fairy, the UI goes straight back to the menu. The following is seen in the logs (once they're enabled)

autoconnect waiting for connection
application wifi event handler called
httpcam hello IP 017AA8C0
autoconnect wifi connect success
autoconnect exiting function
httpcam starting SSDP
httpcam SSDP timeout, try 1
httpcam SSDP timeout, try 2
httpcam SSDP timeout, try 3
httpcam SSDP timeout, try 4
httpcam SSDP timeout, try 5
httpcam SSDP timeout, try 6
httpcam SSDP timeout, try 7
httpcam SSDP timeout, try 8
httpcam SSDP timeout, try 9
httpcam SSDP timeout, try 10
PTP connection timed out
httpcam SSDP timeout, try 11
httpcam SSDP timeout, try 12
httpcam SSDP timeout, try 13
httpcam SSDP timeout, try 14
httpcam SSDP give up
getting dd.xml from URL: http://192.168.122.1:64321/dd.xml
httpcam unable to get dd.xml, resp code -1, try 1
getting dd.xml from URL: http://192.168.122.1:64321/dd.xml
httpcam unable to get dd.xml, resp code -1, try 2
getting dd.xml from URL: http://192.168.122.1:64321/dd.xml
httpcam unable to get dd.xml, resp code -1, try 3
getting dd.xml from URL: http://192.168.122.1:64321/dd.xml
httpcam unable to get dd.xml, resp code -1, giving up

[Question] Would M5 StickC Plus2 be supported flawlessly?

image
Hi Frank,

Thank you for developing this repository. I'm curious whether you have experimented with Plus2, an enhanced version of M5StickC Plus2, notably featuring an expanded battery and increased flash storage.

Following the steps outlined in INSTRUCTIONS.md, I successfully compiled and uploaded to Plus2 using PlatformIO. Despite this, the screen remains unlit and there's no response from the device. Could you advise on a suitable approach to begin troubleshooting this issue? I would assume the issue came from the new dependencies used in the Plus2 library, involving the M5Unified. Your assistance would be greatly appreciated.

Best regards,
Sark

[Feature Request] custom shot sequence

Hi thanks for all the incredible work on this. I thought about attempting to write this myself but if I could pay you to implement that would be incredible.

My request seems simple but I need a way to set a series of shots up to 12 and be able to change the settings of iso, shutter, and aperture on each shot.

Iā€™m using it for custom bracketing for a very specific process

please let me know if this is something you could help implement

[Feature Request] Avoid showing up changed files in Source Control if using PlatformIO

Great to see that compiling with PlatformIO is supported!

Is your feature request related to a problem? Please describe.
After cloning the repo and compiling with PlatformIO, a lot of changed files appear in the Source Control.

Describe the solution you'd like
Add to the end of file .gitignore:

#PlatformIO
.pio

to avoid showing up multiple changed files in the source control.

Describe alternatives you've considered
None

Additional context
None

photo buffer not clearing, PTP protocol in STA mode

photo buffer not clearing, PTP protocol in STA mode

the buffer clearing icon beside the card icon will keep doing the animation forever, the red LED card busy indicator will stay on forever. the camera is inoperable until a full power reset

observed on A7RIV by a user I've been helping

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    šŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. šŸ“ŠšŸ“ˆšŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ā¤ļø Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.