Category Archives: Uncategorized

Combining 3D Printing and AI

As my faithful followers will know, I’ve been reconditioning some used 3d printers.  This week I’ve been working on an old Ultimaker 2+.  To get it to print something I had to load a file to a SD card, as this printer does not have the native ability to connect to the computer or network.  I did not have an SD card reader on my Mac at first, so I printed some files that were already on the card – and after some poking and prodding that did eventually work, but the files were uninteresting.  Around this time, my coworker, Victoria Pilato let me borrow her SD card reader, so I happily went looking for something to print from Thingiverse – found a cute little fancy statue and set to printing.

Then I stopped the print job…

Even though the files on the card had been boring, they were at least printing ok.  This time it was trying to print from a few mm above the print bed.  I readjusted the bed calibration (which seemed fine, as I had already done it earlier), and still had the problem.

Next morning. I’m feeling ready to tackle this.  I ask ChatGPT.  It suggests my bed could be off or POSSIBLY some weird thing could be in the G Code telling it to start the first row higher on the z axis.  I poke around in Ultimaker Cura, trying to find the issue, but I don’t see the problem.

  • AI Fixes the G CODE

It occurs to me the maybe ChatGPT can just read the G Code.  I dump it on the AI and turns out that it can.  It tells me mostly everything looks alright… BUT it says that it is configured for the Ultimaker 2+ Connect, which has auto leveling, where my model does not and that I should fix that in Cura.  Now in Cura, I can clearly see that I have it configured for the correct printer, not the Connect.  So, I ask GPT to fix the code directly, instead of me doing it in Cura.  And it does.

 

  • AI Suggests a New 3d Model

I have already skipped the fancy little model, and been working on a simple Benchy today.   After it provides me with the new code… and that code is happily chugging away on the printer, I ask GPT if it can alter the code to actually change the shape of the model.  It says it can not, tells me what programs to use… and yet, still offers to make a prototype.  I say sure. It says it will give me code, but instead gives me an image.  Again tells me it get generate an .stl file, but instead makes a placeholder, with another image.

Oh by the way, I’ve told it to merge the Benchy with an UFO – because, why not?

UFO infused benchy as created by GPT. It has saucer element both around the base of the boat and above almost like an umbrella.

This is an AI rendered image, not a picture of a printed model.

  • AI Converts a 2d Image into a 3d Render 

So at this point, I’m pretty happy with the cute Benchy from Outer Space, so I decide to download that image and bring it into Meshy.  Meshy is a browser based AI 3d model generator, that can either make a model from a text prompt or from an image.  I’ve previously made a little seawolf with it before, starting from an image.

original wolfie picture

image

3d creation by Meshy

meshy model from image

printed meshy model with no clean up attempted

printed meshy model

The one thing I wasn’t thrilled about the first time I printed Wolfie straight from Meshy, was that I thought it lost some of the detail and looked a bit blobby.

From inside Meshy, I loaded the picture I wanted it to generate a 3d model from.  Similar to when you ask any AI to make a model, it gives me 4 choices.  You can see that they are doing the usual AI thing, and not really, really, trying to just make what you gave it, but providing you with some creative adaptations.

AI created versions of UFO/Benchy

Some of the choices are already less blobby than others, but I really wanted the one that looked the most like what GPT had made, so I went with the one in the top left – which already looks lumpy.

UFO infused benchy as created by GPT. It has saucer element both around the base of the boat and above almost like an umbrella.

  • AI Makes Recommendations to Refine Meshy Model

Me: “I have brought in a model into Blendr from meshy. The model looks kind of globby. Is there an easy way to clean it up so it looks more defined?”

GPT:

Top Reasons for “Globby” Models from Meshy and How to Fix Them

🟠 1. Surface is Too Smooth (Normals or Shading)

  • Meshy sometimes auto-applies smooth shading, which can make details look melted or blobby.

✅ Fix in Blender:

  1. Select the model in Object Mode.

  2. Go to the left toolbar or press Right-clickShade Flat.

    • Instantly sharpens up the look by reverting from smooth shading.


🟠 2. Mesh is Over-Triangulated or Dense

  • Meshy-generated models often have millions of triangles, making them look blobby or noisy.

✅ Fix:

  • In Edit Mode, run:

    • F3 → search Decimate Geometry (non-destructive, try ratios like 0.2–0.6)

    • Or use Remesh Modifier (Voxel mode, low voxel size like 0.050.1)


🟠 3. Normals Are Messed Up

  • If the surface has weird lighting or jagged shading, the normals may be flipped.

✅ Fix:

  1. Go into Edit Mode (Tab)

  2. Press A to select all

  3. Press Shift + N to Recalculate Normals


🟠 4. Model Scale Is Off

  • Sometimes imported models are tiny or huge and look off.

✅ Fix:

  • Press N for the sidebar → check scale

  • Reset with Ctrl + AApply Scale


🧠 Tip: For 3D Printing

  • Use Mesh → Clean Up in Edit Mode to:

    • Delete loose geometry

    • Fill holes

    • Merge by distance

    • Remove doubles


If you want, you can send me a screenshot or description of what it looks like, and I’ll give you a specific cleanup sequence.

Or — I can write you a custom macro that does it all in one go!

Me: Macro???  Yes please!

Here is the gold — lol  (I didn’t know you could throw a python script into Blendr.  Even if you did, maybe you hadn’t thought to have AI make it for you)

—————————————————————–

import bpy
import bmesh

# Get active object and ensure it’s a mesh
obj = bpy.context.active_object
if obj and obj.type == ‘MESH’:

# Ensure we’re in Object Mode
bpy.ops.object.mode_set(mode=’OBJECT’)

# Shade Flat
bpy.ops.object.shade_flat()

# Add Subdivision Surface Modifier (non-destructive)
subdiv = obj.modifiers.new(name=”Subdivision”, type=’SUBSURF’)
subdiv.levels = 2
subdiv.render_levels = 2

# Enable Auto Smooth to preserve sharp edges
obj.data.use_auto_smooth = True
obj.data.auto_smooth_angle = 1.0472 # 60 degrees in radians

# Go into Edit Mode for cleanup
bpy.ops.object.mode_set(mode=’EDIT’)
bm = bmesh.from_edit_mesh(obj.data)

# Merge by distance to remove doubles
bmesh.ops.remove_doubles(bm, verts=bm.verts, dist=0.0001)

# Recalculate normals
bmesh.ops.recalc_face_normals(bm, faces=bm.faces)

bmesh.update_edit_mesh(obj.data)
bpy.ops.object.mode_set(mode=’OBJECT’)

print(“✨ Cleaned, smoothed, and preserved edges!”)

else:
print(“⚠️ Error: Please select a mesh object in Object Mode.”)

—————————————————————–

Here is what it looks like after applying the script:

It isn’t perfect… but it is a whole lot better.  BTW – Blendr is free, Meshy has a paid version that very well make my models look better, but I am using the limited free version, the original Benchy model is free from Thiniverse as are many other items (though tips are encouraged (remember beerware??)). I pay for ChatGPT – but I suspect this could have been achieved from the free version as well.

After this, I brought it over to Formware to do some last minute manifold repairs on the stl file.

“You can use this free online tool without hassle to fix your stl files quickly. Files are deleted after download or otherwise after 6 hours to keep our systems clean. The fixer accepts binary and ascii .stl files.”

And here is the print after the supports are removed:

UFO/Benchy printed out

 

 

Bringing Two UP Mini 2 Printers Back to Life

This past week I’ve rolled up my sleeves and tackled checking whether two new-to-us UP Mini 2 3D printers from Tiertime were still functional. These compact machines had been tucked away for quite some time—unfortunately, in a room that suffered a significant flood. One unit had been stored in its original box (lucky break), while the other had been sitting exposed on the floor. Needless to say, I had some concerns about their condition.

The two 3d printers sitting on a table.

I started with the boxed unit, which appeared to be in better shape. When I loaded a fresh spool of filament, it threw an “Insufficient Material” error—even though I could clearly see the filament had been fed properly. The fix? Manually entering the filament weight (500g), which this printer model requires in order to track usage accurately. Once that was squared away, I ran a test print—not the traditional Benchy, but a Calibration Mouse. (Let’s just say the loaded green filament gave it some extra personality.)

The second printer needed more attention. The nozzle was gummed up and required a good cleaning, along with a bit of tinkering to get everything running smoothly. After some patience and perseverance, I managed to coax it back to life. The reward? A second successful test print—this time in red.

Why the UP Mini 2?

The UP Mini 2 might not be the flashiest printer on the market, but it’s a solid workhorse, especially for educational and makerspace environments. Its fully enclosed build area makes it safer and better for temperature-sensitive materials like ABS. It’s compact enough for a desktop yet capable of reliable, high-quality prints with minimal fuss. Features like HEPA filtration, auto-leveling, and built-in touchscreen controls make it accessible for beginners while still meeting the needs of more advanced users.

With both printers now tested and functional, our upcoming space has two more reliable machines ready to support student projects, prototyping, and creative exploration.

picture of the calibration mouse, that includes some angels and lengths.

 

 

Me holding a little green calibration cat.

 

Me holding both the red and green calibration cats.

 

Making Your 3D Prints Mouth-Safe and Food-Friendly: What You Need to Know

When I printed my first double-chambered flute on my 3D printer, I was thrilled to see it come to life. But as I prepared to play it, a question nagged at me: Is it actually safe to put this in my mouth? That one query opened a whole new world of research into the safety of 3D printed objects—especially those that come into contact with food or the human body.

Me with my new 3d printed double flute

(who am I kidding – this is made of PLA and I did blow into it before even considering all of this.)

3D printing offers incredible possibilities—from custom cookie cutters to personalized water bottle lids and musical instruments. But just because something can be printed doesn’t mean it should be used without considering safety, especially for anything that goes near your mouth or food.


Understanding Food Safety Terms

Before diving deeper, let’s get a handle on a few critical terms:

  • Food grade: A material is safe for human consumption or is allowed to come into contact with food.

  • Food safe: A food grade material that meets safety requirements for its intended use and won’t pose a health risk.

  • Food contact surfaces: These are surfaces that touch food or your mouth and must be nontoxic, durable, and easy to clean.

These terms aren’t just relevant for kitchen utensils—they’re also important for things like wind instrument mouthpieces that see prolonged contact with your lips. The underlying concern is migration—the transfer of small particles from the printed object into food or the body.


Why Basic 3D Prints Aren’t Safe (Even with “Food Safe” Filament)

Here’s the truth: even if your filament is labeled “food safe” or “food grade,” that doesn’t make your printed object safe by default.

  • Fused Filament Fabrication (FFF) creates objects with microscopic crevices between layers—perfect hiding spots for bacteria and mold.

  • These gaps are hard to clean, even with a dishwasher (if the material can tolerate high temperatures).

  • Studies show that untreated 3D prints can harbor significantly more bacteria than coated or properly treated ones.

This is especially problematic for items with repeated or long-term contact, like flutes or cup rims.


Material Considerations: Not All Filaments Are Created Equal

Some materials are potentially safer than others:

  • PLA, PETG, and PP (polypropylene) are commonly considered food-safe options—but only under certain conditions.

  • ABS and ASA? Not safe for food contact.

  • Filament colorants and additives matter too. Even if a base polymer is safe, pigments or other ingredients might not be. Always check with the manufacturer.

For commercial or high-stakes use, look for certified materials—like those compliant with FDA CFR 21 (U.S.) or EU 10/2011. Just be aware: “compliant with” is not the same as certified or approved.


The Printer Itself Can Be a Source of Contamination

Even if you’re using the right filament, your printer might not be clean enough for safe food contact.

  • Replace brass nozzles with stainless steel—brass can contain lead.

  • Avoid cross-contamination from previous filaments or lubricants.

  • Keep your printer—inside and out—as clean as possible.


Why Cleaning my Flute isn’t Good Enough

  1. Layer Lines = Micro-Crevices

    • FDM/FFF 3D prints, including PLA, have tiny ridges and gaps between layers.

    • These crevices trap saliva, moisture, and bacteria, which can’t be fully removed—even with scrubbing, soap, or alcohol.

  2. Biofilm Formation

    • Bacteria can form biofilms—slimy protective layers—that resist even harsh cleaners.

    • Over time, this can lead to odors, staining, or health hazards.

  3. Porosity Makes Sterilization Difficult

    • Unlike glass or stainless steel, PLA is porous.

    • That means typical cleaning doesn’t penetrate deep enough to sanitize completely.

  4. Heat-Based Cleaning = PLA Deformation

    • PLA softens at ~60°C (140°F), so it’s not dishwasher-safe or steam-sterilizable.

    • Autoclaves, boiling, or hot water will warp or weaken your print.


What About Specialty Cleaning Methods?

  • Isopropyl alcohol or diluted bleach may reduce surface bacteria, but again, they can’t reach deep into the layer gaps.

  • UV light (like toothbrush sanitizers) may help somewhat, but only on exposed surfaces, not inside layer lines.

  • Long-term, repeated cleaning degrades PLA, especially if it’s soft or has fine details.

The Essential Step: Surface Coating (Sealing)

Because of the porous nature of FFF prints, sealing the surface is key to making your item mouth-safe or food-friendly.

  • Use clear, food-grade epoxy resins or polyurethane coatings that are explicitly labeled food safe.

    • Popular choices: ArtResin (compliant with FDA CFR 175.300), MasterBond EP42HT-2FG.

  • Avoid coatings that are only labeled “non-toxic” (like Mod Podge or Krylon sprays) unless they specifically state food safety.

  • Be cautious—liquid resins are toxic before curing. Use gloves, a respirator, and follow all curing instructions carefully.

    • An improperly cured resin can leave your item dangerously unsafe.


Limitations of Coated Prints

Even the best coating isn’t magic. Your sealed object won’t be as durable as a ceramic plate or stainless steel fork.

  • Most coatings aren’t heat-resistant—don’t microwave or wash in hot water.

  • Scratches or wear can expose the porous print beneath, allowing bacteria to creep in.

  • Not ideal for cutting boards, utensils, or anything subject to frequent abrasion.


Considering Alternatives and Safer Workarounds

If sealing sounds too risky or complicated, consider other options:

  • Use food-safe sealants like water-based poly coats (with proper research and testing).

  • Make molds using your 3D print and cast with a food-safe silicone or material instead.

  • Be cautious with SLA (resin) printing. Even when coated, most resins remain inherently toxic and prone to wear.


Final Thoughts: Is It Worth It?

Yes—but only if you do it right.

Creating food- or mouth-contact 3D prints is totally possible. But it requires more than just buying “food-safe” filament. It’s about:

  • Choosing the right material (and checking additives)

  • Keeping your printer clean and lead-free

  • Applying a properly cured, food-grade coating to seal your print

And even then—understand the limitations. These prints won’t last forever and must be treated with care. For commercial products, certification and compliance are non-negotiable.

When in doubt, always check the documentation, contact manufacturers, and—above all—prioritize safety.

Gemini Feature boost – Canvas

What is that Canvas thingy? (screenshot of the prompt entry box with a new button.If you have been using ChatGPT, you may have already seen this feature there, but Gemini has added a “canvas” to it’s potential workflow.  The canvas is a separate “frame” or space on the page that gets updated as you work on whatever is in it with Gemini, without it scrolling up and away as you progress.  I’ve mostly used it for things like code, but you can totally use it for working on a draft of a regular written object, like an essay, speech, screenplay, etc.

To activate it, you will want to open https://gemini.google.com/app.  

Once there tell it what you want to work on – I’ll think of something on the simple side.  Here is my prompt:

I would like to write a small app that lets me know that everything will be alright. I want it to suggest a nice quote and also ask me if I want to hear some soothing music. Can you help me write that?

Then, I want to use the new canvas feature.  This requires that you click the button in the chat/prompt window that says “canvas”  Now my screen looks like this:

a screenshot of gemini running a "canvas". It shows the chat area in thr left and a new coding window or frame on the right.

It even has a preview mode!

screenshot of the preview mode on the code it wrote.

I’m going to ask it to change how the music is selected. At this stage it is asking me to link it to the music from my own drive. I want it to find it on the internet for me.

Can you change it so that you find the music on the internet for me? Tell me what you selected and ask if I want to hear it?

It created some code that uses an API to retrieve the music, and because I don’t feel like fussing with that I have it rewrite the code one more time to play music without the need of a API.   It tells me I really should use the API, but gives me what I wanted anyway.  lol  This is the result:

shows a screenshot of the updated canvas window and chat with gemini.

preview:  (the preview is fully functional)

preview of the code as a functional app.

It doesn’t sound like Calming ocean waves” but it is fun music.  Eventually I got sick of the synthy fun and asked it to find more appropriate music.  Here is the code.  You can copy it into a text/notepad app and save it as a html file if you want to play it in the browser on your computer

https://drive.google.com/file/d/1HtllluclKKzucMunkwVQ6kpSAaxLBtYr/view?usp=sharing

There is another feature “audio overview”.  If you’ve used NotebookLM, I’m sure you’ve already seen it.  They are bringing it to regular Gemini, but I don’t personally see it yet, so I believe it isn’t fully rolled out yet.

 

Have fun!

 

<!DOCTYPE html>
<html lang=”en”>
<head>
<meta charset=”UTF-8″>
<meta name=”viewport” content=”width=device-width, initial-scale=1.0″>
<title>Everything Will Be Alright</title>
<link href=”https://fonts.googleapis.com/css2?family=Inter:wght@400;600&display=swap” rel=”stylesheet”>
<style>
body {
margin: 0;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: 100vh;
background-color: #f0f0f0;
font-family: ‘Inter’, sans-serif;
overflow: hidden; /* Prevent scrollbars during animation */
}
#canvas {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: -1;
}
.container {
background-color: rgba(255, 255, 255, 0.8); /* Semi-transparent white */
padding: 30px;
border-radius: 12px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
text-align: center;
max-width: 80%;
backdrop-filter: blur(10px);
border: 1px solid rgba(255,255,255,0.3);

}
h1 {
color: #333;
margin-bottom: 20px;
font-size: 2em;
}
p {
color: #555;
font-size: 1.1em;
line-height: 1.6;
margin-bottom: 25px;
}
button {
padding: 12px 25px;
border: none;
border-radius: 6px;
background-color: #4CAF50; /* Green */
color: white;
font-size: 1.1em;
cursor: pointer;
transition: background-color 0.3s ease;
margin-top: 10px;
font-family: ‘Inter’, sans-serif;
}
button:hover {
background-color: #367c39; /* Darker green */
}
#music-container {
display: flex;
align-items: center;
justify-content: center;
margin-top: 20px;
flex-direction: column; /* Stack items vertically */
}

#play-music {
padding: 12px 25px;
border: none;
border-radius: 6px;
background-color: #007BFF; /* Blue */
color: white;
font-size: 1.1em;
cursor: pointer;
transition: background-color 0.3s ease;
margin-top: 10px;
font-family: ‘Inter’, sans-serif;
}

#play-music:hover {
background-color: #0056b3; /* Darker blue */
}

#music-controls {
display: none; /* Initially hide the controls */
flex-direction: column;
align-items: center;
margin-top: 10px;
background-color: rgba(255,255,255,0.7);
padding: 10px;
border-radius: 8px;
border: 1px solid rgba(255,255,255,0.3);
backdrop-filter: blur(5px);
}

#music-controls button {
margin: 5px;
padding: 8px 16px;
border: none;
border-radius: 6px;
background-color: #4CAF50; /* Green */
color: white;
font-size: 0.9em;
cursor: pointer;
transition: background-color 0.3s ease;
font-family: ‘Inter’, sans-serif;
}

#music-controls button:hover {
background-color: #367c39; /* Darker green */
}

#volume-control {
width: 100px;
margin: 10px 0;
}

#music-info {
margin-bottom: 10px;
font-size: 0.9em;
color: #555;
}

</style>
</head>
<body>
<canvas id=”canvas”></canvas>
<div class=”container”>
<h1>Everything Will Be Alright</h1>
<p id=”quote”>Loading a reassuring quote…</p>
<div id=”music-container”>
<p id=”music-info”>Finding soothing music…</p>
<button id=”play-music” style=”display:none;”>Play Soothing Music</button>
</div>
<div id=”music-controls”>
<button id=”pause-music”>Pause</button>
<button id=”resume-music”>Resume</button>
<label for=”volume-control”>Volume:</label>
<input type=”range” id=”volume-control” min=”0″ max=”1″ step=”0.01″>
</div>
</div>
<script>
const canvas = document.getElementById(‘canvas’);
const ctx = canvas.getContext(‘2d’);
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;

let stars = [];
const numStars = 200;

function initializeStars() {
stars = [];
for (let i = 0; i < numStars; i++) {
stars.push({
x: Math.random() * canvas.width,
y: Math.random() * canvas.height,
radius: Math.random() * 2,
color: `rgba(255, 255, 255, ${Math.random() * 0.5 + 0.5})`, // Varying opacity
speedX: (Math.random() – 0.5) * 0.2, // Subtle movement
speedY: (Math.random() – 0.5) * 0.2
});
}
}

function drawStars() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
stars.forEach(star => {
ctx.beginPath();
ctx.arc(star.x, star.y, star.radius, 0, Math.PI * 2);
ctx.fillStyle = star.color;
ctx.fill();
ctx.closePath();

// Update star position for subtle animation
star.x += star.speedX;
star.y += star.speedY;

// Wrap around edges
if (star.x > canvas.width) star.x = 0;
if (star.x < 0) star.x = canvas.width;
if (star.y > canvas.height) star.y = 0;
if (star.y < 0) star.y = canvas.height;
});
}

function animateStars() {
drawStars();
requestAnimationFrame(animateStars);
}

initializeStars();
animateStars();

window.addEventListener(‘resize’, () => {
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
initializeStars(); // Re-initialize stars on resize for proper distribution
});

const quoteElement = document.getElementById(‘quote’);
const quotes = [
“This too shall pass.”,
“Every cloud has a silver lining.”,
“You are stronger than you think.”,
“The best is yet to come.”,
“Breathe. You’re going to be okay. Breathe and remember that you’ve been in this place before. You’ve been this uncomfortable and anxious and scared, and you’ve survived. Breathe and know that you can survive this too. These feelings can’t break you. They’re painful and exhausting, but they can’t break you. You’re going to be okay.”
];

function displayQuote() {
const randomQuote = quotes[Math.floor(Math.random() * quotes.length)];
quoteElement.textContent = randomQuote;
}

displayQuote();
setInterval(displayQuote, 10000); // Change quote every 10 seconds

const playMusicButton = document.getElementById(‘play-music’);
const audio = new Audio();
const musicControls = document.getElementById(‘music-controls’);
const pauseMusicButton = document.getElementById(‘pause-music’);
const resumeMusicButton = document.getElementById(‘resume-music’);
const volumeControl = document.getElementById(‘volume-control’);
const musicInfo = document.getElementById(‘music-info’);

let isPlaying = false;
let selectedTrack = null; // Store the selected track URL

// Simulate an online search for music without an API
function searchForSoothingMusic() {
const tracks = [
{ title: “Relaxing Piano Music”, url: “https://www.bensound.com/royalty-free-music/track/rainy-day-lo-fi-jazz” },
{ title: “Gentle Rain Sounds”, url: “https://www.soundjay.com/buttons/sounds/rain-01a.mp3” },
{ title: “Calming Ocean Waves”, url: “https://www.soundjay.com/buttons/sounds/ocean-wave-01.mp3” },
{ title: “Soft Ambient Music”, url: “https://www.bensound.com/bensound-music/bensound-acousticbreeze.mp3” },
{ title: “Peaceful Flute Music”, url: “https://www.soundjay.com/buttons/sounds/flute-c-note.mp3” },
];

setTimeout(() => {
selectedTrack = tracks[Math.floor(Math.random() * tracks.length)];
musicInfo.textContent = `Found: “${selectedTrack.title}”. Would you like to hear it?`;
playMusicButton.textContent = “Play Music”;
playMusicButton.style.display = ‘inline-block’;
}, 2000);
}

searchForSoothingMusic();

playMusicButton.addEventListener(‘click’, () => {
if (selectedTrack) {
audio.src = selectedTrack.url;
musicControls.style.display = ‘flex’;

if (isPlaying) {
audio.pause();
isPlaying = false;
playMusicButton.textContent = “Resume Music”;
} else {
audio.play().then(() => {
isPlaying = true;
playMusicButton.textContent = “Pause Music”;
}).catch(error => {
console.error(“Playback failed:”, error);
alert(“Failed to play music. There may be an issue with the selected audio source.”);
isPlaying = false;
playMusicButton.textContent = “Play Music”;
});
}
} else {
alert(“No music track selected.”);
}
});

pauseMusicButton.addEventListener(‘click’, () => {
if (isPlaying) {
audio.pause();
isPlaying = false;
playMusicButton.textContent = “Resume Music”;
}
});

resumeMusicButton.addEventListener(‘click’, () => {
if (!isPlaying) {
audio.play().then(() => {
isPlaying = true;
playMusicButton.textContent = “Pause Music”;
}).catch(error => {
console.error(“Playback failed:”, error);
alert(“Failed to resume music.”);
isPlaying = false;
playMusicButton.textContent = “Play Music”;
});
}
});

volumeControl.addEventListener(‘input’, () => {
audio.volume = volumeControl.value;
});

audio.addEventListener(‘ended’, () => {
isPlaying = false;
playMusicButton.textContent = “Play Music”;
});

</script>
</body>
</html>

 

 

Brightspace: Advanced Assessments

Previously Titled: New Feature in Brightspace: Graders and Grade Release Permissions

 

Step by Step Advance Assessments

Create an assignment in Brightspace

Go to the Evaluations & Feedback side panel and expand it to see the options.

visual of side panels associated with assignements

expanded evaluation & feedback vidual

These options, depending on what you pick, reveal additional options.

Click on Select Evaluators (you can choose from the people enrolled in your course with a grading permissions role.)

picture of the select evaluators area of brightspace

Choose how evaluations will process with multiple evaluators.  You can choose between:

  • All evaluators work on the same evaluation together. Publishers release this evaluation to learners.
  • Evaluators work on their own evaluations separately. Publishers aggregate results into one final evaluation and release it to learners.

screenshot of the stated evaluation options

IF you have multiple evaluators: Allocate Evaluators to Learners (select which graders will grade which students)

 

the pull down menu lets you choose from

  • Allocate all evaluators to every learner
  • Randomly allocate 1 evaluator to every learner evenly

screenshot of the allocation methods

You can manually finese these generic selections by using the Evaluator Allocations options area and checking or unchecking students for a given evaluator.

If you have new students come in to the course, Brightspace will follow the automatic allocation method you picked for the new learner enrollments.

Choose publishers:

screenshot of the select publishers area

 

Important: It’s best to configure these settings when creating your assignment. If that’s not possible, make any necessary adjustments before receiving submissions. Once a student has been graded, these settings become locked and cannot be changed. Additionally, if submissions exist but no students have been graded, removing all evaluators will permanently disable advanced assessment features. This means grading will revert to the standard assignment process as it existed before these features were introduced to Brightspace.

 

 

notebooklm icon to indicate chat featureChat with my Advanced Assessments NotebookLM about this subject if you have any questions. You must use your SBU gmail to use this feature. (I am learning how to do this and may need to add each person who wants to use this chat. Feel free to reach out with a request if that turns out to be the case.)

 

Deep Dive by NotebookLM: Listen to the Audio here.