rafasgj / fpi-project-old Goto Github PK
View Code? Open in Web Editor NEWf/π is a digital asset organizer tool focused on photographers.
License: GNU General Public License v2.0
f/π is a digital asset organizer tool focused on photographers.
License: GNU General Public License v2.0
Currently, there are several dependencies like "behave", "sqlalchemy" and "sqlalchemy-utils". Also, "flake8" (and "flake8-docstrings") are being used, but not enforced. In the near future, "migrate" will be used.
There must be an efficient way to handle this dependencies, preferably a cross-platform one.
Create a user interface based on the command line to use the software for ingestion. The following commands should be available:
Also, these options should be available:
Lesson learned: don't try to subvert Git...
Fix this ASAP.
As a User,
I want to ingest files in the catalog by copying them,
So that the files are not stored in memory cards, and I have multiple copies of them.
As a user, I want to execute several steps allowed by f/π using a JSON file, so that I can execute several commands with a single call.
Let every command has its own "--help" sub-option.
Define which data is required upon the most basic file injection for α-1. This will affect #2 and the Catalog project.
As a User,
I want to obtain information about an asset or file,
So that I know all the metadata stored about it on the catalog.
As a User,
I want to ingest files into the system at their current location,
So that the assets are managed through the system.
Add a test scenario where a catalog, in a previous version, has some assets and is upgraded to the current version. This will require a non-empty α-2 catalog.
As a User,
I want to obtain information about a session,
So that I know when it was created, and which assets it contains.
Currently, only filename, path, width, height and capture time are shown when listing assets. All available information should be displayed.
Exceptions that hit the main program are actually program bugs, and should be hidden from the user, but should be logged and used as "report" for bug fixes.
As of now, only an error log should be created, in the future a proper report system might exist.
An IPTC metadata profile is a colection of IPTC key:value pairs that is applied to an image.
A JSON file with the data is stored with the software and is applied through a profile name, not a profile file.
The software must allow for the creation, modification, storage and application of the profiles.
A separate scprit (iptc_profile) should be provided with this functionality.
Create an Asset data class with the fields:
(This is a result of Issue #3.)
Provide a package to be installed under macOS.
As a User,
I want the system to automatically rename files based on a renaming rule,
So that the files are stored with controlled names and do not overwrite.
As a User,
I want the list the assets stored in a catalog.
So that I can decide if I need to add another asset.
As a User,
I want to export an image with the metadata stored in the system applied to it,
So that I can share the image with this information.
The formats supported must be: the original file format, JPEG, PNG and TIFF (8 and 16 bits when available).
Create an interface based on the command line, to create a new catalog, accepting the command:
The Image data class must contain the fields:
It also has a relationship with Asset, where an Image is an Asset.
(This is a result of the work on Issue #3.)
As a user, I want to add ratings to assets in the catalog, so that I can better classify the assets.
There's no information about image dimension when there's no tag with this information. Extract this from the file, if the file type is supported.
As a user,
I want to set flags for 'pick' or 'reject' to assets in the catalog,
so that I can better classify the assets.
Create a command line interface to list files in the catalog:
Change CLI implementation so that it can be tested as behaviors, so that it can be used as an API entry-point for other UI instances. This will force separation of UI and "controller".
Case insensitive comparision with "ILIKE" is not working.
... but it should fail gracefully.
As a User,
I want the system to automatically create directories based on asset metadata and a creation rule,
So that the files are stored in a controlled structure.
Create a setup.py script to install, build and test the software.
Given the command to ingest assets
And the ingestion method add
And an empty catalog named "test_catalog"
And an image without an embedded thumbnail "data/samples/DCIM/100FPIAM/FPI_0006.JPG"
When ingesting assets into the catalog
Then no exception is raised
And the assets id is a MD5 hash
| filename | hash |
| FPI_0006.JPG | d41d8cd98f00b204e9800998ecf8427e |
The thumbnail generated to be used for id generation, should have 216 pixels on the largest side, for this to work.
Given a catalog for the previous version of the software,
When opening the catalog,
Then upgrade to the current version.
As a User,
I want to create a new f/π catalog,
So that it will be used by the system to store its data.
Upon creating a new catalog, there must be tables for Asset and Image.
Asset must have the fields:
Image must have the fields:
And there's a relationship where an Image 'is' an Asset.
Add support for setting IPTC fields, both from the command line, or from a JSON file.
Due to licensing, do not use pyexitlftool. Use a simple implementation that control exiftool through a pipe using Python’s process module.
As a User,
I want to ingest files in the catalog by copying them,
So that the files are not stored in memory cards, and I have multiple copies of them.
Create a command line interface to obtain finformation about itens in the catalog:
Add an "operational history" to the catatlog, so that operations can be audited, inspected, and undone if possible.
Allow addition of keywords to assets.
This feature also includes the management of hierarchical keywords and their application, in batch, to an asset.
As a user,
I want to add a set of pre-defined IPTC metadata values while ingesting,
So that IPCT management is easier and faster to use.
As a user I want to manage labels from the command line.
Allow the use of IPTC Core field Description to provide a caption to the image.
When creating a catalog with name NAME, the structure NAME/NAME.fpicat should be created, so that when opening a catalog with only the catalog name, f/π will try to open either NAME.fpicat or NAME/NAME.fpicat.
Although the use GTK+ is planned for f/π, and this makes using GExiv2 pretty direct, it seems that GExiv2 has no support for RAW files such as Canon's CR2 and Olympus ORF.
Sven Marnach's python binding to Phil Harvey's Exiftool seems to be a decent and working replacement.
(https://smarnach.github.io/pyexiftool)
Replace all GExiv2 usage to exiftool.
As a User,
I want to list all sessions in a catalog,
So that I can remember the sessions already stored to obtain more information on them.
Create a command line interface for the command "Sessions" that accpets:
As a User,
I want to manage labels in the catalog, and assign them to assets,
So that it is easier to classify and search for assets.
As a User,
I want to list assets in the catalog, based on stored attributes:
- Rating (Numerical)
- Label (String)
- Flag (String)
- Filename (String)
- Session name (String)
- Ingestion date (Date)
- Creation date (Date)
And I want to use some relational operators, based on the attribute type:
- Numerical: =, <, <=, >, >=
- String: =, <>
- Date: =, <, before, <=, >, after, >=
So that I can search more easily for assets in the catalog.
Enforce required values to be stored in the catalog.
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.