Google Photos killed my Aura Frame

A sad looking empty photo frame

I want to do two things with my digital photos. First, keep them safe, especially all those precious memories of random parking meters and unfathomable HVAC mechanisms. Second, enjoy looking at the small subset that are precious family moments. I'm not a special snowflake, these basic requirements should represent a large and competitive market. Unfortunately I'm not holding my breath for much in the way of consumer friendly regulation for the next four years in the US.

Google is making some changes to their Photos API next month, which amount to "Get the fuck out of our Photos API". They're a polite organization so they phrase it a little differently: "We're excited to see the creative solutions developers will build using the new Picker API and the updated Library API.". The developer documentation is a little more pointed: "If your app relies on accessing the user's entire library, you may need to re-evaluate your app or consider alternative approaches."

I have an Aura Carver Mat, a nice digital photo frame that I synced to a shared Google Photos album. Easy for me to add photos, way too easy for the kids to add photos - a fantastic device. As of next month it's ewaste though. I'm not going to upload photos slowly through some picker API like an animal. I'm going to end up building something complicated out of a Raspberry Pi (adds to actuarially unrealistic to do list).

This change doesn't impact backup, because that was already broken. For a while Google Photos nicely integrated with Google Drive and I ended up with a local copy of everything that I could then backup through other means. I'm never going to trust any one company to look after important files and so my philosophy is to backup twice online and once to an external hard drive that lives in a fire safe. (At one point I even built a backup company based on this model).

Google killed the Drive integration and so I MacGyvered together an apps script based solution that used the Google Photos API. This revealed to me that the Photos API would not return location information. Even worse it was impossible to get the full resolution version of a video to download. So it's not like I was in love with the API before this most recent change.

My current approach is a mix of sad and awesome. The sad part is that I use Google Takeout once a month to get an archive of all my online photos. Thankfully this still works. The awesome - I wrote this photo sorter tool that takes the messy download and organizes it by year and month. And I also wrote a volume shadow copy tool that lets you backup a drive without getting hung up on locked files. Those pieces get my photos safely to an external drive, and I upload to Amazon Photos too (the third leg of my backup stool).

Add your comment...

Related Posts

(All Etc Posts)

(Published to the Fediverse as: Google Photos killed my Aura Frame #etc #google #photos #aura #backup Google is changing their Photos API so my Aura frame is ewaste. Thoughts on using and backing up digital photos. )

Simple Perceptron

Simple Perceptron

Add your comment...

Related Posts

(All Code Posts)

(Published to the Fediverse as: Simple Perceptron #code #ml #perceptron #wml Python notebook illustrating a scratch perceptron implementation as well as an sklearn example. )

DEN SFO

DEN SFO

Google Pixel 8 Pro 2mm f2.0 1/4,900s ISO42

UA304

Add your comment...

Related Posts

(Recent Photos)

(Published to the Fediverse as: DEN SFO #photo #plane #den #sfo DEN SFO )

BNA DEN

BNA DEN

Google Pixel 8 Pro 7mm f1.7 1/250s ISO21

UA1048

Add your comment...

Related Posts

(Recent Photos)

(Published to the Fediverse as: BNA DEN #photo #plane #bna #den BNA DEN )

SFO BNA

SFO BNA

Google Pixel 8 Pro 7mm f1.7 1/950s ISO21

UA499

Add your comment...

Related Posts

(Recent Photos)

(Published to the Fediverse as: SFO BNA #photo #plane #sfo #bna SFO BNA )

Adding AI to Todoist with Google Apps Script and OpenAI

By Robert Ellison. Updated on Monday, February 17, 2025.

An AI completes a task on a To Do List

This simple script adds useful AI to Todoist and runs in the cloud on Google Apps Script.

I use Todoist to run my life, and my dream is for it to be able to complete certain types of tasks for me. With OpenAI Operator and Anthropic Computer Use this is getting closer and closer to reality. Yes, there is a risk that Todoist spends all of my money on paper clips. But there is also the upside that it will eventually do my weekly shopping, pay my bills and call back the dentist's office. Google's new Ask for Me is promising too, even if right now it's just going to bother nail salons out of existence.

I already put together an Alexa replacement using a Raspberry Pi and the OpenAI realtime API. It switches lights on and off, adds things to my to do list, figures out when the next L is coming and more (I'll blog more about this soon).  One thing I learned is that this kind of thing can get pretty expensive. I can see why Amazon is procrastinating on an LLM Alexa. But costs keep going down, and the future will get more evenly distributed over time.

The first version of this script has two objectives. Respond to tasks, and create calendar events. Here's the script:

To get this working you need API keys from OpenAi and Todoist. Perplexity is optional, if you have a key add it at the top. It only works with tasks that have the right label, ai is the default - you can change this with AI_TASK_LABEL. I initially developed this with o1, but it looks like the tool use was rushed out too quickly and it calls the same tool repeatedly. GPT-4o works well enough and you can test switching out the model by changing OPENAI_MODEL.

Quick configuration guide - create a Google Apps Script project in Google Drive. Paste in the code above and add your API keys and any other desired configuration changes. Go to Project Settings in the right hand navigation and make sure your time zone is correct. Then go to Triggers and schedule the function trigger to run periodically (I use every 5 minutes). You should be done.

Back in Todoist add the ai label to a task (or whatever label you set in the script) and the AI will respond. With the current script there are two use cases - ask it to create an event (it can invite people, add details to the description, etc.), or ask it to research some aspect of the task you're working on. I think this is helpful because it has the full context of the task, and while you're working in Todoist it's useful to store the history there as well.

The point here is to extend the number of tasks that the script can take on. Add new tools for the AI to consider in the getTools() function, and then wire that tool into an implementation in generateAIResponse(). createCalendarAppointment() is a good example of using built in Google services - as well as the calendar it's pretty easy to interact with email, Google docs and many more. I'm planning to add file uploads as well, and will update this post with iterations of the script that add helpful functionality.

OpenAI recommends around 20 tools as the maximum. At that point it might be necessary to break this up into multiple assistants with different tool collections.

Let me know in the comments if you manage to use this to start crossing anything off your list.

Updated 2025-02-17 01:18:

Updated the script to support images and Perplexity. 

Image support takes advantage of multimodal input. Any image attachments will be sent as part of the conversation. This uses the large thumbnail in Todoist by default. It supports JPEG, GIF, PNG and WEBP. If a thumbnail is not available it will send the full size image without resizing, depending on how large this might not be accepted by OpenAI. 

Perplexity is implemented as a tool (so OpenAI is always called, and it may optionally call out to Perplexity to get more information). This is useful for web search, local search and knowledge past the training cutoff for the OpenAI model. It's optional, if you don't include a Perplexity API key then it just won't be used. 

Here's a simple use case - add a photo of a book and ask Todoist to find the URL where you can order it on Kindle. 

Add your comment...

More Google Apps Script Projects

(All Code Posts)

(Published to the Fediverse as: Adding AI to Todoist with Google Apps Script and OpenAI #code #ai #openai #todoist #ml #appsscript #gas #google #perplexity How to add an AI assistant to Todoist, includes code to respond to tasks and create calendar appointments with gpt-4o. )

Bringing Sanity to Window Replacement in San Francisco

The least complex window you're allowed to install in San Francisco

TLDR: If you live in San Francisco and have windows, please consider signing this letter.

I need to replace my front window. The wood is rotten. While San Francisco never gets that cold, all the cold there is whistles in through the gaps.

In general I want to make my house a little bit more energy efficient whenever I replace something. I'd assumed I could find some nice looking double paned replacements and get on with my life. Sane jurisdictions even require certain levels of insulation for this kind of project. San Francisco went the other way. There is a 14 page guide (PDF) to the requirements. Which boil down to window originalism, if your house is old enough:

"Another significant difference is that vinyl, fiberglass, and aluminum windows often do not have an important detail that is common on most older wood windows: the Ogee (pronounced Oh-jee) lugs at the bottom of the top sash (also called the meeting rail) of a double-hung window."

Yes, when Meta and Red Hat cancelled their conferences in San Francisco I'm pretty sure it was the lack of Ogees.

What about some double paned units?

"There should be an interior space bar, preferably of a dark color, within the insulated unit that visually divides the interior and exterior grilles."

This relates to divided light windows (i.e. you've got multiple panes of glass in one window). You might want to just have a single double paned window, but no, it needs to be in keeping with the original. You might then think that you could put some wood details over that single window but no, just in case someone looks closely and at an angle there has to be a shim inside to simulate it being multiple individual panes.

Doesn't the city care about the environment at all?

"While the advantages of double-paned windows are well known, a properly weatherstripped, single-glazed sash window can greatly reduce or eliminate air, noise and air infiltration (where most energy is lost)."

Greatly reduced is doing a lot of heavy lifting here. Looking at U Values here, the rate of energy transfer in watts per square meter per Kelvin (1°C = 1K) – W/m2K, old single pane windows are over 4.8, modern double paned are 1.3 and triple paned 0.8. Lower is better, almost four times better just for double paned.

I don't know exactly how these requirements came into force. It could be out of touch planners wanting windows for a more civilized era. Maybe there is a concentrated benefit / diffuse cost thing going on in favor of a few eye wateringly expensive custom window builders. But when you're trying to pretend that single paned windows are a boon to the environment something has clearly gone very wrong.

Even at the aesthetic level I'm not sure we need all the Ogees. I love the chaotic architectural chaos of San Francisco. The hot pink victorian next to the grey brutalist remodel. It's part of the charm of the city. Also, the expense of complying with what was popular 100 years ago cannot help with affordability, a key challenge.

Happily my supervisor, Myrna Melgar, has proposed legislation to shred this document and allow most people to choose replacement windows that best fit their needs. It looks like her proposal is currently on a three month vacation with the planning department. If you have windows and live in San Francisco you should probably care about this, and you can sign a letter to show your support for the change here.

Add your comment...

Related Posts

(All Politics Posts)

(Published to the Fediverse as: Bringing Sanity to Window Replacement in San Francisco #politics #sanfrancisco #windows #planning #sfpol San Francisco's insane window replacement rules; legislation to improve the situation; an open letter you can sign to help. )

L Taraval

SFMTA L Taraval Light Rail

Time lapse of the L Taraval light rail from West Portal station to the San Francisco Zoo. The L shut down during the pandemic and then years of construction replaced the tracks (and water lines, and sewers). It finally returned in September of 2024. I made a time lapse of the construction phase outside my house.

Add your comment...

Related Posts

(More Timelapses)

(Published to the Fediverse as: L Taraval #timelapse #video #muni #sfmta #sanfrancisco #taraval #westportal #4k Time lapse of the L Taraval from West Portal to the San Francisco Zoo. )

LHR SFO

By Robert Ellison. Updated on Saturday, January 18, 2025.

BA 285

Google Pixel 8 Pro 18mm f2.8 1/35s ISO16

BA285

In this photograph, an expansive view of a British Airways plane dominates the frame, exuding an aura of readiness and anticipation. The image is captured through the terminal windows, creating a layered effect with reflective surfaces adding depth to the scene. The plane’s curved body and distinctive red, white, and blue tail fin contrast starkly against the soft, muted tones of the cloudy sky beyond. Subtle hints of activity manifest in the blurred figures and equipment around the jet bridge, evoking a quiet hustle and bustle typical of air travel. This juxtaposition of the stationary and the bustling hints at the silent hum of a hub transitioning between departure and arrival.

The composition employs a balanced use of lines and layers. The vertical lines of the window frames serve as a frame within the frame, guiding the viewer’s gaze towards the aircraft, which is centered but appears slightly off-center due to the depth created by the glass. I appreciate the dynamic interaction between the geometric lines of the windows and the curvilinear form of the airplane, drawing attention to both the subject and the structural beauty of the terminal. However, the reflections, while adding depth, slightly distract from the clarity of the plane's details. Overall, this photograph shines in its elegant portrayal of travel's intersections, capturing a moment teeming with possibilities just beyond the glass.

Add your comment...

Related Posts

(Recent Photos)

(Published to the Fediverse as: LHR SFO #photo #plane #lhr #sfo Photo of BA 285, from LHR to SFO )

ITHCWY Newsletter for December 2024

Nanoplastics, Microplastics, Basketballs, Rice and Whales

Happy New Year!

I spent a few days near Shasta Lake over Thanksgiving. Here's a three night time lapse of the milky way. Also a couple of great hikes in the area: Clikapudi Loop (long) and Waters Gulch Loop (short). Some other travel time lapses include Bangalore and Lviv.

There was an election. I probably single-handedly evicted Biden and then endorsed Harris. Unfortunately my lifetime winning national election voting record stands at 1. And I got to vote in the US and the UK this year. Trump would probably have lost if Biden gave this speech I wrote for him. I do better in local elections and this year used OpenAI to semi-automate my California and San Francisco proposition guides.

I got my first electric vehicle - so should re-write this post to be far more righteous - and the hardest part was figuring out PG&E's shell game of rate plans. I ended up writing a python script to simulate my bill and it should work for anyone else trying to figure out this conundrum.

Kids should pay for MUNI. Most of them anyway.

I sort of fixed Rivian Drive Cam distortion and made a hyperlapse from San Francisco to Lake Shasta.

After a lot of previous moaning I have something nice to say about Android 15.

Please build a way to reply to voicemail using email. All the pieces are here now.

Previously:

Add your comment...

Related Posts

(All Etc Posts)