Mind Echo - Handy based hypno game

Hey everyone,

I played a game integration a few days ago (Clean Cut - a horror fap game (Game integration)) and really enjoyed it and thought I would like to make one myself but tailored more specifically to my tastes. So I did and here it is.

Mind Echo is a desktop app I built for myself that turns your own images (and optionally short video clips) into a hypnotic-conditioning session, synced beat-for-beat to a Handy. I wanted something that actually *builds* toward something over the course of a session instead of just looping the same intensity the whole time, and I wanted the device to be part of the escalation, not just a vibrator running in the background while a slideshow plays on top of it.

So that’s what I built. Each session is a procedurally generated hypnosis session - It slowly builds up, visually, audibly, in pacing and in how the device moves. The game will program into you a fetish of your design through your chosen added content.

It’s yours

I don’t ship any content with it, no images, no videos. You drop your own stuff into plain folders and it just picks it up, no import step, not even a restart. Same for video clips if you want them woven in.

Once it’s playing, near enough everything is tunable without touching a config file - pacing, intensity, how much randomness gets rolled into a session, how the finale behaves. There’s also an opt-in system that quietly learns from your own session history and adjusts things over time, fully logged in plain English so it’s never a black box.

What you’ll need

- A Handy (the app is built entirely around it. No Handy, no sync, though there’s a device-free mode if you just want the slideshow/audio side)

- Your own images at minimum; video is optional.

- Windows [confirm this is still accurate for whatever you’re shipping]

Download link - https://jean-cucumber.itch.io/mind-echo

Where it’s at right now

This is a quick personal project and it’s in a state I’m happy calling a real V1, but I’m one person testing on my own hardware, so if you run into something weird I’d actually like to hear about it rather than have it quietly annoy you into never opening it again.

To be clear since this is the kind of thing that should be said outright: everything here is self-administered and fully consensual, the “against your will” framing is fantasy, the mechanics are entirely something you’re choosing to run on yourself. 18+ only, obviously.

Let me know what you think. I’m open to feature requests and I am already working on new features.

11 Likes

Here is a foot fetish based image set for the app that I have been using for testing.

1 Like

Very nice. Some feedback:

Adding lots of files seems to either make it crash or take so long to process them that it feels like it’s crashed. I’m guessing it’s caching them or something, but I think it should show the progress.

Would be nice to have ability to “import” media, i.e. it stores links to where the files live so we don’t need to make duplicates just for this game. If adding import functionality, it’d also be nice to add a quick way to tags files as soft/medium/intense in the media library, ideally I’d like to view one media at a time and press a hotkey to tag it and then it moves on to the next one that needs a tag.

It’d also be nice if it supported “collections” so we can share them here. Like FapJourney, these would just be folders with the Soft/Medium/Intense subfolders inside them or a JSON that marks the tags. Using my own content is fine but there’s a certain thrill from using something else you haven’t seen before.

2 Likes

How many files were you adding? My new testing folder has around 140 images and 14 videos which results in a 1.5 seconds freeze on first load of the media page (once it’s cached it doesn’t freeze at all). I think I might switch to a system that loads the media in the folder when the game loads rather than on load of the media scene. This should prevent the loading freeze.

As for “import” the media scene has an open folder button that takes you to the directory of the images, you should be able to drop the image and videos folder straight on top of the existing ones to add files, if you keep the file structure the same it will just add media to the relevant folders. (I will work on an export and import system that works with Zip folders)

Not sure what you mean by tags? Perhaps you mean for the folders they are in, but I want people to be able to move their images around as they like, adding tags might complicate that.

I’m not sure where exactly in the settings to change this, but the game isn’t using the full length of the handy. It’s not a matter of the config saying to use less than the full stroke, and it’s working just fine on other games and via the handyfeeling portal. Any ideas how to make it longer?

1 Like

This one, I had the same issue I literally had to make this setting just for this.


The beginning doesn’t start at full length, it get’s there later though if you get further in, you can test that it uses the full length by playing around in the heartbeat designer. (Don’t worry about changing stuff in there, it’s not hooked up properly yet)

Turns out it was just 1 file causing the issue, was a large gif. The loading is still pretty slow with ~1000 files but it’s at least usable now, although trying to adjust the session duration is impossible because it seems to freeze (probably chugging through all the files again) whenever the slider is adjusted. Loading all at once on launch (with progress indicator) would be nice yeah.

I’m also having the issue with it not using the full range of the Handy, even way after the session duration has finished. The handy settings and the settings in all the phase configs look fine, but it doesn’t match up to what’s happening. Are you using the Handy 2 perhaps?

If/when you get round to supporting import/export system, would be nice to be able to specify all the phase settings and customisable messages.

Wow I never expected 1000 files… hehe.
I will need to work on that.
It really shouldn’t be chugging on the images side when the session length slider is moved because the images aren’t taken into consideration until the beat actually plays and it picks one at psuedo-random, the only time that should chug is if there are perhaps hundreds of videos as they are taken into consideration when structuring the timeline.
Are there lots of animated gifs in there? I didn’t design it to handle gifs so that’s interesting if the animation actually plays during the fade in/out. I will do some testing.

I am using a Handy 1 with software 3.2.3. You guys are an amazing help, thankyou so much for the feedback. I have to try and recreate the full range issue you guys are having. Or I will try a different strategy for the full range fix entirely.

p.s. I also should probably be clear, the preview you see in the script settings is an example, each time the session begins it is a new seed/generation randomly generated based on the settings.

How far in does it go to full length? It does like, 40-60 strokes for the first 15 min or so, after that I kinda gave up.

And think you could add a way for us to change that so it does full length from the start, maybe?

1 Like

No gifs I think but ~400 videos and it was really chugging on duration slider.

My Handy’s firmware version is 4.2.2+44874492. I guess you should try and upgrade to the same version and maybe add a way to specify a seed so we can both test with exactly the same settings.

1 Like

@jean_cucumebr Great Game, Software u made there :skull: :clap:. So much potential for future content!
4 suggestions for future Updates.

1: Intiface Support
2: Backgrounds / Hypno Spirals, Liquid Drops, Bubbles, Clouds, Hearts, Stars, Neon lights.
3: Your own Audio, Music / ASMR, JOI, Binaurals, Drones.
4: Import Menu Importing Images & Videos directly in Mind Echos Main Menu. Would be useful for people who have their Images & Videos in Folders somewhere else, HDDs, SSDs.

2 Likes

Hey, first a big thank you for making this game. Really love the idea.

Just wanted to drop that I am experiencing the same problem with the stroking length as already mentioned. I am using the Handy 2 Pro with the latest firmware.

Set “Beast per Stroke” to MORE than 1.
There isnt an issue with stroking lenght.
You get short strokes with 1 and long strokes with 8

You can overwrite your settings with mine that work.

Overwrite it in C:\Users\YOUR USERNAME\AppData\Roaming\Godot\app_userdata\Mind Echo
handy_settings.cfg

[script]

enable_session_variety=true
break_seconds_min=5.0
break_seconds_max=5.0
video_segment_budget_ratio=0.5
video_position_bias=0.10000000000000007
min_bpm=30.0
enable_video_segments=true
session_variety_budget_ratio=0.5
max_variety_insertions=33.0
allow_mid_phase_insertions=true
ramp_then_peak_total_seconds_min=30.0
ramp_then_peak_total_seconds_max=50.0
ramp_then_peak_tail_seconds_min=15.0
ramp_then_peak_tail_seconds_max=15.0
brutal_burst_seconds_min=15.0
brutal_burst_seconds_max=15.0
segment_min_minutes=8.0
segment_max_minutes=10.0
min_video_bpm_fraction=0.5

[session]

max_length_minutes=20.0

[phase]

brutal_burst_bpm_start=0.15
peak_bpm_start=0.15
ramp_bpm_end=1.0
ramp_bpm_start=0.15
spiral_bpm_start=0.15
overload_bpm_start=0.15
reinforcement_bpm_end=1.0
reinforcement_bpm_start=0.15
escalation_bpm_end=1.0
escalation_bpm_start=0.15
induction_bpm_start=0.1
induction_bpm_end=0.2
fixation_bpm_start=0.15
fixation_bpm_end=1.0
video_stroke_min=0.0
video_pulse_scale=2.35
video_pulse_hold=3.0
ramp_pulse_scale=2.35
ramp_pulse_hold=3.0
induction_pulse_scale=2.35
induction_pulse_hold=3.0
fixation_pulse_scale=2.35
fixation_pulse_hold=3.0
escalation_pulse_scale=2.35
escalation_pulse_hold=3.0
reinforcement_pulse_scale=2.35
reinforcement_pulse_hold=3.0
overload_pulse_scale=2.35
overload_pulse_hold=3.0
spiral_pulse_scale=2.35
spiral_pulse_hold=3.0
peak_pulse_scale=2.35
peak_pulse_hold=3.0
brutal_burst_pulse_scale=2.35
brutal_burst_pulse_hold=3.0
jerk_standard_fall_fraction=0.6
jerk_standard_rise_fraction=0.15
jerk_standard_second_peak_fraction=1.0
jerk_brutal_rise_fraction=0.25
jerk_brutal_fall_fraction=0.1
fixation_hold_min=2.0
fixation_hold_max=2.0
induction_hold_min=4.0
induction_hold_max=8.0
escalation_hold_min=5.0
escalation_hold_max=10.0
reinforcement_hold_min=5.0
reinforcement_hold_max=10.0
overload_hold_min=5.0
overload_hold_max=10.0
spiral_hold_min=5.0
spiral_hold_max=10.0
ramp_hold_min=5.0
ramp_hold_max=10.0
peak_hold_min=5.0
peak_hold_max=10.0
brutal_burst_hold_min=5.0
brutal_burst_hold_max=10.0
induction_beats_per_stroke=2.0
induction_stroke_jitter=0.25
induction_stroke_max_end=100.0
induction_stroke_min_end=30.0
induction_stroke_max=100.0
induction_stroke_weight=1.0
induction_stroke_min=0.0
fixation_duration_weight=20.0
fixation_stroke_min=0.0
fixation_stroke_max=100.0
fixation_stroke_weight=1.0
fixation_stroke_weight_end=1.0
fixation_stroke_min_end=25.0
fixation_stroke_max_end=90.0
fixation_stroke_jitter=0.2
fixation_beats_per_stroke=2.0
fixation_lead_in_min=0.0
fixation_lead_in_max=0.0
fixation_drone_carrier=155.0
fixation_drone_pulse=8.0
fixation_mantra=false
fixation_weight_drift=false
fixation_stroke_drift=false
fixation_jerk_brutal=false
fixation_double_heartbeat=true
fixation_pool_soft=false
fixation_pool_medium=true
fixation_pool_intense=false
fixation_pool_programming=false
escalation_stroke_min=0.0
escalation_stroke_max=100.0
escalation_stroke_weight=1.0
reinforcement_stroke_min=0.0
reinforcement_stroke_weight=1.0
overload_stroke_min=0.0
overload_stroke_weight=1.0
spiral_stroke_min=0.0
spiral_stroke_weight=1.0
ramp_stroke_min=0.0
ramp_stroke_weight=1.0
peak_stroke_min=0.0
peak_stroke_max=100.0
peak_stroke_weight=1.0
brutal_burst_stroke_min=0.0
brutal_burst_stroke_weight=1.0
video_stroke_min_end=0.0
video_stroke_jitter=0.5
induction_weight_drift=false
overload_stroke_jitter=0.2
video_stroke_weight=0.5
video_weight_drift=false
video_stroke_drift=false
video_beats_per_stroke=2.0
video_lead_in_max=4.0
induction_duration_weight=25.0
induction_pool_medium=true
induction_pool_intense=true
induction_pool_programming=true
induction_mantra=true
jerk_brutal_double_pump=true
escalation_beats_per_stroke=2.0
reinforcement_beats_per_stroke=2.0
overload_beats_per_stroke=2.0
spiral_beats_per_stroke=2.0
ramp_beats_per_stroke=2.0
peak_beats_per_stroke=2.0
brutal_burst_beats_per_stroke=2.0

[handy_device]

slide_min=0.0
slide_max=100.0

1 Like

I have been looking into the stroke length issue. There is definitly a problem with it. It has to do with how the beat stroke is made, you can test to see if the stroke length actually uses the full length by putting a flat spot on the top of the beat at 100. It does go to full length there.
This is one of the reasons I am trying to get the heartbeat editor to work.
The default settings are to slowly ramp up stroke length usage as it stands, which probably makes it look like it has stroke length issues when it’s intended behaviour.

1 Like

@jean_cucumebr Are the strokes intentionally so short when u set it to 1 so it keeps up with the BPM?

EDIT: Ok gotcha!

1 Like

Yes the high BPMs are shortened for maximum speed of the handy so the strokes get shorter while maintaining the BPM of strokes. Lower max BPM if you don’t want vibratory motion at super high BPMs.

I’m really glad I spend all that time making the settings super configurable for people and clear with tooltips as to what they all do. Time well spent.

1 Like

@jean_cucumebr Wouldnt a solution be to add an automatic mode that chnages from 1 - 8 so that Mind Echo adjusts itself while playing?
Or would Intiface support fix it?

When i set the “Beast per Stroke” to 1 the strokes are like 15% out of 100%.
And with 2 its going to 35% approx.

While messing with settings, I get a hard crash after pressing Next Seed pretty consistently in Script Settings. Is this a known bug, or is anyone else experiencing this?

Outside of that, would happily shell out a few bucks for a TCode integration version. I love this type of customer-driven content personally.

1 Like

Yeah happening to me too.
Im getting several crashes too while clicking on Script settings.
Or when im in Script setting and trying to change the time to something other than 20 minutes results in a Crash.

I don’t really know what you mean by that sorry, I think I found a solution by changing the beat profile, that’s only editable in code for now though, until I get the heartbeat editor running.

@Ultari123 & @DarkkSkull on the crashing issues.
I didn’t know this was a thing, thankyou for bringing it to my attention.
I currently have everything hooked up to actually generate the script before it makes a preview, meaning that the heaviest lifting part of the program (the script generation and compiling and validation) is all being handled every time the new seed is clicked. The preview is just a look at the result.
I can probably fix this by only making the preview a placeholder of what actual generation would look like, that will significantly reduce the probability of a crash, though it does mean the results might be less accurate to what really gets generated.

I really appreciate all the feedback, my list of things to do for version 2 is nice and detailed now. Any more feedback would be greatly appreciated including from any other testers, What the app does well, what people want to see in in future versions and and bugs obviously.

1 Like