r/webtoon

Image 1 — Bad algorithm and no AI-filtering
Image 2 — Bad algorithm and no AI-filtering
Image 3 — Bad algorithm and no AI-filtering

Bad algorithm and no AI-filtering

Note: these are just my opinions and critics on WEBTOON. I am not criticizing canvas creators or artists.

Lately I have been kind of bored and frustrated when browsing on webtoon

In the recommendations on the webtoon originals there is barely anything that sticks out anymore, everything starts to look similar in artstyle and story.
Rarely there is anything that has a new interesting plot, there isn't anything in these recommended stories that makes them stand out.
Also it feels like webtoon only pushes these polished webcomics that have a lot of fan service in them, because the mainstream loves it - ofcourse, because that's how they make money :/

Luckily it's different in canvas, because these creators make comics the way they like in their artstyle, BUT it's been so full of AI Slop. AHHH ಠ_ಠ
I am never going to read these and I am disappointed that webtoon doesn't have any way to filter these out. You can't even report them really, because there isn't even an option that fits the term "made with AI". You don't even have to label these as AI when posting.

I know that webtoon makes a lot of money, because people create comics on their platform for free. But not doing anything against AI spam feels like they don't care about the canvas creators at all.

They don't even try to hide anymore that it's only about profit lately :|

I want to read a story a human made, because they have a story to tell and I want to see how an artist brings the story to life. I don't need polished stories that have been told a thousand times, that make me feel happy for 2 seconds.

I don't need 15 new AI stories a week to keep me busy.

I want comics that stick with me, that I can come back to and be excited to read the new chapter.

Sorry I just had to rant a bit. What are your opinions and takes on this?

u/PureCocaiine — 4 days ago

Coffiends.

I’m new to both webtoon and Reddit. COFFIENDS is a slice of afterlife comedy that’s set in a coffee shop called Perkatory. Please give it a read. I appreciate it. - Chad T.

u/Coffiends — 5 days ago
▲ 11 r/webtoon+1 crossposts

Tapas: Get your Subscriptions before it is too late

Gemini and i brought up a nice script that you can run in your browser, to get a list of all your subsciptions and how far you got. I think this should be available for all you used to love Tapas and now must see it go.

This is about the idea, that are able to export data from Tapas with your Browser. The script runs through all you pages of subscriptions, and reads the data from Tapas. As result you'll receive a tapas_library_exact_progress.txtlike this:

  1. "I Was Tricked into this Fake Marriage!" by Jade

Progress: Episode 77 / 112 episodes

Link: https://tapas.io/series/i-was-tricked-into-this-fake-marriage

  1. "Three Lifetimes" by Kerbasi ❀

Progress: Episode 61 / 93 episodes

Link: https://tapas.io/series/threelifetimes-comic

Using it is pretty simple. Just Go to you Library -> Subscriptions in Tapas.

Then Press F12, go to Console and write "allow pasting". Yea, this is more or less scary and you should know what you are doing. Paste the script and change the 3rd line with the the max page number of you library. i have 24.

Then just hit Enter and let it run. When its done you'll get a textfile in the downloads.

The last read episode thing is sometimes off +/- 1 or even more. Thats all the patience i had, so it won't getting better from me.

Please dont ask me for support - i won't. You can do this on your own, using an AI Chat.

This is -of course- on your own risk.

Here the code:

(async () => {
    let comicLinks = [];
    let totalPages = 24;//<---write here the max page number of you library
    let baseUrl = window.location.origin + window.location.pathname + "?type=ALL&category=SUBSCRIBED&pageNumber=";

    console.log("Step 1: Harvesting all comic links...");

    for (let i = 1; i <= totalPages; i++) {
        try {
            let response = await fetch(`${baseUrl}${i}`, { credentials: 'include' });
            let text = await response.text();
            let doc = new DOMParser().parseFromString(text, 'text/html');
            
            let items = doc.querySelectorAll('li.content-item');
            items.forEach(item => {
                let titleEl = item.querySelector('a.title');
                let authorEl = item.querySelector('a.sub-title');
                
                if (titleEl) {
                    let title = titleEl.innerText.trim().replace(/\n/g, " ");
                    let author = authorEl ? authorEl.innerText.trim().replace(/\n/g, " ") : "Unknown Author";
                    let href = titleEl.getAttribute('href');
                    
                    if (href && !comicLinks.some(c => c.url === href)) {
                        comicLinks.push({
                            title: title,
                            author: author,
                            url: window.location.origin + href
                        });
                    }
                }
            });
        } catch (err) {
            console.error(`Error loading library page ${i}:`, err);
        }
        await new Promise(r => setTimeout(r, 200));
    }

    console.log(`Found ${comicLinks.length} unique comics. Extracting true last-read positions...`);

    let detailedComics = [];

    for (let [index, comic] of comicLinks.entries()) {
        console.log(`[${index + 1}/${comicLinks.length}] Checking: ${comic.title}`);
        try {
            let res = await fetch(comic.url, { credentials: 'include' });
            let html = await res.text();
            let pageDoc = new DOMParser().parseFromString(html, 'text/html');
            
            // Extract total episodes from header element
            let totalEpEl = pageDoc.querySelector('.list-header__left.js-ep-cnt');
            let totalEpisodes = totalEpEl ? totalEpEl.innerText.trim() : "Unknown Total";
            
            // Extract exact last-read scene position marker
            let indicatorEl = pageDoc.querySelector('.js-episode-indicator-prev');
            let sceneNum = indicatorEl ? indicatorEl.getAttribute('data-scene-number') : null;
            
            let progress = sceneNum ? `Episode ${sceneNum} / ${totalEpisodes}` : "Not Started / No History";

            detailedComics.push({
                Title: comic.title,
                Author: comic.author,
                Progress: progress,
                Url: comic.url
            });
        } catch (err) {
            console.error(`Failed to fetch ${comic.title}:`, err);
            detailedComics.push({
                Title: comic.title,
                Author: comic.author,
                Progress: "Error loading page",
                Url: comic.url
            });
        }

        await new Promise(r => setTimeout(r, 400));
    }

    if (detailedComics.length === 0) {
        console.warn("No comics processed.");
        return;
    }

    // Format output cleanly
    let outputText = detailedComics
        .map((c, i) => `${i + 1}. "${c.Title}" by ${c.Author}\n   Last Read: ${c.Progress}\n   Link: ${c.Url}\n`)
        .join('\n');

    let blob = new Blob([outputText], { type: 'text/plain;charset=utf-8' });
    let a = document.createElement('a');
    a.href = URL.createObjectURL(blob);
    a.download = 'tapas_true_reading_progress.txt';
    a.click();

    console.log(`Success! Saved ${detailedComics.length} items to tapas_true_reading_progress.txt`);
})();
u/Miaukeks — 4 days ago