mrworf / photoframe Goto Github PK
View Code? Open in Web Editor NEWSoftware to pull random photos from Google Photos and show them, like a photo frame
License: GNU General Public License v3.0
Software to pull random photos from Google Photos and show them, like a photo frame
License: GNU General Public License v3.0
There is a way to select an album instead of keywords from Google photo
Thanks!
I went through your (very well documented!) "How to create an authorization file" for GooglePhotos and added the authorization to PhotoFrame, but nothing was displayed. No pictures were found:
DebugTrace.txt
Thanks for your great app and your help!
Hi I'm really new to raspberry use. I found our picture frame project and it looked very easy for me to do. I have burned the image to my sd card and booted the pi zero W. I have let it run for upto 30 mins at the first boot i'm using a 32gb sd card. It powers on and my screen show that it's receiving data, but I'm not getting anything displayed on it. I can' proceed to the next step. Can you please help me?
In some cases, the photo shown will be one which you might want to
a) Download
b) Edit
c) Delete
Right now, there is no way of finding the photo shown on the frame, adding a link should be trivial
I'm getting a 500 "Internal Server Error" at the end of the OAuth process (after I authorize in Google) connecting to Google Photos, after following the directions listed. Any idea where I might be going wrong?
I am on release 1.2.0 on Raspberry Pi 3 B+.
Thanks!
-Mike
Hi! Thank you for this nice setup!
I'm currently trying to set up my second frame. But I want to use it in portrait mode.
I have rotated the display in the config.txt. I know that it's correct. I have other RPis with the same function but not using them as a photoframes (rotating the display 270 degrees with "display_rotate=3").
However the "slideshow" still displays the picture as if it where in landscape mode.
Is there a way to define a new "screen mode" (720x1280) somehow?
All options available in the WebGUI is in landscape mode.
Best regards Erik
Hi,
I want to know if photoframe is compatible also with Raspberry Pi Zero? Has someone tried it? Or is there something in this build that makes it exclusively available for Raspberry Pi 3?
Edit: I should add I am also referring to the ready build under releases.
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/flask/app.py", line 1612, in full_dispatch_request
rv = self.dispatch_request()
File "/usr/lib/python2.7/dist-packages/flask/app.py", line 1598, in dispatch_request
return self.view_functionsrule.endpoint
File "/usr/lib/python2.7/dist-packages/flask_httpauth.py", line 93, in decorated
return f(*args, **kwargs)
File "./frame.py", line 419, in oauth_step3
oauth.complete(request.url)
File "/root/photoframe/modules/oauth.py", line 109, in complete
client_secret=self.oauth['client_secret'],
KeyError: 'client_secret'
I'm trying to decrease the amount of time each image is displayed but it's stuck at 60
Images are sometimes expanded and cropped unnecessarily. I have observed this in several cases, e.g. when the image retrieved is 1803x1080px for display on a 1920x1080px display.
I believe this is caused by a bug in the static method makeFullframe() in modules/helper.py
, triggered when the retrieved image is very close to the size of the display. In the cited example, where the image is 1803x1080px, it is not true that adjHeight < displayHeight
so we end up with padding
between 20 and 60 so zoomOnly
is forced to True
, causing convert
to be called with -resize ^1920x1080
. This expresses minimum dimensions so the width is expanded to 1080 and the height is therefore expanded and then cropped to keep the aspect ratio.
I have noticed this because I am using my simpleUrl service to fetch images from my own local server, which delivers them pre-sized to fit the frame. It also writes some descriptive text in the top right corner of the image, which is cropped in these cases. Otherwise these minor crops would probably go unnoticed.
There is likely a better algorithm for resizing images to handle near-fits such as this more gracefully, probably just doing nothing. I intend to give this some thought and submit a patch when I get the opportunity, if nobody else gets there first.
New to GitHub. Love this project idea! Attempting it on a Raspberry Pi 1 with Edimax WiFi dongle. Followed all the steps and everything works up until I click "Allow" to allow sensenet.nu access to my google account. I am directed to a static page (https://photoframe.sensenet.nu/?state=<?php%.......etc) that loads the attached code. I'm not a php developer so I can't make a lot of sense of it. Not sure if this is where I post this problem because it sounds like a niche issue, but I would love to get this running! Any advice?
Thanks!
Seems to be the same as Issue #22. I suppose going into the FAQ to setup my own service would get around this problem?
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/flask/app.py", line 1612, in full_dispatch_request
rv = self.dispatch_request()
File "/usr/lib/python2.7/dist-packages/flask/app.py", line 1598, in dispatch_request
return self.view_functionsrule.endpoint
File "/usr/lib/python2.7/dist-packages/flask_httpauth.py", line 93, in decorated
return f(*args, **kwargs)
File "./frame.py", line 414, in oauth_step1
return redirect(oauth.initiate())
File "/root/photoframe/modules/oauth.py", line 89, in initiate
self.rid = self.getRedirectId()
File "/root/photoframe/modules/oauth.py", line 85, in getRedirectId
r = requests.get('%s/?register' % self.ridURI)
File "/usr/lib/python2.7/dist-packages/requests/api.py", line 70, in get
return request('get', url, params=params, **kwargs)
File "/usr/lib/python2.7/dist-packages/requests/api.py", line 56, in request
return session.request(method=method, url=url, **kwargs)
File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 488, in request
resp = self.send(prep, **send_kwargs)
File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 609, in send
r = adapter.send(request, **kwargs)
File "/usr/lib/python2.7/dist-packages/requests/adapters.py", line 487, in send
raise ConnectionError(e, request=request)
ConnectionError: HTTPSConnectionPool(host='photoframe.sensenet.nu', port=443): Max retries exceeded with url: /?register (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused',))
First of all, thanks for such a great photoframe software. Was super-easy to set up and now I can finish my photoframe build. I have a current photoframe that I am using with windows XP and an ancient google screensaver. I have kept using it because it has the 'Ken Burns effect' -dissolve between pictures, zoom and pan-as a transition which is a really elegant way to deal with multiple resolutions and aspect rations.
I am not sure a Raspberry Pi has enough video processing oomph to do that but even a simple dissolve would be a nice addition.
Hi ! Thanks for the update ! I moved to google photo api, however, there are some issues occurs, sometimes the frame stuck on an image, and some time it stuck on a black screen, then I have to reboot and after that awhile happens again.
I have around 25 albums , each one have around 200 photos (some photos shared in multiple albums) , I tried to remove some of them and stays on fewer albums but it still happening ? Are there any specific rules for the albums using this api ? I used these albums on the previous api with no problems.
Thanks again
With the wrong query (or if you have no photos) the frame will complain about network which isn't really the issue. Need to be more obvious
I created an Google Photo album called "TestPhotoFrame" for example. I then used the keyword "TestPhotoFrame" in your software, which was able to find all the photos i had put in the album. I then added a contributor to that album. The contributor added their own photos to that same album and yet they do not show up under that keyword. It appears google doesn't add that "tag" to photos contributed to an album.
Is there a way to either allow me to point the software to one specific album or to get the contributed photos to show up?
Also it would be nice to add a button to force it to sync with google photos.
Finally, is there a limit to the number of photos? I assume this downloads all the photos from the album and then displays them or does it load each photo from the web each time?
Thanks for the enhancement. I've played around adding some albums and it really looks great.
When I'm just using the "latest"-keyword, the infinite wisdom of Google's AI keeps repeating some images instead of showing all of them just once in a random order. I'm not sure, if you have any chance to change this behaviour.
Maybe there's a way to configure Google to display just all photos independent of any album assocication? That could be the PhotoFrame default configuration, if no album name is given.
Selection to display all images from an album or list of albums. This would make it easier to create a specifically curated set of pictures to show on the frame.
Google has finally released the new API for accessing photos, but it would require a big change to the existing implementation.
More details about API here:
https://developers.google.com/photos/library/guides/list
Update Aug 13 2018, google killed the old API access without much warning.
Working on rewriting the photoframe so it can use the new API. Will take a week or two due to other commitments as well.
I have forced an update to get the most recent changes, clearly you have spent a great deal of time improving photoframe - Thank you.
It appears that the keywords now only accept album names that match the name (spelling, not case)of an existing album. In the prior version, with Picasa, any search word was possible. When there is no match the UI (browser) hangs until I do a refresh - which basically removes the entered search value and then the preview and the actual display show message indicating no albums were specified.
Logs:
~/photoframe# ./frame.py --debug
2019-01-08 09:24:16,662 - DEBUG - Found "/boot/http-auth.json", loading the data
2019-01-08 09:24:16,726 - DEBUG - Internal display: {'3d_modes': [], 'width': 8, 'rate': 60, 'code': 1, 'mode': 'INTERNAL', 'scan': '(internal)', 'aspect_ratio': '', 'reverse': True, 'depth': 16, 'height': 8}
2019-01-08 09:24:17,872 - INFO - ColorSensor not available
2019-01-08 09:24:17,875 - DEBUG - hourOn = 4, hourOff = 22
2019-01-08 09:24:17,876 - DEBUG - Powermode changed to 'none'
2019-01-08 09:24:32,417 - INFO - Starting presentation
2019-01-08 09:24:49,262 - DEBUG - Query Google Photos for album named "yellow"
2019-01-08 09:24:49,268 - DEBUG - Invoking 0 protected resource request hooks.
2019-01-08 09:24:49,270 - DEBUG - Adding token {u'access_token': u'xxxx', u'expires_in': 3600, u'expires_at': 1546958244.58698, u'token_type': u'Bearer', u'scope': [u'https://www.googleapis.com/auth/photoslibrary.readonly'], u'refresh_token': u'yyyy'} to request.
2019-01-08 09:24:49,271 - DEBUG - Requesting url https://photoslibrary.googleapis.com/v1/albums using method GET.
2019-01-08 09:24:49,272 - DEBUG - Supplying headers {u'Authorization': u'xxxxx'} and data None
2019-01-08 09:24:49,273 - DEBUG - Passing through key word arguments {'allow_redirects': True, 'params': {'pageSize': 50}, 'stream': False}.
2019-01-08 09:24:49,311 - DEBUG - Starting new HTTPS connection (1): photoslibrary.googleapis.com
2019-01-08 09:24:50,258 - DEBUG - https://photoslibrary.googleapis.com:443 "GET /v1/albums?pageSize=50 HTTP/1.1" 200 None
2019-01-08 09:24:50,287 - DEBUG - Album: Fireworks
2019-01-08 09:24:50,288 - DEBUG - Album: Utah
2019-01-08 09:24:50,288 - DEBUG - Album: SingleShot
2019-01-08 09:24:50,289 - DEBUG - Album: Vail Gold Club
2019-01-08 09:24:50,290 - DEBUG - Album: Vail 2010
2019-01-08 09:24:50,293 - DEBUG - Invoking 0 protected resource request hooks.
2019-01-08 09:24:50,294 - DEBUG - Adding token {u'access_token': u'xxxxxx', u'expires_in': 3600, u'expires_at': 1546958244.58698, u'token_type': u'Bearer', u'scope': [u'https://www.googleapis.com/auth/photoslibrary.readonly'], u'refresh_token': u'yyyyy'} to request.
2019-01-08 09:24:50,295 - DEBUG - Requesting url https://photoslibrary.googleapis.com/v1/sharedAlbums using method GET.
2019-01-08 09:24:50,296 - DEBUG - Supplying headers {u'Authorization': u'xxxx'} and data None
2019-01-08 09:24:50,297 - DEBUG - Passing through key word arguments {'allow_redirects': True, 'params': {'pageSize': 50}, 'stream': False}.
2019-01-08 09:24:50,307 - DEBUG - Starting new HTTPS connection (1): photoslibrary.googleapis.com
2019-01-08 09:24:50,878 - DEBUG - https://photoslibrary.googleapis.com:443 "GET /v1/sharedAlbums?pageSize=50 HTTP/1.1" 200 None
Note the search for "yellow" on the googlephotos webpage does show a few pictures.
Hopefully search using any keyword can be repaired. The ability to find a person across all albums is a nice feature
Once the frame has booted up and network is available, the frame should show the local IP for 30s before beginning the slideshow. Solves the issue of not knowing where to connect when using WiFi and having configured it :)
I flashed the image on the releases page, put in my wifi creds.. it joins the network but nothing happens on the touchscreen or thru HDMI
I'm trying to make the frame turn Off at 2 A.M and On at 8 A.M without using the sensor, like this:
However, the function doesn't work properly , I tried different times and sometimes it works fine. it looks like if the turn off time is at "A.M" (or maybe if both times in A.M) it won't work, would you please take a look on that. Thanks again :)
Bluring the original image and placing it in the background is all well and fine when the image won't fill the screen. But it would be really awesome to detect faces and zoom while keeping them in-view whenever possible and thus avoid the blur logic if not needed.
So as long as the faces can be centered on the screen, zoom can be used to maximize screen space. If this still doesn't fill the screen, then use the blur method to cover the remaining space.
I've tried connecting Pi3 to 2 different 4K screens.
When the frame runs, I get a black border around the image - maybe 150px, all 4 sides.
Is this a Pi/4K issue or is that part of the image rending logic?
I noticed the image "img/busy.gif" is missing. :)
First off, thanks for the work on this!
Would love to see the GPIO for the power off switch be made configurable via the interface.
I built using an original RPi with stretch lite. I'm using the original instead of the 3 due to the lower power reqs (and I had a couple lying around). With a USB Nano WiFi adapter the USB port on my monitor (HP E221i) seems to power it without issue. (Note: I tried several Dell models, none of the USB ports provide power.) I have a model 3 that definitely does not like the lower power output from the monitor and I get undervoltage errors overwriting the display and causing issues. The original might not like it either, but it doesn't seem to be complaining. Just REALLY slow to start displaying pictures after first boot, and the fastest it seems to switch between photos is ~1:30 regardless of setting. Not having a second power cord is worth it though, IMO.
Anyways, because I'm using an original RPi, I don't have GPIO 26. I will use another GPIO and modify "shutdown.py" accordingly, however I would also like to use the update feature (especially if you plan to add flickr support). I expect my manual change will get overwritten sooner or later though. It would be much easier if this were a configurable option in the browser.
Again, thanks for the awesome app!
If i run photoframe.sh from terminal, everything works as expected. When systemd starts it after a reboot, though, it freezes and the log shows the errors below:
-- Logs begin at Tue 2018-12-25 18:35:03 GMT, end at Tue 2018-12-25 18:35:55 GMT. --
Dec 25 18:35:11 raspberrypi systemd[1]: Started Photo Frame.
Dec 25 18:35:29 raspberrypi photoframe[499]: 2018-12-25 18:35:29,926 - INFO - No http-auth.json found, disabling http authentication
Dec 25 18:35:30 raspberrypi photoframe[499]: 2018-12-25 18:35:30,038 - INFO - No SMB subsystem, color sensor unavailable
Dec 25 18:35:53 raspberrypi photoframe[499]: 2018-12-25 18:35:53,255 - INFO - Starting presentation
Dec 25 18:35:53 raspberrypi photoframe[499]: 2018-12-25 18:35:53,264 - ERROR - No result returned!
Dec 25 18:35:54 raspberrypi photoframe[499]: 2018-12-25 18:35:54,842 - ERROR - Issues downloading
Dec 25 18:35:54 raspberrypi photoframe[499]: Traceback (most recent call last):
Dec 25 18:35:54 raspberrypi photoframe[499]: File "/root/photoframe/modules/oauth.py", line 64, in request
Dec 25 18:35:54 raspberrypi photoframe[499]: result = auth.get(uri, stream=stream, params=params)
Dec 25 18:35:54 raspberrypi photoframe[499]: File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 501, in get
Dec 25 18:35:54 raspberrypi photoframe[499]: return self.request('GET', url, **kwargs)
Dec 25 18:35:54 raspberrypi photoframe[499]: File "/usr/lib/python2.7/dist-packages/requests_oauthlib/oauth2_session.py", line 358, in request
Dec 25 18:35:54 raspberrypi photoframe[499]: headers=headers, data=data, **kwargs)
Dec 25 18:35:54 raspberrypi photoframe[499]: File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 488, in request
Dec 25 18:35:54 raspberrypi photoframe[499]: resp = self.send(prep, **send_kwargs)
Dec 25 18:35:54 raspberrypi photoframe[499]: File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 609, in send
Dec 25 18:35:54 raspberrypi photoframe[499]: r = adapter.send(request, **kwargs)
Dec 25 18:35:54 raspberrypi photoframe[499]: File "/usr/lib/python2.7/dist-packages/requests/adapters.py", line 497, in send
Dec 25 18:35:54 raspberrypi photoframe[499]: raise SSLError(e, request=request)
Dec 25 18:35:54 raspberrypi photoframe[499]: SSLError: ("bad handshake: Error([('', 'osrandom_rand_bytes', 'getrandom() initialization failed.')],)",)
Dec 25 18:35:54 raspberrypi photoframe[499]: Exception in thread Thread-4:
Dec 25 18:35:54 raspberrypi photoframe[499]: Traceback (most recent call last):
Dec 25 18:35:54 raspberrypi photoframe[499]: File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner
Dec 25 18:35:54 raspberrypi photoframe[499]: self.run()
Dec 25 18:35:54 raspberrypi photoframe[499]: File "/usr/lib/python2.7/threading.py", line 754, in run
Dec 25 18:35:54 raspberrypi photoframe[499]: self.__target(*self.__args, **self.__kwargs)
Dec 25 18:35:54 raspberrypi photoframe[499]: File "/root/photoframe/modules/slideshow.py", line 101, in presentation
Dec 25 18:35:54 raspberrypi photoframe[499]: result = self.services.servicePrepareNextItem(svc, filename, ['image/jpeg'], {'width' : self.settings.getUser('width'), 'height'
Dec 25 18:35:54 raspberrypi photoframe[499]: File "/root/photoframe/modules/servicemanager.py", line 268, in servicePrepareNextItem
Dec 25 18:35:54 raspberrypi photoframe[499]: return svc.prepareNextItem(destinationFile, supportedMimeTypes, displaySize)
Dec 25 18:35:54 raspberrypi photoframe[499]: File "/root/photoframe/services/svc_googlephotos.py", line 52, in prepareNextItem
Dec 25 18:35:54 raspberrypi photoframe[499]: result = self.fetchImage(destinationFile, supportedMimeTypes, displaySize)
Dec 25 18:35:54 raspberrypi photoframe[499]: File "/root/photoframe/services/svc_googlephotos.py", line 86, in fetchImage
Dec 25 18:35:54 raspberrypi photoframe[499]: result = self.requestUrl(imageUrl, destination=destinationFile)
Dec 25 18:35:54 raspberrypi photoframe[499]: File "/root/photoframe/services/base.py", line 286, in requestUrl
Dec 25 18:35:54 raspberrypi photoframe[499]: result = self._OAUTH.request(url, destination, params, data=data, usePost=usePost)
Dec 25 18:35:54 raspberrypi photoframe[499]: File "/root/photoframe/modules/oauth.py", line 94, in request
Dec 25 18:35:54 raspberrypi photoframe[499]: return {'status':result.status_code, 'content':result.content}
Dec 25 18:35:54 raspberrypi photoframe[499]: AttributeError: 'NoneType' object has no attribute 'status_code'
Did i miss something?
Merry Christmas!
Is there any semi-API functionality already in place where I could send new keywords to the frame via web request? That way I could perhaps contact the frame without having to load the settings in a browser.
One feature that would be useful is the option to cache images. Every set amount of time the photo frame would then compared the cached images with the latest list and either download new photos or delete photos that are no longer on the list.
This would come in handy for photo frames using a limited connection such as a cellular connection. This also adds another question does the software support a wired pi connection? Does it support the cellular CDMA or GSM hat on the pi?
The "Open" button next to a keyword doesn't behave as one would expect when using the new google photos provider. It simply searches google photos instead of trying to open the album.
I have 4 keywords that return images from Google Photos.
Have around 50k photos to pick from.
Refresh list of photos every 1 hours
I see very minimal change in the image pool. Despite running all day, rebooting, ./update/force, etc.
Am I missing something?
Is there a single pool, comprised of all the keywords or does each keyword have its own pool?
Just went through your setup guide twice and each time after i paste the OAUTH data and click the connect button i get this:
Uh oh, something went wrong...
Please go to github and see if this is a known issue, if not, feel free to file a new issue with the following information:
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/flask/app.py", line 1612, in full_dispatch_request
rv = self.dispatch_request()
File "/usr/lib/python2.7/dist-packages/flask/app.py", line 1598, in dispatch_request
return self.view_functionsrule.endpoint
File "/usr/lib/python2.7/dist-packages/flask_httpauth.py", line 93, in decorated
return f(*args, **kwargs)
File "./frame.py", line 414, in oauth_step1
return redirect(oauth.initiate())
File "/root/photoframe/modules/oauth.py", line 89, in initiate
self.rid = self.getRedirectId()
File "/root/photoframe/modules/oauth.py", line 85, in getRedirectId
r = requests.get('%s/?register' % self.ridURI)
File "/usr/lib/python2.7/dist-packages/requests/api.py", line 70, in get
return request('get', url, params=params, **kwargs)
File "/usr/lib/python2.7/dist-packages/requests/api.py", line 56, in request
return session.request(method=method, url=url, **kwargs)
File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 488, in request
resp = self.send(prep, **send_kwargs)
File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 609, in send
r = adapter.send(request, **kwargs)
File "/usr/lib/python2.7/dist-packages/requests/adapters.py", line 487, in send
raise ConnectionError(e, request=request)
ConnectionError: HTTPSConnectionPool(host='photoframe.sensenet.nu', port=443): Max retries exceeded with url: /?register (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused',))
Open button for latest keyword causes 500 error
It should be possible to select different branches to follow, allowing for testing development features without compromising master
If I test key words, it goes to my photos, and allows me to search. I added a search parameter, and if i open it is successively searches my photos. I have authorized and reauthorized my account several times. The pictures still don't show up. if i use the default search that automatically goes to the last picture, and test it i get "Error 404 The requested URL was not found on this server." I also can't change the timezone. It always goes back to default.
I'm still new to this and learning, but do not see any information about it on here. I am having an issue with the slideshow freezing when it goes through all the pictures.
display orientation (or rotation as it were) should be exposed as a drop-down box to simplify the life of anyone trying to run a non-standard orientation ๐
Sensor is working, there are noticeable changes to the images displayed when the ambient light is changed. The status in the browser never changes though.
"Current ambient environment -.-- lux and ----K color temperature."
Any clues for troubleshooting would be appreciated! Would like to use ambient power save feature, but would be nice to see current readings when setting this up.
Thanks!
I have a weird issue we almost every other image pull I get a issue showing image check network or settings message. The the next image it pulls. I tried resetting the pi 3 b+ to default and reloaded the image and same result the raspberry pi is sitting like 8 ft from the access point so I am unsure what's going on. The syslog is filled with this message over and over.
Dec 30 21:52:01 photoframe photoframe[546]: 2018-12-30 21:52:01,789 - ERROR - Fail$Dec 30 21:52:01 photoframe photoframe[546]: Traceback (most recent call last): Dec 30 21:52:01 photoframe photoframe[546]: File "/root/photoframe/modules/slide$Dec 30 21:52:01 photoframe photoframe[546]: logging.debug('Loaded %d images in$Dec 30 21:52:01 photoframe photoframe[546]: KeyError: 'entry'
Today you need to make many changes to the service manager in order to successfully add a new service. This needs to be simplified so there's essentially only one or two lines of work (or even better, autodetect new services... hmmm...)
Hello, just wondering if you have any ideas about how to make the slideshow appear on an SPI LCD? I have a 3.5" waveshare LCD. I've tried your pre-built image and also installing manually on raspbian, but the slideshow will only show on HDMI either way. LXDE shows on the LCD, which is on TTY7, and when i SSH in and use 'chvt 1' to switch the LCD to TTY1 it just shows console text.
Please could you help? Maybe something happens to the photoframe.sensenet.nu?
When the borders would be too small when framing the image, it should zoom the image to fill the display instead of allowing black borders to remain.
Today when a major change is done in settings, it may take as long as the slideshow timer to take effect, preferably it should happen more or less directly.
This is tricky due to the multithreaded behavior of photo frame so it will not happen anytime soon.
i got this error, i this uri still working?
https://photoframe.sensenet.nu
Error: redirect_uri_mismatch
The redirect URI in the request, https://photoframe.sensenet.nu, does not match the ones authorized for the OAuth client. To update the authorized redirect URIs, visit:
Hi, this is not an issue, it's a suggestion. It's always a "problem" when you pull the power from a Linux machine. You risk breaking the OS. To avoid that you can make a "Read Only" version of the OS with BuildRoot. I have not done this myself, but I'm using a system called "MotionEyeOS" that uses this and it's working really well.
Then you don't need to worry about breaking stuff when you loose power. :)
As I said, it's just a suggestion. :)
Good morning! :)
I'm getting errors on all my frame this morning...
In the Log:
Jan 2 09:08:19 photoframe03 photoframe[539]: 2019-01-02 09:08:19,425 - INFO - Starting presentation Jan 2 09:08:19 photoframe03 photoframe[539]: 2019-01-02 09:08:19,439 - ERROR - Unable to create query the keyword "Fotoram Louise" Jan 2 09:08:20 photoframe03 photoframe[539]: 2019-01-02 09:08:20,632 - ERROR - Unable to create query the keyword "Fotoram Louise" Jan 2 09:08:22 photoframe03 photoframe[539]: 2019-01-02 09:08:22,546 - ERROR - Unable to create query the keyword "Fotoram Louise" Jan 2 09:08:23 photoframe03 photoframe[539]: 2019-01-02 09:08:23,814 - ERROR - Unable to create query the keyword "Fotoram Louise"
The album name is correct: Fotoram Louise
The "Open" button now works by the way!
Happy New Year! :)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.