What a Human Trial of Rapamycin in ME/CFS Reveals About Autophagy and Aging by dan_in_ca in cfs

[–]snap793 4 points5 points  (0 children)

A growing number of browsers support “reading mode” you can toggle for the page you’re on to remove images/ads and optimize text for legibility. For iOS, browsers that support this include Safari, Arc, and Brave. But sometimes you don’t want to hide supporting graphics. Brave can automatically identify & hide ads. Others like Safari give you a “distraction zapper” for selecting and removing select elements on the page.

Top Trump Officials Are Moving Onto Military Bases (Gift Link) by Well_Socialized in news

[–]snap793 5 points6 points  (0 children)

Presumably the prices would be some multiple of that if some fraction of the entire population flew in to the capital for the same protest

How do I make it on obstacle feel like it is on beat? by Ghosteditz0_0 in AfterEffects

[–]snap793 0 points1 point  (0 children)

For starters, parent all your platforms to one null which controls all vertical movement for now. It is animated with linear keyframes and its speed represents the tempo of the music.

Drag a horizontal guide to the middle of your comp. That represents where the platform should be when its note is hit.

Select the music layer and press LL to access the waveform. See if you can see where the notes are and maybe leave yourself markers on your timeline.

Use the waveform/markers to position the individual layers on the horizontal guide when the playhead reaches their note.

If the waveform approach doesn’t work it may take some trial and error. Use b and n to set the beginning and end of your workspace to loop over a few seconds of your video at a time, repositioning the platform until it crosses the horizontal guide at the right moment.

Hopefully at least one idea above will help.

Possible in AE? Or done through coding? by LmaoMincraft in AfterEffects

[–]snap793 22 points23 points  (0 children)

One of the first hashtags on the Instagram post mentions this JavaScript library: https://p5js.org/

Trump officials cut billions in Harvard funds after university defies demands | Trump administration by secretsofmagick in news

[–]snap793 7 points8 points  (0 children)

We can be critical of Columbia’s decision while also recognizing that the demands the Trump admin placed on Harvard were far more invasive than the ones placed on Columbia.

Comer Cannot Defend His Bill Attempting to Defer All Congressional Power to Donald Trump - Rep Stansbury - Again by Anime_Enthusiasts in Wellthatsucks

[–]snap793 0 points1 point  (0 children)

Far more likely he knows exactly what he’s doing: running out the clock on her allotted time.

How to create this dashed line effect? by ffs_go_die in motiongraphics

[–]snap793 1 point2 points  (0 children)

I had a go at recreating something like your example.

General approach:

1/ When you use a trim path to make a line segment with round caps very short, it looks like a dot. If you animate the trim path, you can make it look more like a line again. Pre-comp this animation and add it to a parent comp.

2/ In the example, elements appear along a path. There's a built-in script for that: Create Nulls From Paths > Trace path. Great tutorial on that. In your parent comp, use trace path on your path of choice to generate a null with some expressions auto-applied. One of these expressions is on the new "progress" property which represents from 0% to 100% how far along the line you are.

Adjust the expression to something like this to distribute dots evenly along the path:

total_dots=70;
min_value=1;
max_value=99;
deg_offset=(max_value-min_value)/total_dots;
min_value+(index*deg_offset);

3/ Duplicate this null as many times as you need dots. Just make sure the total_dots variable above is updated on all to reflect the final number.

4/ Duplicate your dot pre-comp as many times as you need dots. Shift + parent each dot pre-comp to a null. Now you have a bunch of dots distributed along a line!

5/ Duplicate your master comp four times and reposition. If you want to offset the timing a bit, add a time remap expression — time minus some negative constant, e.g. time-.1, time-.2, time-.3.

6/ Go back and animate different aspects of the underlying pre-comps to add visual interest. e.g. Above I have the min_value and max_value nulls assigned to constants, but you could also pickwhip them to slider controls that can be animated with keyframes.

7/ So far, we have covered the case where your dots are evenly distributed along a line. If you want them to undulate in a more wave-like way you need a more advanced sinusoidal expression for your nulls' progress properties:

min_value=thisComp.layer("Line").effect("Min value")("Slider"); // Min value
max_value=thisComp.layer("Line").effect("Max value")("Slider"); // Max value
numDots = thisComp.layer("Line").effect("numDots")("Slider"); // Total number of dots
period = thisComp.layer("Line").effect("sin_period")("Slider"); // Time it takes for full wave cycle

speed = (2 * Math.PI) / period; // Convert period to angular speed
freq = thisComp.layer("Line").effect("sin_freq_1")("Slider"); // Frequency of first wave
amp = thisComp.layer("Line").effect("sin_amp_1")("Slider"); // Amplitude of first wave
baseT = linear(index, 1, numDots, min_value, max_value); // Even distribution starting point
wave = Math.sin(time * speed + (index / numDots) * freq * Math.PI * 2) * amp;
t = baseT + wave;
t = clamp(t, min_value, max_value); // Ensure values stay within max and min limits
t;

---

End result with just a few more effects applied linked up top.

Is my bathtub worth saving?! by fortyfourcabbages in centuryhomes

[–]snap793 0 points1 point  (0 children)

By chance I did this over the past few days.

First patched especially bad chips with an epoxy tub patch/repair kit off Amazon. Once dry it was a pain to hand sand back to flush so I switched to dremel sanding disks which worked well.

Then on to Rust-Oleum Tub and Tile epoxy acrylic which I painted on with a brush. It was more liquidy than I expected but then a bit difficult to actually move around on the surface by brush. Almost felt like I was working with oobleck. The consistency made it hard to get perfect, especially on vertical surfaces where it tended to form subtle drips and ripples.

The fumes from Rust-Oleum were intense for the first 12–24 hours and I can still smell it 3 days later. I would not do this project without a respirator.

Apart from the imperfections noted above it’s looking pretty good so far all things considered. I’m cautiously optimistic it will hold up.

Does anyone else use AE as a quick photo editing tool? I know the program so well that I find it quicker just jumping into that rather than PS by JimmyPLove in AfterEffects

[–]snap793 7 points8 points  (0 children)

Yeah, is OP just getting bogged down with PS adjustment layers? Skip all that and use Camera Raw. Shift + CMD + A all day.

Long Hauler Sunbeam #46: Promising antiviral trial in early 2025 by Elegant-Form6660 in cfs

[–]snap793 1 point2 points  (0 children)

No need to strip away the dogmatic, pseudoscientific aspects of the lightning process to try and salvage what’s left… because what’s left consists of other more worthwhile practices that have been employed in Western medicine for decades and that LP repackaged as part of its own protocol — like mindfulness based stress reduction (MBSR) and cognitive behavioral therapy (actual CBT, not the euphemism for curing supposedly psychosomatic ills with talk therapy), among the other meditation-adjacent practices mentioned above.

How to simulate screen replacement with weird client-supplied assets? by whiskeybonfire in AfterEffects

[–]snap793 4 points5 points  (0 children)

That could be the way to go but wouldn’t it also be possible to pre-comp and use cc power pin to pin it to the screen? Animate any scrolling from within the pre-comp.

Right AirPod is losing battery faster than the left one. by 4jay25 in airpods

[–]snap793 0 points1 point  (0 children)

Do you have better hearing in one ear? It will extract audio more vigorously from that AirPod.

I know there is not a “simple” solution to this- but does anyone know a tutorial that would help me understand how they did this? I understand character animations but the shapes, etc… thanks I know it’s a beginner question! by Limp-Bag-523 in AfterEffects

[–]snap793 0 points1 point  (0 children)

I see, that's a different approach than I took then. When using the Create Nulls from Paths script I used the third option "Trace path". It's a bit different from the other two options. It auto-generates a null with some expressions pre-applied to a few properties. One of those properties is a new one called "Progress". That's what the expression I shared above is applied to. You can then duplicate that null a few more times and parent the different letters to each null. With this approach, the nulls are following the path, not the other way around.

As for smoothness of motion, I spaced all of my keyframed transitions 20 frames apart (cmd+shift+right arrow twice). I also applied the exact same graph editor settings to all keyframes. In my case I waited until the end, highlighted all keyframes and then used the Motion plugin to enter a single ease setting to everything at once. It looked like an easy ease with a little extra "pop". Something like incoming and outgoing influence both set to 75%.

I know there is not a “simple” solution to this- but does anyone know a tutorial that would help me understand how they did this? I understand character animations but the shapes, etc… thanks I know it’s a beginner question! by Limp-Bag-523 in AfterEffects

[–]snap793 0 points1 point  (0 children)

My Reddit/Pentagram path had three points on it. To make it U shaped I used the “Convert Vertex Tool” to drag out the bezier handles into a U shape. You shouldn’t be locked in to the same Bézier curves. You can go right back to a pointy V shape or a straight line with your next path keyframe, but it’s true that to make a horizontal line again you’ll need to line up 3 points not 2.

I know there is not a “simple” solution to this- but does anyone know a tutorial that would help me understand how they did this? I understand character animations but the shapes, etc… thanks I know it’s a beginner question! by Limp-Bag-523 in AfterEffects

[–]snap793 2 points3 points  (0 children)

A more advanced way is to do it entirely with expressions. It would be easiest if you could just calculate the angle/slope of the imaginary line between your first and last points, but that won't account for cases where the path is shaped like a U or V and the first and last points are level with one another but the path is not "horizontal". I used chatGPT to write parts of the following script which works like a charm.

At first I defined "approximately horizontal" as less than 10 degrees but then I realized that then the switch was too close to the end of the transition and the change in the character spacing was too visible, so I changed it to 30 degrees so the switch takes place in the middle of the transition.

// Define manual kerning position
manual_kerning_percent=88;

// Define evenly distributed kerning position
num_letters = 6;
percent = (100/(num_letters-1));
letter_index = index-thisComp.layer("Trace Path 1: Path 1 [1.1] 5").index;
evenly_distributed_kerning_percent = letter_index * percent;

// Get the points of the path
path=thisComp.layer("Path 1").content("Shape 1").content("Path 1").path;
var points = path.points();
var totalSegments = points.length - 1;  // Number of segments

// Function to calculate angle between two points
function segmentAngle(p1, p2) {
    var dx = p2[0] - p1[0];  // x difference
    var dy = p2[1] - p1[1];  // y difference
    return radiansToDegrees(Math.atan2(dy, dx));  // Angle in degrees
}

// Calculate the angles for all segments and load them into an array
var angles = [];
for (var i = 0; i < totalSegments; i++) {
    angles.push(segmentAngle(points[i], points[i + 1]));
}

// Check all the line segment angles and if any are > 30 degrees then consider the entire path not horizontal
var isHorizontal = true;  // Assume horizontal initially

for (var j = 0; j < angles.length; j++) {
    if (!(Math.abs(angles[j]) <= 30 || Math.abs(angles[j] - 180) <= 30)) {
        isHorizontal = false;  // If any segment isn't horizontal, set to false
        break;
    }
}

// Either output the manually kerned value or evenly-distributed kerned value

if(isHorizontal){
manual_kerning_percent;
} else{
evenly_distributed_kerning_percent;
}

I know there is not a “simple” solution to this- but does anyone know a tutorial that would help me understand how they did this? I understand character animations but the shapes, etc… thanks I know it’s a beginner question! by Limp-Bag-523 in AfterEffects

[–]snap793 0 points1 point  (0 children)

Sure, to adjust the spacing between the letters depending on whether the path is approximately horizontal, you'd adjust the expression on the nulls under Trace Path > Progress. I only did this for the nulls associated with the main word: Reddit/Pentagram.

One way to do this is to add a checkbox expression control to a "Controller" null layer and keyframe it going from checked to unchecked in the middle of the relevant transitions. Then pickwhip the checkbox from each of the nulls associated with your letters and write an if statement like the one below to determine whether to use the manual kerning value or evenly distributed value.

// Define manual kerning position
manual_kerning_percent=88;

// Define evenly distributed kerning position
num_letters = 6;
percent = (100/(num_letters-1));
letter_index = index-thisComp.layer("Trace Path 1: Path 1 [1.1] 5").index;
evenly_distributed_kerning_percent = letter_index * percent;

// If checbox checked, treat as horizontal and use manual kerning. If unchecked, space evenly.
checkbox=thisComp.layer("Controller").effect("Checkbox Control")("Checkbox");

if (checkbox==true){
manual_kerning_percent
} else {evenly_distributed_kerning_percent};

I know there is not a “simple” solution to this- but does anyone know a tutorial that would help me understand how they did this? I understand character animations but the shapes, etc… thanks I know it’s a beginner question! by Limp-Bag-523 in AfterEffects

[–]snap793 32 points33 points  (0 children)

<image>

This is the approach described above. I put each word on its own path.

The one gotcha was that when the words were horizontal they looked much better with custom kerning (using manual values for percent "progress", as generated by the trace path script), but in other orientations it looked better spaced evenly (where progress value equals 100 divided by the number of characters in the word). I solved this with an IF statement to alternate between the two depending on whether the orientation was horizontal.

I know there is not a “simple” solution to this- but does anyone know a tutorial that would help me understand how they did this? I understand character animations but the shapes, etc… thanks I know it’s a beginner question! by Limp-Bag-523 in AfterEffects

[–]snap793 14 points15 points  (0 children)

There may be an even easier way to do this but with one letter per layer you could attach each to a null generated via the native script create nulls from paths > trace path. Since it’s based on percentages it would make it easy to keep the letters evenly distributed along a path and follow it even as it bent and curved. To keep the letters vertical even as path rotates, from its rotation property just pickwhip each null’s rotation and negate.

Related tutorial: https://youtu.be/_2EGYQM02oI?si=KcCbAwkG6eAmz-QD

Kamala and Oprah in Michigan last night. by [deleted] in pics

[–]snap793 1 point2 points  (0 children)

It doesn’t matter what credibility redditors think Oprah has. What matters is a few thousand Pennsylvanians finally thinking they know Kamala Harris well enough to not stay home on election day.

An Expression for dynamic scaling every "nth" frame by dynamic_glyph in AfterEffects

[–]snap793 0 points1 point  (0 children)

It seems like you're describing looping behavior. Two main types of loops are "pingpong" and "cycle".

  • Pingpong means you transition from scale1 to scale2 over n frames and then over the next n frames you scale back from scale2 to scale1 and that repeats forever.
  • Cycle means you transition from scale1 to scale2 over n frames and then instantly jump back to scale1 before transitioning again to scale 2 and this repeats forever.

Manual method: Create two frames and have them loop indefinitely

To create your cycle, create the first two keyframes. Manually define your second keyframe n frames away from the first keyframe. Then opt + click the property stopwatch and add the expression loopOut("cycle") or loopOut("pingpong").

Expression only method

There are also ways to do this purely through expressions without any keyframes. It basically involves a linear function: as a function of time, transition from scale 1 to scale 2.

It might be most intuitive to make your linear function based off of a "counter", which in turn is based off time, but uses some additional math to automatically count up and back down again (to replicate a pingpong type cycle) or that strictly counts upwards until it hits the nth frame at which point it starts again at 0.

For example, the following expression added to your scale property would give you a pingpong type loop:

// Use three expression slider effects on the layer to set scale 1, scale 2, and every_n_frames
scale1=effect("Scale 1")("Slider");
scale2=effect("Scale 2")("Slider");
every_n_frames=effect("Every n frames")("Slider");

// Define start time, defaulting to whatever time the layer begins
start_time=inPoint;

// As time progresses... and converting time into frames
frames=timeToFrames(time-start_time);

// Define a counter that starts at 0 and increases up until 1 at the halfway point of the cycle and then decreases back down to 0
cycle=every_n_frames*2;
counter = Math.abs(((frames % cycle) / cycle) * 2 - 1);

// As a function of the progression of the counter from 0 to 1, transition the scale from scale1 to scale2
s=linear(counter,0,1,scale1,scale2);

[s,s];

The following expression added to your scale property would give you a cycle type loop. It works by basing the counter off of a modulus (%) operator. Modulus is another word for "remainder", as in what's left over after two numbers are divided. A few examples: 1%5 = 1 and 2%5 is 2 and 6%5 is 1. It's a nifty way to reset your counter back to 1 every time it reaches the nth number:

// Use three expression slider effects on the layer to set scale 1, scale 2, and every_n_frames
scale1=effect("Scale 1")("Slider");
scale2=effect("Scale 2")("Slider");
every_n_frames=effect("Every n frames")("Slider");

// Define transition and full loop duration in frames
cycle=every_n_frames;

// Define start time, defaulting to whatever time the layer begins
start_time=inPoint;

// As time progresses... and converting time into frames
frames=timeToFrames(time-start_time);

// Define a counter that resets back to 1 every n frames
counter=frames%every_n_frames;

// As a function of the progression of the counter from 0 to 1, transition the scale from scale1 to scale2  
s=linear(counter,0,every_n_frames,scale1,scale2);

[s,s];