I have quite a few custom columns. My most used ones are:
Genre: broad genre (scifi, mystery, fantasy, thriller etc) - I have about 20 of these and leave the Tags column to the metadata downloader and other more specific tags
Word count: from Count Pages plugin
Read status: 4 options - read, partially read, abandoned and unread
Goodreads reviews: number of reviews on Goodreads, useful for getting an idea of how famous a book is. I used the method described here:
https://usman.io/goodreads-decimal-ratings-in-calibre/, i.e. edit the Goodreads metadata plugin to import goodreads reviews into the publisher column (I never care about the publisher anyway...)
Popularity: column based on number of GR reviews as follows:
Code:
program:
# returns the "fame" of a book based on number of goodreads reviews
if raw_field('#gr_review') ># 500000 then
'V. Famous'
elif raw_field('#gr_review') ># 100000 then
'Famous'
elif raw_field('#gr_review') ># 50000 then
'Well Known'
elif raw_field('#gr_review') ># 10000 then
'Known'
elif raw_field('#gr_review') ># 1000 then
'Rel. Unknown'
else
'Unknown'
fi
Reading time: a rough guess at how long the book will take to read, based on min/max reading speed. I think I found the program template on mobilereads somewhere:
Code:
program:
# This program calculate a reading time per hour for an ebook
# Adjustments:
# w_min -> minimum words per minute
# w_max -> maximum words per minute
w_min = 250;
w_max = 400;
# readingtime per hour = 60
p_time = 60;
# Needs a custom column for word count (#words)
# change it to your field name
words = raw_field ('#words');
time1 = format_number (divide (words, multiply (w_max, p_time)), '{0: .1f}');
time2 = format_number (divide (words, multiply (w_min, p_time)), '{0: .1f}');
rt1_hour = re (time1, '\. \ d *', '');
rt2_hour = re (time2, '\. \ d *', '');
readingtime = strcat (rt1_hour, 'h -', rt2_hour, 'h');
Some other handy yes/no columns: #on_kindle, #need_to_edit, #replace_on_kindle