this post was submitted on 25 Aug 2025
7 points (100.0% liked)

Tesseract

136 readers
1 users here now

Tesseract: An Advanced Lemmy Client

The goal of Tesseract is to address as many things in Lemmy that annoy me as I can. I also trawl various "is there any way to [blank] in Lemmy?" posts to get feature ideas. Both of those lists are pretty extensive, so Tesseract has accumulated quite a few features.

Codeberg: https://codeberg.org/tesseract-ui/tesseract

Hosted / Demo Instance: https://tesseract.dubvee.org/

Note that the hosted instance defaults to Lemmy World, but it is unlocked to be able to connect to any Lemmy server.

Announcements, support, and guidance for the Tesseract UI.

All instance rules apply here. Beyond that, just be civil and constructive.

founded 2 years ago
MODERATORS
 

After two weeks of re-writing the filtering engine 3 times, I'm finally back to where I started. Yay!

Well, a little better than where I started. The more filters I added, the more complex and ugly the code to make them work became. After two re-writes, I'm finally happy with the 3rd iteration. It's pretty modular and will allow me to easily add and tune additional filters later.

Other than that, what's new since the last update?

  1. Can now filter (or hide entirely) posts and comments if they are below a set score. This can be done either globally or a per-community group basis.
  2. I ripped out the user tagging feature and am going to re-write it closer to how the community groups are done. The main reason is the original code was just a test/proof-of-concept. Additionally, once I do this, it would also allow creating filter policies that apply to user tags the same way they apply to community groups.
  3. Instead of only showing the first policy hit, all policies are evaluated, and each reason is shown. I wanted to avoid this, but since different policies/options can have different effects (hide vs filter), it was possible to "short-circuit" a more strict filter if it hits a less strict one first. Additionally, it is nice to see all the reasons a post was filtered rather than just the first hit.
  4. Editing the filter preferences is MUCH less of a fustercluck now. The global policy and the policies attached to community groups are now standardized, and there is now a standardized policy edit component (seen in post image). Not only is it more organized, it's much more modular and allows editing filters from the quick settings menu.
  5. The policy name in the stub/placeholder (e.g. [Default Policy]) is clickable and will bring up a modal to edit that policy.
  6. The global filters that apply to everything are now called "Default Policy". Currently, the names of the community groups that have filtering enabled are also the policy names. User tagging will likely be similar once I get that re-implemented.
  7. I'm adding user exceptions to the policies (work in progress). That should allow you to exempt specific users (or user regex patterns) from the policy (global or community-group based) while filtering or hiding everything else that the policy flags.
  8. I removed the "Help Farmer" filter option. I don't want to have to maintain a list of "ask" communities, and you can achieve the same effect by putting those communities into a group yourself, enabling filtering for it, and setting a minimum account age to filter.

As you can see, the biggest areas of work in this version are to the filtering options.

Wish I had more to report, but re-writing the whole filtering engine was a huge grind, and I had to take several days off to avoid burning out completely. Now that that's over with, I'm hoping the development pace picks back up on the remaining 45 items on my "to do" list for this release.

Ideas I'm Toying With. Thoughts?

  1. Option to hide post/comment scores until after you've voted. Basically to coach you to vote based on the content rather than joining bandwagon.
  2. Provisions to assign filter policies to user tags. Seems like it could be useful, but trying to think if that would do anything the existing global and community group-based filters don't already do.
  3. ???

Screenshots

Please do not take anything personally if you show up in the screenshots of my filtering preferences. These were either chosen at random because they were at the top of the feed at the time of testing or were chosen because they have both Lemmy and Piefed versions/alts and were used to test wildcard and regex based filtering.

Also, all of the filtered items can be optionally hidden completely. They're shown as the placeholder stubs here since that is more useful for a screenshot.

Filtered Post Placeholders

  • The option to filter low score posts is enabled with a threshold score of -5.

  • Ozma is filtered in my "News and Politics" group as well as anything with the keyword 'trump'
  • I filter communities from feddit.org since I don't speak German.
  • I don't want to see slop from Mastodon in my feed

Misc Filtering Options for the Policy

Filter Users Directly or by Regex Pattern

Filter Communities Directly, By Regex, or by Instance

Filter Specific Keywords

Filter by Instance/Platform

Filter by Post's URL Domain

Exempt Specific Users or User Regex Patterns from the Policy

Note: This is still work-in-progress

top 16 comments
sorted by: hot top controversial new old
[–] Blaze@lemmy.dbzer0.com 4 points 1 month ago (2 children)
[–] IcedRaktajino@startrek.website 3 points 1 month ago* (last edited 1 month ago)
[–] IcedRaktajino@startrek.website 3 points 1 month ago (1 children)

Nice. Self-hosting it at home and love it.

[–] jet@hackertalks.com 2 points 1 month ago* (last edited 1 month ago) (1 children)

I like the vote blinding prevote. I wish there was a third vote state, seen. Often times I like to upvote things I've already seen, but there is something I don't want to get involved with

As someone who makes posts that often go <-5 (especially without very active moderation), I'm not thrilled with the idea but I understand why it exists. I would prefer a system with more nuance (i.e. people I upvote have downvoted). Or if the poster is someone you have previously upvoted the filter doesn't apply

Maybe a auto+add filter if someone downvotes a person or community consecutively many times.

[–] admiralpatrick@lemmy.world 2 points 1 month ago* (last edited 1 month ago) (1 children)

I wish there was a third vote state, seen. Often times I like to upvote things I've already seen, but there is something I don't want to get involved with

Not entirely sure what you mean there.

I'm not thrilled with the idea but I understand why it exists.

The "hide low score" option was just something I saw someone asking for in a post the other day and opted to add it as a disabled-by-default option since it was super easy to tack on to the new filtering engine. -5 isn't hard coded, and users can configure that between -1 and -30 in varying increments. In my, possibly naive view, it could also work both ways: someone who would add to the downvote pile could potentially have it filtered thus sparing it their "wrath".

I don't think i noted it in any of the pre-release notes, but the filters are significantly nerfed for admins and mods:

  1. If you're an admin and the content is to a local community, then the filtering is completely skipped for that item
  2. If you're an admin and the content is to a remote community, then things can be filtered but they will never hide
  3. If you're a mod, then filtering is completely skipped for content posted to any communities you moderate.

The problem with trying to make the low score filter more granular is that there's not enough info available from the API to do that. Like, you don't have the vote info available other than the score unless you're a mod/admin. And I'm trying to avoid tracking upvotes/downvotes/etc locally. Mostly for the storage/complexity that introduces as well as the fact that, currently, the data would be device-specific (eg if you used a different device, it wouldn't have that history available).

I'll look into some way to make it a bit more granular. The only thing I can think of right now would be to skip the low score filter check if you've upvoted that post.

[–] jet@hackertalks.com 2 points 1 month ago (1 children)

I wish there was a third vote state, seen. Often times I like to upvote things I’ve already seen, but there is something I don’t want to get involved with

Not entirely sure what you mean there.

I don't like downvoting people unless they are a negative to lemmy, but while I'm very liberal with my upvotes there are some spicy takes I don't want to upvote, or downvote.. like two people arguing. I still like to be able to mark comments as seen so if I later search keywords, or come back to the thread, I know I've already processed it.

The problem with trying to make the low score filter more granular is that there’s not enough info available from the API to do that. Like, you don’t have the vote info available other than the score unless you’re a mod/admin. And I’m trying to avoid tracking upvotes/downvotes/etc locally. Mostly for the storage/complexity that introduces as well as the fact that, currently, the data would be device-specific (eg if you used a different device, it wouldn’t have that history available).

There is the ability to add user tags, right? Those tags could be used for some level of "I've had positive interactions with this user" personal reputation

[–] admiralpatrick@lemmy.world 2 points 1 month ago (1 children)

I still like to be able to mark comments as seen so if I later search keywords, or come back to the thread, I know I've already processed it.

Ah. For posts, you can hide them. If you have the API option enabled to show hidden posts, then Tess will render them collapsed as the placeholder and you can click to expand them. For comments, I don't think there's anything in the API that will facilitate that other than saving them?

There is the ability to add user tags, right? Those tags could be used for some level of "I've had positive interactions with this user" personal reputation

There was and will be again, yeah. I ripped out the initial implementation when I rewrote the filtering system. I suppose I could exempt certain tags from the low score filter. Well, the tags exempted would bypass all the filters since that's as granular I want to make it. On the 2nd re-write of the filters, I found that making things too granular made them too complex to actually use.

[–] jet@hackertalks.com 2 points 1 month ago (1 children)

I've thought about it some more; I think this would be a fairly useful compromise:

A post is auto-hidden if it has more then (-5 default) votes, and less then (+3 default) votes

This would leave controversial things up that at least have some backers, but universally hated things like illegal stuff, or spam, would be one sided and hidden.

[–] admiralpatrick@lemmy.world 2 points 1 month ago* (last edited 1 month ago) (1 children)

+3 default? Not sure what you mean with that.

Do you mean, for example, if the score is -5 but it has more than 3 upvotes, then show it?

Right now, it only hides with negative total scores below the user-defined threshold and only if the user enables that filter option (disabled by default).

I did tweak it a bit, though, since this post. If blind voting is enabled, the low-score filter is disabled.

Also, I added blind voting and am liking that. I may add a config variable for instance admins if they want to make blind voting mandatory in their deployments (it's disabled by default and user-toggleable otherwise)

[–] jet@hackertalks.com 1 points 1 month ago (1 children)

Do you mean, for example, if the score is -5 but it has more than 3 upvotes, then show it?

Yes, exactly, that is my proposal.

[–] admiralpatrick@lemmy.world 2 points 1 month ago* (last edited 1 month ago) (1 children)

I can do that. Might use a percentage rather than a fixed value, though. I'll look into it and try to work that into its behavior.

I should point out that the filter doesn't kick in if it has 5 downvotes. e.g. A post can have 100 upvotes and 105 downvotes. The net score would then be -5 which would trigger the filter (assuming the threshold is configured to -5). If other people upvote it to bring its overall score up, it's not filtered the next time it shows up.

Does that change the proposal at all?

[–] jet@hackertalks.com 2 points 1 month ago (1 children)

Here is a example I posted from today:

https://hackertalks.com/post/15604634

-19 total, +6, -25, 20% upvote

[–] admiralpatrick@lemmy.world 2 points 1 month ago (1 children)

So might be better to not use a fixed threshold at all and just set a minimum upvote threshold with, maybe, an internal minimum score (-5?) to act as a guardrail?

I'm basically trying to satisfy two crowds here:

  • One who doesn't want to see content that's been downvoted to oblivion (some rightly so, and others simply for deviating from the groupthink here)
  • One that posts stuff that is apparently controversial here and doesn't want to be unnecessarily filtered (niche communities, etc).
[–] jet@hackertalks.com 2 points 1 month ago

Fair enough, giving power to the users is good, my only concern is any default behavior