Register Guidelines E-Books Today's Posts Search

Go Back   MobileRead Forums > E-Book Software > Calibre > Plugins

Notices

Reply
 
Thread Tools Search this Thread
Old 04-09-2026, 04:24 AM   #1
plain-cover
Plugin Developer
plain-cover began at the beginning.
 
Posts: 19
Karma: 10
Join Date: Feb 2026
Device: Samsung Galaxy Tablet
[GUI Plugin] Romance.io Fields

Romance.io is a community site for romance novels with detailed reader tags (tropes, themes, settings, etc.), steam ratings, and user star ratings. This plugin adds a toolbar button that fetches data from Romance.io and writes it into custom columns in your library:
  • Steam rating (1-5) - sort or filter your library by steam level
  • Star rating and vote count - community ratings from Romance.io
  • Tags - tropes, themes, settings, and more (e.g. time travel, enemies to lovers, small town, nerdy hero); shows up in Calibre's tag browser where you can sort and filter by tag
  • Link to Romance.io - Finds the Romance.io book ID and shows a link to the book's Romance.io page in the book details panel

Once the fields are stored in custom columns, you can do things like search for books with a steam rating >2, or click a tag in the tag browser to see all books with that trope.

Select one or more books and click the toolbar button to download fields from Romance.io. The plugin works on its own, but pairs well with the Romance.io metadata source plugin - if that plugin has already linked a book to Romance.io, this plugin can skip the search step and immediately start to download the fields.

For more detailed instructions, see the plugin's GitHub.

Installation:
In Calibre: Preferences > Plugins > Get new plugins, search for "Romance.io Fields", and click Install. Or download the zip from GitHub and install via Preferences > Plugins > Load plugin from file.

Setup:
Step 1 - Create custom columns (Preferences > Add your own columns):

Code:
Field               Lookup Name    Column Type
------------------------------------------------------------------------
Romance.io ID       #romanceio     Column built from other columns
                                   Template: {identifiers:select(romanceio)}
                                   Sort by: Text
Steam Rating        #romiosteam    Integers  (values 1-5)
Star Rating         #romiostars    Floating point numbers (2 decimals)
Vote Count          #romiovotes    Integers
Tags                #romiotags     Comma-separated text, like tags
You don't need all of them - only create the ones you want to use. Lookup names can be anything; you'll map them in plugin settings.

Step 2 - Map columns in plugin settings
Preferences > Plugins > Romance.io Fields > Customize plugin - map each field to the lookup name of the column you created.

Usage:
Select one or more books and click the Romance.io button in the toolbar. The plugin searches Romance.io by title and author, then downloads fields for each matched book. If a book already has a Romance.io ID stored, it skips the search and goes straight to downloading, which is faster.

Configuration options:
  • Refresh existing fields (default: on) - re-download all fields even if already set
  • Prompt to save (default: off) - confirm before writing to library
  • Get tags from website HTML (default: off) - fetch tags from the Romance.io website directly instead of the JSON API, for exact tag matching; slower, requires a browser window
  • Maximum tags (default: 50) - cap on tags to download per book

Wrong book matched? If your title or author in Calibre differs from Romance.io (different edition name, spelling, etc.), you can still link the book manually: open the book's detail page on Romance.io (URL contains /books/, not the series page), copy the ID from the URL (e.g. 5484ecd47a5936fb0405756c), then in Calibre open Edit metadata > Ids and add romanceio:5484ecd47a5936fb0405756c.

Notes:
  • A browser window may open during downloads - just ignore it, it will close automatically. The plugin tries the JSON API first (fast, no browser); the browser is only used as a fallback.
  • Only English is supported for now.

Source code, documentation, & issue reporting: GitHub

If you find this plugin useful, a small donation is appreciated!
Donate via PayPal
Attached Files
File Type: zip Romance.io Fields.zip (39.68 MB, 13 views)

Last edited by plain-cover; Today at 02:57 AM. Reason: v1.2.0
plain-cover is offline   Reply With Quote
Old 04-09-2026, 04:49 AM   #2
plain-cover
Plugin Developer
plain-cover began at the beginning.
 
Posts: 19
Karma: 10
Join Date: Feb 2026
Device: Samsung Galaxy Tablet
Development Builds

If you want to test the latest unreleased changes before they make it into an official release, development builds are available on GitHub.

Development builds may contain bugs. If you encounter an issue with a development build, please report it on GitHub Issues with:
  • The version number of the development build you are using (shown in Preferences > Plugins)
  • Steps to reproduce the issue
  • Any error messages or logs (right-click the Preferences gear icon and choose Restart in debug mode for verbose output; or click the job count in the bottom-right of Calibre, select the failed job, and click Show job details)

To install a development build: download the zip from GitHub and install via Preferences > Plugins > Load plugin from file.
plain-cover is offline   Reply With Quote
Advert
Old 04-25-2026, 04:29 PM   #3
scarlettruin
Connoisseur
scarlettruin began at the beginning.
 
Posts: 76
Karma: 10
Join Date: May 2014
Location: UK
Device: Samsung 10 Inch Tablet 2016 & Samsung S10+
What do i do with this error please?

Download Romance.io Fields
calibre_plugins.goodreads_rating.__init__:67: SyntaxWarning: "\d" is an invalid escape sequence. Such sequences will not work in the future. Did you mean "\\d"? A raw string is also an option.
Failed to initialize plugin: 'C:\\Users\\xxwil\\AppData\\Roaming\\calibre\\plug ins\\Read MP3 AudioBook metadata.zip'
Integration status: True
System info: OS=Windows 11 (10.0.26200), Python=3.14.2, Calibre=9.4.0
prefer_html=True: fetching HTML directly for 6673fff11ecec34b38be815e
Vendored import path: 'C:\\Users\\xxwil\\AppData\\Roaming\\calibre\\plug ins\\Romance.io Fields.zip'
seleniumbase: loaded via direct zipimport
chromedriver found at 'C:\\Users\\xxwil\\.calibre_selenium\\drivers\\chr omedriver.exe'
Chrome version: 147.0.7727.102, chromedriver version: 147.0.7727.57
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
CloudFlare challenge detected (matched: ['Just a moment']), waiting...
Timeout waiting for Cloudflare
Failed to fetch page (Chrome timed out or crashed - check terminal for details)
Unexpected error fetching 6673fff11ecec34b38be815e: RuntimeError: Failed to fetch HTML page for 6673fff11ecec34b38be815e (Chrome did not return page content)
Traceback (most recent call last):
File "calibre_plugins.romanceio_fields.jobs", line 304, in get_romanceio_fields_for_book
File "calibre_plugins.romanceio_fields.jobs", line 385, in _fetch_html
RuntimeError: Failed to fetch HTML page for 6673fff11ecec34b38be815e (Chrome did not return page content)
scarlettruin is offline   Reply With Quote
Old 04-25-2026, 09:08 PM   #4
plain-cover
Plugin Developer
plain-cover began at the beginning.
 
Posts: 19
Karma: 10
Join Date: Feb 2026
Device: Samsung Galaxy Tablet
Quote:
Originally Posted by scarlettruin View Post
What do i do with this error please?
Yikes, this is a more strict block than the one you shared in the other thread. Cloudflare seems to also be blocking your Chrome now, not just the JSON API. The plugin loads the page in Chrome, but Cloudflare's bot challenge never resolves for your IP address. This isn't something the plugin can work around unfortunately. It seems like your IP address has been flagged by Cloudflare, which happens with VPNs and high-traffic IPs.

You could try:
  • Disabling your VPN if you're using one
  • Using a different network (mobile hotspot, different Wi-Fi) to confirm it's IP-specific - if it works on another network, your ISP's IP range may be flagged - unfortunately there's not much you can do except contact your ISP or use a different connection
Hopefully one of those approaches will work for you!
plain-cover is offline   Reply With Quote
Reply


Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
[GUI Plugin] Streamer - RSVP Speed Reader plugin for Calibre npapadacis Plugins 6 04-24-2026 03:00 AM
[GUI Plugin] Noosfere_util, a companion plugin to noosfere DB lrpirlet Plugins 2 08-18-2022 03:15 PM
[GUI Plugin] Save Virtual Libraries To Column (GUI) chaley Plugins 14 04-04-2021 05:25 AM
invert search for custom fields (GUI) rogue_librarian Library Management 4 07-25-2011 11:36 AM


All times are GMT -4. The time now is 08:33 AM.


MobileRead.com is a privately owned, operated and funded community.