Report ShaggyZE's Profile

Statistics

All Anime Stats Anime Stats
Days: 210.7
Mean Score: 6.70
  • Total Entries3,118
  • Rewatched153
  • Episodes12,676
Anime History Last Anime Updates
Honoo no Haramase Oppai: Ero Appli Gakuen The Animation
Honoo no Haramase Oppai: Ero Appli Gakuen The Animation
May 17, 4:03 AM
Completed 2/2 · Scored 5
300 En no Otsukiai Anime Edition
300 En no Otsukiai Anime Edition
May 17, 2:05 AM
Completed 1/1 · Scored 5
No Waifu No Life!
No Waifu No Life!
May 17, 1:58 AM
Watching 2/? · Scored -
All Manga Stats Manga Stats
Days: 0.5
Mean Score: 6.50
  • Total Entries25
  • Reread3
  • Chapters37
  • Volumes9
Manga History Last Manga Updates
Henshin
Henshin
Jul 7, 2024 1:01 PM
Plan to Read · Scored -
Adachi to Shimamura
Adachi to Shimamura
Jul 15, 2023 6:45 AM
On-Hold 1/? · Scored -
Girl Friends
Girl Friends
Jan 17, 2023 2:36 AM
Plan to Read · Scored -

All Favorites Favorites

Anime (10)
Character (10)
People (10)

All Comments (386) Comments

Would you like to post a comment? Please login or sign up first!
hacker09 May 17, 12:26 AM
These seem to work overall, but it's taking me more than 10 mins, so I give up. I was going to add it to the malfunction script if I made it work quickly

Make sure to disable //.profile .user-profile-about { max-height: 1000px;
const staticSelectors = [
    '#statistics',
    '#recs',
    '#necs',
    '#anime_favorites',
    '#character_favorites',
    '#person_favorites',
    '#lastcomment',
    '.user-comments',
    '.fav-slide-block',
    '.favmore',
    '.btn-favmore',
    '.clearfix'
];

new MutationObserver(() => {
    const targetContainer = document.querySelector('.profile-about-user .word-break');
    if (!targetContainer) return;

    // 1. Handle static elements first
    staticSelectors.forEach(selector => {
        document.querySelectorAll(selector).forEach(element => {
            if (!element.closest('.profile-about-user .word-break')) {
                targetContainer.appendChild(element);
                applyOverflowStyles(element);
            }
        });
    });

    // 2. Capture ALL H5 elements as section headers
    const sectionHeaders = document.querySelectorAll('h2, h5');
    
    sectionHeaders.forEach(header => {
        // Collect all elements until next header
        let nextElement = header.nextElementSibling;
        const sectionElements = [header];

        while (nextElement && !nextElement.matches('h2, h5')) {
            sectionElements.push(nextElement);
            nextElement = nextElement.nextElementSibling;
        }

        // Move entire section if not in container
        if (!header.closest('.profile-about-user .word-break')) {
            sectionElements.forEach(element => {
                targetContainer.appendChild(element);
                applyOverflowStyles(element);
            });
        }
    });

    // 3. Container overflow control
    const containerRight = document.querySelector('.container-right');
    if (containerRight) {
        containerRight.style.overflowX = 'hidden';
        containerRight.style.position = 'relative';
    }
}).observe(document.body, { childList: true, subtree: true });

function applyOverflowStyles(element) {
    element.style.maxWidth = '100%';
    element.style.overflow = 'hidden';
    element.style.boxSizing = 'border-box';
}






    const targetContainer = document.querySelector('.profile-about-user .word-break');

    // Move all static elements immediately
    const staticSelectors = [
        '#statistics', '#recs', '#necs',
        '#anime_favorites', '#character_favorites', '#person_favorites',
        '#lastcomment', '.user-comments', '.fav-slide-block', 
        '.favmore', '.btn-favmore', '.clearfix', 'h5', 'h2'
    ];

    staticSelectors.forEach(selector => {
        document.querySelectorAll(selector).forEach(element => {
            if (!element.closest('.profile-about-user .word-break')) {
                targetContainer.appendChild(element);
                element.style.maxWidth = '100%';
                element.style.overflow = 'hidden';
                element.style.boxSizing = 'border-box';
            }
        });
    });

    // Container constraints
    document.querySelector('.container-right').style.overflowX = 'hidden';
hacker09 May 16, 11:50 PM
haha
ikr
hacker09 May 16, 11:35 PM
I want to force it on other viewers, because it's a messed up view, "so a hacked view".
Either talk with me because you really want to, or pls get scared and leave haha
hacker09 May 8, 2:47 PM
Oh ok hah

good to know

thanks
hacker09 May 7, 11:34 PM
Lol.

I didn't know that you had made a "copy" of my AI script, haha.

Why not just use my AI script, then that does "the same and more"?
hacker09 May 7, 4:36 PM
Thanks, now it works

// ==UserScript==
// @name         Simple Gemini Image Loader
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  Auto-generate image using Gemini API on page load
// @match        *://*/*
// @grant        GM_xmlhttpRequest
// @grant        GM_addStyle
// @connect      generativelanguage.googleapis.com
// ==/UserScript==

(function() {
    'use strict';

    const API_KEY = '';
    const model = 'gemini-2.0-flash-exp-image-generation';
    const prompt = 'A futuristic cityscape at sunset with flying cars';

    function callGeminiImage(prompt, cb) {
        GM_xmlhttpRequest({
            method: 'POST',
            url: `https://generativelanguage.googleapis.com/v1beta/models/${model}:generateContent?key=${API_KEY}`,
            headers: {'Content-Type': 'application/json'},
            data: JSON.stringify({
                contents: [{parts: [{text: prompt}]}],
                generationConfig: {response_modalities: ['TEXT','IMAGE']}
            }),
            onload: res=> {
                const data = JSON.parse(res.responseText);
                const parts = data?.candidates?.[0]?.content?.parts||[];
                for (let part of parts) {
                    if (part.inlineData) {
                        const img=document.createElement('img');
                        img.src=`data:${part.inlineData.mimeType};base64,${part.inlineData.data}`;
                        img.style.maxWidth='100%';
                        document.body.appendChild(img);
                        break;
                    }
                }
            }
        });
    }

    window.addEventListener('load', ()=>callGeminiImage(prompt));
})();
hacker09 May 7, 4:13 PM
I think that I'm using the wrong URL...

// ==UserScript==
// @name         Image Generation using Gemini API (Tampermonkey)
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  Generate and display an image from the Gemini API based on a given prompt
// @author       You
// @match        *://*/*
// @grant        GM.xmlHttpRequest
// @grant        GM_getValue
// @grant        GM_setValue
// ==/UserScript==

(function() {
  'use strict';

  // The AI prompt for image generation (you can modify this as needed)
  const prompt = "Create a 3D rendered image of a pig with wings and a top hat flying over a futuristic scifi city with lots of greenery.";

  // Make the API request to Gemini
  const apiKey = '';  // API key stored in Tampermonkey
  const apiUrl = `https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash-exp-image-generation?key=${apiKey}`;

  const requestPayload = {
    contents: [{
      parts: [{
        text: prompt
      }]
    }],
    config: {
      responseModalities: ["IMAGE"]
    }
  };

  // Use GM.xmlHttpRequest for making the POST request
  GM.xmlHttpRequest({
    method: "POST",
    url: apiUrl,
    responseType: 'json',
    headers: {
      "Content-Type": "application/json"
    },
    data: JSON.stringify(requestPayload),
    onload: function(response) {
      const data = response.response;
      console.log(data)

      // Check if the API response contains an image
      if (data && data.candidates && data.candidates[0].content.parts) {
        for (const part of data.candidates[0].content.parts) {
          if (part.inlineData) {
            const imageData = part.inlineData.data;
            const imageUrl = `data:image/png;base64,${imageData}`;

            // Create an image element and display it on the page
            const imgElement = document.createElement('img');
            imgElement.src = imageUrl;
            imgElement.style.maxWidth = '100%';  // Optionally style the image

            // Append the image to the body or a specific container
            document.body.appendChild(imgElement);
            console.log("Image generated and displayed successfully.");
          }
        }
      } else {
        console.error("Error: No image data found in the response.");
      }
    },
    onerror: function(error) {
      console.error("Request failed", error);
    }
  });

})();

hacker09 May 7, 3:38 PM
Yes.

Thanks I'll give it a look.
hacker09 May 6, 11:09 AM
looks cool, but the left menu is cropped a little bit

I like the floor a lot
hacker09 May 6, 8:14 AM
Never got good code from Gemini, only good txt answers sometimes

It can, but not through the API, it isn't public in yet
hacker09 May 2, 5:19 PM
Got it.

Hmm, I won't watch a 42-minute vid haha.
I've already used Gemini many times before, too. I'm just eager to get the image generation API working in JS.
hacker09 May 2, 3:39 PM
Almost 2k lines of code, wow that's a lot...

Did you copy and paste that from somewhere, or did AI make all that?

I don't think that the speed settings are working for now, and I would also add a function to check mouse clicks and auto-exit of navigation view.

I would also make it fetch my MAL post and parse it and auto-populate the buildings based on that, just in case I ever alter any text or links or delete or add stuff. So that I don't have extra work to go through that HTML and update its code.

TweenJS is a really, really old library
hacker09 Apr 23, 2:07 PM
I won't delete it, it looks really cool!

Nice job!

It's definitely a nice-looking portfolio. I may use/update the code sometime in the future, haha
hacker09 Apr 10, 6:02 PM
thanks
hacker09 Apr 10, 1:47 PM
Do you have a terminal access on your web server or not?

If you do, I would appreciate if you can also enable WebDav

Use a WebDAV-to-FTP bridge like **davfs2**, **WebDAV CGI**, or better: install a server that supports both protocols. Fastest option:

**Option 1: Use Apache with mod_dav + mod_dav_fs**

1. Install Apache:

```bash
sudo apt install apache2
```

2. Enable WebDAV modules:

```bash
sudo a2enmod dav
sudo a2enmod dav_fs
```

3. Create WebDAV folder:

```bash
sudo mkdir /var/www/webdav
sudo chown www-data:www-data /var/www/webdav
```

4. Add config to `/etc/apache2/sites-available/webdav.conf`:

```apache
<VirtualHost *:80>
ServerAdmin you@example.com
DocumentRoot /var/www/webdav
<Directory /var/www/webdav>
DAV On
AuthType Basic
AuthName "webdav"
AuthUserFile /etc/apache2/webdav.passwd
Require valid-user
</Directory>
</VirtualHost>
```

5. Create user:

```bash
sudo htpasswd -c /etc/apache2/webdav.passwd youruser
```

6. Enable site:

```bash
sudo a2ensite webdav.conf
sudo systemctl reload apache2
```

**Optional**: symlink your FTP folder to `/var/www/webdav`.

```bash
sudo ln -s /your/ftp/folder/* /var/www/webdav/
```

Now your FTP files can be accessed via WebDAV.
It’s time to ditch the text file.
Keep track of your anime easily by creating your own list.
Sign Up Login