Open apollo-dw opened 3 years ago
for the RC thread, the perceived issue was that direction/organisation would be required to use the tags meaningfully, not that it needed standardization from the beginning. I think the same issue applies to this
also
seems cool but like the RC thing I don't think it's practical to implement (yet!)
i think having something like this could greatly benefit searchability for players and mappers alike. to solve the moderation/consistency issue, we can have players submit tags for "approval" (a 5-second task that can be done by NAT/GMT), and have those approved tags to be usable on any map by players.
if a map has misleading user tags, that can be handled through the usual beatmap report where any moderator can fix it accordingly.
this could potentially be viewed as an alternative direction for https://github.com/ppy/osu-web/issues/5852
https://omdb.nyahh.net/descriptors/ list of tags used by a community beatmap database
peppy mentioned making the list predefined instead of user-defined in today's catch-up meeting. in that case the nat or bn would likely be the ones to manage the tag list and fix wrong tags whenever needed
peppy mentioned making the list predefined instead of user-defined in today's catch-up meeting. in that case the nat or bn would likely be the ones to manage the tag list and fix wrong tags whenever needed
just to give more detail here, the "user-defined" tags are added by virtue of proposals that are critiqued and voted on by users -- they only pass if they have a majority
i would love to elect myself to look after the tags/descriptor list on osu-web if this goes through, as someone whos bn and already oversees omdb... and has cared about this feature since 2021 according to the issue open date 😅
the general consensus from the NAT meeting about how this should work was:
osu-web
PRsosu-web
by the way we didn't discuss if we should have dedicated selections of tags per mode (to allow more freedom for other modes + keep things organized to prevent the wrong tags from being used in the wrong modes), but it's worth considering as i think the majority would be in support for it.
All sound roughly in line with what I saw being required for MVP 👍
Here's an initial proposal for how we can get things moving.
TABLE beatmap_tags (beatmap_id, tag_id, user_id)
PRIMARY KEY (beatmap_id, tag_id, user_id) -- mostly just to make it unique
TABLE tags (tag_id, name, NULLABLE BOOL approved)
PRIMARY KEY (tag_id)
UNIQUE INDEX (name)
to get displayable tags for a beatmap:
SELECT DISTINCT(name) FROM tags JOIN beatmap_tags USING (tag_id) WHERE beatmap_id = @beatmap_id AND approved = 1
would want to double-check this will perform okay. I think it should as it can use the beatmap_id,tag_id
portion of the primary key, but it may still get slow when counting votes for each tag. In which case we'd want a totals table.
to give users a list of popular tags they can upvote:
SELECT name, COUNT(*) FROM tags JOIN beatmap_tags USING (tag_id) WHERE beatmap_id = @beatmap_id AND approved = 1 GROUP BY (beatmap_id, tag_id) ORDER BY COUNT(*) LIMIT 10
My suggestions here would be:
Totally agreeing with applying tags to beatmaps, and a setting to apply to all difficulties seems nice.
Let's allow providing descriptions for tags. Some might not be immediately obvious, and they would be helpful for people who are confused or new players.
I don't think this should be up to the user. It should be up to moderation / management.
I'm not convinced that a single approval is appropriate here. Certain tags can be very subjective (for example, for tags related to aesthetics or gameplay), so I think we should be accounting for that with a majority-vote system. This also means there isn't a single person on the hook if they approve a tag which most people actually disagree with.
The approval is for completely disallowing tags, at a system level, not beatmap level. There is not approval for beatmap level tags – it would be based on user vote count. If abuse is seen we can wipe votes or add some kind of hide flag.
Okay understood - so the full list of tags will be created by the userbase, and abuse tags will be disallowed on a case-by-case basis. I agree that descriptions shouldn't be up to the user, but I also suggested that under the impression that we will be providing the list of tags from the get-go and that there would be no support for custom tags. That doesn't sit well with me personally, but I'm not the boss and this is better than nothing
Just to be clear, you prefer the proposal I made just now where users can create new tags right?
Unfortunately no, I think being rigid with the list of tags is preferable here. There are multiple reasons I can think of for why:
These are the main reasons, there are some more minor ones as well. I suspect that for a custom tags system to be actually useful and usable for players, we'll need to be disapproving tags all the way down to what is basically a rigid list. Lets save ourselves the ballache here.
Okay, in that case we can nuke the approved flag and just use a flat list to start with.
We'll probably also want an endpoint to retrieve all flags for local filtering as a user types.
Updated proposal:
TABLE beatmap_tags (beatmap_id, tag_id, user_id)
PRIMARY KEY (beatmap_id, tag_id, user_id) -- mostly just to make it unique
TABLE tags (tag_id, name, description)
PRIMARY KEY (tag_id)
UNIQUE INDEX (name)
to get displayable tags for a beatmap:
SELECT DISTINCT(name) FROM tags JOIN beatmap_tags USING (tag_id) WHERE beatmap_id = @beatmap_id
would want to double-check this will perform okay. I think it should as it can use the beatmap_id,tag_id
portion of the primary key, but it may still get slow when counting votes for each tag. In which case we'd want a totals table.
to give users a list of popular tags they can upvote:
SELECT name, COUNT(*) FROM tags JOIN beatmap_tags USING (tag_id) WHERE beatmap_id = @beatmap_id AND approved = 1 GROUP BY (beatmap_id, tag_id) ORDER BY COUNT(*) LIMIT 10
Required endpoints:
get_top_tags_for_beatmap(beatmap_id)
returns the top 50 tags for a specified beatmap
store_tag(beatmap_id, tag_id)
allows a user to specify (aka vote) for a tag
delete_tag(beatmap_id, tag_id)
allows a user to remove their vote for a tag
get_all_tags()
returns (id, name, description) for all known tags
Backend for this is now merged 🎉
Remaining is:
Keeping this super short and sweet, there were talks about adding a guideline to ranking criteria to tag the "style" of a beatmap, however there were concerns with standardizing this sort of thing.
I propose delegating this task to players. Imagining a system similar to what Steam has (screenshot below), there will be no need to define terms - players will know that stuff best. My proposal is strictly for terms that would describe a map, since I'm not sure whether user tags would be useful for describing other things...