Skip to content

Releases: PixiEditor/PixiEditor

2.1.0.22

22 Apr 16:19

Choose a tag to compare

Changes:

  • 32ba456 Merge branch 'master' into release
  • 03910b7 2.1.0.22
  • 7a01f0b Update language files (#1459)
  • ccbeacf Merge pull request #1458 from PixiEditor/fixes/22.04.2026
  • 2b2f6c2 Merge branch 'master' into fixes/22.04.2026
  • dfe9210 Add dialog to resize canvas on oversized insertion (#1442)
  • 6e8397e Merge branch 'master' into fixes/22.04.2026
  • 84a909a Update Drawie
  • dc5972b Improved basic brush and added opacity to brush
  • cb52ce2 Fixed wrong titles and self snapping when pasting
See More

This list of changes was auto generated.

2.1.0.21

19 Apr 09:32

Choose a tag to compare

Changes:

This list of changes was auto generated.

2.1.0.20

18 Apr 13:01

Choose a tag to compare

Brush Engine

image|426x459

Likely, the most awaited of features, you can now create your own Brushes with PixiEditor's Node Graph!

Use the new Brush Picker within Pen Tool to select, duplicate and edit brushes.

Along the Brush Engine, full drawing tablet support has been added. For Windows, both Ink and WinTab APIs are supported.

Check out the documentation to learn how to create your own brushes.

Brushes behave differently within Pixel Art and Painting toolset!

Extension Browser Beta

image|690x405

You can now browse and install extensions! Learn more about the beta

In short:

  • This is a Phase 1, so the amount of extensions is very limited and only developed by Pixi Labs,
  • Phase 1 is focused on preparing the system for community extensions and funding the further phases

Precise paint engine

PixiEditor now uses precise paint engine. Previously all brush stamps were rounded to pixels, starting from version 2.1, you can paint with sub-pixel precision. Snapped pixels are still an option per-brush.

Stabilizers

image|189x46

We've added 2 stabilizers: Distance based and Time based. They are available within pen tool settings in the viewport.

Time based: Stabilization is calculated based on time passed between previous position and new position.

Distance based: You need to move X pixels before brush follows your pointer. It's like dragging something with a rope, you need to move far enough for the rope to become tight, before it draggs the thing on the other side.

Smart Layers

image|365x139

PixiEditor now supports smart layers. You can use other .pixi files within your document, embed .svg files directly as layers and more.

PixiEditor's advanced Node Graph allows to expose values to parent document, if they are embedded as a nested document (smart layer). Additionally, with new Blackboard feature, you can define inputs to your smart layers.

So for example you can create a nice text animation template and create "Text" blackboard input.
Then after embedding this animation within other file, you can type your text and it will be passed to the nested document.

image|340x500

This way you can reuse one file multiple times and compose your graphics/animations much more easily.

Blackboard

Blackboard is our solution for multiple, important things:

image|286x162

  • It serves as a way to define and reuse constants within one Node Graph
  • It defines Brush settings, that are exposed in Pen tool settings when brush is picked
  • It allows for defining inputs for graphs. Inputs are a gateway to pass data between parent document and embedded one. If you prefer programming comparision, you can think of a nested graph as a function and inputs as function parameters.

Improved animation timeline

This is something many of you requested. We’ve overhauled the timeline and workflow of the animation system. This is the very first community proposal coming to life.

New Renderer

As a response to a few important issues, We rewrote a lot of core rendering components. There are plenty of new optimizations and characteristics. A few issues, that the new renderer is trying to solve:

  • Bad performance when running some animations
  • Better responsiveness of the app

New Nodes

  • Gradient Node: Create gradients procedurally
  • Pattern Node: Draw vector stroke out of input image.
  • Viewport Info: Information about active viewport
  • Blackboard Variable Value: Access blackboard variables
  • Stroke Info: Info about current Brush stroke, only works within Brushes
  • Brush Output: A node for defining brushes, see Brush Engine section
  • Pixel Perfect Ellipse: New shape, that creates pixel-perfect ellipses
  • Switch: Choose a value based on a condition
  • Equals: Are two items equal
  • Expose Value: Exposes arbitrary value from the graph as a output, when nested into other document.
  • Editor Info: Info about current editor state, currently only Primary and Secondary color
  • Nested Document: Smart Layer node. Allows for picking any document file.
  • Pointer Info: Info about current pointer, such as pressure, position on canvas and more.
  • Keyboard Info: Information about keyboard state, currently bools about modifier keys.
  • Array: Create an array out of items
  • Array Element: Get an element from array by index
  • Array Length: Get length of an array

New Sockets

You may notice new colorful inputs in the graph, they mean that any type can be plugged into them.

image|690x405

Customizable Toolsets and Brush Tools

You can now create your own toolsets and tools based on Brushes.

Check out the documentation to learn how.

Other enhancements

  • Importing images now embed them as smart layers by default.
  • Added Mushy advisor to various parts of the app, to help you understand how to use them.
  • Improved string editor. Now it supports syntax highlighting for shaders, search and replace and more.
  • Improved stability of OpenGL render api
  • Clipboard should now work much better and more stable.
  • Tons of other smaller improvements, features and bug fixes, that you can check out in the full changelog

New Contributors

Full Changelog: 2.0.1.19...2.1.0.20

2.0.1.19

06 Jan 09:54

Choose a tag to compare

New things

  • Added Appearance tab in the settings with "Use system title bar" option
  • Added --system-decorations flag to enable system title bars

Changes:

  • PixiEditor on Windows 10 will now default to use system title bar. This fixes the issue with offset gui.

2.0.1.18

07 Nov 14:09

Choose a tag to compare

Changes:

  • 3307c29 Null checks
  • 45ee13f Fixed wrong latest chunks calculation
  • 10bfc87 Fixed transforming, copying selection of folders and resize image on import
  • db3f4e1 Fixed transforming issues
  • 0c0c7f8 Fixed pixel art magic wand toolset tolerance
  • c99c4d8 Update NodeOperations.cs
See More
  • 4793bea Update NodeOperations.cs
  • 841ec37 Fixed some pasting scenarios and added delete on cut other layer types
  • c2b06dc Fixed layer tree collapsing
  • aa0eacc 2.0.1.18, null check, drawie update
  • c2e8494 Fixed double click rename layer
  • 9d40e7e Fixed transform disabling on paste and outdated transform bounds
  • a709779 Fixed pasting vectors and transform corners wip
  • 30f96aa Fixed text clicking on vector shape issue
  • e6ba99d Fixed memory leak in flood fill
  • d385aa4 Null checks
  • 9aa6b10 Fixed pasting negative pixel offset

This list of changes was auto generated.

2.0.1.17

08 Oct 06:58

Choose a tag to compare

Changes:

  • 6fb8278 Fixed select crash 2.0.1.17

This list of changes was auto generated.

2.0.1.16

06 Oct 10:01

Choose a tag to compare

Summary

New things

  • Added Posterize Node (Color quantization)
  • Added Character Position Node
  • Added Slice Text Node
  • Added Text Info Node
  • Added French, Indonesian and Italian translation

Improvements

  • Move tool on Painting and Vector toolset now transform images with bilinear sampling, which creates less artifacts. Move tool on Pixel Art toolset works as before

Fixes

  • Fixed saving error for .svg when folder clipping was present
  • Fixed gradient stroke and fill for big rounded rectangles in Painting and Pixel Art toolset
  • Fixed auto update related crash
  • Fixed rendering connections when socket input dissapears
  • Fixed no spacing between X and Y in preview tab
  • Fixed not being able to import aseprite shortcuts when they contain Space as a modifier or '|' (pipe) as key
  • Fixed not being able to type special characters on linux when using Text tool
  • Fixed caret misalignment after toggling bold on and off in text tool
  • Fixed a crash when user does not specify file extension on Linux
  • Fixed vector handles rendering bugs
  • Fixed selecting multiple layers with SHIFT modifier
  • Fixed double clicking on layer not switching to related toolse
  • Fixed bucket fill freezes

Changes

  • Updated AvaloniaUI to 11.3.6

Changes:

  • 6dc0aa1 Update FloodFillHelper.cs
  • de3abab Trasnform color using actual surfaces
  • e4a1cb5 Merge branch 'development' into release
  • a1b33ec Merge branch 'master' into development
  • 91e9111 Merge pull request #1227 from PixiEditor/fix/fill-bucket-freeze
  • b77b03e Fixed fill bucket freezes
  • f554b27 Merge branch 'master' into development
  • 1aa704c Merge pull request #1225 from PixiEditor/better-transformation
  • 98a84f7 Merge branch 'master' into better-transformation
  • af821e7 Merge pull request #1224 from PixiEditor/fix/null-exception-pixel-circle
See More
  • 7a66d1d Improved transformations for paitning and vector toolset
  • 29b7c3d Fixed null exception
  • d06f309 Merge branch 'master' into development
  • 8407a48 2.0.1.16
  • 339002d Merge pull request #1222 from PixiEditor/handle-fallback
  • 0c7c802 Merge branch 'master' into handle-fallback
  • f37a6db Added fallback to resource loading
  • 49ec108 Merge pull request #1221 from PixiEditor/language-update-27-1
  • 29f824e Update language files
  • cdacb88 Merge pull request #1220 from PixiEditor/new-languages
  • 9e46839 Added French, Indonesian and Italian
  • e9ea90f Merge pull request #1218 from PixiEditor/select-improvements
  • f543816 Fixed selection and quick tool selection cross toolset
  • 45c0bd3 Merge pull request #1216 from PixiEditor/vector-fixes
  • 0bf8ac8 Fixed handles rendering bug
  • 71dcf52 Added missing translations
  • c934ade Merge branch 'master' into development
  • 01c6540 Merge pull request #1214 from PixiEditor/macos-fix-textbox
  • 8774ec5 OnPlatform
  • d536432 Fixed number input being cut off on macos and bumped avalonia
  • a4c0afd Merge branch 'master' into development
  • 2d0b777 2.0.1.15
  • fb53a52 Merge pull request #1206 from PixiEditor/better-40x-handling
  • 33c0814 Merge branch 'master' into better-40x-handling
  • 4e0e1fe Merge pull request #1187 from PixiEditor/fix/try-catch-update
  • e8e6e62 Merge branch 'master' into fix/try-catch-update
  • 053228a Merge pull request #1213 from PixiEditor/improvement/font-throw
  • 811e7d8 Merge branch 'master' into improvement/font-throw
  • 1129f29 Merge branch 'master' into better-40x-handling
  • f245427 Merge pull request #1210 from PixiEditor/aseprite-space
  • acd248f nullable
  • 56b5654 Merge branch 'aseprite-space' of https://github.com/PixiEditor/PixiEditor into aseprite-space
  • db7bd57 Merge branch 'master' into improvement/font-throw
  • 41604c5 Added pipe to keys
  • 1411965 Added error catching for invalid keys
  • d25036f Merge pull request #1200 from PixiEditor/fix-shapes-gradients
  • f9f37a8 Merge branch 'master' into fix-shapes-gradients
  • 461f6ca Merge pull request #1209 from PixiEditor/fix/preview-space
  • d7849f7 Merge branch 'master' into fix/preview-space
  • 974ee2f Merge pull request #1212 from PixiEditor/fix/file-extension-crash
  • 7da9c21 Fixed sequence not found exception
  • 68fd38f Merge pull request #1211 from PixiEditor/fix/cursor-misalign
  • 1bfd86b Merge branch 'master' into fix-shapes-gradients
  • d01030a Merge branch 'master' into fix/try-catch-update
  • 6ad5318 Update UpdateViewModel.cs
  • 71ff9d0 Throw on failed font load
  • afa7791 Fixed cursor misaligning after toggling bold on and off
  • d83c03f Properly implemented text input for text tool
  • 1b9ee15 Added pipe to keys
  • 4ce2370 Added error catching for invalid keys
  • b30c523 Fixed no space between X and Y in preview window
  • 9379e7f Merge branch 'master' into fix-shapes-gradients
  • 2df43d8 Merge pull request #1207 from PixiEditor/fix-socket-rendering
  • e6a818b Dont render connection if socket invisible
  • d241328 Catch all cases for 40x status code
  • 285b093 Fixed ellipse and improved rectangle gradient fills
  • bcde59c Fixed rectangle chunk graident glitch
  • 1026a97 Merge branch 'master' into fix/try-catch-update
  • 090ccc9 Use different exception send method
  • efdda8b Merge pull request #1194 from PixiEditor/fix-clip-svg
  • 1e6afe8 Merge branch 'master' into fix-clip-svg
  • 40d4f3c Merge pull request #1134 from PixiEditor/text-nodes
  • ccdaf4f Merge branch 'master' into text-nodes
  • dd865e4 Added icons to nodes
  • fd2c84d Fixed clip on svg export
  • 4d2dae6 Added try catch to check update compatible
  • 229d191 Merge branch 'master' of https://github.com/PixiEditor/PixiEditor
  • 819112c 2.0.1.14
  • cf30361 Merge pull request #1185 from PixiEditor/fix/rectangle
  • 343523d Fixed painting rectangle and improved pixel-art rectangle radius calc
  • 0f0b25e Merge remote-tracking branch 'origin/master' into text-nodes
  • f4c6b31 Added null checks
  • aca54fa Merge pull request #1150 from starman/posterization-node
  • fc3dc29 Merge branch 'master' into posterization-node
  • 736c05f Merge pull request #1161 from PixiEditor/better-timeout-handling
  • 37cd4b3 Update UserViewModel.cs
  • fe08674 Better timeout handling
  • c0ce982 Merge pull request #1157 from PixiEditor/avalonia-update-11.3.5
  • b7b95ab Merge branch 'master' into posterization-node
  • 4005e2f Merge branch 'master' into avalonia-update-11.3.5
  • db53c6b Merge branch 'master' into development
  • 9f11797 Merge branch 'master' into development
  • e6bdec8 Merge branch 'master' into posterization-node
  • d852769 Merge branch 'master' into avalonia-update-11.3.5
  • 869c0bc Updated avalonia to 11.3.5
  • f0aa49e Change posterization node icon
  • 7c2f1e5 Change posterization node display name to Posterize
  • 3b0398e Merge remote-tracking branch 'origin/master' ...
Read more

2.0.1.14

10 Sep 10:05

Choose a tag to compare

Changes:

  • e023f14 2.0.1.14
  • 5f821dd Fixed painting rectangle and improved pixel-art rectangle radius calc

This list of changes was auto generated.

2.0.1.13

09 Sep 11:06

Choose a tag to compare

Changes:

  • 5fec5e8 Merge branch 'master' into release
  • 1af83b6 Fixed path vector data transforming
  • 2fa0bbc Fixed changing shapes size on transform
  • 7d4b800 2.0.1.13
  • ad55c52 Merge pull request #1179 from PixiEditor/fix/wrong-shapes-selection
  • a2f6d7a Merge branch 'master' into fix/wrong-shapes-selection
  • 4b50131 Merge pull request #1178 from PixiEditor/fix/shapes-symmetry
  • 51ffdfa Merge branch 'master' into fix/shapes-symmetry
  • 768e8f9 Merge pull request #1177 from PixiEditor/fix/center-active-viewport
  • 5a9b210 Merge branch 'master' into fix/center-active-viewport
See More
  • 4fcec78 Merge pull request #1176 from PixiEditor/fix/resize-undo
  • 9801f45 Merge branch 'master' into fix/resize-undo
  • b84d0e6 Merge pull request #1175 from PixiEditor/fix/duplicating-folder-frames
  • df2b752 Fixed node lookup crash
  • 5a44570 Fixed reselecting shape on tap
  • be79496 Fixed vector shapes increasing in size on select
  • b9623a7 Fixed logo LTR
  • c1a049b Fixed painting toolset line symmetry and rectangle radius
  • 1f14840 Fixed center active viewport command
  • 6b933dc Fixed resize undo applying one frame to all key frames
  • d93adc0 Fixed duplicating length and visibility
  • 0502a04 Fixed wrong guid in keyframe
  • 665a7ba 2.0.1.12
  • 1c22416 Merge pull request #1170 from PixiEditor/fixes/invisible-ui-obstruction
  • 68175d1 Update Viewport.axaml
  • 004e5a9 Merge pull request #1168 from PixiEditor/fix/clipboard-cut-fix
  • 421ea24 Merge branch 'master' into fix/clipboard-cut-fix
  • d8e511c Merge pull request #1169 from PixiEditor/fixes/conflicting-tool-shortcuts
  • 8f6c443 Merge branch 'master' into fixes/conflicting-tool-shortcuts
  • dd38dc9 Merge pull request #1167 from PixiEditor/fix/rounded-rectangle-bleeding
  • 91ae1c2 Merge branch 'master' into fix/rounded-rectangle-bleeding
  • ebd9f92 Merge pull request #1166 from PixiEditor/fix/duplicate-folder
  • fc9efb2 Merge branch 'master' into fixes/conflicting-tool-shortcuts
  • db82206 Fixed shape shortcuts switching to vector on any toolset
  • 0f596a0 Merge branch 'master' into fix/duplicate-folder
  • cd7c32d Merge pull request #1162 from PixiEditor/null-checks
  • 1e1b2be Fixed cuttting selected area
  • 631c28c Merge branch 'master' into null-checks
  • 61ecca2 Merge pull request #1165 from starman/fix-svg-rect-radius
  • 60c6bfe Merge branch 'master' into fix-svg-rect-radius
  • 78810a3 Merge pull request #1164 from PixiEditor/fix/graph-connecting
  • c356d7d Fixed stroke bleeding for aa rounded rectangles
  • bcf364c Fixed duplicate folder timeline and crashes
  • cfe84c5 Merge remote-tracking branch 'origin/master' into fix-svg-rect-radius
  • 55a85ad Fix rectangle corner radius saving for svg
  • 77f98ea Merge branch 'master' into null-checks
  • ef83d44 Fixed connecting to same output dissapear and crash
  • 49edb82 Null check in layers view model
  • 4968c7d Added try catches

This list of changes was auto generated.

2.0.1.11

08 Sep 08:25

Choose a tag to compare

Changes:

  • 7156759 Merge branch 'master' into release
  • 07eddbe Merge pull request #1163 from PixiEditor/language-update-25-1
  • c29a13e Update language files
  • d490cbd Merge pull request #1151 from zockicookie/fullscreen-mode
  • 45cffc3 Added FullScreen-Translation in English & German
  • 9d6e8c6 Added FullScreen-Feature
  • f395b2a 2.0.1.11
  • d274b00 Merge pull request #1142 from PixiEditor/fixes/preview-quality
  • b5f124c Improved sampling formulae
  • 0fd84d5 Merge pull request #1141 from PixiEditor/missing-translations
See More
  • d7ac4bb Added missing tool settings translations
  • a5dfe73 Merge pull request #1135 from PixiEditor/remove-stylecop
  • bddcf26 Merge branch 'master' into remove-stylecop
  • 75511c1 Merge pull request #1123 from PixiEditor/selection-tinting-toggle
  • 3caf173 Merge branch 'master' into selection-tinting-toggle
  • c491d29 Merge pull request #1059 from PixiEditor/improved-node-frame
  • eaf7247 Fix warning of missing ruleset for submodules
  • 2b22533 Remove stylecop
  • 9bc158c Added localization keys for selection tinting
  • a5af5f7 Added selection tinting toggle in settings
  • af60b21 Added ability to toggle selection tinting
  • b388d22 Merge branch 'master' into improved-node-frame
  • 1089a0c Update traversing API to support a NoFurther traversing operation
  • 6f722cb Fix node zone not being calculated correctly on document creation
  • 6f36c99 2.0.1.10
  • 6bd7567 Merge pull request #1111 from PixiEditor/fixes/18.08
  • 94e07f9 Fixed non updating nodes and sampling on render node
  • 4c5d478 Merge branch 'master' into fixes/18.08
  • 358cb45 Added missing translations
  • 5378c8b Merge branch 'fixes/18.08' of https://github.com/PixiEditor/PixiEditor into fixes/18.08
  • ce3d207 Merge branch 'master' into fixes/18.08
  • db9c59c Merge pull request #1069 from PixiEditor/mask-improvements
  • ebcc668 Merge branch 'master' into fixes/18.08
  • 89535c0 Style and ui improvements
  • 0a25949 Merge branch 'master' into improved-node-frame
  • 6e0d354 Use HashSet for node zone calculations
  • 4e97b00 Dispose Paint in ApplyFilterNode and MaskNode
  • 3c8c605 Merge branch 'master' into mask-improvements
  • ed5c783 Merge pull request #987 from PixiEditor/localization-reference-checker
  • dd27f17 Fixed voronoi key
  • d5cc2f3 Added missing translations
  • 8c61b9f Merge branch 'master' into localization-reference-checker
  • a6f2007 Merge pull request #1070 from starman/voronoi-noise
  • 71aee80 AllPassthrough optimization
  • a267450 Disabled live preview for unnecessary elements
  • 9f6a7ae Dispose and null check
  • b84df2f Added performance settings and fixed all the remaining stuff
  • a2e8e56 Fixed filter paint and unnecessary rerender
  • 2e0b1fe Wip bilinear and partial preview rendering
  • 7f033f1 Merge branch 'master' into voronoi-noise
  • 750c155 Use WithUpdatedUniforms for Voronoi shader
  • 8edeeda Merge branch 'master' into fixes/18.08
  • ba923d6 Improved rendering resampling
  • 2a24569 Merge branch 'master' into localization-reference-checker
  • fc6bbc4 Fixed scaled caret
  • c743027 Fixed member preview updater for disabled cels
  • 34eb835 Merge pull request #988 from PixiEditor/remove-unrefered-keys
  • 0b4ceec Merge branch 'master' into remove-unrefered-keys
  • 9a7ad80 Merge pull request #1033 from starman/line-node
  • 8b578ac Merge branch 'master' into remove-unrefered-keys
  • 378643e Merge branch 'master' into line-node
  • 6685d28 Merge pull request #1063 from PixiEditor/node-picker-improvements
  • 09c103f Merge branch 'master' into node-picker-improvements
  • dd4b58e More null and exception checks
  • 7057965 Merge branch 'master' into line-node
  • 044449c Merge pull request #1012 from starman/rectangle-node
  • 97f8c71 Merge branch 'master' into rectangle-node
  • 19095cb Merge pull request #1032 from therabug/patch-1
  • 5771c33 Merge branch 'master' into patch-1
  • e2cc3bd Dispose shaders in noise node
  • 3bc4c68 Update noise node OnPaint checks
  • 6101679 Add Voronoi related strings into en.json
  • 75030b7 Add angle offset input into Voronoi noise node
  • 89d63b5 Add feature selection into Voronoi noise
  • 0d58a01 Show randomness input only for Voronoi noise type
  • cd6a1de Add randomness parameter to Voronoi noise
  • 8bdd777 Add VORONOI_NOISE_TYPE into en.json
  • 32f8997 Add voronoi noise type
  • 87fc1e7 Merge branch 'master' into mask-improvements
  • 0d33f33 Merge branch 'master' into rectangle-node
  • 1376ff2 Merge branch 'master' into line-node
  • 45825f1 Added Invert Mask option to the Apply Filter Node
  • d919840 Added Mask to Apply filter node
  • 6158bc5 Added invert option to the mask node
  • 7479e5c Add keyboard navigation to node picker
  • 3e62ef7 Refactored IndexOrNext/Previous with direction parameter
  • 91cb544 Automatically select all text in node picker search box
  • 85d756e Fix bound calculation not done after a node has been removed from a node zone
  • 67cb799 Simplify code for traversing for pair node for node zones
  • 281e002 Include nodes connected to start pair nodes in the node zone
  • 7b4fccd Use rounded convex hull for node zone
  • aa56068 Incorporate node size in node zone
  • b530ec3 Add line data socket color
  • 37f111a Add line node
  • cae1a2e Create tr.json
  • 089da7f Update Turkish Name
  • e563da7 Add Turkish
  • 2a4d5b0 Merge branch 'master' into rectangle-node
  • b745470 Add rectangle data socket color
  • 1d8c917 Add corner radius to rectangle node
  • 598de74 Add RECTANGLE_NODE into en.json
  • c785e24 Add rectangle node
  • 6b2c45e Readded TRANSFORM_ACTION_DISPLAY_* keys
  • 758c300 Removed unnecessary last line change
  • ae721dd Removed unreferenced localization keys
  • 1f7a935 Referenced missing namespaces
  • 5904a63 Localized other enums too
  • 588e384 WIP Enum Translations
  • 661d135 Added enum Descriptions for first party enums
  • c30f15c Replaced automatic enum localization key with LocalizeEnumAttribute for third party enums
  • a71bdef Remove duplicate enum localization key converter
  • 1c7d587 added comment to PixiAuthIdentityProvider stating that SESSION_NOT_FOUND and USER_NOT_FOUND are real
  • 24d1ad5 return error exit code when missing keys were found
  • d943e11 yes pip, the .txt I provided is a requirements file
  • 90eb703 specified pip requirements file location
  • c1ff258...
Read more