EOS Dynamic Images Add-on Module

All about the past, current and future webteases and the art of webteasing in general.
---

Are 3rd party extensions to EOS via UserScripts a good idea?

Yes! I want to see more!
27
87%
No, I don't really see the point.
0
No votes
No, I will not install UserScripts in my browser.
4
13%
 
Total votes: 31

fapnip
Explorer At Heart
Explorer At Heart
Posts: 431
Joined: Mon Apr 06, 2020 1:54 pm

EOS Dynamic Images Add-on Module

Post by fapnip »

NOTE: This project has been abandoned.
See here for its replacement:
viewtopic.php?f=2&t=23533

(Open spoiler to see old stuff)
Spoiler: show
Here's a tease that demonstrates using a browser extension and userscripts to add features to EOS:
https://milovana.com/webteases/showteas ... 175b01e61c

To use this tease, you'll need to install the Violentmonkey browser extension for your browser, then install this userscript.

Note: If you're on Android, you'll need to use one of the alternative browsers, like Kiwi Browser, to install Violentmonkey's Chrome extension.

Changes:
v0.8
- Attempt work-around for FireFox intermittently not working.
v0.7
- Work-around issue with FireFox (Should work on FireFox on desktop/PC now.)
v0.6
- Fix issue with Kiwi Brower on Android.
v0.5
- Allow use of gifs/webp by simply renaming the file extension to mp3. Userscript will then allow use of these "mp3s" as images. (No need to embed gif as base64.)
- Add more animated images, since there's plenty of room for them.
- Add asynchronous image preloading.

Please let me know if you think this kind of thing is worth the effort.
Last edited by fapnip on Sat Feb 26, 2022 7:34 pm, edited 11 times in total.
Roblsforbobls
Explorer At Heart
Explorer At Heart
Posts: 272
Joined: Tue May 21, 2019 2:27 am
Gender: Male
Sexual Orientation: Asexual
I am a: Switch

Re: [DEMO] EOS Dynamic Images Add-on Module

Post by Roblsforbobls »

Hey that was really cool! I first tried it with the extension "Tampermonkey" which I already had installed, but it didn't work.
I'd welcome an easier way to implement gifs into Eos (and other features too). Through this method, is there any way someone like me (who has probably less than basic coding experience) can use this to make my own teases? Is it the code in the extension making everything happen, or did the code in the extension add an extra module to the Eos editor so you can do this?
fapnip
Explorer At Heart
Explorer At Heart
Posts: 431
Joined: Mon Apr 06, 2020 1:54 pm

Re: [DEMO] EOS Dynamic Images Add-on Module

Post by fapnip »

The extension makes it all possible, but the tease tells the extension what to do.

So, yes, you can make it work with your own images, etc.

Warning: Animated gifs are implemented via injecting base64 images, so keep them to a minimum as they'll bloat the tease script dramatically.

Feel free to grab the tease code and mess around with making your own:
https://milovana.com/webteases/geteossc ... 175b01e61c
Last edited by fapnip on Fri Oct 16, 2020 11:49 pm, edited 1 time in total.
kerkersklave
Explorer At Heart
Explorer At Heart
Posts: 709
Joined: Sun Jul 06, 2014 2:11 pm
Gender: Male
Sexual Orientation: Open to new ideas!
I am a: Slave

Re: [DEMO] EOS Dynamic Images Add-on Module

Post by kerkersklave »

It is a great idea and can provide many amazing new features.
The problem I see is that it is very dependend on the internal workings of EOS. Some changes it teases like that stop working.
fapnip
Explorer At Heart
Explorer At Heart
Posts: 431
Joined: Mon Apr 06, 2020 1:54 pm

Re: [DEMO] EOS Dynamic Images Add-on Module

Post by fapnip »

kerkersklave wrote: Fri Oct 16, 2020 11:49 pm It is a great idea and can provide many amazing new features.
The problem I see is that it is very dependend on the internal workings of EOS. Some changes it teases like that stop working.
Yes, though then it's just a matter of updating the userscript. And hopefully a new EOS version would bring some of the more popular userscript added features with it ;)

That said, it would take some relatively large changes to EOS to break the module. I'd be more concerned with too many base64 encoded animated gifs embedded in tease scripts eventually breaking EOS. (Bloat the database.)
candii
Explorer At Heart
Explorer At Heart
Posts: 346
Joined: Mon Jul 21, 2014 12:34 am
Sexual Orientation: Open to new ideas!
I am a: Submissive
Dom/me(s): nicole
Location: Canada

Re: [DEMO] EOS Dynamic Images Add-on Module

Post by candii »

omg yes please, imagine to cumming or ruining to one of these :love: :-D
fapnip
Explorer At Heart
Explorer At Heart
Posts: 431
Joined: Mon Apr 06, 2020 1:54 pm

Re: [DEMO] EOS Dynamic Images Add-on Module

Post by fapnip »

Here's an alternate demo that is basically the same as the original, but to work-around the inability to upload GIFs to EOS, this one pulls the animated gif from the album cover in the ID3 tag of an mp3 audio file instead of a giant base64 string embedded in the tease script:
https://milovana.com/webteases/showteas ... 4f352544cd

EDIT: These changes have been merged with the original. This test link will likely be broken as I test new things on it.
Last edited by fapnip on Thu Oct 22, 2020 1:24 pm, edited 1 time in total.
astaria715
Explorer
Explorer
Posts: 18
Joined: Thu Sep 12, 2013 4:59 pm
Gender: Male
Sexual Orientation: Straight
I am a: Switch

Re: [DEMO] EOS Dynamic Images Add-on Module

Post by astaria715 »

Hi fapnip,

great work so far. I am also working on a script for Eos and failed to access the audio API. So your idea is just perfect. I was able to integrate my code and address it from EOS, but I failed to implement events or callbacks. Do you have an idea how to implement that?
fapnip
Explorer At Heart
Explorer At Heart
Posts: 431
Joined: Mon Apr 06, 2020 1:54 pm

Re: [DEMO] EOS Dynamic Images Add-on Module

Post by fapnip »

astaria715 wrote: Sat Oct 17, 2020 1:22 pm but I failed to implement events or callbacks. Do you have an idea how to implement that?
Yes, the core of my userscript can handle sending events to EOS. (And can be re-purposed for other extensions.) An earlier version of it does just that to get the user's IP address: viewtopic.php?p=288678#p288678 (See both the example tease and the userscript.)

Note: You can't send a payload in the event other than the event type. You'll want to add a getter function to your extension that will allow your EOS code to listen for the event, then query the data you need via the getter.

My intent, if I decide to continue, is to build both this Dynamic Image extension (expanding it's features and fixing many existing bug), allowing EOS authors to leverage its features without having to write their own userscript, and to build a core EOS userscript library that others can use as a foundation to build their own EOS extensions.
astaria715
Explorer
Explorer
Posts: 18
Joined: Thu Sep 12, 2013 4:59 pm
Gender: Male
Sexual Orientation: Straight
I am a: Switch

Re: [DEMO] EOS Dynamic Images Add-on Module

Post by astaria715 »

Thanks, I got it working :-)
My intent, if I decide to continue, is to build both this Dynamic Image extension (expanding it's features and fixing many existing bug), allowing EOS authors to leverage its features without having to write their own userscript, and to build a core EOS userscript library that others can use as a foundation to build their own EOS extensions.
That would be awesome! Especially as changes to EOS might break those extensions. It would be good if the user only had to update the "SDK" and not every single UserScript. This becomes especially relevant in the long run, when not every UserScript is actively maintained.
fapnip
Explorer At Heart
Explorer At Heart
Posts: 431
Joined: Mon Apr 06, 2020 1:54 pm

Re: [DEMO] EOS Dynamic Images Add-on Module

Post by fapnip »

astaria715 wrote: Sun Oct 18, 2020 7:57 am That would be awesome!
We'll see if I ever get there. Seems to be at least some interest in the idea.

Script has been updated to work with FireFox now.
User avatar
Trusfrated
Explorer At Heart
Explorer At Heart
Posts: 465
Joined: Mon Nov 08, 2010 8:41 am
Gender: Male

Re: [DEMO] EOS Dynamic Images Add-on Module

Post by Trusfrated »

fapnip wrote: Sun Oct 18, 2020 6:29 pm Script has been updated to work with FireFox now.
I installed the extension and script on Firefox, but the tease claims it's not installed. I see the monkey with a "1" by it indicating it "sees" the tease (I think that's what it means). Is anyone else having this issue with Firefox?

Windows 10 Pro 64bit/Firefox 82.0 64bit
ImageImage
fapnip
Explorer At Heart
Explorer At Heart
Posts: 431
Joined: Mon Apr 06, 2020 1:54 pm

Re: [DEMO] EOS Dynamic Images Add-on Module

Post by fapnip »

Trusfrated wrote: Wed Oct 21, 2020 5:04 am I installed the extension and script on Firefox, but the tease claims it's not installed. I see the monkey with a "1" by it indicating it "sees" the tease (I think that's what it means). Is anyone else having this issue with Firefox?
Added a work-around in hopes that it fixes it. Also added more debugging output.

Please give the updated userscript a try, and even if it does work, please post the output of your browser's console window after the tease loads. Should look something like:

Code: Select all

Installing EOS Dynamic Images v0.8 on milovana.com
Installing EOS Dynamic Images v0.8 on eosscript.com
Waiting for eosContainer...
Hooking Interpereter Run
loaded module: audio
Intercepting Interpereter Run
Installing EOS Dynamic Images modules...
Loaded 3rd party module: DynamicImage
User avatar
Trusfrated
Explorer At Heart
Explorer At Heart
Posts: 465
Joined: Mon Nov 08, 2010 8:41 am
Gender: Male

Re: [DEMO] EOS Dynamic Images Add-on Module

Post by Trusfrated »

fapnip wrote: Wed Oct 21, 2020 7:56 pm Please give the updated userscript a try, and even if it does work, please post the output of your browser's console window after the tease loads.
Thanks fapnip. I think this is probably the output you're looking for:

Code: Select all

Installing EOS Dynamic Images v0.8 on milovana.com EOS Dynamic Images.user.js:154:20
Content Security Policy: The page’s settings blocked the loading of a resource at inline (“script-src”). injected.js:1:5301
Some cookies are misusing the recommended “SameSite“ attribute 3
Installing EOS Dynamic Images v0.8 on eosscript.com EOS Dynamic Images.user.js:154:20
Waiting for eosContainer... EOS Dynamic Images.user.js:193:24
Hooking Interpereter Run EOS Dynamic Images.user.js:175:24
loaded module: audio EosHost.js:119:12
vm: Checking if dynamicImage is installed console.js:14:10
Happy to help if you want me to try something else. Feel free to PM me if you want to take this out of the thread.
ImageImage
User avatar
47dahc
Explorer At Heart
Explorer At Heart
Posts: 286
Joined: Mon Aug 03, 2020 1:43 pm
Gender: Male
Sexual Orientation: Straight
I am a: Switch

Re: [DEMO] EOS Dynamic Images Add-on Module

Post by 47dahc »

The link in the first post works flawlessly but the second updated link doesn't show any gifs. I just get a blank place holder. Chrome on Win10 x64.

Here is my console from the second link

Code: Select all

EOS Dynamic Images.user.js:154 Installing EOS Dynamic Images v0.8 on milovana.com
(anonymous) @ EOS Dynamic Images.user.js:154
(anonymous) @ EOS Dynamic Images.user.js:695
(anonymous) @ EOS Dynamic Images.user.js:695
(anonymous) @ EOS Dynamic Images.user.js:695
m @ injected.js:1
f @ injected.js:1
InjectMulti @ injected.js:1
onHandle @ injected.js:1
(anonymous) @ injected.js:1
(anonymous) @ injected-web.js:1
y @ injected-web.js:1
LoadScripts @ injected-web.js:1
onHandle @ injected-web.js:1
(anonymous) @ injected-web.js:1
(anonymous) @ injected.js:1
p @ injected.js:1
(anonymous) @ injected.js:1
async function (async)
(anonymous) @ injected.js:1
(anonymous) @ injected.js:1
(anonymous) @ injected.js:1
n @ injected.js:1
(anonymous) @ injected.js:1
(anonymous) @ injected.js:1
n @ injected.js:1
(anonymous) @ injected.js:1
(anonymous) @ injected.js:1
showtease.php?id=47139&key=4f352544cd:54 GET https://www.googletagmanager.com/gtag/js?id=UA-593826-1 net::ERR_BLOCKED_BY_CLIENT
DevTools failed to load SourceMap: Could not load content for chrome-extension://bkijmpolkanhdehnlnabfooghjdokakc/content.js.map: HTTP error: status code 404, net::ERR_UNKNOWN_URL_SCHEME
EOS Dynamic Images.user.js:154 Installing EOS Dynamic Images v0.8 on eosscript.com
(anonymous) @ EOS Dynamic Images.user.js:154
(anonymous) @ EOS Dynamic Images.user.js:695
(anonymous) @ EOS Dynamic Images.user.js:695
(anonymous) @ EOS Dynamic Images.user.js:695
m @ injected.js:1
f @ injected.js:1
InjectMulti @ injected.js:1
onHandle @ injected.js:1
(anonymous) @ injected.js:1
(anonymous) @ injected-web.js:1
y @ injected-web.js:1
LoadScripts @ injected-web.js:1
onHandle @ injected-web.js:1
(anonymous) @ injected-web.js:1
(anonymous) @ injected.js:1
p @ injected.js:1
(anonymous) @ injected.js:1
async function (async)
(anonymous) @ injected.js:1
(anonymous) @ injected.js:1
(anonymous) @ injected.js:1
n @ injected.js:1
(anonymous) @ injected.js:1
(anonymous) @ injected.js:1
n @ injected.js:1
(anonymous) @ injected.js:1
(anonymous) @ injected.js:1
EOS Dynamic Images.user.js:193 Waiting for eosContainer...
EOS Dynamic Images.user.js:175 Hooking Interpereter Run
DevTools failed to load SourceMap: Could not load content for chrome-extension://bkijmpolkanhdehnlnabfooghjdokakc/content.js.map: HTTP error: status code 404, net::ERR_UNKNOWN_URL_SCHEME
EosHost.js:119 loaded module: audio
EOS Dynamic Images.user.js:183 Intercepting Interpereter Run
EOS Dynamic Images.user.js:184 Installing EOS Dynamic Images modules...
EOS Dynamic Images.user.js:627 Loaded 3rd party module: DynamicImage
2console.js:14 vm: Checking if dynamicImage is installed
console.js:14 vm: dynamicImage version 0.8
EOS Dynamic Images.user.js:66 load Got Value: file:animated-test-* n {_events: {…}, _eventsCount: 2, _maxListeners: undefined, handleGlobalClick: ƒ, handleGlobalKeydown: ƒ, …}
load @ EOS Dynamic Images.user.js:66
Interpreter.stepCallExpression @ interpreter.min.js:1
Interpreter.step @ interpreter.min.js:1
Interpreter.run @ interpreter.min.js:1
window.Interpreter.run @ EOS Dynamic Images.user.js:189
value @ VirtualMachine.js:29
run @ eval.js:8
(anonymous) @ ActionQueue.js:54
u @ runtime.js:45
(anonymous) @ runtime.js:274
E.forEach.e.<computed> @ runtime.js:97
r @ asyncToGenerator.js:3
s @ asyncToGenerator.js:25
Promise.then (async)
r @ asyncToGenerator.js:13
s @ asyncToGenerator.js:25
Promise.then (async)
r @ asyncToGenerator.js:13
s @ asyncToGenerator.js:25
Promise.then (async)
r @ asyncToGenerator.js:13
s @ asyncToGenerator.js:25
Promise.then (async)
r @ asyncToGenerator.js:13
s @ asyncToGenerator.js:25
Promise.then (async)
r @ asyncToGenerator.js:13
s @ asyncToGenerator.js:25
Promise.then (async)
r @ asyncToGenerator.js:13
s @ asyncToGenerator.js:25
(anonymous) @ asyncToGenerator.js:32
(anonymous) @ asyncToGenerator.js:21
value @ ActionQueue.js:33
value @ ActionQueue.js:14
(anonymous) @ EosHost.js:263
u @ runtime.js:45
(anonymous) @ runtime.js:274
E.forEach.e.<computed> @ runtime.js:97
r @ asyncToGenerator.js:3
s @ asyncToGenerator.js:25
Promise.then (async)
r @ asyncToGenerator.js:13
s @ asyncToGenerator.js:25
(anonymous) @ asyncToGenerator.js:32
(anonymous) @ asyncToGenerator.js:21
(anonymous) @ EosHost.js:240
(anonymous) @ EosHost.js:108
u @ runtime.js:45
(anonymous) @ runtime.js:274
E.forEach.e.<computed> @ runtime.js:97
r @ asyncToGenerator.js:3
s @ asyncToGenerator.js:25
(anonymous) @ asyncToGenerator.js:32
(anonymous) @ asyncToGenerator.js:21
(anonymous) @ main.d2008702.chunk.js:1
onClick @ SplashScreen.jsx:21
s @ react-dom.production.min.js:14
h @ react-dom.production.min.js:14
(anonymous) @ react-dom.production.min.js:14
E @ react-dom.production.min.js:15
at @ react-dom.production.min.js:52
it @ react-dom.production.min.js:51
st @ react-dom.production.min.js:52
ht @ react-dom.production.min.js:56
F @ react-dom.production.min.js:287
j @ react-dom.production.min.js:19
Jt @ react-dom.production.min.js:70
$t @ react-dom.production.min.js:69
t.unstable_runWithPriority @ scheduler.production.min.js:19
Gi @ react-dom.production.min.js:122
D @ react-dom.production.min.js:287
Qt @ react-dom.production.min.js:68
EOS Dynamic Images.user.js:351 Selecte Image: {id: 1107199, hash: "ba72208181c74cc7421da6a425a0a2fa20dff7b6", size: 395836, type: "audio/mpeg"}
ba72208181c74cc7421da6a425a0a2fa20dff7b6.jpg:1 GET https://media.milovana.com/timg/tb_xl/ba72208181c74cc7421da6a425a0a2fa20dff7b6.jpg 403
Image (async)
setImage @ EOS Dynamic Images.user.js:514
setImageFromLocator @ EOS Dynamic Images.user.js:368
load @ EOS Dynamic Images.user.js:67
Interpreter.stepCallExpression @ interpreter.min.js:1
Interpreter.step @ interpreter.min.js:1
Interpreter.run @ interpreter.min.js:1
window.Interpreter.run @ EOS Dynamic Images.user.js:189
value @ VirtualMachine.js:29
run @ eval.js:8
(anonymous) @ ActionQueue.js:54
u @ runtime.js:45
(anonymous) @ runtime.js:274
E.forEach.e.<computed> @ runtime.js:97
r @ asyncToGenerator.js:3
s @ asyncToGenerator.js:25
Promise.then (async)
r @ asyncToGenerator.js:13
s @ asyncToGenerator.js:25
Promise.then (async)
r @ asyncToGenerator.js:13
s @ asyncToGenerator.js:25
Promise.then (async)
r @ asyncToGenerator.js:13
s @ asyncToGenerator.js:25
Promise.then (async)
r @ asyncToGenerator.js:13
s @ asyncToGenerator.js:25
Promise.then (async)
r @ asyncToGenerator.js:13
s @ asyncToGenerator.js:25
Promise.then (async)
r @ asyncToGenerator.js:13
s @ asyncToGenerator.js:25
(anonymous) @ asyncToGenerator.js:32
(anonymous) @ asyncToGenerator.js:21
value @ ActionQueue.js:33
value @ ActionQueue.js:14
(anonymous) @ EosHost.js:263
u @ runtime.js:45
(anonymous) @ runtime.js:274
E.forEach.e.<computed> @ runtime.js:97
r @ asyncToGenerator.js:3
s @ asyncToGenerator.js:25
Promise.then (async)
r @ asyncToGenerator.js:13
s @ asyncToGenerator.js:25
(anonymous) @ asyncToGenerator.js:32
(anonymous) @ asyncToGenerator.js:21
(anonymous) @ EosHost.js:240
(anonymous) @ EosHost.js:108
u @ runtime.js:45
(anonymous) @ runtime.js:274
E.forEach.e.<computed> @ runtime.js:97
r @ asyncToGenerator.js:3
s @ asyncToGenerator.js:25
(anonymous) @ asyncToGenerator.js:32
(anonymous) @ asyncToGenerator.js:21
(anonymous) @ main.d2008702.chunk.js:1
onClick @ SplashScreen.jsx:21
s @ react-dom.production.min.js:14
h @ react-dom.production.min.js:14
(anonymous) @ react-dom.production.min.js:14
E @ react-dom.production.min.js:15
at @ react-dom.production.min.js:52
it @ react-dom.production.min.js:51
st @ react-dom.production.min.js:52
ht @ react-dom.production.min.js:56
F @ react-dom.production.min.js:287
j @ react-dom.production.min.js:19
Jt @ react-dom.production.min.js:70
$t @ react-dom.production.min.js:69
t.unstable_runWithPriority @ scheduler.production.min.js:19
Gi @ react-dom.production.min.js:122
D @ react-dom.production.min.js:287
Qt @ react-dom.production.min.js:68
EOS Dynamic Images.user.js:75 startSlides Got Value: gallery:e555e68b-fac5-46a3-9df8-d51092ab0f22/* 5000 true
startSlides @ EOS Dynamic Images.user.js:75
Interpreter.stepCallExpression @ interpreter.min.js:1
Interpreter.step @ interpreter.min.js:1
Interpreter.run @ interpreter.min.js:1
window.Interpreter.run @ EOS Dynamic Images.user.js:189
value @ VirtualMachine.js:29
run @ eval.js:8
(anonymous) @ ActionQueue.js:54
u @ runtime.js:45
(anonymous) @ runtime.js:274
E.forEach.e.<computed> @ runtime.js:97
r @ asyncToGenerator.js:3
s @ asyncToGenerator.js:25
Promise.then (async)
r @ asyncToGenerator.js:13
s @ asyncToGenerator.js:25
Promise.then (async)
r @ asyncToGenerator.js:13
s @ asyncToGenerator.js:25
Promise.then (async)
r @ asyncToGenerator.js:13
s @ asyncToGenerator.js:25
Promise.then (async)
r @ asyncToGenerator.js:13
s @ asyncToGenerator.js:25
Promise.then (async)
r @ asyncToGenerator.js:13
s @ asyncToGenerator.js:25
Promise.then (async)
r @ asyncToGenerator.js:13
s @ asyncToGenerator.js:25
Promise.then (async)
r @ asyncToGenerator.js:13
s @ asyncToGenerator.js:25
Promise.then (async)
r @ asyncToGenerator.js:13
s @ asyncToGenerator.js:25
Promise.then (async)
r @ asyncToGenerator.js:13
s @ asyncToGenerator.js:25
(anonymous) @ asyncToGenerator.js:32
(anonymous) @ asyncToGenerator.js:21
value @ ActionQueue.js:33
value @ ActionQueue.js:14
(anonymous) @ EosHost.js:263
u @ runtime.js:45
(anonymous) @ runtime.js:274
E.forEach.e.<computed> @ runtime.js:97
r @ asyncToGenerator.js:3
s @ asyncToGenerator.js:25
Promise.then (async)
r @ asyncToGenerator.js:13
s @ asyncToGenerator.js:25
(anonymous) @ asyncToGenerator.js:32
(anonymous) @ asyncToGenerator.js:21
(anonymous) @ EosHost.js:240
(anonymous) @ EosHost.js:108
u @ runtime.js:45
(anonymous) @ runtime.js:274
E.forEach.e.<computed> @ runtime.js:97
r @ asyncToGenerator.js:3
s @ asyncToGenerator.js:25
(anonymous) @ asyncToGenerator.js:32
(anonymous) @ asyncToGenerator.js:21
(anonymous) @ main.d2008702.chunk.js:1
onClick @ SplashScreen.jsx:21
s @ react-dom.production.min.js:14
h @ react-dom.production.min.js:14
(anonymous) @ react-dom.production.min.js:14
E @ react-dom.production.min.js:15
at @ react-dom.production.min.js:52
it @ react-dom.production.min.js:51
st @ react-dom.production.min.js:52
ht @ react-dom.production.min.js:56
F @ react-dom.production.min.js:287
j @ react-dom.production.min.js:19
Jt @ react-dom.production.min.js:70
$t @ react-dom.production.min.js:69
t.unstable_runWithPriority @ scheduler.production.min.js:19
Gi @ react-dom.production.min.js:122
D @ react-dom.production.min.js:287
Qt @ react-dom.production.min.js:68
Love the idea and can't wait for future teases with animated gifs. Gonna add a whole new level of sexy.
Creator of MetroVerter The Metronome to Tcode converter
My Guide on How to create and mix estim surround videos
My guide on Setup TeaseAI - Awakening with Restim
Post Reply