Tesseract

126 readers
3 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.

Github: https://github.com/asimons04/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
1
3
1.4.40 Released (dubvee.org)
submitted 1 week ago* (last edited 1 week ago) by [email protected] to c/[email protected]
 
 

Not really a lot new in this release, mostly just some bugfixes and polish.The only new "feature" is that it now indicates to the user if the instance is operating in "private" mode. Other than that, it's just some fine-tuning. Apologies for the delay in getting such a small release pushed out, but life has been hectic (to say the least) for the last few weeks and time hasn't been something I've had a surplus of lately.

Bugfixes

  • Don't add comment text to conversation line button tooltip if comment is hidden.
  • Check if comment_view.comment.content is undefined before setting the text to it. Only shows up in console log as an error, so it's non-breaking but still annoying
  • Remove gap in post heading button bar where the "Moderation" button would be if the user is not a mod
  • Fixed "Hide Deleted Posts" filter. It's a holdover from the 0.18.x days and recently, you can only see your own deleted posts. The filter was hitting the safety check to not hide your own content before this rule fired, so there's now an exception above the "post is from self" check.
  • Inspect alt text for keywords in post filtering
  • Fix feed not returning to correct post when return back from clicking into it (if open in modal/new tab is not enabled)
  • Community icon in post view modal no longer scrunches with long post titles
  • Post view modal was not wrapping the community icon with the proxy URL

Changes

  • When collapsing a comment thread, if the top portion of the thread that's being collapsed is outside the viewport, scroll it into view. If that part of the thread is already in the viwport, don't scroll and leave it where it is.
  • Add time to expiry date when showing temp bans in modlog
  • Reduce padding in modal contents on smaller viewport screens

Private Instance Support

If "Private Instance" is enabled, all API-based routes will only show a banner informing the user that the instance is private. This has links to both login and signup pages.

Filtering

  • Refactored post keyword filtering to be a bit more efficient
  • Add ability to filter NSFW posts (works in addition to NSFW blur)
  • Add ability to filter posts from bot accounts (without blocking them entirely)
    • This is mutually exclusive with the "Collapse Bot Comments" filter option. Technically they can both work at the same time, but it's a lot of redundant clicking to reveal the content or even see who it is, so the settings are configured so one being enabled will disable the other.

Tags

  • ghcr.io/asimons04/tesseract:v1.4.40
  • ghcr.io/asimons04/tesseract:latest
2
 
 

I don't know exactly what cadence you'd call this, but all the point releases that are divisible by 10 are basically "cleanup releases".

I usually try not to introduce anything new in these and rather focus on debugging, refactoring, and streamlining all the changes for the previous 9 releases.

So, don't expect anything groundbreaking from the next version.

That said, I am asking for feedback on things; what can be improved (without adding anything new), what's buggy, etc.

So far in 1.4.40, I've done the following. In addition to these, are there any particular areas that could be improved?

Bugfixes:

  • Don't add comment text to conversation line button tooltip if comment is hidden.
  • Check if comment_view.comment.content is undefined before setting the comment text value to it. Only shows up in console log as an error, so it's non-breaking, but it's still annoying
  • Fixed the gap where the moderation button would be in the post action toolbar if user is not a mod.
  • Fixed "Hide Deleted Posts" filter. It's a holdover from the 0.18.x days and recently, you can only see your own deleted posts. The filter was hitting the safety check to not hide your own content before this rule fired, so there's now an exception above the "post is from self" check.

Filtering:

  • Add ability to filter NSFW posts (works in addition to NSFW blur)
  • Add ability to filter posts from bot accounts (without blocking them entirely)

Enhancements:

  • When collapsing a comment thread via the conversation line, if the topmost comment in the thread is outside the viewport, scroll it into view.
3
 
 

I guess it also depends on how many days you've configured an account to be considered "new".

Reason being, with lemm.ee shutting down at the end of this month, a lot of accounts are moving to other instances, so you'll probably be inadvertently filtering far more people than you intend.

When things are stable, it's a nice filter option to hide the whack-a-mole trolls who keep popping up, but when a major instance closes shop and/or there's some kind of mass-migration in progress, it can be detrimental.

4
4
1.4.39 Released (dubvee.org)
submitted 1 month ago* (last edited 1 month ago) by [email protected] to c/[email protected]
 
 

Highlights in 1.4.39

  • Enhanced the content filtering options
  • Revamped the comment section display
  • Tweaked some mod tool behavior
  • Spruced up the modlog
  • Quite a few bugfixes

Changelog

Bugfixes

  • Fix bug where expanding/collapsing the post image would trigger unwanted reactivity causing the comment section to refresh.
  • Comments now respond to the "lockPost" event in order to disable/enable the reply button appropriately.
  • If an inbox item is expanded, switching accounts or refreshing the list as a new item arrives would keep the text from the previous comment while updating the heading info correctly. Caused the wrong comment/reply to be displayed.
  • Same as above but for moderation reports
  • Don't invalidate/refresh Reports page when resolving a report (not needed).
  • When removing a post/comment, if you enabled the option to send a reply message and left it blank, it would throw a toast message informing you as such but not reset the "loading" variable and kept the "submit" button disabled.
  • When distinghishing a mod comment, only push top-level comments to the top of the tree. e.g. if you need to distinguish a comment that is a reply to another comment, that would previously push a copy of that distinguished reply up as a top-level comment.
  • Fixed unhandled error when an admin enters the community settings when there are no moderators.
  • Fixed "Local Community" toggle not reflecting API state after reload.
  • Fix truncation in post headings to account for community display names where the community creator thinks "Display Name" and "Community Long Description" are the same picture :sigh:
    • Note: Backported to 1.4.38
  • Svelte was URI-encoding ampersands when rendering links
  • The absolute time displayed in the tooltip of the RelativeTime component was not updating correctly when re-rendering due to a reacctive event.
  • If you linked an image in markdown, the image would render but without the link. Now, the link will be below the image.
    • e.g. [![This is a linked image](https://foo.com/image.jpg)](https://example.com/article/page.htm)
    • The cause is that zoomable image takes precedence over the hyperlink.
    • Known "bug": Badges (e.g. img.shields.io are still kind of ugly and don't really fit the model. Working on some exceptions for things like those, but that didn't make it into this release.

Content Filtering Revamp

The filtering subsystem has been refactored and enhanced. Prior to this release, anything that was filtered was simply discarded before being rendered.

Now, filtered objects will show a placeholder that indicates which filter was triggered (or which keywords triggered the filter). Clicking the "eye" button on the placeholder will show the hidden content.

This is the case for both posts and comments that are hidden by your filter preferences.

Notes on Filtering

There are a few safety checks in place that will disable the filters under certain conditions. The first two are to prevent moderation blind spots, and the rest are just sanity checks/compromises to keep from over-complicating things.

  1. If you are a moderator, the filters will not apply to content posted to any community you moderate. This includes viewing reports.
  2. If you are an instance admin, the filters will not apply to content posted to any local communities.
  3. The filters will not apply when viewing your own content anywhere in the app.
  4. Filters are not applied when viewing someone's profile.
  5. If you have a community filtered, going to its /c/ page or browsing it in a modal will show the community's content, though any other filters are still applied (keywords, user filters, etc). Reason being, you went to the commmunity, so the content shouldn't be filtered out by default.

Finally, filters are global and apply to all accounts in use in the app. You cannot have different filters on one account than on another. I may change my mind at some point, but it made much more sense to have one set than one set per profile. It also eliminates the need to have extra management tools to copy them or sync them between profiles and other things like that.

Keyword Filters Now Apply to Comments

Keyword filters now apply to comments! I had always meant to apply them there, but until the work done to the comment section in this release, I didn't have a way to apply them that wouldn't nuke the rest of the thread. Now, just the offending comments will be hidden with the rest of the chain remaining intact.

Filtered comments will hide the score and creator as well. Unless manually revealed, the "creator" will be [email protected] with the Tesseract logo as the avatar. Revealing the comment will replace that with the actual creator. This is to both further hide/mask content you don't want to see as well as keep the formatting/rendering consistent.

User Filtering (Soft Blocking)

You can now filter users rather than blocking them. This is especially helpful for those who moderate large communities. Think of filtering out a user like a "soft block".

Why would you want to filter a user rather than block them?

Lemmy's blocking has a couple of glaring issues:

  1. Content from blocked accounts does not show up in communities you moderate. This leaves a huge blind spot when you don't want to see content from certain users but it is not warranted to ban them from your communities.

  2. When you block a user, not only are their comments not visible in the comment section, you will not see any replies to them, either. Depending on who you block, this could cause you to miss out on quite a bit of discussion.

If you filter those users instead, both of those are addressed:

  1. Filters are automatically disabled on communities you moderate, so you will still see content from the filtered users there but you won't anywhere else.

  2. Only the filtered user's comment will be masked; all the replies will be visible.

Community Filtering (Soft Blocking)Similar to users, you can also filter/soft block communities.

Why would you want to do this instead of block the community?

Think of it like a soft unsubscribe. Need a break from a community but don't want to unsubscribe completely? Filter it! You'll see a placeholder stub in the feed for it, and you can reveal if you want to. Otherwise, it's out of sight, out of mind. When you're ready to get back into the community, just un-filter it.

How-to Use User/Community FilteringTo filter (or un-filter) a user, click their username to bring up the User Profile Modal. From there, use the "Filter User..." (or Un-Filter User...) button in the modal. When a user is filtered, all of their content in the current area will collapse to a placeholder (or un-collapse if you're un-filtering them).

Communities work the same way except from the community profile modals.

You can also manage the filtered users directly from Settings->Filters->User Filters. Be aware that is pretty low-level, and you're basically editing a list of actor IDs. It's best to only use that to remove items, though you can add them there as well. It will also accept a comma-delimited list of actor IDs, so you can add them in bulk:

e.g.

https://instance.xyz/u/jerk1, https://instance.xyz/u/jerk2, https://other-instance.abc/u/AnotherJerk

Again, the users you enter directly must be in the actor ID format as that is what's compared when running the filters. An incorrectly formatted entry will not break anything, but it won't work, either.

Comment Section Revamp

  • Added color-coded conversation lines to comment threads.

    • The conversaton lines are clickable buttons and can be used to collapse/expand threads.
    • The user avatars in the comment header have ring borders corresponding to the thread color
    • Avatars are now de-coupled from the user links; clicking them will expand/collapse the thread
    • Are color-coded by default but can change to monochrome if you prefer.
    • Setting is in Settings -> Posts and Comments -> Color Coded Conversation Lines
  • Tweaked comment renderers / layout

    • Removed "card" effect
    • Distinguished comments now render fancier.
  • Comment text height can be limited to 120px and be expanded/collapsed (similar to post bodies in the feed).

    • Disabled by default
    • Can enable via Settings -> Posts and Comments -> Limit Comment Height

Tweaks to Moderation Options

  • When removing a post/comment and opting to reply with a reason via comment, automatically distinguish the comment.
  • In the Community Profile Modal -> Ban/Unban User panel, you can now search for a user as well as enter the actor ID, @[email protected], or https://lemmyverse.link/u/[email protected] format.
  • Added a quick shortcut to "Moderator View" in the sidebar. Will not show unless the current account is moderating at least one community (e.g. if you're an admin that isn't explicitly a moderator of any community, it will be hidden).
  • Added a button on reports that will copy the report text to the clipboard if you want to use it in the removal reason.

Tweaks to User and Community Profile Modals

  • Added button to view user's modlog history in the full modlog (without having to open the embededded, mini-modlog first.
  • Both can be middle-clicked to open the full modlog in a new tab on desktop
  • Added "View in Full Modlog" button to User Profile Modal -> User Modlog panel (Thought I already had this, but it was in the moderation modal)
  • Added button to filter (or un-filter) users or communities.

Tweaks to the Inline Comment Removal Reasons

  • Clicking the "hand" icon will now load the modlog details for the comment even if you have the setting disabled. If the setting is enabled, then it will take you to the full modlog for the entry.
  • Moved comment removal reason box above the comment text.

Enhancements to the Modlog

Gave the modlog a slight visual and functional refresh

  • Can now +/- quick filter by action type
  • More consistent and uniform layout
  • Removed redundant components
  • Moved filter options out of sub-navbar and into page proper
  • Cleaner mobile/desktop reflow
  • Can switch between relative timestamps (1 hr ago) and absolute timestamps for modlog events

Additionally, it can now lookup the moderatee on "remove post" action types. The API very stupidly doesn't include the person details on the "Remove Post" (or lock post) events, so Tesseract can optionally/automatically perform a lookup based on the post's creator ID if you have that option toggled on.

Note that an API-lookup is a "last resort". In the modlog loader, it will attempt to resolve the creator_id by looking at other entries in the batch of modlog entries it retrieves. If it finds a person object matching that id, it will add it transparently and not trigger an API-lookup. The API lookups are also cached for 5 minutes (too short, and they're not useful, too long, and ban indicators may not show when they should). Attempting to resolve those in the loader, synchronously, caused too much delay in loading the page, so they fill in dynamically/asynchronously after the modlog renders.

Get Tesseract

5
 
 

Getting closer!

Differences since Beta 1: The updated filtering capabilities have been merged in. I hadn't originally planned to spruce up the filtering in this release, but it was born out of necessity. That said, I'm quite happy with the refinements that have been made.

As before, I need the extra eyes on this to suss out any last minute bugs. Hopefully no more features creep into this release. This one was an exception as I just...needed it.

If you find any bugs, please let me know: Reply/post here, Github issue, report it in the Matrix rooms, wrap a note around a brick, you know the drill.

Change Notes for Filtering System

Filtering Revamp

The filtering subsystem has been refactored and enhanced. Prior to this release, anything that was filtered was simply discarded before being rendered.

Now, filtered objects will show a placeholder that indicates which filter was triggered (or which keywords triggered the filter). Clicking the "eye" button on the placeholder will show the hidden content.

This is the case for both posts and comments that are hidden by your filter preferences.

Notes on Filtering

There are a few safety checks in place that will disable the filters under certain conditions. The first two are to prevent moderation blind spots, and the rest are just sanity checks/compromises to keep from over-complicating things.

  1. If you are a moderator, the filters will not apply to content posted to any community you moderate. This includes viewing reports.
  2. If you are an instance admin, the filters will not apply to content posted to any local communities.
  3. The filters will not apply when viewing your own content anywhere in the app.
  4. Filters are not applied when viewing someone's profile.
  5. If you have a community filtered, going to its /c/ page or browsing it in a modal will show the community's content, though any other filters are still applied (keywords, user filters, etc). Reason being, you went to the commmunity, so the content shouldn't be filtered out by default.

Finally, filters are global and apply to all accounts in use in the app. You cannot have different filters on one account than on another. I may change my mind at some point, but it made much more sense to have one set than one set per profile. It also eliminates the need to have extra management tools to copy them or sync them between profiles and other things like that.

Keyword Filters Now Apply to Comments

Keyword filters now apply to comments! I had always meant to apply them there, but until the work done to the comment section in this release, I didn't have a way to apply them that wouldn't nuke the rest of the thread. Now, just the offending comments will be hidden with the rest of the chain remaining intact.

Filtered comments will hide the score and creator as well. Unless manually revealed, the "creator" will be [email protected] with the Tesseract logo as the avatar. Revealing the comment will replace that with the actual creator. This is to both further hide/mask content you don't want to see as well as keep the formatting/rendering consistent.

Additional Filtering Options

There are a few new filters available as of this release:

Hide Content from Blank Profiles

A "blank profile" is one that lacks both a bio and an avatar. Why? Sometimes you might want to filter out "faceless opinions" for a while and/or only deal with the people who are more likely to be here for the community rather than anonymous opinion shouting.

Filter Users (Soft Blocking)

You can now filter users rather than blocking them. This is especially helpful for those who moderate large communities. Think of filtering out a user like a "soft block".

Why would you want to filter a user rather than block them?

Lemmy's blocking has a couple of glaring issues:

  1. Content from blocked accounts does not show up in communities you moderate. This leaves a huge blind spot when you don't want to see content from certain users but it is not warranted to ban them from your communities.

  2. When you block a user, not only are their comments not visible in the comment section, you will not see any replies to them, either. Depending on who you block, this could cause you to miss out on quite a bit of discussion.

If you filter those users instead, both of those are addressed:

  1. Filters are automatically disabled on communities you moderate, so you will still see content from the filtered users there but you won't anywhere else.

  2. Only the filtered user's comment will be masked; all the replies will be visible.

How to Use:

To filter (or un-filter) a user, click their username to bring up the User Profile Modal. From there, use the "Filter User..." (or Un-Filter User...) button in the modal. When a user is filtered, all of their content in the current area will collapse to a placeholder (or un-collapse if you're un-filtering them).

You can also manage the filtered users direclty from Settings->Filters->User Filters. Be aware that is pretty low-level, and you're basically editing a list of actor IDs. It's best to only use that to remove items, though you can add them there as well. It will also accept a comma-delimited list of actor IDs, so you can add them in bulk:

e.g.

https://instance.xyz/u/jerk1, https://instance.xyz/u/jerk2, https://other-instance.abc/u/AnotherJerk

Again, the users you enter directly must be in the actor ID format as that is what's compared when running the filters. An incorrectly formatted entry will not break anything, but it won't work, either.

Filter Communities (Soft Block Communities)

Similar to users, you can also filter/soft block communities.

Why would you want to do this instead of block the community?

Think of it like a soft unsubscribe. Need a break from a community but don't want to unsubscribe completely? Filter it! You'll see a placeholder stub in the feed for it, and you can reveal if you want to. Otherwise, it's out of sight, out of mind. When you're ready to get back into the community, just un-filter it.

The process is the same as with filtering a user, except it's accessed from the Community modal (click any community link in the app).

6
 
 

This release isn't quite ready yet mostly because I'm still tweaking small things here and there. Functionally, all of the major changes are stable (plus or minus any undiscovered bugs). The hosted instance (https://tesseract.dubvee.org/) has been updated to this beta to get some more eyes on things. If you hit any bugs, please let me know in whatever manner is easiest for you (reply here, Matrix rooms, Github, note wrapped around a brick, etc)

Highlights

  • Comment section has gotten an overhaul
  • Spruced up the modlog
  • Bugfixes and small UI tweaks

Change Log for 1.4.39

Bugfixes

Reactivity

  • Fix bug where expanding/collapsing the post image would trigger unwanted reactivity causing the comment section to refresh.

  • Comments now respond to the "lockPost" event in order to disable/enable the reply button appropriately.

  • If an inbox item is expanded, switching accounts or refreshing the list as a new item arrives would keep the text from the previous comment while updating the heading info correctly. Caused the wrong comment/reply to be displayed.

Moderation

  • Don't invalidate/refresh Reports page when resolving a report (not needed).

  • When removing a post/comment, if you enabled the option to send a reply message and left it blank, it would throw a toast message informing you as such but not reset the "loading" variable and kept the "submit" button disabled.

  • When distinghishing a mod comment, only push top-level comments to the top of the tree. e.g. if you need to distinguish a comment that is a reply to another comment, that would previously push a copy of that distinguished reply up as a top-level comment.

Community Settings Section

  • Fixed unhandled error when an admin enters the community settings when there are no moderators.

  • Fixed "Local Community" toggle not reflecting API state after reload.

Misc

  • [Display] Fix truncation in post headings to account for community display names where the community creator thinks "Display Name" and "Community Long Description" are the same picture :sigh:

    • Note: Backported to 1.4.38
  • [Annoyance] Svelte was URI-encoding ampersands when rendering links

  • [Time Display] The absolute time displayed in the tooltip of the RelativeTime component was not updating correctly when re-rendering due to a reacctive event.

Changes

Comments

  • Added color-coded conversation lines to comment threads.

    • The conversaton lines are clickable buttons and can be used to collapse/expand threads.
    • The user avatars in the comment header have ring borders corresponding to the thread color
    • Avatars are now de-coupled from the user links; clicking them will expand/collapse the thread
    • Are color-coded by default but can change to monochrome if you prefer.
    • Setting is in Settings -> Posts and Comments -> Color Coded Conversation Lines
  • Tweaked comment renderers / layout

    • Removed "card" effect
    • Distinguished comments now render fancier.
  • Comment text height can be limited to 120px and be expanded/collapsed (similar to post bodies in the feed).

    • Disabled by default
    • Can enable via Settings -> Posts and Comments -> Limit Comment Height

Moderation

  • When removing a post/comment and opting to reply with a reason via comment, automatically distinguish the comment.

  • In the Community Profile Modal -> Ban/Unban User panel, you can now search for a user as well as enter the actor ID, @[email protected], or https://lemmyverse.link/u/[email protected] format.

  • Added a quick shortcut to "Moderator View" in the sidebar. Will not show unless the current account is moderating at least one community (e.g. if you're an admin that isn't explicitly a moderator of any community, it will be hidden).

  • Added a button on reports that will copy the report text to the clipboard if you want to use it in the removal reason.

User and Community Profile Modals

  • Added button to view user's modlog history in the full modlog (without having to open the embededded, mini-modlog first.

  • Both can be middle-clicked to open the full modlog in a new tab on desktop

  • Added "View in Full Modlog" button to User Profile Modal -> User Modlog panel (Thought I already had this, but it was in the moderation modal)

Inline Comment Removal Reasons

  • Clicking the "hand" icon will now load the modlog details for the comment even if you have the setting disabled. If the setting is enabled, then it will take you to the full modlog for the entry.

  • Move comment removal reason box above the comment text.

Enhancements to Modlog

Gave the modlog a slight visual and functional refresh

  • Can now +/- quick filter by action type
  • More consistent and uniform layout
  • Removed redundant components
  • Moved filter options out of sub-navbar and into page proper
  • Cleaner mobile/desktop reflow
  • Can switch between relative timestamps (1 hr ago) and absolute timestamps for modlog events

Additionally, it can now lookup the moderatee on "remove post" action types. The API very stupidly doesn't include the person details on the "Remove Post" (or lock post) events, so Tesseract can optionally/automatically perform a lookup based on the post's creator ID if you have that option toggled on.

Note that an API-lookup is a "last resort". In the modlog loader, it will attempt to resolve the creator_id by looking at other entries in the batch of modlog entries it retrieves. If it finds a person object matching that id, it will add it transparently and not trigger an API-lookup. The API lookups are also cached for 5 minutes (too short, and they're not useful, too long, and ban indicators may not show when they should). Attempting to resolve those in the loader, synchronously, caused too much delay in loading the page, so they fill in dynamically/asynchronously after the modlog renders.

7
 
 

I was asking for tips about working with markdown tables, and this was recommended

https://thisdavej.com/copy-table-in-excel-and-paste-as-a-markdown-table/

It says it does it all in javascript, so is that possibly something you can add to Tesseract? I don't know what technical challenges that would involve -- just seeing if it's possible and/or if it's something you might think about adding.

8
7
submitted 1 month ago* (last edited 1 month ago) by [email protected] to c/[email protected]
 
 

Lately I have had the need to clear browser cookies. What I noticed is that not only will I be logged out of my account (logical) but the settings I had set in Tesseract are also reset to their default state. Logging into the server where I have my account does not give me my settings back unfortunately.

Is there a way to save all my settings? And if there is no option to do so, can we have that in Tesseract?
Ideally it would be on my own storage location. I host Tesseract on my docker server and if the settings can be saved there automatically then that would be great.

9
3
submitted 2 months ago* (last edited 2 months ago) by [email protected] to c/[email protected]
 
 

The VPS hosting provider is having issues in their NY datacenter, and the VM for the hosted Tesseract instance is currently unavailable (as well as another VM I have in the same DC).

Currently do not have an ETA.

10
4
1.4.38 Released (dubvee.org)
submitted 2 months ago* (last edited 2 months ago) by [email protected] to c/[email protected]
 
 

Edit: I backported a small, but annoying, bugfix for long community names and am re-publishing the release. If you go to update, or already have updated, give it about 20 minutes from the time of this edit before pulling the new image.

This release brings bugfixes, a user-requested feature, enhancements to reactivity when performing mod actions, various UI polish, additions to status indicators, and a special little something-something for mods and admins to make their lives MUCH easier.

Bugfixes

  • Now that most instances are on 0.19.4 and above which natively support alt text, remove the post title as a fallback alt text.

  • Check if the first 150 characters of a post body contains an image since the lazy loading was sometimes preventing the "does the post body scroll" check from returning true. This caused the "expand" button to not appear unless you toggled the post to compact/card and back.

  • Un-distinguishing a comment did not reactivly change the background back from green.

  • Bug 47: Selected sort state was not preserved after navigating away from /c/{community} As a result of this bugfix, community URLs can now specify the desired sort method (e.g. /c/community@instance/{sort} --> /c/[email protected]/TopMonth). If no sort paramater is supplied (e.g. /c/[email protected]), it will use your default sort type.

  • Disable create post button if community is local and current profile is not local to that instance.

  • The post body would not reactivly update if the body content was cleared out (e.g. responding to purge post event or if you edited the post body and removed the text). The content was correctly saved, but it only re-rendered on refresh. Now accounts for empty or undefined values in post body when triggering a re-render.

  • Fixed several glitches with the Crosspost list:

    • Opening it no longer triggers unwanted reactivity which caused certain elements to re-render. Most notable was expanding the list would cause the comment tree to reload (still no idea why) and/or cause the page to re-jump to the specific comment if you originally linked to it.
    • Performing mod actions from the crosspost list now correctly updates the xpost count and will clear the xpost component if all crossposts have been removed.
  • Re-added a hack to partially patch a memory-leak. I had removed this previously to resolve another issue, but I think that no longer applies after other changes. Svelte(/kit) swears there's no memory leak, but there definitely is. Not sure if this is fixed in Svelte 5, but we'll see when I get around to porting it. Ugh.

Changes

  • Per user request, add alt text-as-caption for image posts (similar to markdown images). Controlled by the same "Show alt text as caption" user setting. Only shows in "card" view since there's no room in compact view, and it would be confusing to mix it in with the body text.

  • Finally added the option to set community visibility when creating or editing a community.

  • Add missing indicators to Community Card

    • Posting Restricted to Mods (Yellow 'Mods only' Badge)
    • Local Only (Orange "Local" Badge)
  • UserLink component now responsive to ban user events. When banning a user from areas not attached to a post/comment (e.g from search or modlog), the banned indicator will change to reflect the state rather than relying on the post/comment handlers.

  • When purging a post with the post opened (e.g. when the comment section is loaded), the comments will update to show "Purged" as well since the API also removes the comments from purged posts.

  • Disable scroll to top of post when expanding post body in card view (still does for compact since the fixed height allows the whole post to be visible.

  • Flairs are now scoped to the community if you are in a community feed (vs main feed). If you click a post flair, it will search for other posts with that in the title. Now, if you are browsing inside a community, the search will scope itself to the community you're in when you click on a flair tag.

  • Made the inline removal reasons for comments prettier.

    • Now shows when the mod action was taken
    • For admins and mods, will show the moderator who performed the action
    • The "hand raised" icon is a button which links to the modlog for that item.
  • Add indicator badge row to comments; move deleted/removed indicators to this row. The 'removed', 'baned site', and 'banned community' badges are clickable button links to relevant modlog entries.

    • Deleted by Creator
    • Banned from Site
    • Banned from Community

New Features

Local Communities

Can now set the community visibility to "local" when creating or editing a community.

ModQueue v0.1

Select Multiple Comments and Perform a Single Mod Action for them All

Added a nice little something-something for the mods this release. It's the initial version of a new set of mod tools which I plan to expand upon.

Ever have to break up a slapfight or nuke an entire comment thread that has gone completely toxic and off the rails? I have, and it's tedious work.

Not anymore.

There are two new buttons available to mods/admins in the comment section:

  • Bulk Actions button (badge) at the top of the comment section
  • "Check" button on comment items

Clicking the "check" on a comment will select it and add it to a queue. Select as many as you need, and then click the "Bulk Actions" button at the top of the comment section. From there, you can remove (or restore) all of the selected comments at once. The same reason/action will be used for all selected items.

Note: While it would be nice to have a "select all chlid comments" button on the topmost thread comment, due to API limitations and having no guarantee all of the parent comment's children have been loaded, you have to select each comment manually. Still, it's a huge improvement over performing an individual removal for each. I may look into doing a very deep fetch with the selected comment as the root, which should cover most cases, but there's still no guarantee from the API that all of the child comments are loaded.

Future Goals

At present, you can only remove or restore comments from the comment section with this feature, but the plan is to build upon this. Under the hood, there is support for posts and users, but that hasn't been fully integrated yet.

Roadmap and use-cases include:

  • Add option to ban/unban the creators of the selected items
  • Preview and edit the list of action items prior to issuing the action
  • Allow selecting posts from the feed to perform a bulk action
  • Allow selecting posts, comments, and/or users from the search results to mod in bulk.

The mod queue is currently scoped only to the current post and clears upon reloading/refreshing. This was intentional to avoid accidental actions for items that may have been selected from another entry. Once the UI for this feature matures, I'm going to make this persistent so that it is a proper mod queue that can work across posts, communities, pages, etc.

Suggestions for this are welcome. I have only my own experience to draw from, so there may be cases I haven't considered or use-cases that haven't (yet) applied to me.

Get Tesseract

Docker

11
10
1.4.37 Released (dubvee.org)
submitted 2 months ago* (last edited 2 months ago) by [email protected] to c/[email protected]
 
 

1.4.37

Apologies for the rapid release cycle this week. I'm taking advantage of the rare overlap in free time and motivation and trying to knock out all the low-hanging fruit as far as bugs and annoyances go plus incorporate feedback from the prior releases. The smaller, faster releases also help prevent me from getting too deep into feature creep.

Minor update with bugfixes, UI polish and, at least for now, the removal of a few rarely-used post views (they're rarely used and incompatible with the rewrite to the post body component).

Bugfixes

Changes

Post Action Buttons

On desktop post action buttons are now in a single row. On mobile and smaller-width desktop, the actiom buttons reflow to two rows as they were in the previous release. This makes better use of the available space as well as making the post header slightly more compact.

Post Body Previews in Feed

The post body has been re-implemented in the feed. This fixes issue 35 as well as provides a better-looking post preview.

Instead of a dumb substring from 0 to postBodyPreviewLength of the pre-rendered post body text, it now renders the body in full and conditionally limits the height of the container. This ensures the content is rendered correctly when collapsed as well as being cleaner, better looking, and more responsive.

Removed Unused View Modes

Due to the architectural change of the post body component (as well as lack of use), the "Reader", "Ultra-Compact", "More-Compact", and "Compacter" view modes have been removed. They would have required re-implementation from scratch anyway, so I just got rid of them. If there is demand, or you want any of those back, let me know, and I can re-introduce them using the new post body render method.

If your view was set to any of those, it will now migrate it to "wide-compact" which is the closest remaining view.

Removed Settings:

  • Post Body Preview Length (No longer needed/used)
  • Post View Mode options (no longer compatible without fully re-implementing):
    • Compacter
    • More Compact
    • Ultra-Compact
    • Reader

Tags

  • ghcr.io/asimons04/tesseract:1.4.37
  • ghcr.io/asimons04/tesseract:v1.4.37
  • ghcr.io/asimons04/tesseract:latest
12
 
 

Summary: Unless anyone speaks up, I'm leaning toward removing those two views.

I'm rewriting the component for the post body preview in the feed to address my own gripes as well as Issue 35 in Github.

TL;DR is that the "Ultra-Compact" and "Reader" views rely on the "Post Body Preview Length" setting and the old method of doing the previews which was just a dumb "show X characters of the post body" based on the un-rendered body markdown.

The new method uses the rendered output and controls the height of the body text for a similar effect. It's also MUCH more responsive and able to take the screen width into account. In short, it's much more flexible, looks much better, and is probably what I should have done the first time.

"Reader" and "Ultra-Compact" rely on a setting that I'm going to be removing. So, rather than re-implement those and complicate what is, finally, a clean/simple refactor, can I just get rid of them?

If you're using them, that's fine. It's no problem to re-implement. But if no one is using them, I'd just assume get rid of them.

13
 
 

Currently, the post buttons are always a double row. In dev, I've set them to be a single row on desktop and reflow to 2 rows when the screen width goes below the xl breakpoint for smaller viewports and mobile (see main post image).

I like it, and I think it makes better use of the available space + more compact on desktop, but before I change the post buttons again, thought I'd ask for feedback. This is probably not something I'm going to make an option for (there's too many options already lol).

Current Layout: Post action buttons/indicators are always two rows.

14
7
1.4.36 Released (dubvee.org)
submitted 2 months ago* (last edited 2 months ago) by [email protected] to c/[email protected]
 
 

Bugfixes

  • When zooming an image, it was using the thumbnail image rather than the actual image (when present). Apparently my local instance's thumbnails are close enough to the original quality that I just never noticed.

  • Fixed truncation in site card for long instance names and domains.

New Features and Changes

Compatibility Layer: Supports Local /post/{post_id}/{comment_id} Route Format

Note: This only works for your home instance. It does not work for remotely fetched posts. Additionally, this is not a "supported" way to share Tesseract links; it's just there for convenience if you want to turn a local Lemmy UI link into a valid Tesseract link.

If you're in Lemmy UI and want to view a post in Tesseract, you can just change the domain and the post and/or comment params should translate transparently.

e.g. Where 123456 is the post ID and 98765 is the comment id:

Change https://lemmy.world/post/12345/98765 to https://t.lemmy.world/post/12345/98765 which then automatically redirects you to https://t.lemmy.world/post/lemmy.world/post/12345?thread=0.4567.98765

Got Rid of Post State Badges (Featured, Locked, Removed, Deleted, Hidden, Saved)

"Hidden" and "Saved" are now indicated via toggle action buttons on the post itself. The rest of the states now appear in the post title like flairs (though with unique icons and fixed colors).

If a post is removed, the "Removed by Mod" flair is linked to the modlog entry for the post.

Color Coded Post Cards

Deleted, removed, and featured posts now have colored cards to distinguish them.

  • Removed or Deleted: Post has a red background and border
  • Featured Local/Community: Post has a green background and border

New Post Action Buttons

Added a second row of post action buttons and tweaked some indicators

Save Post Button

Can now quickly save/unsave a post. Also indicates the post's saved state (got rid of badge which used to be the indicator). Also removed "Save post" from post action menu.

Hide/Unhide Post Button

Can now quickly hide/unhide a post. Hiding (intentionally) does not automatically clear it from the feed. This give you a chance to undo it without having to go through a confirmation dialog every time. Unless "show hidden posts" is enabled in the feed options, the next feed refresh will not show that post.

The "hide post" button was removed from the post actions menu.

Report Post Button

Quick button to report a post. The "report post" button was removed from the post action menu.

Post Share Menu

Added a dedicated share dropdown to share links to the post and removed "Share" link from post action menu. Available share links include:

  • Canonical (ActivityPub) Link: Basicaly, to the post on the home instance of its creator
  • Local Post Link: A link to the post on your home instance / default UI
  • Tesseract Link: A link to the post relative to the instance of Tesseract you're using
  • Lemmyverse, Threadiverse, and LemShare Links: Instance-agnostic links which can rediect to the user's own home instance

Some options are only available if viewing the post on your home instance; local post link and Tesseract post link will be hidden if you are viewing a post via a remote API fetch.

Tags

  • ghcr.io/asimons04/tesseract:1.4.36
  • ghcr.io/asimons04/tesseract:v1.4.36
  • ghcr.io/asimons04/tesseract:latest
15
6
1.4.35 Released (dubvee.org)
submitted 2 months ago* (last edited 2 months ago) by [email protected] to c/[email protected]
 
 

This is a bugfix / fine tune release building upon 1.4.34. No new features, just optimizing a few things based on feedback.

Bugfixes / Changes

  • Post Titles: Decrease opacity from 90% to 80% when fading read post titles since 90% wasn't really perceptible

  • Removed Comments -> Mod View: Got rid of "Removed Comment" spoiler on removed comments for mods and now show the text in-place like it used to be in 0.19.3. Still requires the automatic modlog lookup feature to be enabled and finding an entry for the comment in the modlog. The logic is the same, just the presentation a bit more streamlined to match what admins see (and what mods used to see).

  • Markdown Editor: Fixed an errant comma causing the keyboard shortcut for inserting a hyperlink to not wrap the selected text correctly like the toolbar button does.

  • Media Integrations -> Spotify: Additional Spotify CDN detection for their thumbnails (when did it become "good" practice to stop using file extensions?! >:O )

  • Moderation/Safety: Disable inline images in removed comments. If a comment is removed and contains inline images, disable inline images when showing the comment content for mods and admins. Will show a link instead which can be previewed in a modal without leaving the current item. Local (home instance) custom emojis still show inline per the bugfix in 1.4.33.

  • User Badge Links: Add a temporary exception regex to not localize off-site /u/ links such as Reddit and YouTube. This is a temporary fix for an immediate bug while I work on the infrastructure changes needed to check if the target is to a Fediverse instance.

  • Post/Comment Badge Links: Re-add badge-ify step for post/comment links only if they're a "bare" link. e.g. https://instance.xyz/post/12345 will become a badge while [See this post](https://instance.xyz/post/12345) will be a regular link. Both still have the same "open in modal" behavior like with the badge buttons, but this should account for people linking entire sentences/paragraphs that were problematic when converting all post/comment links into badges.

Tags

  • ghcr.io/asimons04/tesseract:1.4.35
  • ghcr.io/asimons04/tesseract:v1.4.35
  • ghcr.io/asimons04/tesseract:latest
16
7
1.4.34 Released (dubvee.org)
submitted 2 months ago* (last edited 2 months ago) by [email protected] to c/[email protected]
 
 

Bugfixes

  • [a84bc5db] Add community-banned indicator to vote view if banned_from_community is present in the API response.

  • [1e5bfeae] Disable actions if banned from community (all actions the API forbids if user is community banned):

    • Post/comment vote buttons
    • Edit post/comment
    • Delete/Restore post/comment
    • Report post/comment
    • Moderation buttons (if a mod is banned but not removed from mod team, they'll still see mod action buttons but be unable to perform any)
    • Create post, subscribe, and "community settings" buttons in /c/community and community modal
  • [0216bc2a] Don't cache getCommunity lookup results. While nice in theory, it prevents being aware you've been banned or any changes to the community during the cache validity window with no way to automatically invalidate beyond a fixed TTL.

  • [d4df7d05] Don't badge-ify post and comment links. That worked well until people would link entire paragraphs. :sigh: So they're regular links now, but they still open up in modals.

  • [ac8db3d] Bring community mod team management section up to current API spec

    • "Top Mod" can now transfer community
    • Added confirmation dialogs when removing a mod or transferring a community.
    • Made "transfer community" button icon less ambiguous
  • [564980d9] Selecting "browse communities" from the /instances list was still using the old URL param for the instance rather than the new route param.

New Features

User Purge [Admin]

Admins can now ues the user profile menus/modals to purge users.

Inline Comment Removal Reason

Notes:

  • This only works if you are viewing a post on your home instance. Otherwise, the "Removed by Mod" text won't be linked to the modlog, and the removal reason will not be present.
  • This feature is disabled by default. To enable, go to Settings -> Posts and Comments -> Show Inline Comment Removal Reasons

If a comment has been removed by a mod, it is now linked to the modlog. Additionally, Tesseract can attempt to lookup the comment in the modlog and display the removal reason.

Additionally, if you are a mod, it will show you the comment content that was removed. Have to pull this from the modlog along with the reason (so if that lookup fails, this won't work either). Hiding removed comments from mods is yet another big-brain move by the Lemmy devs that I have to cleanup client-side.

Changes

User Profile Share Button + Support for LemShare

The "Share" button on user profiles is now a menu, and I got rid of the separate buttons for "Lemmyverse Link" and "Actor ID". Added support for Lemshare. Now, clicking "Share" button in user profiles will open a menu with the following options:

  • Lemmyverse Link
  • Lemshare Link
  • Threadiverse Link
  • Actor ID
  • Local Link (Local to your instance)

Misc

  • On main feed, when expanding "Site Info" or "Legal" panels in the sidebar, add a mini site card (logo + name) at the top.
  • Limit post flairs to 25 characters before truncating; add title tooltip with full flair text
  • Removed the +/- quick (un)subscribe buttons from post/comment community icons since the community modal makes subscribing/unsubscribing easy and these are no longer necessary.
  • Removed red background on removed comments. Looks okay on a single comment, but once you have to break up a slapfight, it's just too much.

Tags

  • ghcr.io/asimons04/tesseract:1.4.34
  • ghcr.io/asimons04/tesseract:v1.4.34
  • ghcr.io/asimons04/tesseract:latest
17
 
 

I'm testing a feature in my current dev branch and would like some feedback.

When loading a removed comment in the comment section, it automatically fetches the removal reason from the modlog and appends it below 'Removed by Mod" on the comment. The "Removed by Mod" text is also linked to the modlog entry for the item.

Not shown here, but if you're a mod, it will also append, in a spoiler block, the original comment that was removed. Somewhere between 0.19.3 and 0.19.9, the Lemmy devs decided mods should no longer be able to see removed comments in their own communities, which I think is a huge regression (though thankfully admins can still see them).

Thoughts? Is this asking for drama, or would it be generally beneficial? Right now, in the dev branch, it just does it, but I can make it a user option.

18
 
 

This is a mainly bugfix release.

Important: If you are using Tesseract on 0.19.10, this fixes a feature regression that disabled all 0.19.4+ features.

Bugfixes

  • Piefed links are identical to Lemmy but not API compatible; fixed bug when loading a Piefed link in a modal. Now has button similar to /post to load the outside pos/comment link in a new tab/window.
  • PeerTube seems to have a new video ID format. Added that to the detection regexes so those will embed.
  • Fix typo in "Check for Notifications" label
  • Fixed / accounted-for Spotify thumbanils (they don't have extensions and weren't being detected as images)
  • Home-instance custom emojis exempted from inline media disable setting
  • Fixed broken semver comparisons on 0.19.10+ (any features requiring greater than API 0.19.3 were being disabled).
  • Removed mobile OS "share" integration as it was more trouble than it was worth. Now all 'share' and 'copy link' buttons just write the item to the clipboard.
  • Add slight right margin to comment action bar so buttons aren't smooshed against the side (especially when "reverse action bars" is enabled)

Minor Changes

  • Site card hidden in sidebar when Site Info or Legal accordions are expanded (to make it easier to view those)
  • Increase top margin on heading elements in markdown to better space out sections

Get Tesseract

Docker

  • ghcr.io/asimons04/tesseract:1.4.33
  • ghcr.io/asimons04/tesseract:v1.4.33
  • ghcr.io/asimons04/tesseract:1.4.33:latest

Resources

19
 
 

Note: I know it's probably a little early depending on your time zone, but I scheduled this to send at midnight UTC (8pm my time) because I wanted to release version 4.1 on 4/1 as I'm an absolute sucker for gimmicks (which will become very apparent as you read the release notes).

About

I've been working on this in a new repo for months, and I'm extremely excited about this release. In fact, this is such a major release and paradigm shift that I'm jumping 3 major and one minor versions (this was originally slated to be v2.0).

It's still AGPL, and I hope to make the source code public soon, but until I've done some cleanup, the repo is still private and is only released as pre-built Docker images. Unfortunately, only amd64 is supported at the moment since I'm having trouble with Github Actions and can't do arm64 builds locally. Hope to have that resolved by the next release. 🀞

What's New?

Absolutely everything!

I'm tired of being John Henry / "old man who yells at cloud", so I scrapped the crusty, old, human-written code and asked ChatGPT and CoPilot to rebuild it from the ground up. I've also completely integrated and embraced AI since that's apparently what everyone in the world wants in every piece of software and household appliance (according to the people making and selling the AI, anyway, and surely they wouldn't lie about that).

Without further ado, let me introduce you to TesseractGPT (aka Tesseract 4.1)!


Feature Highlights

Feed

I got rid of the feed completely. Since nobody wants to think anymore (who has time for that, amiriteβ€½), ChatGPT will now just summarize each page of posts for you. However, beta testing indicated that was still too much reading and thinking (what are we, a bunch of nerds?), so now it also summarizes recursively for the convenience of the unthinking majority (i.e. it summarizes the summaries and then summarizes that again).

Now, instead of the old way of having to scroll through a bunch of wordy posts (boring!), pictures with words on them, or worse, pictures of words, you'll get a nice two-word summary of the entire day's feed in big, block letters in the middle of the screen.

And, just like that, I'm all caught up and done scrolling for the day. Thanks TessGPT! Uh, I think?

Posts

Are you tired of feeling pressured to be creative all the time? Tired of being expected to actually have something to say when you want to say something online? Well, TesseractGPT's got your back!

Gone is the big, empty text field where you previously had to make your brain muscles do work. Now, you just tell it what you want the post to be about, and TessGPT will put it into internet words for you. And if you can't even think of something for that, no problemo! Just tell TessGPT to "make some shit up" by pressing the intuitively named "Make Some Shit Up" button.

Community Auto-Selection

You don't even have to select the community anymore. How cool is that?! Based on either the prompt you gave it or the shit it made up itself, TessGPT will take care of that for you by finding the 5 most appropriate communities and blasting it out to them all. If you're not subscribed to any communities appropriate for the generated post, no worries; it's hardcoded to fall back to c/Technology, c/News, c/Politics, and c/WorldNews because, hey, no one else reads the rules, so why should you? Reading is for nerds, and following the rules is for squares!

Comments

A lot of work has gone into modernizing the comment system.

Multi-Reply

First, there's also a new feature called "Multi-Reply". To use Multi-Reply, click the checkboxes on any number of posts and/or comments, and your single reply will go out to each of the selected items. It's hard to capture that functionality in a screenshot, so just picture this but with your own opinions.

Overhauled Comment Form

The second big upgrade is that there are now two, brand-new ways to comment on posts. Additionally, the old-timey text input has been removed from the comment section in favor of a more modern approach to online interactions. I think you'll find the two replacement methods quite convenient and way better than the old text input.

Comment Method 1: Just hit the button labeled "Whatever you think, ChatGPT".

GPT will analyze the post or comment and compose + submit a response on your behalf. No critical thinking or understanding the subject matter required!

Pro Version Only: If you upgrade to TessGPT Pro, you will be able to preview the GPT-response before committing to it. Standard plan is "take what it gives you".

One of my less-informed friends penned this wee testimonial and was kind enough to allow me to include it in the release notes:

Comment Method 2: Use the "You're a Nazi" button.

Godwin's Law has won, and I'm fully embracing that as of this release. Instead of having to spend precious time calling everyone on the internet who disagrees with you a Nazi, you can just hit a single button and move on with your day. Combine this with the new "Multi-Reply" feature, and everyone on the internet will quickly and conveniently know that you think they're a Nazi.

Pro Version Only: If you upgrade to Pro, it will automatically switch to an alt, reply "Yeah, that {account_name here} sure is a Nazi", and upvote you while also downvoting the person you slightly disagree with.

I'm confident this feature alone will triple the productivity of many here on the platform.

Homer Simpson's drinking bird repeatedly hitting 'Y' on the keyboard

Actually, you don't even have to hit the Nazi button if you don't want to. TessGPT studies your voting patterns and submission history. When it detects a post or comment that it thinks you slightly disagree with, it'll automatically and kindly inform the other person that you think they are, indeed, a Nazi.

Sorry, drinking bird, but you're out of a job.

Don't you mean extinct?

DMs

It's just Nicole now. The reply text field has been removed, and you can only enter your credit card and/or bank info.

All hail the Fediverse Queen.

Pro Version Only: Pro allows you to use a crypto wallet. We totally won't be skimming off of that, though πŸ€₯


Funding Model Change

Until now, I was happy to produce this client with no donations. Starting with this release, and in order to feed the AI companies it relies on, TesseractGPT now has a mandatory monthly minimum donation or else the software locks after a grace period of 4 minutes.

Additionally, there is a Pro version which can be unlocked by an optional mandatory monthly minimum donation of $40. The Pro version unlocks additional features.

It's not a subscription. I hate subscription models, so I would never release software that way. That said, I do find the mandatory monthly minimum donation of $20 more than fair. You can donate more, though, and we encourage that. For example, Bryan here donates $35 a month. Do you want to do the bare minimum or be like our superstar Bryan?


Known Bugs

  • Occasionally, the feed summary will just say "Go Outside". It's not necessarily wrong, so I may keep that as a feature. However, it doesn't take the weather into account, so might need to tie in a weather API for liability reasons.

  • The signup process hasn't been revamped yet, so there's still some brain cells required to come up with a username. Our engineers are hard at work and hope to make that process thought-free in the next release.

  • The "Whatever you think, ChatGPT" API response isn't cleaned up before submitting the comment. This leads to some comments containing fewer grammatical errors than would be expected of comments with so little thought put into them.

  • Occasionally the "You're a Nazi" button will erroneously and automatically reply to your own posts/comments. This bug is marked low priority because, hey, if you don't say it, someone else will.

Planned Features (Not Yet Implemented)

Sealion Button

Mom, can we stop and get some Hexbear?

No, we have Hexbear at home.

[Hexbear at home...]

Pressing the "Sealion" button will prompt TessGPT to relentlessly argue against the selected comment thread in 100% bad faith. Due to the computational overhead and expenses, this is limited to one thread at a time in Standard and 15 at a time in Pro.

Pro Version Only: Combine the "Sealion" button with the "Multi-Reply" feature to have your own mini troll farm. The limit of 15 still applies, but any beyond that will be added to a queue and processed in order.


Get Tesseract

  • Docker: ghcr.io/asimons04/tesseract:AprilFoolsEdition

SpoilerIf it's not glaringly obvious, this is an April Fool's Day post and should be read with the world's largest /s.

However, I should be releasing 1.4.33 with some small bugfixes soon.

Update: I'm sad no one noticed the Ghostwriter cameo :(

20
5
submitted 3 months ago* (last edited 3 months ago) by [email protected] to c/[email protected]
 
 

1.4.32

Note: Noticed a bug on mobile for the updated private message changes. Had to re-release and re-run the build actions. Give it about 15 minutes from the time of this edit.

This is purely a hotfix release to add some security/privacy in the face of the "Nicole" spam wave; attempting to address de-anonymization concerns related to inline media in private messages.

Instance admins on 0.19.6 and above can now manage the blocked URL list in the admin panel.

Changes

  • Updated JS client to 0.19.9 version to add support for newer API features.

Bugfixes

  • Disable reply button in Inbox if creator is banned

Admin Panel

  • Renamed "Slur Filters" section to "Filters"
  • [0.19.6+] Can now edit blocked URLs in the Admin->Filters section.

Private Messages

Inline images are now disabled by default in private messages. If an embed media item (image, video, or audio) is detected in the DM content, a toggle action will appear above the message where you can opt to load the inline media if you trust the source of the DM (similar to how Thunderbird and other email clients treat inline images if you have them disabled).

Docker Tags

  • ghcr.io/asimons04/tesseract:1.4.32
  • ghcr.io/asimons04/tesseract:v1.4.32
  • ghcr.io/asimons04/tesseract:latest
21
 
 

Late January, I had to step away from the project for a while to deal with some family stuff. That's resolved, but try as I might, I just cannot force myself to get back into development mode on this.

I've got other projects I want to work on, both hobby and home improvement. I need to focus on the latter, and really want to focus on the former. Like anyone else, my time is finite.

The Hard Truth

Tesseract was written for Lemmy, and I'm tired of porting it to Lemmy over and over again because the Lemmy devs keep breaking the API. Yes, yes, pre-1.0 technically means they can shred the API and break everything from release to release. But when a project is widely used, in perpetual beta, and has lots of other developers developing against it, it's disrespectful to them to constantly introduce so many breaking changes when it can be avoided. And it CAN be avoided; they just don't bother.

So where does that leave the project?

Well, potentially completely broken once instances start updating to Lemmy 1.0, and I don't know that I have it in me to continue. At least, not without help. So if you're fluent/proficient with Svelte, please drop me a line.

The original plan was to pivot to Sublinks, but development on that project has stalled. Piefed also has an API that also seems to be fairly stable. I may pivot there and leave Lemmy to its own devices. If there exists a somewhat painless way to convert a Lemmy database to Piefed, I am also looking to transition my instance to that.

Bottom Line

I've grown disillusioned with Lemmy as a platform and flat out despise its developers. I'm tired of the uphill climb just to keep the basic functionality working because the Lemmy devs don't care about anything except Lemmy UI. I've got other things I need to do, a finite amount of free time, and the Lemmy devs picked the worst time to pointlessly break the whole goddamned API. If you want Tesseract to continue, I'm going to need direct help in maintaining it.

22
13
Lemmy 1.0 (dubvee.org)
submitted 4 months ago* (last edited 4 months ago) by [email protected] to c/[email protected]
 
 

So, when I do get back into my regular development cycle, I'm going to be working on 1.0 support. Yay πŸ™„

Breaking Changes: https://join-lemmy.org/news/2025-02-03_-_Breaking_Changes_in_Lemmy_1.0

Just going to get my gripes out of the way first: The Lemmy devs have no fucking clue how to version an API. They added an API v4 with some legitimately welcome changes. That's great. But the whole reason you version your API is to not break previous API versions. Random shit is breaking in v3 on 1.0.0-alpha because they changed the v3 behavior instead of implementing all the breaking changes in the new API v4.

I tested Tess 1.4.31 against voyager (that's as far as I ever want to touch .ml ugh), and there's a lot of stuff that needs to be fixed. Maintaining limited compatibility with older API versions (specifically the remote community browser) is also going to be a thing because of the moronic breaking changes that shouldn't be breaking if the devs had any goddamned sense.

Have I mentioned how much I hate the Lemmy devs?

The Answer is 'a lot'

The answer is "a lot"

I'm not sure how far out 1.0 is, but don't expect Tess to be ready on launch day. That said, 1.0 support is going to be developed in a new version (1.5 series) that bumps the minimum API to 1.0 because, again, the Lemmy devs have no fucking clue how to do versioned APIs and only concern themselves with Lemmy UI and everyone else be damned.

I'm so tired, y'all.

23
6
submitted 4 months ago* (last edited 4 months ago) by [email protected] to c/[email protected]
 
 

Due to an immediate family member's prolonged illness and recent passing, I've had very little time to work on Tesseract as of late. This is purely a bugfix release that I've had ready to go for several weeks but haven't had the time to put together and ship out.

I'm not sure when regular development will resume , so for now, the project is sidelined and basically in maintenance mode for the time being. I would love to get some other contributors on board as developing this has taken up far too much of my time. If you're interested in helping out with this project, please let me know.

Bugfixes

  • "Application Denial Reason" heading was showing on applications that were not yet processed.
  • Formatting help modal wasn't closing with new modal method. Removed this since it was not particularly useful. May re-implement it in a different way.
  • Scroll the subscribed community list in sidebar and community menu back to top when clearing results or clicking the "clear" button.
  • HTML-like syntax in markdown now rendered correctly as text
  • Compact video post titles were not correctly setting onHomeInstance state
  • Compact video post titles were not correctly detecting inmodal state

New Markdown Editor Behavior

You can now select multiple lines of text and apply block quote, numbered, or bullet list to the selection.

Get Tesseract

  • ghcr.io/asimons04/tesseract:1.4.31
  • ghcr.io/asimons04/tesseract:v1.4.31
  • ghcr.io/asimons04/tesseract:latest
  • Github
  • Hosted Instance
24
 
 

Hey, thanks again for creating Tesseract, it's been super useful! I've got a feature request, now that I have several accounts on different instances for moderation purposes. The screenshot shows the account selector on Thunder for Android. It's a really helpful view because it shows me if any of the accounts I'm not currently using have any messages instead of me having to go check each one.

Would it be possible to have a similar view in the account selector for Tesseract? Talking about this bit right here:

Tesseract account selector

It'd be nice to have a notification dot next to the account name if there's any messages, and a separate dot if there's any reports. Thunder doesn't show reports on that screen, so showing them as well would be an improvement on that.

25
12
1.4.30 Released (dubvee.org)
submitted 4 months ago* (last edited 4 months ago) by [email protected] to c/[email protected]
 
 

1.4.30

This release incorporates several feature requests, lots of bugfixes, and the new ability to open posts and comment threads in modals. The changelog doesn't do the number of changes justice, and I've only highlighted the noticeable aspects.

Thank you to @[email protected], @[email protected], and @wise_[email protected] for submitting bugs I was able to fix. Additional thank you to @[email protected] for running the beta versions and reporting all new bugs.

Get Tesseract

Bugfixes

  • "Moderator View" listing type was broken

  • Better truncation of modal titles

  • Tightened regex pattern to filter out links that are similar to user/community links.

  • The comment button on posts in the feed did not respect the "Open posts in new tab" setting.

  • Flairs should now detect if there are spaces before or after them in the post title. e.g. Check this out [Video] wouldn't have rendered [Video] as a flair since there was a space after.

  • Works better with Lemmy's stupid federated image proxy URLs; updated image/video/audio detection functions to account for that stupidity

  • Tesseract's (less stupidly implemented) image proxy can now handle more weird CDN formats if it has to un-proxy a thumbnail URL from Lemmy's stupid federated proxy URL

  • Custom emoji's weren't respecting aspect ratio

  • Nested list items were broken; added a regex to detect those and not trim those lines during pre-processing

  • If no spoiler title was provided, the default fallback "Spoiler" wasn't being applied

  • Re-ordered post type detection scripts so posts with embed_video_url aren't erroneously rendered as image posts (e.g. Imgur...somtimes)

  • Field for alt text shows up in post form if API is 0.19.4 or higher (was previously set for 0.19.5 as the minimum)

  • Don't attempt to mark dummy/preview post as read

  • Previewing content in modals is now properly contained when maximized (videos, embeds, etc)

  • Iframe link previews (previewing a link that allows access via iFrame) are now screen height (well, 80% to account for the modal wrapper/button bar).

    • Since Wikipedia doesn't provide useful metadata, those always open as iframe, even on mobile where the iframe button is removed. These now render much better since they're nearly full height instead of relative to the screen width.

Minor Changes

Posts

  • On 0.19.4 or higher, you can now upload a custom thumbnail on posts

  • Post embed descriptions tweaked a bit

    • Link metdata title is truncated unless the description is expanded
    • Description text area is now a scrollable div when expanded (max 20vh) rather than expanding in full
    • Simplifed logic that truncates the non-expanded text
    • The whole embed description is collapsible
  • Badges that are clickable now have visual indicators on hover

  • "Old" and "Controversial" comment sort options now available

  • Too many minor tweaks to name individually (consequence of re-writing the post renderers)

  • You will now be prompted before navigating away if you have post or post edit in progress.

Audio / Video Player

  • Post images, audio, and videos now have a background with a blur effect
  • Volume setting is now saved and re-used on subsequent videos and audio posts

Feed

  • Moved listing type and sort selectors out of sub-navbar and into feed component

    • Similar to where they are in user profiles
    • Makes state management in the main feed much less clunky since it's not having to watch and sync 3 potential ways to set those
  • When expanding a post body in the feed, it only expands to a maximum of 50% of the viewport height and scrolls. Prevents opening a huge wall of text which requires a lot of scrolling in the feed to collapse again. This can be disabled in Quick Settings -> Scroll Post Body in Feed or Settings -> Feed -> Scroll Post Body in Feed

  • Scrollable area in the feed now includes the margins

  • Got rid of the feed margin container and just limit the width of the posts directly; width is toggleable with the same "Expand Margins" button and emulates the old behavior. Posts are slightly narrower now, but they're more consistent when resizing the window and less likely to need to expand the margins in odd, small width displays.

  • New view option: Wide Card (Card View + No Margins)

  • Moved the listing type and sort direction dropdown menus out of the sub-navbar and into the feed.

All Media is Now Click to Play

It's much more memory/network-efficient, most people don't seem to have embeds always enabled anyway, it doesn't work with Invidious/Piped, and some media has to be click-to-play (Loops, Dailymotion) for various reasons/limitations.

Making all media click-to-play has also greatly simplified the render logic.

The non click-to-play logic has been removed as well as the settings for handling those options.

Settings

  • Removed 'enable embeds in feed' and 'enable embeds in post' options since all media is now click to play
  • Move some options into "Advanced" section
  • Toggling infinite scroll will now clear any snapshots in the cache and reload the feed from the API (needed to sync the page cursors back up)
  • New option to show custom emojis as large (like Lemmy UI) or emoji-sized. Default is disabled / regular emoji sized

New Features

Modals Can Now Close When Pressing 'Back'

This has been something I've wanted for a long time now, and it's finally here.

When a modal is active, you can now close it by navigating back: clicking the browser's back button, using the mobile OS 'back' button, gesture-swipe back, back key on mouse, etc. Anything that tells the browser to "go back" will close the modal. This also includes the zoomable images.

Support for Some Tidal Embeds

Links to Tidal albums, tracks, and playlists should now embed as interactive playlists. As with other embeddable media, you don't need to use any kind of special share link; just the link from the browser tab.

When clicking a Tidal link in the comments (or choosing 'Preview' from the post action menu on a Tidal post), the link preview modal will also show the album or playlist as an embed.

Posts Can Now Load in Modals

By default, posts open to the post page same as they always have. In addition to optionally opening them in a new tab, you can now load them in a modal.

The setting is in Quick Settings -> Open Posts in Modal or Settings -> Feed -> Open Posts in Modals

This is nice if you want to open posts and read/respond in the comments without leaving the feed.

Additionally, on comment items in the inbox and user profiles, there is a button to jump to the comment thread in a modal. Very useful for getting context without leaving your current spot.

Report items also have this ability in order to easily get context before making a mod decision on an item. It will even bring up the whole comment thread in the modal if the reported item is a comment.

Behavior Overview

  • When viewing a post in a modal, clicking the title will take you to its /post/ page (even if it's a remote post)

  • The modal does not automatically resolve foreign post/comment links to your home instance. It first loads it remotely, and there is a button to load it on your home instance. This could be automatic, however:

    • It may be an item your instance doesn't know about
    • The referenced item's creator may be banned on your instance
    • The referenced item may be on an instance yours doesn't federate with
    • You may want to see the full context from the post's home instance
    • If someone links to a comment, it avoids having to double-resolve the post and that particular comment. It also provides context by having the whole comment chain rather than just the comment in isolation (e.g. if your instance doesn't have record of it yet).
  • If you click into another post from within the modal (e.g. cilcking a crosspost item or another linked post), it will keep a history and back/forward arrows will appear in the top-right of the modal title bar. Use these like you would a browser's back/forward buttons to return to previous entries. Note, though, that these are not bound to the browser's history, so hitting "back" in the browser will close the modal.

  • Even with the "Open posts in modals" option disabled, cilcking the badge-ified post/comment links will open those in a modal. Useful for referencing what was linked without leaving your current position.

  • The post/comment badge buttons are also regular links. Right-clicking and choosing "Copy Link" or "Open in New Tab" work as you would expect. Middle-clicking also will open them in a new tab.

Limited Server Side Rendering (SSR) to Support Metadata Fetching

A bug was submitted that when posting a link that resolves to a Tesseract resource (e.g. https://tesseract.dubvee.org/post/lemmy.world/123456), the metadata would be the generic Tesseract info rather than the metadata for the content. I had been content to leave it at that (Photon and Alexandrite both behave the same way), but I figured I'd give it one more go.

Tesseract is fully client-side rendered, and I'm not a huge fan of SSR in general. That said, sometimes SSR is useful (like for providing metadata to non-browsers), but every "correct" way I've tried to implement partial SSR has met with failure.

What ended up working, and working quite well, is less SSR and more heavy use of server-side hooks to redirect non-browser user agents to an internal API route that returns a bit-banged, minimal HTML document with the meta tags populated for post, comment, user, community, and site details.

Which is fun because it, like Tesseract's other internal API endpoints, runs on top of my home made Express-like router framework that runs inside the SvelteKit server hooks.

It's not pretty (though it is elegant), but it works. At some point, I'm going to be basically re-writing the whole application in either Svelte 5 or React (haven't decided yet), and I may explore a more SSR-oriented design at that phase (or not).

Metadata is Generated for the Following: I have metadata generating for:

  • /post/[instance]/[post_id]
  • /post/[post_id]
  • /comment/[comment_id]
  • /u/[username]
  • /u/[username@instance]
  • /c/[community_name]
  • /c/[community_name@instance]
  • / (Metadata for the default instance)

Support for Instance-Agnostic Links

TL;DR: I've implement this client-side.

Added support "universal" links as well as badge-ifying links to posts and comments.

  • @<user>@instance.xyz: Has been implemented since at least 1.4.0 (forget when)
  • !<community>@instance.xyz: Has been implemented since at least 1.4.0 (forget when)
  • #<post_id>@instance.xyz
  • ~<comment_id>@instance.xyz

Lemmyverse Link Support

LemmyVerse links will now be localized without having to hairpin to/from Lemmyverse. After being localized, they will be processed as if they were a regular-style link.

e.g. A LemmyVerse link will automatically/transparently turn into a user, community, post, or comment badge button and have the same abilities as first-party links.

Post and Comment Links are Now Badge-ified

Links to posts and comments (e.g. cross-posted from https://instance.xyz/post/12345) are detected, localized, and badgeified the same way.

Additionally, like users and communities, posts and comment badge links will now open in a modal for quick reference without leaving your current spot in the feed or another post. This also includes https://instance.xyz/post/%7BpostID%7D/%7BcommentID%7D formats which seem to just be a Lemmy-UI thing.

Clicking the post title in the modal will take you to the /post page for the item and close the modal.

The post/comment badge buttons are also regular links. Right-clicking and choosing "Copy Link" or "Open in New Tab" work as you would expect. Middle-clicking also will open them in a new tab.

Added New Section to Example Nginx Config for Image Proxy

Since the image proxy runs in the same NodeJS process as all of Tesseract, its image proxying can be greatly enhanced by adding another layer on top which is more suited to concurrent connections. I run Nginx, and the example is for that, but this should work with any suitable reverse proxy. I have an intentionally long cache period here; adjust according to your needs.

HTTP Config:

# Nginx proxy for Tesseract's Proxy Cache
# Adjust max_size from 200m as needed

proxy_cache_path	/etc/nginx/conf.d/proxy_cache levels=1:2 keys_zone=imgcache:10m max_size=200m inactive=720h;
proxy_temp_path		/etc/nginx/conf.d/proxy_cache/tmp;
proxy_cache_key 	"$scheme$request_method$host$request_uri";

Location Config:

location /image_proxy {
    ## You would probably want to put these proxy options and default headers into an
    ## include file since they're mostly redundant on the two locations. Shown here in 
    ## both for clarity.

    proxy_http_version              1.1;
    send_timeout                    5m;
    proxy_read_timeout              360;
    proxy_send_timeout              360;
    proxy_connect_timeout           360;
    proxy_max_temp_file_size        0;

    # Set headers to send to backend server
    proxy_set_header  Host                  $host;
    proxy_set_header  X-Forwarded-Host      $host;
    proxy_set_header  X-Forwarded-For       $remote_addr;
    proxy_set_header  X-Forwarded-Proto     $scheme;
    proxy_set_header  X-Forwarded-Uri       $request_uri;
    proxy_set_header  X-Forwarded-Ssl       on;


    proxy_pass http://127.0.0.1:8080/image_proxy;
 
    proxy_cache imgcache;   
    ## Adjust proxy validity time from 720 hours accordingly
    proxy_cache_valid 200 720h;
    add_header      X-Proxy-Cache                   $upstream_cache_status;
  }
view more: next β€Ί