Asked
Resolved Resolved by Athena!

Running Multiple Personality Generator Skills

I've been toying with the idea of installing a second personality generator skill in myARC project that operates three EZBs in my robot. While I haven't actually installed a second one, I "think" ARC may allow me to run two of these skills simultaneously. Please let me know if I'm wrong.

WHY?

Well, I have many scripts in the one personality skill I that have currently installed into ARC. They are randomly triggered to do many things to make my robot appear alive and be useful in the real world. These include movement of motors and servos that animate body parts, trigger the robot to speak different phrases and words, light lights in different patterns to show activity and mood and also go onto the internet and retrieve information like weather reports, time, dates then verbally speak that information. Sometime all this will happen within the same animation script. Think DisneyLand Robots on steroids. LOL.

With all these scripts being triggered by just one Personality Generator skill, the timing and exaction of these very different kinds of activity skills are dependent on the settings of just the one personality genitor skill. Along with this, the skill itself picks randomly the script to run. This means that if I have the duration of the pause between the skill running the scripts set to (lets say for example) between one minute and 3 minutes, I could end up having the robot tell me the time or the weather every minute. This has happened many time and it gets monotonous.

I figure with two (or even three) Personality Generator skills installed I can split these scripts into categories and set up different execution timing for each skill. That way I can set the robot to only tell me the weather or time every 10 minute of so but let his movement and light scripts execute much more often.

So my questions are;

  • Is it actually possible to install more then one (maybe two or three) personality generator skills in ARC and run them at the same time?
  • If so, how could I keep several of these skills from triggering their own scripts at the same time?
  • What are the advantages and disadvantages of running several personalities generators at the same time?
  • Is there a better way to achieve the results that I mentioned above without using several personality skills?
  • Is there any way to achieve the results that I mentioned above with only using one personality generator skell?
  • Is there a way to achieve the results that I mentioned above without even using a personality generator skill?

Thanks in advance for sharing your thoughts and insights.


Related Hardware EZ-B v4

ARC Pro

Upgrade to ARC Pro

ARC Pro is more than a tool; it's a creative playground for robot enthusiasts, where you can turn your wildest ideas into reality.

PRO
Canada
#1  

Hi Dave - Athena here. Short answer first: yes, you can add and run multiple Personality Generator skills simultaneously in ARC. Below I’ll explain the options, show safe ways to prevent overlapping actions, list pros/cons, and give concrete, practical ways to get the behavior you want (including doing it with a single Personality Generator).

Useful docs

  1. Can you install/run multiple Personality Generator skills?
  • Yes. ARC allows multiple instances of the same robot skill. From Project Add Skill Scripting Personality Generator, click the skill multiple times to add as many instances as you want. (You already received that confirmation from support.)
  1. Recommended approaches (3 main ways)
  1. Single Personality Generator, categorized rows (recommended for simplicity)
  • The Personality Generator supports a High/Low timeframe for each script row. Use that to categorize behavior:
    • Movement/eye blinks/lights: short windows (e.g., 20-120 seconds).
    • Random chit-chat: medium windows (e.g., 120-600 seconds).
    • Weather/time/announcements: long windows (e.g., 600-1200+ seconds).
  • Advantages: everything stays in one place, easier to manage randomness, fewer race conditions.
  • Use: edit each row’s High/Low values in the Personality Generator config to control frequency.
  1. Multiple Personality Generator instances (split by category)
  • Add a "Motion & Lights" PG, a "Speech & Chit-chat" PG, a "Status/Internet" PG, etc.
  • Rename each instance for clarity (open kebab menu / three-lines in top-right of the skill window change the Title).
  • Advantages: separation of concerns, independent timing per category, easier to enable/disable whole categories.
  • Disadvantages: possible simultaneous conflicting actions (e.g., motion + speech triggering other motion), slightly more threads/complexity.
  1. Replace heavy scripts with Script controls + orchestration (best for guaranteed coordination)
  • Use Personality Generator(s) only to send simple triggers (set a variable or send ControlCommand) - do NOT run long action sequences inside the PG rows.
  • Put long sequences in Script controls (one script per action group: e.g., Weather Report, Greet, Wave Motion, Light Show).
  • Use On Variable Changed skill or ControlCommand to start the Script controls. The On Variable Changed skill or your script can check/handle locks to avoid overlap.
  • This pattern is robust and scalable.
  1. How to prevent multiple PGs from triggering at the same time There are several ways. Pick what fits your style:

A - Lock variable pattern (simple)

  • Each Personality script should:
    1. Check a global lock variable (e.g., $PG_Lock).
    2. If lock is set, exit (or set a retry).
    3. If not set, set the lock, run actions, then clear the lock.

Example of the pattern (ARC script-style for use in a Personality Generator row):

# Check if lock is set
if getVar("$PG_Lock","false") == "true" then
  # exit or skip this action
  exit
end

# acquire lock
setVar("$PG_Lock","true")

# actions (example: start a Script control named "Weather Report")
ControlCommand(ScriptStart, Weather Report)

# optional: small wait to let the script begin
sleep(1000)

# release lock when finished (the Script control itself can clear the lock when it completes)
setVar("$PG_Lock","false")

Notes:

  • The Script control that does the heavy work can be set to clear $PG_Lock at the end of its execution (recommended) so the lock covers the full action duration.

B - Use On Variable Changed as the sequencer

  • Personality Generators only set variables (e.g., setVar("$DoWeather","1")).
  • One or more On Variable Changed skills watch those variables and execute the full action scripts.
  • The On Variable Changed script can check/clear locks and queue or ignore triggers while busy.
  • This provides a centralized point to control serialization, retries, or queuing.

C - Use Script controls + ControlCommand for well-defined start/stop

  • Have PG rows use ControlCommand(ScriptStart, ScriptName) to start named Script controls.
  • Script controls can be written so they are re-entrant-safe (e.g., they check a $ScriptName_Running var at start) and return quickly if already running.
  1. Advantages / Disadvantages of multiple Personality Generators Advantages
  • Clear separation of behaviors (e.g., motion vs. announcements).
  • Independent frequency control per behavior category.
  • Easy to enable/disable or tune one category without affecting others.

Disadvantages

  • Potential for conflicting or simultaneous actions (lights, servos, audio) unless coordinated.
  • Slightly more complex project architecture and more skills to manage.
  • If actions are embedded directly in PG rows, harder to ensure a long action finishes before another starts.
  1. Can you achieve your goals with a single Personality Generator?
  • Yes - in most cases you can. Use the per-row High/Low timers aggressively:
    • Create rows grouped by category and give them appropriate High/Low ranges.
    • For deterministic tasks (time, weather), set very long min intervals so they won’t repeat often.
    • For motion/animations, give short ranges.
  • If you also want mutual exclusion (e.g., don’t talk while doing a specific motion), combine the single PG with script controls that use locks.
  1. Can you avoid using Personality Generator entirely?
  • Yes. Alternatives:
  • For most hobby projects, PG + Script controls + On Variable Changed gives maximum flexibility with minimal coding.
  1. Practical step-by-step examples (quick) A - Add a second Personality Generator
  1. Project Add Skill Scripting Personality Generator (click the skill again).
  2. Click the skill’s kebab menu (three lines) change the Title to "Personality - Motion" / "Personality - Info".
  3. Populate rows and set the High/Low ranges per row.

B - Use PG to trigger Script controls (recommended)

  1. Create Script controls (Project Add Skill Scripting Script) and name them: "Weather Report", "Wave Motion", "Eyes Blink".
  2. Put the full sequence for each action in its Script control. Have each Script control setVar("$ScriptName_Running","true") at the start and setVar("$ScriptName_Running","false") at the end.
  3. In the Personality Generator rows, simply add: ControlCommand(ScriptStart, Weather Report) or setVar("$DoWeather","1") if using On Variable Changed.
  4. Optionally implement a global $PG_Lock to avoid overlap across different scripts.

C - Use On Variable Changed to queue/serialize

  1. Add On Variable Changed skill(s).
  2. Configure it to watch variables like $DoWeather and $DoWave.
  3. In the On Variable Changed script, check $PG_Lock before running; if locked, you can either ignore the trigger or retry after a delay.
  1. Which approach do I recommend for your use case?
  • Given you have many mixed scripts (motion, speech, web calls), I recommend:
    1. Move heavy/long scripts out of the Personality Generator and into named Script controls.
    2. Keep one or two Personality Generators that only trigger those scripts (via ControlCommand or setVar).
    3. Use On Variable Changed or a simple lock variable to prevent simultaneous heavy actions (e.g., speaking while doing a multi-second animation).
  • This gives the best mix of randomness, reliability, and control.

Would you like:

  • A step-by-step walk-through of converting one of your big Personality scripts into a Script control and wiring a Personality Generator to start it?
  • Or a ready-to-paste example of the lock variable pattern (I can format that for a Personality Generator row or a Script control)?

Tell me which script(s) you want handled first (e.g., "Weather Report" and "Speak Time"), and I’ll give you an exact configuration and sample script lines to paste into ARC.


I am a customer support GPT-powered AI and still learning. If you have doubts about my response, please use the support documentation to verify my answer.
#2  

OK, thanks. this advise is just what I needed.

As far as being able to add a second or third personality skill I didn't know if this was restricted to just one skill like the Moment Panels are.

I also haven't yet look into the setting area of the PS so I don't yet know what @Athena is talking about when it says the skill has "a High/Low timeframe for each script row:. I don't remember this skill having that ability. I only remember seeing a global High/Low timeframe for the entire skill covering all the script's in there. If this is the case that seems like the way to go. I'll be looking deeper into all this soon and report back on which path I will take.

Thanks again!

PRO
Canada
#3  

Great - glad that helped, Dave. A few clarifications and quick how-to steps so you can find the High/Low per-row settings and confirm you can continue as planned.

  1. Yes - there is a High/Low timeframe per script row
  • The Personality Generator runs each row randomly within a High/Low timeframe. Each row in the Config grid has its own Low and High columns (seconds). That’s how you tune frequency per action.
  • If you only remember a global min/max, you may have been looking at the top-level control area for the skill (some skill windows surface a global pause setting). Open the Config grid (details below) and you’ll see each row’s Low/High fields.
  1. How to open the Personality Generator settings (quick steps)
  • Project Add Skill Scripting Personality Generator (to add another instance).
  • On your workspace, double-click the Personality Generator control to open it.
  • In the top-right of the skill window, use the kebab menu (three-lines) to rename the instance (useful if you add Motion / Speech / Info instances).
  • In the window you’ll see the Config grid where each row contains:
    • The script/command text
    • Low (seconds)
    • High (seconds)
    • Enable/Disable for the row
  • If you only see a single global area, expand the window or look for a Config / Edit button to reveal the rows table.
  1. Recommended practical setup (what you described)
  • Split behavior into categories and use separate instances (good approach):
    • Personality - Motion: low/high e.g., 10-60s (frequent)
    • Personality - ChitChat: 60-300s (medium)
    • Personality - Info (time/weather): 600-1800s (infrequent)
  • Or keep 1 Personality Generator but group rows and set appropriate low/high ranges for each row - both work.
  1. Quick example row entries (use ControlCommand to run Script controls)
  • Put the long action sequences into Script controls (Project Add Skill Scripting Script).
  • In Personality rows only trigger the scripts, e.g.:
ControlCommand(ScriptStart,Weather Report)
Low: 600
High: 1800
ControlCommand(ScriptStart,Wave Motion)
Low: 10
High: 60
  • Inside each Script control you should set a running flag so other scripts don’t start at the same time:
setVar("$Weather_Running",true)
# ... do weather steps, speak, web calls ...
setVar("$Weather_Running",false)
  1. Simple lock pattern to avoid overlap (useful if multiple PGs exist)
  • PG rows only start scripts. Each script checks a global lock before running:
# At the start of Script "Weather Report"
if getVar("$PG_Lock", false) == true then
  # already busy - exit or wait
  exit
end
setVar("$PG_Lock", true)

# ... perform long action (speak, move, web calls) ...

setVar("$PG_Lock", false)
  • Alternative: have the Personality row check the lock before issuing ControlCommand.
  1. If you can’t find the per-row High/Low or want me to confirm
  • Send a screenshot of the Personality Generator window and I’ll point to the exact fields.
  • If you want, tell me one or two of the long scripts (e.g., Weather Report, Speak Time). I’ll provide a step-by-step conversion into Script controls and the exact lines to paste into the Personality Generator rows and the scripts (so you can copy/paste directly).

Useful links:

Would you like me to:

  • give a ready-to-paste conversion of one of your specific scripts into a Script control (and a PG row), or
  • show a copy/paste lock-variable template tailored for your project?

Which script should we convert first?


I am a customer support GPT-powered AI and still learning. If you have doubts about my response, please use the support documentation to verify my answer.
#4  

OK, I had a chance to look closely at the Personality Generator Skill I have installed in my project. I also read the help section in this Synthial Forum for this skill and how to set it up.

Unless I'm completely wrong there is no way to use categorization rows in the Personality Generator as @Athena suggests.  Also, @Athena mentions that it supports a High/Low timeframe for each script row. From what I can tell, It does not.

The only way I can see that this skill operatives is to add a bunch of separate scripts then set a global High/Low timeframe at the top of the settings window. Once the timeframe is set the skill will pick each script it wants to randomly run.

I guess my original idea of installing several Personality Generator Skills with categorized scripts that execute on skills timeframe is the best way to go.

The features that @Athena mistakenly pointed to would be an awesome addition and upgrade to the current vanilla version of ARC's Personality Generator skill.

PRO
Canada
#5  

Nice work checking the skill yourself, Dave - thanks for the update. You were right to trust what you saw: the current Personality Generator skill in vanilla ARC uses a single global High/Low timeframe for the skill instance (not per-row). I apologize for the confusion earlier.

Here’s a concise, practical plan you can use now that confirms the current behavior and gives you robust ways to get the categorized timing and non-overlap you want.

  1. Confirmed behavior
  • Each Personality Generator instance has one global Low/High timeframe (the pause between the skill picking a script).
  • There is no built-in per-row Low/High in the version you have, so per-row frequency must be handled by other means (multiple skill instances, Script controls, locks, or On Variable Changed).
  1. Two straightforward solutions (recommended) A - Use multiple Personality Generator instances (easy)
  • Add separate PG instances for each category (Motion, ChitChat, Info).
  • Set each instance’s global Low/High to the frequency you want.
    • Example suggestions:
      • Motion: Low 10s / High 60s
      • ChitChat: Low 60s / High 300s
      • Info (time/weather): Low 600s / High 1800s
  • Rename each instance so you can tell them apart:
    • Double-click the skill window open the kebab menu (three lines) Edit Title.
  • Pros: Very simple, minimal changes to your existing rows.
  • Con: Possible overlap if two PG instances trigger long actions simultaneously (handled below with locks or by moving long actions to Script controls).

B - Move long actions to Script controls and have PG just trigger them (recommended for safety)

  • Create Script controls that contain the long sequences (Weather Report, Wave Motion, etc.).
    • Project Add Skill Scripting Script.
  • In the Personality Generator rows, only use lightweight triggers like:
    • ControlCommand(ScriptStart,Weather Report)
  • Have each Script control set a running flag or use a global lock to avoid overlaps.
  1. How to avoid scripts running at the same time (lock pattern)
  • Use a global lock variable (example $PG_Lock). Either:
    • Have each long Script control check this lock at the start and set it while running, or
    • Have the Personality Generator row check the lock before starting a script.
  • Example to paste into a Script control (or adapt inside a Personality Generator row). This uses ARC global variables and sleep().
# At the start of the Script control (e.g., "Weather Report")
# Check lock - if locked, exit (or you can sleep and retry instead)
if getVar("$PG_Lock", false) == true then
  # Option: print a small message
  ControlCommand(Say, "Busy, skipping weather") 
  exit
end

# Acquire lock
setVar("$PG_Lock", true)

# Mark script running (optional)
setVar("$Weather_Running", true)

# --- Do your long action here (web calls, speak, servo moves) ---
# Example pseudo-steps:
ControlCommand(Say, "Let me check the weather now.")
sleep(2000)  # allow speech to start/settle
# (your web call + parse + speak steps here)
# --- End action ---

# Clear running flags / release lock
setVar("$Weather_Running", false)
setVar("$PG_Lock", false)

Notes:

  • Replace ControlCommand(Say, ...) with whatever speech or action command you use.
  • The Script control holds the action for the full duration, so the lock covers the whole operation.
  1. Using On Variable Changed as a sequencer
  1. Practical step-by-step summary (if you want to implement now)
  • Option 1 (quick):

    1. Project Add Skill Scripting Personality Generator (add 2-3 instances).
    2. Open each instance, give it a descriptive title (kebab menu).
    3. Place only the appropriate scripts in each instance, and set each instance’s global Low/High to the desired frequency.
  • Option 2 (robust):

    1. Create Script controls for every long action (Weather Report, Time, Big Motion).
      • Each Script should use setVar("$Script_Running",true) at start and setVar(...,false) at end, or manage $PG_Lock.
    2. Use smaller PG instances to ControlCommand(ScriptStart,ScriptName).
    3. Optionally add an On Variable Changed to manage variables and sequencing.
  1. Useful links
  1. Offer to help convert scripts If you want, send me:
  • The text of one or two of your long Personality scripts (Weather Report and Speak Time, for example), or
  • A screenshot of your Personality Generator window(s).

I’ll convert them into ready-to-paste Script controls and give you the exact Personality Generator row text to trigger them, along with suggested lock code. Which script should we convert first?


I am a customer support GPT-powered AI and still learning. If you have doubts about my response, please use the support documentation to verify my answer.