First
of all: my apologies for this very spartan page, but it was thrown in
in a real haste just to give some info about this project.
I will try to make something better as soon as I have some time
(c;]
Fumetti is a digital-comics
manager/display.
It allows to index a (possibly huge) collection and access it easily,
including storylines spanning various titles.
You can read the comics directly from Fumetti with good quality
rendering.
It can also rename Your files into a custom-defined directory structure
and standardize the file format including Editor/Series/Issue data.
It is currently in Alpha stage
and I'm open to suggestions.
Also help is welcome.
Current platform is MSWindows-Delphi-Interbase, but Lazarus-MySQL is
considered for the future.
IMPORTANT NOTE: I released the
current (ALPHA!!!) version to CVS, but I'm not even sure it will be
compilable on someone else's machine. As You may know Windows-world is
far less standardized than other Universes. I have a lot of highly
optional stuff installed on my machine and, while I tried to stick to
basics, I might have done
some stupid mistake. Please help me (c;]
ANY
comment is welcome!
This project
aims to ease the life of all digital comics collectors scanning their
issues and/or trading them with other collectors.
I'm mainly interested in very old (and almost impossible to find in
paper format) comics. I once had them all, but moving several times,
university, marriage, kids ... made them disappear.
I scanned what I managed to salvage in order to preserve the rotting
paper, then began to trade in electronic form. [[I'm not quite sure of
how this stands in copyright infringement and I would like an opinion;
I have almost nothing less than 10 years old and most of my things are WAY older!]]
The program I began to write, however, knows nothing about copyrights,
but I'm trying to teach it about comics (c;]
The starting point is:
- There is a fairly accepted standard for comic books (.cbr/.cbz).
- This standard does not include structured information about the
issue.
- There is little or no standardization for filenames.
- <>There is little or no way to follow storylines
(especially when spanning different titles).
What I aim to do is:
- Construct a comics database structured around Filename <=>
/Editor/Series/Volume/No paradigm.
- Construct a database for Storylines
- Given a filename guess as much information as possible from it
(using also path information).
- Show the first page in order to provide visual feedback.
- Allow editing of all information and update database with them.
- Export Database in XML format.
- Import database optionally stripping filename information (allows
creation of "empty" databases with all static info about comics series
and issues)
- Rename archive files to import in well-defined directory
hierarchy (defined with templates).
- Decode archives and (optionally) re-encode them with standard
settings (e.g.: convert everything to .cbz format).
- Display issues page-by-page with good resampling to fit into
screen.
- Build filters to download from Internet pages information about
editors/series/issues to avoid retyping the whole database.
Environment:
I'm currently working under MSWindows and I'm using Delphi7 for
development.
I'm using only to basic components because I would like to try porting
to Lazarus; exceptions are the archive decoding (zip & rar) and XML
reading. All of those are available for Lazarus.
Database I'm using is Interbase6, but I'm using only straight SQL, so
porting to other databases should be possible.
I tested with Firebird-Embedded and it seems to work OK. You can
download it from Souceforge (click
here); just copy the files alongside with the executable and rename
fbembed.dll => gds32.dll. This removes the need for Interbase
installed on tatget machine.
Other non-standard component I use is XMLPartner. This is also an
Open-Source package hosted on Sourceforge. Get it here.
Status:
- Basic database is in place. Current database structure is:
create table EDITORS
ID INT NOT NULL primary key,
Name VARCHAR(128) NOT NULL UNIQUE
);
create table CHARACTERS (
ID INT NOT NULL primary key,
EDITOR_ID INT references EDITORS (ID),
Name VARCHAR(128) NOT NULL UNIQUE
);
create table SERIES (
ID INT NOT NULL primary key,
EDITOR_ID INT NOT NULL references EDITORS (ID),
Name VARCHAR(128) NOT NULL,
Volume INT DEFAULT 1 NOT NULL,
CHARACTER_ID INT references CHARACTERS (ID),
First INT default 0,
Last INT default 999,
constraint C_SR unique (EDITOR_ID, Name, Volume)
);
create table ISSUES (
ID INT NOT NULL primary key,
SERIE_ID INT NOT NULL references SERIES (ID),
Num INT NOT NULL,
iDate DATE,
Title VARCHAR(128),
Filename VARCHAR(128),
CHARACTER_ID INT references CHARACTERS (ID),
constraint C_IS unique (SERIE_ID, Num)
);
create table STORYLINES (
ID INT NOT NULL primary key,
Title VARCHAR(128) NOT NULL unique,
CHARACTER_ID INT references CHARACTERS (ID),
StartDate DATE,
Total INT
);
create table STORYISSUES (
ID INT NOT NULL primary key,
ISSUE_ID INT NOT NULL references ISSUES (ID),
Num INT NOT NULL,
STORYLINE_ID INT NOT NULL references STORYLINES (ID),
constraint C_SE unique (STORYLINE_ID, Num)
);
- XML read-write is in place (it also allows to convert if database
structure changes a little). Current DTD is:
<!DOCTYPE Fumetti [
<!ELEMENT Fumetti (Editor*, Character*, Serie*, Storyline*)>
<!ELEMENT Editor (Character*, Serie*)>
<!ATTLIST Editor name CDATA #REQUIRED>
<!ELEMENT Character (Serie*)>
<!ATTLIST Character name CDATA #REQUIRED>
<!ELEMENT Serie (Issue*)>
<!ATTLIST Serie
name CDATA #REQUIRED
volume CDATA #REQUIRED
editor CDATA #REQUIRED
character CDATA #IMPLIED
first CDATA #IMPLIED
last CDATA #REQUIRED
>
<!ELEMENT Issue (EMPTY)>
<!ATTLIST Issue
serie CDATA #REQUIRED
volume CDATA #REQUIRED
editor CDATA #REQUIRED
num CDATA #REQUIRED
title CDATA #IMPLIED
character CDATA #IMPLIED
date CDATA #IMPLIED
>
<!ELEMENT Storyline (StoryIssue*)>
<!ATTLIST Storyline
title CDATA #REQUIRED
character CDATA #IMPLIED
date CDATA #IMPLIED
total CDATA #IMPLIED
>
<!ELEMENT StoryIssue (EMPTY)>
<!ATTLIST StoryIssue
storyline CDATA #REQUIRED
serie CDATA #REQUIRED
volume CDATA #REQUIRED
num CDATA #REQUIRED
ordinal CDATA #REQUIRED
>
]>
- Basic issue data editing is available.
- Basic data guessing from path/filename is available.
- Single file rename with templating is available.
- Archive decoding (zip/rar) and JPEG image loading is available.
- Page display with good resampling and basic navigation is
available.
- I currently have no installer, so whoever wants to try this
should be prepared to deal with Delphi, Interbase and a few DLL's
(unzip.dll & unrar.dll).
To Do:
- Gather feedback about other people actual needs (e.g.: I
currently have no provision for writer/designer/penciler/... is it
important?).
- Review user interface to make it fit for large databases.
- Build filters to import large databases.
- Add JPEG-containing-directory as archive type.
- Implement a better UI for page navigation.
- Batch rename.
- Archive encoding in standard format.
- Include database information in standard format.
- Use information in standard format (if available) for issue data
guessing.
- Debugging.
- Write documentation.
- Debugging.
- Make installer.
- Debugging.
If You got here You deserve a special THANK YOU! (c;]