# Emoji Fluff

**URL:** https://meta.discourse.org/t/emoji-fluff/339163
**Category:** Theme component
**Created:** [November 28, 2024, 11:31pm UTC](https://meta.discourse.org/t/emoji-fluff/339163 "2024-11-28T23:31:53Z")
**Posts on this page:** 20
**Page:** 1

<div class="post-metadata">

### Author: ![Arkshine](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/arkshine/32/298682_2.png) [@Arkshine](https://meta.discourse.org/u/Arkshine)
#### Post date: [November 28, 2024, 11:31pm UTC](https://meta.discourse.org/t/emoji-fluff/339163/1 "2024-11-28T23:31:53Z")

</div>

| | | |
| --- | --- | --- |
| :discourse2: | **Summary** | Adds optional variations or animations to emojis. |
| 👓 | **Preview** | [Preview on theme-creator.discourse.org](https://discourse.theme-creator.io/theme/Arkshine/fluff-emoji) |
| 🛠 | **Repository Link** | [https://github.com/arkshine/discourse-emoji-fluff](https://github.com/arkshine/discourse-emoji-fluff) |
| 📖 | **New to Discourse Themes?** | [Beginner’s guide to using Discourse Themes](https://meta.discourse.org/t/beginners-guide-to-using-discourse-themes/91966) |

Install this theme component

ℹ This component requires Discourse to be current as of 2024-11-26T23:00:00Z. \[1\]

## Description

Emoji Fluff allows users to put mirrored or animated emojis in their posts.  
It allows users to post fancy emoji work such as:

![flexing emoji](https://global.discourse-cdn.com/meta/original/4X/a/6/3/a63512571c882cb44cfb2237f0fa8dc1daa7ed59.png)

You can choose these decorations from the emoji autocompletion pop-up, from the emoji picker, or by appending keywords directly after the emoji shortcode:

Examples: `:bike:f-slide` , `:smile:f-bounce`

Horizontal and vertical flips can be combined with other decorations.

Examples:

- `:horse:f-slide,flip:`
- `:spider:f-float,flip_v:`

## Screenshots

### Available emoji fluff

![Fluff list](https://global.discourse-cdn.com/meta/original/4X/a/f/3/af3c4082c9922befcb8286a3138522638e37f05f.gif)

### How to add fluff to an emoji

#### From the emoji autocompletion pop-up

![fluff autocompletion](https://global.discourse-cdn.com/meta/original/4X/5/2/3/5236d0f94591d7beee14570d6f9c9174e570e6fd.gif)

#### From the emoji picker

![Fluff emoji picker](https://global.discourse-cdn.com/meta/original/4X/d/9/9/d996eff8f4570c640797a3994807b84e253ab0ec.gif)

#### By typing manually the fluff suffix

![Fluff suffix](https://global.discourse-cdn.com/meta/original/4X/5/f/d/5fdd934b89093ea272572ee500d2874fcc65de14.gif)

## Features

- Horizontally or vertically mirrored emojis

- Animated emojis (bounce, rotate, pulse, etc)

- Setting to choose which emoji decorations should be available to users

- Setting to choose inserting a decorations selector in autocomplete or emoji picker.

- Allow admins to create new fluffs

## Settings

| Setting | Description |
| --- | --- |
| **enabled** | Turn on or off the component’s functionalities.  
Default value: `true`  
 Disabling will prevent the emoji decoration from being applied.   
 This is useful if you want to pause or plan to remove the component but don’t want to see the decoration code, such as `🙂spin:`, in posts.  
 For more information, check out _Reverting emoji decorations_ in the topic. |
| **allow decorations** | List of allowed decorations.   
Default value: `flip|flip_v|spin|pulse|bounce|wobble|float|slide|fade|negative|hue|gray` |
| **allow selector in** | Where the fluff selector should be available.  
Default value: `both`  
`none` – disable the selectors.  
`both` – enable the selector in the autocomplete and the emoji picker.  
`autocomplete` – enable the selector only in the autocomplete.  
`emoji-picker` – enable the selector only in the emoji picker.  
 |

🌍 Additionally, the theme component strings are translatable from the settings.

## Reverting emoji decorations

If you disable the component, these suffixes remain, resulting in emojis like this: 😄f-spin:

Due to theme component limitations and design choices, we add straightforward suffixes to emojis to give them these decorative effects. The fluff prefix `f-` helps identify these decorations, making them easy to remove through the script available below.

You can download and run a rake task to remove fluff suffixes definitely from posts.

```bash
wget -P lib/tasks/ https://raw.githubusercontent.com/Arkshine/discourse-emoji-fluff/refs/heads/main/tasks/fluff.rake
rake fluff:delete_all

```

ℹ The rake task doesn’t create post revisions by default. You can add `false` as an argument to change this behavior: `rake fluff:delete_all[false]`

Read [Administrative Bulk Operations](https://meta.discourse.org/t/administrative-bulk-operations/118349) for instructions on entering the container to run the rake task.

⚠ **Always make a backup before running this task. There is no guarantee that it won’t remove unwanted strings. Use it at your own risk, and review the code if in doubt.**

## Creating your fluffs

Fluff creation requires CSS knowledge.

When a fluff is added to an emoji inside a post, the emoji is wrapped by a `<span>` tag with a `fluff` class:

```html
<span class="fluff fluff--bounce">
  <img src="https://your.discourse.com/images/emoji/twitter/kangaroo.png?v=12" title=":kangaroo:" class="emoji" alt=":kangaroo:" loading="lazy" width="20" height="20" style="aspect-ratio: 20 / 20;">
</span>

```

Add custom CSS to your theme or a new theme component to add new fluffs.  
Here are two examples of new fluff:

### Tilt 90° an emoji

![Emoji tilt](https://global.discourse-cdn.com/meta/original/4X/8/6/7/867a5f950fa0bc54f1802e6103b412fc803dccec.png)

```scss
.fluff--tilt img {
  transform: rotate(90deg);
}

```

### Do a 3D spin effect

![Emoji 3D spin](https://global.discourse-cdn.com/meta/original/4X/4/8/d/48dcfdb5661fc35437ebf54a1cb7c3b8dea13d4c.gif)

```scss
.fluff--spin3d img {
  animation: f-spin3d 2s infinite linear;
}

@keyframes f-spin3d {
  0% {
    transform: perspective(50em) rotateY(0deg);
    filter: brightness(1);
  }
  50% {
    transform: perspective(50em) rotateY(90deg);
    filter: brightness(0.85);
  }
  51% {
    transform: perspective(50em) rotateY(91deg);
    filter: brightness(1.15);
  }
  100% {
    transform: perspective(50em) rotateY(180deg);
    filter: brightness(1);
  }
}

```

Then, you need to add the fluff suffix in the Emoji Fluff **allowed decorations** :

 ![new fluff settings](https://global.discourse-cdn.com/meta/original/4X/b/9/c/b9cd0770d7bfb61c411dabd37d9d8896ab5a7bc5.png)

That’s all; your new fluffs should now be available to users. Enjoy!

## Credit

- @Canapin: Original idea, general help preparing and testing this TC.

* * *

1. To be precise, TC requires at least a Discourse version after October 30, and specifically the support of emoji picker, a current version as of 2024-11-26T23:00:00Z (thanks to the team for adding a plugin outlet a few days ago!)

---

<div class="post-metadata">

### Author: ![Lilly](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/lilly/32/575047_2.png) [@Lilly](https://meta.discourse.org/u/Lilly)
#### Post date: [November 28, 2024, 11:40pm UTC](https://meta.discourse.org/t/emoji-fluff/339163/2 "2024-11-28T23:40:02Z")

</div>

haha this is awesome! très bien! 🤩

---

<div class="post-metadata">

### Author: ![Monikas](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/monikas/32/375316_2.png) [@Monikas](https://meta.discourse.org/u/Monikas)
#### Post date: [November 29, 2024, 4:41am UTC](https://meta.discourse.org/t/emoji-fluff/339163/3 "2024-11-29T04:41:45Z")

</div>

I have a feeling that it conflicts with this component [Omit Emoji component](https://meta.discourse.org/t/omit-emoji-component/119562) causing the UI for the one that selects the emoji to not show the component’s magic wand

 ![The image appears to be a screenshot of a website in Chinese, with various elements such as text, images, and a dropdown menu. (Captioned by AI)](https://global.discourse-cdn.com/meta/original/4X/4/a/c/4ac0dd5c5efebf11080d333a0a3c1c634d08a5bd.jpeg)  
 ![A screenshot of a chat interface with Chinese text, an emoji selection section, and a red cross on a box. (Captioned by AI)](https://global.discourse-cdn.com/meta/original/4X/1/3/5/1359a43d712b80f4471c8234112b9550be8e1f87.jpeg)

---

<div class="post-metadata">

### Author: ![Jagster](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jagster/32/192154_2.png) [@Jagster](https://meta.discourse.org/u/Jagster)
#### Post date: [November 29, 2024, 8:53am UTC](https://meta.discourse.org/t/emoji-fluff/339163/4 "2024-11-29T08:53:32Z")

</div>

I don’t use that component, but I’m using iPad and drafting has done that couple times now — I’m writing a help for users. Publishing fixes it.

---

<div class="post-metadata">

### Author: ![Bas](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/bas/32/294929_2.png) [@Bas](https://meta.discourse.org/u/Bas)
#### Post date: [November 29, 2024, 9:07am UTC](https://meta.discourse.org/t/emoji-fluff/339163/5 "2024-11-29T09:07:55Z")

</div>

This is amazing! Well done!! 🤩

(small nitpick, would “negative” be a better description than “invert”?)

---

<div class="post-metadata">

### Author: ![Moin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/moin/32/554653_2.png) [@Moin](https://meta.discourse.org/u/Moin)
#### Post date: [November 29, 2024, 9:28am UTC](https://meta.discourse.org/t/emoji-fluff/339163/6 "2024-11-29T09:28:51Z")

</div>

> [@Arkshine](#):
>
> ℹ This component requires Discourse to be current as of 2024-11-26T23:00:00Z.

Did you update Discourse? You only receive a notification to update when a new beta is released, but new commits are added every day.

---

<div class="post-metadata">

### Author: ![Arkshine](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/arkshine/32/298682_2.png) [@Arkshine](https://meta.discourse.org/u/Arkshine)
#### Post date: [November 29, 2024, 12:01pm UTC](https://meta.discourse.org/t/emoji-fluff/339163/7 "2024-11-29T12:01:49Z")

</div>

> [@Bas](#):
>
> This is amazing! Well done!! 🤩
> 
> (small nitpick, would “negative” be a better description than “invert”?)

Thanks! 😄

You’re right; it has been renamed now!

[https://github.com/Arkshine/discourse-emoji-fluff/commit/c6090b2ac295639249636b6c43a136010485ed1e](https://github.com/Arkshine/discourse-emoji-fluff/commit/c6090b2ac295639249636b6c43a136010485ed1e)

> [@Monikas](#):
>
> I have a feeling that it conflicts with this component [Omit Emoji component](https://meta.discourse.org/t/omit-emoji-component/119562) causing the UI for the one that selects the emoji to not show the component’s magic wand

As stated by Moin, you will need to update Discourse.  
I looked at the Theme component code and tested it; once you update Discourse, they should work together without issues! 👍

---

<div class="post-metadata">

### Author: ![joo](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/joo/32/334852_2.png) [@joo](https://meta.discourse.org/u/joo)
#### Post date: [January 22, 2025, 7:21pm UTC](https://meta.discourse.org/t/emoji-fluff/339163/8 "2025-01-22T19:21:01Z")

</div>

Hi, I can no longer see the option to add the Emoji Fluff component. Is it still supported?

---

<div class="post-metadata">

### Author: ![Arkshine](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/arkshine/32/298682_2.png) [@Arkshine](https://meta.discourse.org/u/Arkshine)
#### Post date: [January 22, 2025, 8:52pm UTC](https://meta.discourse.org/t/emoji-fluff/339163/9 "2025-01-22T20:52:29Z")

</div>

I’ve pushed a partial [fix](https://github.com/Arkshine/discourse-emoji-fluff/commit/b776ec518b18c272f47227c8aba68987fc0f1799) to make it work with the latest Discourse version. However, this fix only addresses the autocomplete feature. 🙂

Currently, I am unable to resolve the issue with the emoji picker. Recently, the team has unified the emoji picker with the chat in [https://github.com/discourse/discourse/pull/28277](https://github.com/discourse/discourse/pull/28277). Unfortunately, the plugin outlet in the emoji picker footer, which was previously used to insert a toggle, has been removed in the new version. At this moment, I do not have a solution. Sorry for the inconvenience! 🙏

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [January 22, 2025, 9:18pm UTC](https://meta.discourse.org/t/emoji-fluff/339163/10 "2025-01-22T21:18:25Z")

</div>

PR a new one? I believe they welcome such things?

---

<div class="post-metadata">

### Author: ![Arkshine](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/arkshine/32/298682_2.png) [@Arkshine](https://meta.discourse.org/u/Arkshine)
#### Post date: [January 22, 2025, 9:33pm UTC](https://meta.discourse.org/t/emoji-fluff/339163/11 "2025-01-22T21:33:15Z")

</div>

Yes, I will!

I’m still thinking of possible alternatives.  
If you look at the new emoji picker, a few spaces are available. You probably don’t want to cut the placeholder text, but this is the only space that makes sense:

 ![The image shows a webpage displaying various smiling face emojis and related emoticons under "Smileys and Emotion," with search options and other emoji categories visible on the left. (Captioned by AI)](https://global.discourse-cdn.com/meta/original/4X/1/8/b/18b96f80871007444280151b0d6ed80616aaa99a.png)

It might be okay for one icon. But I feel like making a plugin outlet here doesn’t seem reasonable. 😄

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [January 29, 2025, 11:16am UTC](https://meta.discourse.org/t/emoji-fluff/339163/12 "2025-01-29T11:16:23Z")

</div>

Great fun!

Stretch goal:

3D animation 😉

> [@Emojis, would it be prudent for Discourse to Fork Twemoji?](https://meta.discourse.org/t/emojis-would-it-be-prudent-for-discourse-to-fork-twemoji/272853/4):
>
> They have stopped, the last update [on the repo](https://github.com/twitter/twemoji) is 3 years old. The fork is up-to-date with recent official emojis absent from the original Twemoji set. I’m thinking of head_shaking_vertically and head_shaking_horizontally that I use in my everyday life, I miss them on Discourse! They currently render as head_shaking_vertically and head_shaking_horizontally.

---

<div class="post-metadata">

### Author: ![Arkshine](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/arkshine/32/298682_2.png) [@Arkshine](https://meta.discourse.org/u/Arkshine)
#### Post date: [January 29, 2025, 4:14pm UTC](https://meta.discourse.org/t/emoji-fluff/339163/13 "2025-01-29T16:14:03Z")

</div>

> [@merefield](#):
>
> PR a new one? I believe they welcome such things?

To answer this, I did here:  
[https://github.com/discourse/discourse/pull/30976](https://github.com/discourse/discourse/pull/30976)

One of the good things about the unified emoji picker is that Fluff will work with chat!

![The image shows a chat message at 2:20 PM from a user named "arkshine" containing an Easter egg and a grinning face emoji. (Captioned by AI)](https://global.discourse-cdn.com/meta/original/4X/6/f/b/6fbaf48e0bd57156726738aadd0e9d3928b51a9e.gif)

Hopefully, the PR will get some attention!

> [@merefield](#):
>
> 3D animation 😉
> 
> > [@](#):
> >
> > They have stopped, the last update [on the repo](https://github.com/twitter/twemoji) is 3 years old. The fork is up-to-date with recent official emojis absent from the original Twemoji set. I’m thinking of slightly\_smiling\_face‍↕️ and slightly\_smiling\_face‍↔️ that I use in my everyday life, I miss them on Discourse! They currently render as slightly\_smiling\_face‍arrow\_up\_down and slightly\_smiling\_face‍↔.

By 3D animation, do you mean pure CSS with 3D transformation?  
Like that:  
 ![The image displays a screenshot of a text formatting interface with a highlighted shortcut command for horizontal flipping of an image, accompanied by an emoji with a neutral expression. (Captioned by AI)](https://global.discourse-cdn.com/meta/original/4X/b/d/5/bd5e0de232bd2f4d0918555d0706b96753cbada9.gif)

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [January 29, 2025, 4:17pm UTC](https://meta.discourse.org/t/emoji-fluff/339163/14 "2025-01-29T16:17:28Z")

</div>

No, I meant a fully 3D effect of someone shaking their head which of course is not trivial.

Possibly better addressed by using stickers?

---

<div class="post-metadata">

### Author: ![Arkshine](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/arkshine/32/298682_2.png) [@Arkshine](https://meta.discourse.org/u/Arkshine)
#### Post date: [January 29, 2025, 4:21pm UTC](https://meta.discourse.org/t/emoji-fluff/339163/15 "2025-01-29T16:21:37Z")

</div>

More like that then?

> **[Animated Emoji](https://googlefonts.github.io/noto-emoji-animation/)**
>
> The official repository of all things related to animating Noto Emoji.

![chrome_Xmd6KEmSLH](https://global.discourse-cdn.com/meta/original/4X/1/1/f/11ff46addd5c4214d5617540d07a5869c08d3fcc.gif)

* * *

EDIT:

Oh, @merefield, I see what you mean by [Plugin for animated stickers](https://meta.discourse.org/t/plugin-for-animated-stickers/123212)!

I guess that would be out of the scope for this TC. It would not be easy to find the 3D version of every emoji.

I really like the falco’s sticker idea!

---

<div class="post-metadata">

### Author: ![Arkshine](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/arkshine/32/298682_2.png) [@Arkshine](https://meta.discourse.org/u/Arkshine)
#### Post date: [March 3, 2025, 9:21pm UTC](https://meta.discourse.org/t/emoji-fluff/339163/16 "2025-03-03T21:21:10Z")

</div>

The TC has been updated to make it fully compatible with the latest Discourse version.

This adds chat support as well!

![A screenshot of a messaging platform interface displaying a blank white area with a "Chat in #Staff" button and textbox at the bottom. (Captioned by AI)](https://global.discourse-cdn.com/meta/original/4X/f/3/b/f3bfbdaa2ad4e4458e658cc9edff12e4c3a31fd0.gif)

[https://github.com/Arkshine/discourse-emoji-fluff/pull/4](https://github.com/Arkshine/discourse-emoji-fluff/pull/4)

---

<div class="post-metadata">

### Author: ![Heliosurge](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/heliosurge/32/571810_2.png) [@Heliosurge](https://meta.discourse.org/u/Heliosurge)
#### Post date: [March 4, 2025, 2:58am UTC](https://meta.discourse.org/t/emoji-fluff/339163/17 "2025-03-04T02:58:58Z")

</div>

Create new TC ,‘Emoji-fluff Extras’ and added your 2 new fluff effects

Added the spin3d and tilt to allowable emoji fluff list. The sample new emoji fluff is not working. Added the CSS to common in the custom TC. Ensured to added to all themes.

---

<div class="post-metadata">

### Author: ![Arkshine](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/arkshine/32/298682_2.png) [@Arkshine](https://meta.discourse.org/u/Arkshine)
#### Post date: [March 4, 2025, 4:39am UTC](https://meta.discourse.org/t/emoji-fluff/339163/18 "2025-03-04T04:39:02Z")

</div>

If you added, for example, `tilt` to the setting, and the fluff is not working, it’s most likely the CSS is not available unless you made a typo. Can you check again your CSS?

(I wanted to look at your forum but can’t log in. I don’t get any email and can’t even log in with Steam (for some reason, it still asks me to check my email))

---

<div class="post-metadata">

### Author: ![Heliosurge](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/heliosurge/32/571810_2.png) [@Heliosurge](https://meta.discourse.org/u/Heliosurge)
#### Post date: [March 4, 2025, 7:23am UTC](https://meta.discourse.org/t/emoji-fluff/339163/19 "2025-03-04T07:23:11Z")

</div>

I have activated your account

Will have to look into the email sending. You would need to have an account before being able to add steam login.

The CSS was copied using the quick copy on your code blocks.

All zi did with tilt was to clone it twice changing it to “tilt45” & “tilt90”. “spin3d” no changes

Emoji fluff setting

 ![The image shows a screen with a list of allowed decoration options for a game, including effects like flip, spin, pulse, and wobble. (Captioned by AI)](https://global.discourse-cdn.com/meta/original/4X/8/e/9/8e967ca94d9490f329f5a4770d12f09b6bcef530.png)

Emoji-fluff extras CSS content in Common

```plaintext
.fluff--tilt45 img {
  transform: rotate(45deg);
}
.fluff--tilt90 img {
  transform: rotate(90deg);
}
.fluff--spin3d img {
  animation: f-spin3d 2s infinite linear;
}

@keyframes f-spin3d {
  0% {
    transform: perspective(50em) rotateY(0deg);
    filter: brightness(1);
  }
  50% {
    transform: perspective(50em) rotateY(90deg);
    filter: brightness(0.85);
  }
  51% {
    transform: perspective(50em) rotateY(91deg);
    filter: brightness(1.15);
  }
  100% {
    transform: perspective(50em) rotateY(180deg);
    filter: brightness(1);
  }
}

```

**Note** Email sending issue identified. I am over my 300)day limit by just over a 109. Will have to soon enough upgrade to a paid plan. Thanks for the heads up

---

<div class="post-metadata">

### Author: ![Arkshine](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/arkshine/32/298682_2.png) [@Arkshine](https://meta.discourse.org/u/Arkshine)
#### Post date: [March 4, 2025, 12:42pm UTC](https://meta.discourse.org/t/emoji-fluff/339163/20 "2025-03-04T12:42:06Z")

</div>

Did you fix your issue?

It is working for me:

![The image shows a screenshot of a text editor with the topic title "XR Hardware" entered and an emoji of a smiling face next to it. (Captioned by AI)](https://global.discourse-cdn.com/meta/original/4X/5/8/2/582b465056f11486597da015ad9ae7997fbe3bc5.gif)

[Next page](https://meta.discourse.org/t/emoji-fluff/339163.md?page=2)
