Friday, April 18, 2025

Mesmerizer 1.8.1 released

Mesmerizer 1.8.1 is up in Vendors, MP to follow sometime this weekend.  Details of what's new are in the previous post.  As always, regardless of how you purchased your Mesmerizer, you can get the update from any of my vendors (links in the stickies on the right), or indeed any CasperVend vendor.

I may tweak the defaults of the fixate command in future releases, to work better with different avatar sizes.  If there's a particular body location you'd like to see as a predefined choice, let me know.

Monday, February 24, 2025

Mesmerizer 1.8.1 preview

Version 1.8.1 of the Mesmerizer was intended to be a small bug-fix release.  The original impetus for shipping it was to address a mostly cosmetic problem with outfits.  If you have No9 outfits configured in your #RLV, but no Peanut outfit folder (i.e. you have a folder in #RLV called "> Outfits" but not one called "Outfits"), then listoutfits will show a "ghost" peanut folder that is identical to the genuine No9 folder.  This only affects viewers using RLVa (e.g. Firestorm), and while it is mostly cosmetic, it's confusing.   This release fixes that display issue.

While working on outfits, I discovered a potential out-of-memory issue with listing the contents of large RLV folders (extended with ~more folders) and as a result I adjusted the display code to operate on each folder part in isolation, rather than trying to read the entire extended folder into memory at once, as the code had previously done.  Since a side-effect of listing a folder is to populate the symbol $rlvpaths, there is still a potential memory limitation, but it's much less easy to hit with reasonable folders than it was.  I have ideas for how to address that remaining limit but they will have to wait for another release.

Enhanced Camera Control

While working on these bugs, I was reminded of a request I'd received about enhancing camera control.  So version 1.8.1 adds two new camera commands: textures and fixate.

Replacing Textures

The textures command takes a single parameter - a texture key - and replaces the textures used to display all in-world objects except those that are worn by the subject with the given texture.  This allows for the creation of numerous visual effects, most of them resulting in a very disorienting experience for the sub, especially when combined with some of the distortions and effects available via vision spheres or overlays.  The normal textures can be restored with a textures "-" command.

Body-part fixation

Version 1.8.1 also introduces the fixate command.  This command causes the sub's camera to become locked onto a target avatar (by default the issuer of the fixate command), at a specific point on the target avatar's body (by default the avatar's face).  fixate takes a single parameter: a colon-separated list of key-value pairs.  The simplest fixate command, one that simply takes all the defaults, is:

 /99 fixate "" 

This will cause the sub's camera to point at your face and track you if you move.  If you move more than 30m from the sub, the camera tracking will end.  You can also end it explicitly either by passing "-" to fixate (i.e. fixate "-"), or by using the existing freecam command.

Multiple options may be specified, each option being a key-value pair, as follows:

KeywordDescriptionExample
targetname or key of avatar to tracktarget=Nue Broome
partbody-part or offset to targetpart=face
sitpartbody-part or offset to target when seatedsitpart=<0,0,-0.2>
camdistDistance the camera should be from the targetcamdist=1.5
camheightHeight offset of the camera from the target avatar's centercamheight=0.3
fovCamera field of view in degrees. Default is 45fov=20
rangeDistance at which the fixation stops. Default is 30mrange=15
resumeWhether to resume fixation if the target re-enters the range. Default is noresume=yes

 

The target keyword can specify the avatar to be targeted.  You can use either an avatar name or key.  If omitted, the command issuer will be targeted.

part specifies either a body-part by name (one of "feet", "crotch", "breasts" and "face"), or as a vector offset from the avatar's center. This vector should be thought of as specifying a fraction of the avatar's size, so an offset of <0,0,0.5> should point the camera roughly at the top of the target's head, while <0,0,-0.5> would aim the camera at the bottom of their feet.  Since animations or poses can't be taken into account, the target precision is necessarily limited.

sitpart allows you to specify a different target offset for when the target avatar is sitting.  If a body-part name is specified for part, then sitpart defaults to an appropriate value for that body part.  sitpart can also be specified as "none", in which case the camera will be unlocked while the target is sitting.

camdist specifies the horizontal distance the camera should be placed from the avatar.  The default is 2m.  camheight specifies the height of the camera, again as a fraction of the avatar height, with a zero height (the default) being roughly level with the target avatar's midpoint.  This means that a view of the face will be looking upwards, while a view of the feet will be angled down.

fov specifies the field of view in degrees.  The default is 45 degrees. 

range specifies the distance from the sub at which the target will no longer be tracked.  If the target moves further away than the specified range or leaves the sim, the sub's camera will be unlocked.  By default, this will end the fixation.  However, if resume=yes is specified as an option, then the fixation will resume if the target comes back within range.  This also allows you to enable fixation for a target that is not currently nearby (for example, in a login trigger or event).  To do this, along with the resume=yes qualifier, if you want to specify a target avatar, you will need to use a key rather than a name.  For example:

/99 fixate "target=7f1cfe79-71ae-4855-b766-754ec2e38bd7:part=face:resume=yes"

As before, either the freecam or fixate "-" commands will cancel an active fixation.

Environmental interrogation

Version 1.8.1 also includes the first of what I expect to be a family of "environmental interrogation" features - methods that allow Mesmerizer commands to gain access to information about the sub's surroundings.

Imagine you have a trigger "get onto the bed" with an action of something like "moveto ed3b2ea3-98b5-415e-baf5-0496727e6ffd sit ed3b2ea3-98b5-415e-baf5-0496727e6ffd".  The intent is that saying "get onto the bed" will cause the sub to walk over to the object with the given key (presumably a bed) and then sit on it.  This works fine.  However, if you decide to switch the bed for a new one, then its key will change and the trigger will no longer work.  You can use the object name instead of a key, but again different beds typically have different names.  If the object is modifiable, you could change its name to "Bed" (and remember to change the names of all future beds accordingly), but that's not an option for no-mod beds.  Also, if the bed is no-copy and you do this, then when you take it back into inventory, it will still be called simply "Bed", which isn't very descriptive.

Mesmerizer 1.8.1 addresses this with a new command - nearby - that looks for nearby objects whose names contain a given string.  nearby takes two parameters - a variable name and a string - and will set the variable to a list of object names that contain the given string.  For instance, the command:

/99 nearby beds bed

will set the variable "beds" to a list of the names of nearby objects that contain the substring "bed".  The nearest such object will be listed first, so the compound command:

/99 nearby beds bed sit "$beds.1"

will sit on the nearest thing with "bed" in its name.  The match is case-insensitive, and only scripted objects are returned.  If an object name contains a colon, the colon will be replaced (in the beds variable) with a different symbol "" that looks like a colon, but is actually a different unicode character.  Mesmerizer commands that take object names will silently convert this character back to a colon, which allows this somewhat convoluted process to work transparently.

At the initial release, only a case-insensitive substring search is supported.  In future I may add additional options to control the type of comparison (e.g. whole-word matching).  If you have a need for a specific type of comparison, let me know.


Monday, October 21, 2024

CHAOS Owner HUD 1.4 available

CHAOS Owner HUD 1.4 is now available in vendors (see stickies on the right for locations).  I'll put it up on MP shortly.  Regardless of whether you obtained your current Owner HUD from MP or from a vendor, you should be able to get a redelivery via a vendor.  As described in the previous post, the new version adds support for the use of media notecards in the Owner HUD, as an easier alternative to having to load them into the target Mesmerizer.

The Media Library, described in the same post, is still under development.  The underlying database works well, but I'm still working on creating a UI that's somewhat user-friendly (given the limitations of SL's blue menus).


Saturday, September 7, 2024

Preview of Owner HUD 1.4 and CHAOS Media Library

 Owner HUD 1.4

Following on from the introduction of audio and video media playback in Mesmerizer 1.8.0, Owner HUD 1.4 will add support for these features too.  As of Mesmerizer 1.8,0, Audio and Video streams are defined in notecards, with names beginning with either "Audio:" or "Video:".   Prior to version 1.8.0, the Mesmerizer already supported notecards to describe images, using notecards with a "Image:" prefix to their names, which allowed for various optional features (e.g. animated images, specifying a non-default alpha).  In the near future I intend to support a "Sound:" notecard to allow things like looping, duration, and volume of sounds to be specified.

One significant drawback in the current implementation of the use of notecards to specify media parameters is that the notecards need to exist within the target Mesmerizer.  While the existing Installer and AutoInstaller products support uploading of these new notecard types into a Mesmerizer, having to prepare an Installer or load an AutoInstaller means that you can't decide on a whim to play back a media fragment to the sub.  Owner HUD 1.4 will address this, by supporting playback of media notecards from the inventory of the Owner HUD, rather than that of the Mesmerizer.

The existing Owner HUD side-panel that was previously used to display textures (typically used to view #RLV images) is now a full media panel, in which images and audio and video streams can be previewed, and if desired, sent to the target Mesmerizer for playback.  This allows a hypnotist to load their Owner HUD with a collection of media notecards, simply by dragging them onto the HUD from inventory, and then select and play any of them for the sub.

As before, the media panel slides out from behind the HUD using the small control at bottom left of the HUD.  You can choose whether it should slide out to the left or below the main HUD.  Once the panel is exposed, clicking on it now results in a new menu, with "Clr Preview" "Image Key", "Media..." and "Send Stop" buttons, as well as (if media is being previewed) a "Send Media" button.  "Image Key" supports the original function of this panel - allowing a texture key to be provided and the corresponding image displayed in the panel.  The "Media..." button prompts for one of four categories of media (Audio, Video, Image and Sound), and then allows a choice of loaded notecards of the selected type.  The "Sound" type is not yet implemented and should be thought of as a place-holder for now.

Selecting a notecard will cause the media to be displayed on the panel, and the "Send Media" button in the panel's menu will now be active, allowing the media currently being previewed to be sent to the target Mesmerizer(s).  The Owner HUD offers limited A/V media controls for the preview panel - basically the ability to pause the media, or stop and rewind to the beginning.

The "Send Stop" button simply issues stopv and clear commands to stop any playing media on the target Mesmerizer(s).   The "Clr Preview" button clears the preview screen, but does not affect the target Mesmerizers.

As always, Owner HUD features are fully remote-capable (when used with a Communications Hub and Communicator), so media may now be transmitted to a sub wherever they are in SL.

Media notecards are a convenient way to distribute media along with playback parameters.   In addition, they provide some features that can aid in organizing and locating media.  For instance, all media notecards support a "desc" keyword, that allows you to provide a description of the media.  This description can cover several lines, as multiple desc= lines may be used, allowing you to use this to provide a synopsis of the media content.  The Mesmerizer's audinfo and vidinfo commands will display the desc fields from a notecard, and the Owner's HUD media panel menu will also display these fields for the currently-selected media notecard (subject to a length limit in the menu header).

CHAOS Media Library

If you collect a significant number of media notecards, it can be tough to find an appropriate notecard to play back.  A future product - the CHAOS Media Library - is intended to help with this.  It uses a keyword-based system, similar to the Visualizer, and lets you search for media based on combinations of keywords.  The Visualizer deals with textures and therefore has to store the keyword data separately; the use of media notecards by the Media Library allows for the keywords to be included within the notecards themselves.  A media notecard may contain one or more kwd= lines, each containing a comma-separated list of keywords that apply to the media.  These lines are currently ignored by both the Mesmerizer and the Owner HUD, although future releases may at a minimum display them.  The Media Library uses them to permit searches - for instance "Find all videos that feature a blonde in latex".  The user can then view the individual notecards to read the description, and send promising ones either to the owner HUD for preview, or directly to a target Mesmerizer.

I expect to release the CHAOS Media Library soon after Owner Hud 1.4.

Tuesday, July 23, 2024

Mesmerizer 1.8.0a

It turns out that one of the performance enhancements that I began in Mesmerizer 1.8.0 broke text output from scripts.  I'm making a special release - 1.8.0a - that addresses this.  There is no new functionality in 1.8.0a - it's purely to fix this one bug.  You can pick up 1.8.0a via a redelivery, either in a vendor (list in the stickies on the right) or on Marketplace.  You can only get a redelivery through MP if you originally bought your Mesmerizer on MP, but a redelivery through my vendors is available to all Mesmerizer owners, regardless of how the purchase was made.

Tuesday, June 25, 2024

Mesmerizer 1.8.0 release

CHAOS Mesmerizer 1.8.0 is in vendors and up on MP now.  This release adds support for streaming audio and video.  Read about it here.  Instructions for upgrading and a list of my vendors can be found in the stickies on the right-hand side of this page.

Wednesday, June 5, 2024

Mesmerizer 1.8.0 Preview

I had intended the next Mesmerizer release to be 1.7.5, which was planned to further enhance and streamline outfits, as well as providing some performance fixes.  However, a conversation with Jeff Cloud, co-founder of Mind Shift and the Live Trance Lab resulted in a major new feature: support for media playback, hence I'm renaming the next release 1.8.0 to indicate a significant enhancement.

Jeff has been creating some impressive trance videos and was interested in a device to allow them to be played back in-world in a full-screen format, so I created a simple HUD and dispenser system for him, and it seemed only natural to add that functionality to the Mesmerizer as well.

Video playback

Video playback is initiated by the new watch command, which comes in three variants: watch, watchi and watchf.  Each command accepts a video stream as a parameter and displays the video; the difference is in the level of control offered to the wearer.  The basic watch command allows the wearer to stop the playback via a menu obtained by clicking on the video;  watchf (or forced watch) doesn't allow the wearer to directly stop the video, but the menu obtained from clicking on the video will allow them to send a request to the person who initiated playback to ask them to stop it.  watchi (or watch interactively) allows the wearer to click on the video to allow access to embedded controls.

Each of these commands takes a single parameter: the stream to display.  A video stream is defined by three things: the URL of the stream, the aspect ratio of the video, and the duration of the video.  The latter is needed because SL unfortunately doesn't provide a way to determine when a video stream has ended.  There is a possible (albeit complex) workaround for this that I'll investigate for a future release, but for now, the duration has to be provided for the playback window to be automatically removed at the end of the video.

A video stream can be specified either within the watch parameter, or as a notecard in the Mesmerizer.  As a parameter, the stream is specified something like this:

/99 watch "aspect=1.778;duration=15:10;https://server.com/Clip1.mp4"

This gives the URL of the stream (https://server.com/Clip1.mp4), the aspect ratio (1.778) and the duration (15 minutes and 10 seconds).  Durations can be specified as hours:minutes:seconds as in the example, as a Mesmerizer interval (15m10s), or simply as a number of seconds (910).  If omitted, aspect defaults to 1.778, and duration defaults to 0 which means "unlimited", in which case stopv must be used to remove the playback window.

Rather than typing all of the above each time, the information can be stored in a notecard in the Mesmerizer's inventory.  The name of a video notecard must begin with "Video:".  The information in the example above, when stored in a notecard (perhaps called Video:FirstClip) might look something like this:

desc=Example Clip 1
desc=A second line of description
aspect=1.778
duration=15m10s
stream=https://server.com/Clip1.mp4

The video can then be played back by specifying the name of the notecard (excluding the leading "Video:"):

/99 watch "FirstClip"

There is an obvious parallel here to how picture data (aspect ratio, animation parameters, etc) can be stored in a notecard, and in a further parallel to the pics and picinfo commands, there are new vids and vidinfo commands.  vids lists the installed video notecards, and vidinfo takes a video notecard name as a parameter (without the leading "Video:") and displays information about the video, including the values in the desc (or description) line(s).

Audio playback

In addition to video streams, Mesmerizer 1.8.0 will support audio streams.  There is a single listen command to play an audio stream.  The command takes a parameter with the same syntax as the watch commands, the only difference being that any aspect qualifier is ignored.  Like with videos, an audio stream can be specified in a notecard, with the same syntax as video stream notecards, the only difference being that an audio stream notecard name must have an "Audio:" prefix instead of "Video:".

Almost identical to the vids and vidinfo commands, auds and audinfo commands provide the ability to list installed audio streams and inspect a stream notecard.

A/V common features

Playback of audio and video streams is identical, apart from no screen being visible for audio streams.  This means that it's possible to create both Audio: and Video: notecards using the same stream URL, to allow for playback with or without video.

In addition to the desc, aspect, duration and stream keywords that can appear in Audio or Video stream notecards, you can optionally define chapter markers.   These are simply places within a stream where the Mesmerizer will notify the person who initiated the playback.  For example, assume a stream contains a recorded audio induction of total length 2 minutes and 25 seconds, starting with 1 minute 10 seconds of general relaxation, followed by 1 minute of staircase descent, followed by a brief deepener, and uses the following notecard:

desc=Brief induction
duration=2m25s
stream=https://server.com/AudClip.mp3
chapter=1:10;Starting staircase
chapter=2:10;Deepener

When played back via the listen command, this will cause the Mesmerizer to send the following series of messages to the command initiator, at appropriate points during the playback:

Audio starting (2m25s)
Chapter: Starting staircase (1m10s)
Chapter: Deepener (2m10s)
Audio ended

The chapter markers allow a hypnotist to coordinate other actions with a stream, for example displaying pictures or text at appropriate points during an audio stream.  In addition to the visible messages above, the following Mesmerizer events are generated: on-stream-start, on-stream-end and on-stream-chapteron-stream-start sets a "stream" variable to the name of the stream - either the name of the notecard used (including the "Video:" or "Audio:" prefix), or the actual URL if no notecard was used (prefixed by "Astream:" or "Vstream:" for audio and video streams respectively).  The on-stream-chapter event sets the "chapter" variable to the text associated with the chapter (e.g. "Starting staircase" or "Deepener" in the above notecard).  These events allow the Mesmerizer to provide programmed responses during a stream.

Chapter markers will be sent to the trance initiator only if that's someone different to the subject.  Displaying these notifications to the subject would be distracting, and also superfluous, since the subject should be able to hear or see what's going on in the stream.  If the wearer really wants to see the chapter marker messages, they can do so by installing a trigger for the on-stream-chapter event, that simply echoes the chapter text.

Playback of both audio and video streams can be terminated early via the stopv command.

Requirements for media playback

Both audio and video playback make use of an SL feature known as "Media On A Prim" (or MOAP).  MOAP allows textures to be generated within the viewer from a web-page or stream. This feature needs to be enabled in user preferences.  To verify that it is enabled, open the Preferences dialog in the viewer (Ctrl-P or choose "Preferences" in the "Avatar" menu), and select the "Sound & Media" page on the left side of the dialog.  Switch to the "Media" tab, and verify that "Allow inworld scripts to play media" is checked, and that "Media auto-play" is set to "Enabled".

Privacy concerns

Because of the way that MOAP works, the media or web-page is retrieved by the viewer, not by the SL servers.  This means that the site from which a stream is fetched may record the IP address of your computer in its logs.  If this is a concern, then you should either disable MOAP in Preferences (which will prevent audio and video streams from playing), or use the media filter on the preferences page above to control which sites can serve content that can be used for MOAP.  Note that, if you enable the filter, you will have to give explicit permission to access a site.  This permission dialog is invisible to the Mesmerizer, so it has no idea of how much extra time it has taken to approve a request, which means that the time it allocates for playback (the duration) may not be sufficient to view the entire stream.  You should therefore pick the "always allow" choice for sites that host streams that you watch repeatedly - this will avoid the permissions dialog on subsequent watch or listen invocations.

Hosting streams

Version 1.8.0 of the Mesmerizer will come with some bundled audio and video streams.  These streams should be taken as free demos, and as they're not hosted by me, I can't guarantee that they will continue to work indefinitely.  Included video streams are a series of video trances by Jeff Cloud; included audio streams are some of the initial "BimboDoll Conditioning" clips from the "Bambi Sleep" series. 

For those wishing to create their own streams, the question becomes one of where best to host and how to get the appropriate link to use.  There are private MP4 hosting services, but you will ultimately have to pay for that access.

For free hosting on a public system, BitChute.com is a good platform for content in general and erotic hypnosis content in particular. Unlike some other video-sharing platforms that might have stringent content policies, BitChute offers a more open environment and accommodates adult content, asking you to label your content with the "NSFW" label (not safe for work), if appropriate. BitChute provides a reliable and robust platform for long-term video hosting, and its user-friendly interface makes it very easy to set up your own space and begin publishing content.

To obtain the MP4 link from any video posted on BitChute, you can follow a straightforward process. Once you have uploaded a file and it is fully published and "live," simply click on the play button. Once it begins to play, right-click on the video and select "Copy video address..."  That will give you the MP4 link needed to use in a Mesmerizer stream notecard.