Code Monkey home page Code Monkey logo

flipflip's Introduction

flipflip

FlipFlip

A glorified slideshow, with lots of bells and whistles

Screenshot

Links

Features

  • Local files as well as Tumblr, Reddit, Twitter, Instagram, Imgur, DeviantArt, Booru & More
  • Animated GIF and video support
  • Grid view with cloneable grid cells
  • Multiple windows
  • Visual effects (zoom/transition, cross-fade, slide, strobe/pulse, fade in/out, panning, overlay)
  • Randomized and ordered playback
  • Timing control
  • Caption scripting support
  • Audio track/playlist support and Audio Library to organize tracks
  • Library and Tagging to organize sources and generate slideshows
  • Easy to share!

Quick start

Check out our quick start guide.

Contributing

Create a new branch, make your changes, and open a pull request. The policy of the FlipFlip project is, "patches are generally accepted." See the developers documentation to get started.

Donate

Enjoying FlipFlip? Buy me a coffee and help support FlipFlip development!

flipflip's People

Contributors

abrenoch avatar borewit avatar dependabot[bot] avatar drprofesq avatar f3lin3 avatar fleetingorchard avatar ififfy avatar prof-m avatar sgoranson avatar starrhelixx 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  avatar  avatar

flipflip's Issues

Play gifs completely

We already include a GIF-reading JS library, which should be able to tell us how long a gif is.

The tricky part is actually the data flow: getting ImagePlayer to tell its parent HeadlessScenePlayer how long the gif is, and override the next-scene timeout in the right spot.

Random Scene?

just thought it would be nice to have a "I feel lucky" button in the Scenes tile page. Just for when I am too bored to pick a scene and just want to be surprised.
Also, I am starting to get a significant number of scenes in my FlipFlip... an alphabetical sorter would be great? ๐Ÿ˜ƒ

Overlay Covers Up Context Menu

Noticed a bug with image info context menu: If scene has overlay and overlay changes images, the newly loaded image now covers the context menu (and prevents click events)

Rounded Styling?

I have for fun played around with the style.scss file to create a more rounded look and feel.

Attached here are some examples - Should I create a PR for these or are square corners the preferred ui?
round button styling 1
rounded control groups 1

Redesign scene picker

  • Link to user manual
  • Reduce text
  • Lay out scenes as horizontal flexbox flow instead of vertical list

Just making a note of this because these are the last things I plan to do before releasing 1.1.

Re-order SceneDetail to show Sources under scene effects?

So I was wondering if you were ok with moving "Sources" underneath the other ControlGroups in SceneDetail.

Right now, if you have a Scene with a lot of sources, you have to scroll down to get to scene effects. This seems like a poor user experience.

If we move "Sources" to the bottom, we could also move the remove/add buttons to the top of the element, making the user do as little work as possible to reach all actions.

Cross-Fade - possible bug?

When the next image to be shown is the same as the current image, and cross-fade images is selected then a warning is thrown at react-dom.development.js:506 in connection with duplicate keys:


Warning: Encountered two children with the same key, `file:///home/cat1.jpg`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted โ€” the behavior is unsupported and could change in a future version.
    in div (created by ImagePlayer)
    in ImagePlayer (created by HeadlessScenePlayer)
    in div (created by HeadlessScenePlayer)
    in HeadlessScenePlayer (created by Player)
    in div (created by Player)
    in Player (created by Meta)
    in div (created by Meta)
    in Meta

This conflict happens less frequently the more images there are - so to quickly repro this - create a folder with only a one or two image files, set cross-fade on and run in the debugger to monitor the console logs.

As time goes on - more

elements are created and appear orphaned in the ImagePlayer - consuming resources.

Hotkeys don't work when first starting ImagePlayer

When first playing a scene, it seems the window/element looses focus (or the correct element doesn't have focus) and hotkeys don't work as intended. Clicking anywhere fixes the issue, but would be nice if this was not necessary

Bug? "+ Add Local Files" in SceneDetails

Clicking on the +Add local files button on Scene Details permits the button to be repeatedly pressed multiple times launching multiple copies of the Directory Picker. Surely after a single click the button should not accept further clicks until the Directory Picker has been closed?

This 'feature' affects - Linux 32, Linux 64 and Windows Builds - no idea about Mac.

Remove Sources - Bug

In Scene Detail - if the same (local) folder is added more than once - when trying to delete any of the duplicates by clicking the red 'X' button rather than removing just the selected entry it removes all copies of the same folder.

(Enhancement suggestion - it would be helpful if the source paths could be editable other than through a directory picker).

What to do about remote source timeouts

Tumblr (and any other remote source) impose request limits to prevent remote API users from overloading the system. Tumblr's limits are: 1,000 requests per hour, 5,000 requests per day (however, it's definitely not this literal). If you exceed this limit, the Tumblr API simply starts returning 429 (Too Many Requests).

I want to keep the timeout between requests as low as possible so images can be served quickly, but also want to prevent getting 429'd (which means Tumblr sources would be useless until the time cap has passed).

I did some extensive testing and found that an 8 second timeout worked for a scene with no overlay... but once you add an overlay, even a 16 second delay results in 429 after only 40 minutes. ๐Ÿ˜ข

So... that leaves me to think we should add a limit to the number of pages processed per source. That way, we can serve the sources quickly and prevent getting soft banned by Tumblr. Considering some blogs have 100k's of images, it doesn't make sense to keep querying forever. What do we think about 20 pages? More/less?

Bundles

It would be nice if you could bundle up images and scene settings into a zip file that could be shared over the internet.

๐Ÿœ Hotkeys broken in Fullscreen

Unfortunately, it seems that 9a479c8 (my commit) broke the hotkey functionality while fullscreen is active. This is because this change set the Electron Menu to null when fullscreen is active, and this is where the hotkeys are implemented.

Personally, I hate seeing the ugly menu bar when watching fullscreen. I'd much rather not have to keep it around. However, I can't seem to find any way to hide the Electron Menu but not remove it.

So either, (1) the Player Hotkeys either need to be implemented a different way, or (2) we need to find a way for the menu to be hidden, but allow hotkey functionality to still work.

Install on a Mac - nothing happens after right click Open

Downloaded Mac version 1.2.0.
Unzipped file.
Right click FlipFlip and Open.
I get one box that asks me to confirm if I want to open it for my security settings.
I click okay.
Nothing happens. No icon. Doesn't show up as an open program on my Force Quit list.

Allow display options to change while playing

After waiting for a large set to load, it'd be nice not to have to hit back to make a change to the zoom level, text overlay, transition rate, etc. (and then having to reload all images again)

It'd be nice to have the ability to change these options while the slideshow is playing (perhaps a mouseover sidebar)

Is it time for proper state management?

I used the poor man's React state management strategy when this project was just a baby. Now it's pretty big, and it would be nice impose some more formal order to it.

I personally dislike Redux, and React Hooks might change the state management landscape a little bit.

Does anyone have a library they like? I hear MobX is decent: https://mobx.js.org/

Save Window State

I would like to add some functionality to save the running state of the Electron Browser Window (Size, Screen Location, menu visibility etc). Given that the existing functionality is that if the app is closed when it is running when it next launches the app continues on from where it was, but resets the window size, location and menus back to the defaults.

The proposed code changes required are likely to be in Meta.tsx ... but I note that some work is taking place in Meta.tsx on the v2.0_Work branch....

Should I make proposed changes to the master branch or to the v2.0_Work branch?

Scenes don't wrap

Hey there !
first of all, congratulations for the work done ! Wow... the latest release is absolutely great, and I love the new UI improvements on the Scenes selection. However, I already have like 20 scenes predefined, and it means I need to scroll horizontally to get to the last ones. A grid approach with a sort of dynamic tiling would maybe be more convenient ? But that's just me being picky... ;-)
At any rate, I LOVE the new options, and I'm having so much fun tweaking and creating my perfect scenes. Thank you so much for this awesome piece of software ! :-)
Keep up the good work!!!

Remote Sources

  • First, the framework will need to be slightly modified so that allURLs can be asynchronously appended to.

Sources to Implement:

  • Tumblr
  • Reddit

We can use RipMe as as reference for code to scrape these sites if needed.

Show file info somehow (when paused)

Would be nice if you could see some info about the current file being shown.

Maybe this happens on mouse over, or even right click? Or could be up in the control bar.

Possibly a delete option. I often come across pictures that I'd rather just remove from FlipFlip.

User Config

I've finally finished my implementation of the Library (and many other general improvements) and thought another great feature for 2.0 would be a general user config we can use throughout FlipFlip!
This would be a new form accessible from the home (ScenePicker) and would modify a config object in Meta with a group of keys.

  • Implement config route and object and form
  • Use config

Possible configs:

  • Default Scene settings (These would be used any time a new Scene is created)
  • Enable Caching
  • Caching dir (when implemented)
  • Caching dir max size
  • API Keys (e.g. Tumblr)
  • Text overlay font (fontface, style, weight, size, color, etc.)

Usage Doc update

Documentation definitely needs to be updated to cover all the new features we've added!

Adding this as general TO-DO

V2.0 Idea: *User Library*

Ok, so this is kind of a long term project for me... but before Tumblr was being shut down, I was maintaining and developing a spreadsheet of tags and scripts to help me generate gooninator sessions by weighting the tags. I even had it automatically checking if tumblrs had been removed and blacklisting them. I loved it ๐Ÿ˜

I implemented that gooninator import thing as a stopgap for now, but it only goes so far.


I'm proposing a "User Library" where you can import "Sources" for use in scenes. These could be local directories, tumblrs, subreddits, links to lists of files, etc. We can define types of sources and add more as we go along. Obviously, the player will need to be able to play these sources as well.

Users would have the ability to add tags to each source and somehow manage these tags. I'm not sure the absolute best way to manage these tags. I was thinking Users can add to a set of tags, and then -- when a source is selected -- a set of checkboxes appears, one for each tag. This, or an autocomplete textbox, would be best to reduce accidental duplication of tags.

The coup de gras will be a scene generator using these tags. A slider under each defined tag can define it's weight, along with other options like completely exclude a tag or solely include a tag. Then a new scene is generated automatically!

Is the @font-face rule in style.scss working as expected?

I am making the binaries on a Debian 9 system, and seeing significant differences between the Windows and Linux rendering of text in the app. Fundamentally it appears that the Windows binaries display using a Sans Serif type of font - pretty much like the screenshots in the doc_images folder.

However, the Linux builds all seem to use a Serif type of font for example:
screenshot from debian 9 x64

It seems no matter what I play around with in the @font-face rule in style.scss nothing changes....

However, if I change the font-family attribute in the body class to "system-ui" then builds for the Linux and Windows platforms all appear to display San Serif type fonts - although there is a slight difference in appearance for Windows from when the attribute is set to "system".

What makes me question further if the @font-face rule actually is doing anything is that changing the font-family attribute from "system" (around line 20) to "system-ui" appears to make no impact.

Any tips, pointers, suggestions of things to try?

If others can replicate this should / could the font-family attribute in the body element (line 36 style.scss) be changed to "system-ui" for the time being to give a more consistent look between the different platform versions?

Allow videos in slideshow

TODO:

  • Allow videos to be used as sources
  • Allow ImagePlayer to load video elements
  • Allow `ImageView' to display video elements
  • Ensure effects are maintained
  • Cache videos
  • Limit video min size
  • Improve Scraping
  • Add option for audio

Include version number in data.json

.config/flipflip/data.json

  1. Would there be any benefit in us putting a version number into the data.json file?
    This might enable future upgrade maintenance should we wish to change the structure and contents of the serialized state data - between releases?

Caching Folder Names
2) Caching appears to be working well. I wonder if there would be benefit in choosing folder names and structure which replicate the whole domain name and sub domain names? So for http://we-lovecats.tumblr.com/ - the folder structure in the cache could be:

com
tumblr
we-lovecats

If a user already has a collection of downloads then they can populate them in the correct cache folder - rather than having to start their library from scratch....

More over - the library feature - great as it is, could then be quickly synced with the cache structure. So say I transfer to you my whole cache - you don't have to sit there and re-enter all the URLS to configure the library - we can code the library to know how to reconstruct /sync itself with the under-lying structure.

Also - I wonder if this would lend itself to a heuristic approach to scraping content - I enter into the library a URL of say "https://goodcats.greatpictures.example.com - the library knows to create a cache folder structure of
com
example
greatpictures
goodcats

or if the Library recognises that it does not have the URL but it already has the structure in the cache - it rebuilds the URL for the Library record...

now the heuristic part - presumably there will be a number of importers/scrapers - e.g. tumblr and now work on reddit - but even if there is not a specific importer/scraper for goodcars.greatpictures.example.com - we can try the importers one after the other - until going to the raw-est of all import mechanisms of hitting the page and wgetting or equivalent each image referenced ....

Black Background

Hi,
Thank you for this amazing stuff. Could you add an option to put the background in black or other colors?

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.