Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added the concept of meaningful spread #103

Open
wants to merge 2 commits into
base: master
Choose a base branch
from

Conversation

HadrienGardeur
Copy link
Collaborator

@HadrienGardeur HadrienGardeur commented Jun 26, 2024

In fixed layout publications, the spread can sometime be meaningful rather than decorative.

This new property is meant to convey this information and could be parsed from EPUB files where the spread is forced to both on specific items in the readingOrder.

This shouldn't force a spread to the user, but it could be useful for additional affordances and/or user settings.

I'm labeling this one as a draft PR for now since I'd like to open a discussion about the usefulness of this property and whether it belongs in the Divina profile or in core properties (since page has been moved there).

Dropped appendix for examples now that we have better examples in the spec
@HadrienGardeur HadrienGardeur self-assigned this Jun 26, 2024
@HadrienGardeur HadrienGardeur requested review from a team, mickael-menu and llemeurfr and removed request for a team June 26, 2024 09:08
@HadrienGardeur
Copy link
Collaborator Author

@chocolatkey I'm sure you have some thoughts to share on this too

@mickael-menu
Copy link
Member

How do you envision reading systems using this property in their settings or UI?

@HadrienGardeur
Copy link
Collaborator Author

HadrienGardeur commented Jun 29, 2024

How do you envision reading systems using this property in their settings or UI?

This would be an additional user setting that could trigger various behaviors.

One of the most common way of reading manga these days is to scroll through the pages with a fit on the width of the page. If this setting is enabled, a reading system could decide to display the entire spread side by side, displaying an indicator that the user can scroll horizontally as well in those cases.

I'm sure that there are various examples of how this is already implemented in various dedicated apps. @chocolatkey or @fillito might be able to give additional examples.

@HadrienGardeur
Copy link
Collaborator Author

Updated based on feedback from @mickael-menu that we should use camelCase for these properties.

To further illustrate what this is all about, here are two examples:

Non-meaningful spread

Bella the dragon

Meaningful spread

Meaningful spread in a travel guide

@HadrienGardeur HadrienGardeur marked this pull request as ready for review July 22, 2024 12:01
@HadrienGardeur
Copy link
Collaborator Author

Since it's been a month, I'm no longer labelling this one as a draft PR. We're skipping the next call but in the meantime, I'd love to get a thumbs up or down from stakeholders such as @mickael-menu @llemeurfr @qnga and @chocolatkey.

Since we haven't discussed this one as much, I'm putting it on a longer timer for merging (end of August) if we don't identify major disagreements in the process.

@llemeurfr
Copy link
Contributor

I agree with the idea but there is a big typo in the writing: the definitions of breakScrollBefore and meaningfulSpread have been exchanged.

Also, the processing model could be more precise: what happens if there is a missing meaningfulSpread? I mena if (in the sample given) the right page has the property but not the left page? or the reverse? Are the properties valid only if they come as a pair?

@chocolatkey
Copy link
Member

chocolatkey commented Jul 22, 2024

I think this is probably a better definition of the difference between spreads than what is available in EPUBs, because it's really about what the user will think should actually be seen as a spread. A lot of the time, EPUB metadata regarding spreads is either lacking, incorrect (from a user's perspective of what's most enjoyable to read), or determined using custom properties (such as, in Japan, the access-company metadata).

The reason why, at least for comics, it's important to know if a spread is meaningful or not, is because of how you then choose to display it on portrait screens (phones, which make up the majority of reading today). When a spread is not meaningful, it can be split into two pages, either vertically or horizontally. When it is meaningful, the reading app should be attempting to find a way to preserve the side-by-side nature of the pages. I think that if this is provided as a setting to the user, it should be something that is by default on, because most of the time it is irritating not to have a meaningful spread's content joined in the reader. I've attached an example of what a comic reader may do when a meaningful spread is displayed vertically.

Screen.Recording.20240722.114928.mp4

I do wish there was a way to add this property in a manner that made the logic for the reader more obvious, and make it impossible to create strange/invalid situations with (like only adding meaningfulSpread on a single page that's not a spread, which would be strange/undefined behavior, or three resources with it in a row which doesn't provide a clear beginning and ending to the spread, since you can have a single-page spread too). But I guess it will be:

- If meaningfulSpread == true, begin spread
- If the next resource also has meaningfulSpread == true, add the resource to the spread
- Goto beginning

This may sound a bit repetitive of other metadata that has been invented, but it makes me wonder if it would be better to have meaningfulSpread be left/right/center. But I understand keeping it simple. Maybe your intent, based on the examples, is that this property is always accompanying the page hint?

@HadrienGardeur
Copy link
Collaborator Author

I agree with the idea but there is a big typo in the writing: the definitions of breakScrollBefore and meaningfulSpread have been exchanged.

@llemeurfr I can't reproduce this issue, this is what I'm seeing in the current PR:

<dl>
<dt>breakScrollBefore</dt>
<dd>Specifies that an item in the reading order should break the current continuous scroll and start a new one.</dd>
</dl>

<dl>
<dt>meaningfulSpread</dt>
<dd>Hint that the current resource should be presented in a spread to fully convey the meaning of its content.</dd>
</dl>

Also, the processing model could be more precise: what happens if there is a missing meaningfulSpread? I mena if (in the sample given) the right page has the property but not the left page? or the reverse? Are the properties valid only if they come as a pair?

We don't have any processing models in our spec, because in a way, the toolkits are the processing model right now. This would of course need to change if we turn this into something bigger.

The processing model proposed by @chocolatkey should work, but ideally it's always best to explicitly indicate where each image should be positioned in the spread since you could have interspersed center spread items as well.
Without this hint, reading systems need to fallback to the reading progression and alternate accordingly.

This may sound a bit repetitive of other metadata that has been invented, but it makes me wonder if it would be better to have meaningfulSpread be left/right/center. But I understand keeping it simple. Maybe your intent, based on the examples, is that this property is always accompanying the page hint?

Correct, I'd rather keep the position in the spread and whether a spread is meaningful as two separate properties. There are good reasons to document page even if your publication doesn't contain meaningful spreads.

@qnga
Copy link
Contributor

qnga commented Jul 23, 2024

As Laurent noted, the processing model is not enforced by the specification. I think we could do that though: what about startSpread on the first resource of the spread? (there would be no room for confusion with the deprecated spread property, so meaningful is not necessary).

It would be more consistent with breakScrollBefore, in the sense that we're not talking about putting abreakScroll property into the two adjacent resource links.

If having spreads of more than two resources is ever something useful, I guess endSpread would make sense.

@HadrienGardeur
Copy link
Collaborator Author

I think we could do that though: what about startSpread on the first resource of the spread?

I don't think this reflects what the property is meant for.

EPUB gives content creator the false illusion that they have control over the presence of a spread, which we avoid doing.
The important piece of information here is the meaningfulness of displaying things in a spread.

Reading apps and users are always free to display pages in a spread if they want to, even when page and meaningfulSpread are missing. They're also free to dismiss these hints and just display one page at a time if they prefer doing so.

That's why I would shy away from any property that gives the illusion over having any control on spreads.

@qnga
Copy link
Contributor

qnga commented Jul 24, 2024

I understand information in publication formats mostly as a description of the publication rather than a rendering algorithm. With this in mind, there are no such things as meaningless spreads. Resource X does start a spread, no matter how a specific app with specific user settings chooses to render it. (Maybe I should have named the property startsSpread)

It's true that some EPUB properties are not purely descriptive. Maybe some RWPM properties too. I realize that the original presentation hints were really imperative (despite being called hints). It could be useful to decide which properties are requirements and which ones are preferred values, and settle on a general naming policy.

For instance, assuming that users are allowed to change the fit property, you could argue in the same manner that it gives authors the illusion of control. It might be better named preferredFit.

@qnga
Copy link
Contributor

qnga commented Jul 24, 2024

By the way, my original point was more about a solution to the possible issue of having only one resource with meaningfulSpread. If we put a property only on the first resource of the spread (no matter how it is named), we remove an opportunity for meaningless authoring. Generally, I think it's a good practice to avoid as much as possible offering opportunities for invalid combinations.

@qnga
Copy link
Contributor

qnga commented Sep 3, 2024

I've come to like Henry's proposal, though I would rename the center value.

There are good reasons to document page even if your publication doesn't contain meaningful spreads.

Could you elaborate?

@qnga
Copy link
Contributor

qnga commented Sep 3, 2024

Actually Henry called the property meaningfulSpread. I thought of something like page: left, right, alone (center) which would mean "if spreads are used, this page should be displayed on the left/on the right/alone. As this is clearly the simplest model you could devise, I'd like to understand what meaningfulSpread would enable us to do that we can't do with that.

@mickael-menu
Copy link
Member

I guess without meaningfulSpread you can't know if two resources must always be displayed together, even if spreads are disabled in the reader. As page can be present as a hint only with EPUB.

With CBZ, authors "solved" this problem by having meaningful spreads as a single, wider bitmap file. If a spread must always be displayed for two resources, perhaps it should technically be a single resource. What is the benefit of splitting the spread into two resources?

@qnga
Copy link
Contributor

qnga commented Sep 4, 2024

We could interpret EPUB according to the specification

Although EPUB creators often indicate to use a spread in certain device orientations, the content itself does not represent true spreads (i.e., two consecutive pages that reading systems must render side-by-side for readability, such as a two-page map). To indicate that two consecutive pages represent a true spread, EPUB creators SHOULD use the rendition:page-spread-left and rendition:page-spread-right properties on the spine items for the two adjacent EPUB content documents, and omit the properties on spine items where one-up or two-up presentation is equally acceptable.

In my understanding, indicating page: left/right on a meaningless spread is just useless. Inference from the readingOrder and readingProgression will be just fine. All what we need to document is exceptions. So in RWPM we could use page only on meaningful spreads and lonely pages (on the left, on the right, or normally fitted).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants