Page 1 of 2
EOS Dynamic Images Add-on Module
Posted: Fri Oct 16, 2020 9:28 pm
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.
Re: [DEMO] EOS Dynamic Images Add-on Module
Posted: Fri Oct 16, 2020 11:28 pm
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?
Re: [DEMO] EOS Dynamic Images Add-on Module
Posted: Fri Oct 16, 2020 11:46 pm
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
Re: [DEMO] EOS Dynamic Images Add-on Module
Posted: Fri Oct 16, 2020 11:49 pm
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.
Re: [DEMO] EOS Dynamic Images Add-on Module
Posted: Fri Oct 16, 2020 11:51 pm
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.)
Re: [DEMO] EOS Dynamic Images Add-on Module
Posted: Sat Oct 17, 2020 6:28 am
by candii
omg yes please, imagine to cumming or ruining to one of these

Re: [DEMO] EOS Dynamic Images Add-on Module
Posted: Sat Oct 17, 2020 7:30 am
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.
Re: [DEMO] EOS Dynamic Images Add-on Module
Posted: Sat Oct 17, 2020 1:22 pm
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?
Re: [DEMO] EOS Dynamic Images Add-on Module
Posted: Sat Oct 17, 2020 5:19 pm
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.
Re: [DEMO] EOS Dynamic Images Add-on Module
Posted: Sun Oct 18, 2020 7:57 am
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.
Re: [DEMO] EOS Dynamic Images Add-on Module
Posted: Sun Oct 18, 2020 6:29 pm
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.
Re: [DEMO] EOS Dynamic Images Add-on Module
Posted: Wed Oct 21, 2020 5:04 am
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
Re: [DEMO] EOS Dynamic Images Add-on Module
Posted: Wed Oct 21, 2020 7:56 pm
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
Re: [DEMO] EOS Dynamic Images Add-on Module
Posted: Thu Oct 22, 2020 6:58 am
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.
Re: [DEMO] EOS Dynamic Images Add-on Module
Posted: Thu Oct 22, 2020 12:47 pm
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.